nolo-cli 0.157.0-alpha.1 → 0.157.0

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 (164) hide show
  1. package/{_executeModel-5WS2PA62.js → _executeModel-ZIQHOREX.js} +55 -55
  2. package/{accountResolver-7RYB4D2P.js → accountResolver-55EDKEIK.js} +1 -1
  3. package/{action-ZJYUBXFC.js → action-GPPJC5TI.js} +5 -5
  4. package/{addContentAction-TVHB4526.js → addContentAction-XJQEJ4XW.js} +8 -8
  5. package/{addDialogAgentAction-FDPBU6K6.js → addDialogAgentAction-5WZX5CAY.js} +7 -7
  6. package/{agentDeleteCommand-Q6M4F3U6.js → agentDeleteCommand-LQSOJEXY.js} +75 -76
  7. package/{agentEmailCommands-FNH6FEHS.js → agentEmailCommands-HTPKXONW.js} +78 -79
  8. package/{agentListCommands-JUNMFS6E.js → agentListCommands-GOCGOQUB.js} +36 -36
  9. package/{agentMachineCommands-VNLDEKNT.js → agentMachineCommands-T7DAZG77.js} +35 -32
  10. package/{agentProviderCommands-X2HQE6HY.js → agentProviderCommands-CXBHNONN.js} +5 -5
  11. package/{agentPullCommand-FA43RBRU.js → agentPullCommand-GXXEDOSA.js} +4 -4
  12. package/{agentRecordCommands-47XXRVPI.js → agentRecordCommands-HSW3RJ4H.js} +72 -73
  13. package/{agentRunCommand-QEXFJUXQ.js → agentRunCommand-TIRJ57DK.js} +75 -75
  14. package/{agentRunControl-2C5GM3BW.js → agentRunControl-QWFFIAQY.js} +9 -7
  15. package/{agentRuntimeLocal-O5GDAFTN.js → agentRuntimeLocal-J6I63NZC.js} +21 -19
  16. package/{agentSlice-E3XS5FTQ.js → agentSlice-JNM3HF3V.js} +8 -8
  17. package/{appDeleteCommands-C2J5RQ3I.js → appDeleteCommands-KKLAK2UR.js} +31 -29
  18. package/{appDeployCommands-3YRK7PSU.js → appDeployCommands-PXWK4FAX.js} +31 -29
  19. package/{appDeployStatusCommands-FPAX7MOK.js → appDeployStatusCommands-3NGWDZTX.js} +31 -29
  20. package/{appGetCommands-XAC2V766.js → appGetCommands-APWYPEO3.js} +31 -29
  21. package/{appListCommands-ZJL2W5O7.js → appListCommands-OP7IRALO.js} +31 -29
  22. package/{authCommand-J3XILHWW.js → authCommand-3Z52KJID.js} +22 -302
  23. package/{authCommands-77CHYBGF.js → authCommands-QOCKVPX3.js} +5 -5
  24. package/{builtinSkillRegistry-A6VSPJEJ.js → builtinSkillRegistry-LJV7FHNI.js} +4 -4
  25. package/{chromeCommands-OBBNJCLS.js → chromeCommands-IY4NVSXZ.js} +17 -10
  26. package/{chunk-SW4S4XYB.js → chunk-2AB2HA4M.js} +84 -34
  27. package/{chunk-C5VPAHIU.js → chunk-32ZKZET7.js} +1 -1
  28. package/{chunk-XPWGOTBQ.js → chunk-3L2WKC3W.js} +1 -8
  29. package/{chunk-3XZKV7QQ.js → chunk-3L5MSPWX.js} +1 -1
  30. package/{chunk-QLQ573SU.js → chunk-3M52COK5.js} +120 -0
  31. package/{chunk-VSOWPETY.js → chunk-4226O6F7.js} +10 -10
  32. package/{chunk-Z6KQDSZW.js → chunk-43OFVLWJ.js} +6 -6
  33. package/{chunk-TJ2VPCBE.js → chunk-4JCAW7TO.js} +2 -2
  34. package/{chunk-6TF64IF2.js → chunk-4L4K6YR7.js} +16 -2
  35. package/{chunk-PEO24UB5.js → chunk-5E5VB7PS.js} +324 -57
  36. package/{chunk-ZD2BLOY6.js → chunk-5EDQTOUR.js} +7 -7
  37. package/{chunk-HKT6QXP3.js → chunk-5IKRTRRR.js} +5 -5
  38. package/{chunk-P5QACQDK.js → chunk-62TBKWTV.js} +1 -1
  39. package/{chunk-TRW43TSC.js → chunk-6EQD4AQL.js} +41 -1
  40. package/{chunk-YLMMECCH.js → chunk-6XIE5ZGI.js} +1 -1
  41. package/{chunk-OH2M7WEU.js → chunk-6Y3ETA2Y.js} +3 -3
  42. package/{chunk-7A4LJCDR.js → chunk-B3ZIFOFI.js} +5 -5
  43. package/{chunk-WZ6OU4NX.js → chunk-BAWAKW7X.js} +2 -2
  44. package/{chunk-UUPR3TD7.js → chunk-BL4HFN6L.js} +2 -4
  45. package/{chunk-2GGXHQIW.js → chunk-BLVSFYQ3.js} +4 -2
  46. package/{chunk-HP6O6LTV.js → chunk-CDLP56BS.js} +9 -9
  47. package/{chunk-UTIMX333.js → chunk-DJ2BOPJY.js} +1 -1
  48. package/{chunk-36OMEXXR.js → chunk-DLV3H464.js} +8 -8
  49. package/{chunk-CE7PIHQD.js → chunk-ESMZW5PE.js} +3 -3
  50. package/{chunk-PSJWPSKS.js → chunk-EWO77ZGF.js} +9 -43
  51. package/{chunk-ZWG3C7VI.js → chunk-F3SOW2EU.js} +81 -1
  52. package/{chunk-FY4SDK2E.js → chunk-FDLDMJTM.js} +1 -1
  53. package/{chunk-KOB75UNU.js → chunk-FHG46N5C.js} +53 -4
  54. package/{chunk-7KYVUFDG.js → chunk-G3VYRPTV.js} +5 -267
  55. package/{chunk-DW7MGLMG.js → chunk-GGUTTH6C.js} +35 -207
  56. package/{chunk-6MJNEXUU.js → chunk-HGDKT2D6.js} +4 -0
  57. package/{chunk-B2EGWZJG.js → chunk-I7S63QUU.js} +1 -1
  58. package/{chunk-ROPSATAB.js → chunk-IF7V3CBU.js} +1 -1
  59. package/chunk-IKOKYBYJ.js +2685 -0
  60. package/{chunk-T6CBQ6BN.js → chunk-INFHX73M.js} +1 -1
  61. package/{chunk-YBNHPX4S.js → chunk-IW64YHXL.js} +155 -31
  62. package/{chunk-K43ZF2C3.js → chunk-JPPQ3GUO.js} +1 -1
  63. package/{chunk-TZTWMGE3.js → chunk-JWEXJ573.js} +3 -3
  64. package/{chunk-RUNKPFM5.js → chunk-K6Y5T4GE.js} +12 -8
  65. package/{chunk-MVJVF4ED.js → chunk-KESKU5BG.js} +18 -17
  66. package/{chunk-I2ZMGXXF.js → chunk-KFHREHUQ.js} +1 -1
  67. package/{chunk-3C2QLERX.js → chunk-KMDDG73K.js} +1 -1
  68. package/{chunk-5MM7NNO6.js → chunk-KSTEXKL6.js} +78 -39
  69. package/{chunk-EM3YOZJ4.js → chunk-L2JMH4I5.js} +3 -3
  70. package/{chunk-MM3662RS.js → chunk-LPO6AMQU.js} +780 -64
  71. package/{chunk-D4OWHT5Y.js → chunk-MAYW6V3E.js} +2 -2
  72. package/{chunk-IPAW7XLD.js → chunk-MFVOJ6KF.js} +2 -2
  73. package/{chunk-FDT27L7S.js → chunk-MLEANT7D.js} +19 -17
  74. package/{chunk-7GC3EKUG.js → chunk-MMSQTZCJ.js} +3 -3
  75. package/{chunk-XFKZ3MCV.js → chunk-MR3ITQEV.js} +344 -88
  76. package/{chunk-CBHGZRCE.js → chunk-MYOH447Z.js} +1 -1
  77. package/{chunk-6MPAEODB.js → chunk-NHEWV5FD.js} +17 -3
  78. package/{chunk-ZEHTARJA.js → chunk-NLFTBC6S.js} +321 -150
  79. package/{chunk-SKPPKHD3.js → chunk-OLUKIUX6.js} +2 -2
  80. package/{chunk-SUKSWFLP.js → chunk-PIG2IUVZ.js} +1 -1
  81. package/{chunk-SEJ5OS6F.js → chunk-PXYBUFDB.js} +4 -0
  82. package/{chunk-2MTE2PEH.js → chunk-QA2C5NKI.js} +5 -739
  83. package/{chunk-L6EQV5OC.js → chunk-QXZH5UDF.js} +3 -3
  84. package/{chunk-TNIX77YM.js → chunk-R5GO3YZP.js} +34 -1
  85. package/{chunk-X5SUT4CN.js → chunk-R7GCGOGZ.js} +6 -6
  86. package/{chunk-4Z245KOA.js → chunk-SH3XD4E2.js} +8 -4
  87. package/{chunk-JGRPBIZZ.js → chunk-SQX235S2.js} +1 -1
  88. package/chunk-TT644UJD.js +188 -0
  89. package/{chunk-IYBIRCQV.js → chunk-U34KT53V.js} +29 -11
  90. package/{chunk-ANJTRG52.js → chunk-ULQAD7ZY.js} +18 -43
  91. package/{chunk-QDA4Y5O6.js → chunk-UVYSBQ2M.js} +21 -17
  92. package/{chunk-I2RMFLLH.js → chunk-V7PCFWX3.js} +1 -1
  93. package/{chunk-HXHSTRGH.js → chunk-VYNMQ6HW.js} +0 -27
  94. package/{chunk-G47IPDOK.js → chunk-W7FGZRLK.js} +1 -1
  95. package/{chunk-7BSQK2UC.js → chunk-WRCZXJ4N.js} +2 -2
  96. package/{chunk-KX6LPG7W.js → chunk-WYJTNSVL.js} +9 -9
  97. package/{chunk-H4KACZMG.js → chunk-XZIW3Q5B.js} +271 -138
  98. package/chunk-Y5GCAMGP.js +9 -0
  99. package/{chunk-JZX2XLKC.js → chunk-YCRROBDY.js} +1 -1
  100. package/{chunk-FPWT3RH2.js → chunk-YN5DT4JS.js} +22 -22
  101. package/{chunk-SCJD2PNK.js → chunk-YPG7TUQD.js} +3 -3
  102. package/{chunk-EJU23ST5.js → chunk-ZKVS36H3.js} +5069 -3730
  103. package/{chunk-YANF2RR4.js → chunk-ZPKUJROL.js} +1 -1
  104. package/{chunk-TYND6RDQ.js → chunk-ZZDVBZOP.js} +74 -3
  105. package/{commandRegistry-OUBQIF62.js → commandRegistry-DR2RPWK6.js} +88 -96
  106. package/{contentThunks-B3FRQGP7.js → contentThunks-CSJDJDEJ.js} +21 -21
  107. package/{createAgentAutomationAction-T2YFJ6MY.js → createAgentAutomationAction-ISEUEQSY.js} +21 -21
  108. package/{createDialogAction-2NFGFBXW.js → createDialogAction-HUCFOZY3.js} +25 -25
  109. package/{createPageAction-LDAVZDN7.js → createPageAction-DT5CYXCL.js} +24 -25
  110. package/{dbSlice-5QGKMQLO.js → dbSlice-6PVPY44C.js} +7 -7
  111. package/{deleteFile-EW6QNRRT.js → deleteFile-YM6NDPAR.js} +5 -5
  112. package/{dialogCommands-ZLBEAQHE.js → dialogCommands-3W6AIUXT.js} +35 -32
  113. package/{dialogSlice-64S3J6CP.js → dialogSlice-WJEEPG4W.js} +20 -20
  114. package/{dist-NJC2W7I4.js → dist-Q2JSMAKA.js} +7 -361
  115. package/{docCreateCommands-XOG5BBFQ.js → docCreateCommands-KQHQNLRX.js} +32 -30
  116. package/{docDeleteCommands-NCW3BBRX.js → docDeleteCommands-O3DWFX2W.js} +33 -31
  117. package/{docReadCommands-OT7X44Y3.js → docReadCommands-2U2BUONC.js} +32 -30
  118. package/{docStore-NIP7OO4I.js → docStore-7JPYT25V.js} +8 -8
  119. package/{docUpdateCommands-JW7OWW2J.js → docUpdateCommands-MF3C52XI.js} +32 -30
  120. package/{getPricing-TX35D7PI.js → getPricing-XQ3N3RBP.js} +2 -2
  121. package/{handleSendMessageAction-TOKA7ED7.js → handleSendMessageAction-BV5FMID4.js} +43 -39
  122. package/index.js +8 -8
  123. package/{localRuntimeAdapter-EQM6LFYC.js → localRuntimeAdapter-6FBEJJ4D.js} +70 -69
  124. package/{localRuntimeAuthority-JDAD7CB6.js → localRuntimeAuthority-BPN5OAQG.js} +2 -2
  125. package/{localRuntimeDb-CVC62PM5.js → localRuntimeDb-QIVAXMUL.js} +1 -1
  126. package/{machineCommands-WJ7FZ67T.js → machineCommands-WCAFDI5N.js} +80 -79
  127. package/{machineWsRunDispatch-BQT4DEA2.js → machineWsRunDispatch-ZF6BBQ3X.js} +70 -71
  128. package/{memberThunks-KRV5YXOB.js → memberThunks-AZINUM4S.js} +10 -10
  129. package/package.json +6 -2
  130. package/{profileConfig-ZGOFORWV.js → profileConfig-KN3N2BLF.js} +7 -1
  131. package/{providerPresetApply-CRZFMQD5.js → providerPresetApply-PKUOHQJT.js} +5 -5
  132. package/{providerRegistry-7IS43D3X.js → providerRegistry-HNQLIFN2.js} +5 -5
  133. package/{read-5KAZHHDM.js → read-7JPIWRBQ.js} +5 -5
  134. package/{readDocTool-5QO34OSX.js → readDocTool-AAQTB2Y3.js} +1 -1
  135. package/{readlineWorkspace-JHJSU5DS.js → readlineWorkspace-I5MHMEUE.js} +375 -200
  136. package/{removeDialogAgentAction-6X63HMI3.js → removeDialogAgentAction-RMVRILLK.js} +9 -9
  137. package/{runAgentClientLoop-5QIGEALK.js → runAgentClientLoop-TSNSRQEP.js} +59 -54
  138. package/{runtimeDoctorCommands-56NWKNON.js → runtimeDoctorCommands-MMCP4B4U.js} +12 -12
  139. package/{secretCommands-ZXZRLR3R.js → secretCommands-DNY56NSU.js} +11 -1
  140. package/{setDialogExtraReferencesAction-4MAYKKYW.js → setDialogExtraReferencesAction-L3V7JTMG.js} +8 -8
  141. package/{setPrimaryDialogAgentAction-EGBAMREH.js → setPrimaryDialogAgentAction-X52JQGTJ.js} +9 -9
  142. package/settingThunks-N6XFWPOU.js +923 -0
  143. package/{spaceCommands-ZWDPTURU.js → spaceCommands-NDPGHDMD.js} +29 -27
  144. package/{streamAgentChatTurn-456DWXNY.js → streamAgentChatTurn-RJLDV4WZ.js} +154 -95
  145. package/{switchDialogAgentAction-YBKTD6DO.js → switchDialogAgentAction-ZJ5CGU7J.js} +7 -7
  146. package/{tableCommands-U3QDY4L6.js → tableCommands-IVC5S7Y3.js} +11 -11
  147. package/{toolApiClient-7WSJJJBV.js → toolApiClient-HGNO53TC.js} +2 -2
  148. package/{tools-IWNXKK4Y.js → tools-X6QNIYFJ.js} +43 -44
  149. package/{tuiSummaryLlmCaller-KLK6K3Q3.js → tuiSummaryLlmCaller-FESHBDTT.js} +7 -7
  150. package/{updateCommands-NQXAGFM7.js → updateCommands-FJHGWD3Q.js} +5 -3
  151. package/{updateDialogTitleAction-SX53FZWO.js → updateDialogTitleAction-6LURCTMG.js} +21 -21
  152. package/{workloadLifecycle-36DXRZKU.js → workloadLifecycle-6O6PMISX.js} +2 -2
  153. package/chunk-IA7TRNNR.js +0 -11
  154. package/chunk-UKZX3NHN.js +0 -48
  155. package/chunk-VAZHH6FO.js +0 -7012
  156. package/chunk-W4S6OTSC.js +0 -35
  157. package/clipboardy-GCO3GT3I.js +0 -11793
  158. package/settingThunks-FTDRZNSJ.js +0 -1371
  159. package/{agentGrantCommands-HOJ3JBBQ.js → agentGrantCommands-5DPHYEKP.js} +3 -3
  160. package/{chromeOpsCommands-3Z34RKSE.js → chromeOpsCommands-GZVVK7HU.js} +4 -4
  161. package/{chunk-XETG4RIX.js → chunk-AETZ7AD6.js} +4 -4
  162. package/{chunk-2IXDJNZI.js → chunk-GAGGEA7D.js} +3 -3
  163. package/{memoryCommands-CUNBFRVS.js → memoryCommands-ZS3VQJAL.js} +3 -3
  164. package/{offlineMarxistsAgentCommand-2QTHJCHV.js → offlineMarxistsAgentCommand-3GLX4QQY.js} +3 -3
@@ -296,21 +296,49 @@ var STRINGS = {
296
296
  en: "Usage: /altscreen <on|off>",
297
297
  zh: "\u7528\u6CD5\uFF1A/altscreen <on|off>"
298
298
  },
299
- autoCurrent: {
300
- en: "Permission auto-approve: {0}",
301
- zh: "\u6743\u9650\u81EA\u52A8\u5316\uFF1A{0}"
302
- },
303
299
  autoUsage: {
304
- en: "Usage: /auto <on|off>",
305
- zh: "\u7528\u6CD5\uFF1A/auto <on|off>"
300
+ en: "Usage: /auto [local|remote] <on|off> \xB7 /auto reset (clear both)",
301
+ zh: "\u7528\u6CD5\uFF1A/auto [local|remote] <on|off> \xB7 /auto reset\uFF08\u4E24\u6876\u6E05\u96F6\uFF09"
302
+ },
303
+ autoStateLine: {
304
+ en: "Local-run grant: {0} \xB7 Remote-origin shell grant: {1}",
305
+ zh: "\u672C\u673A run \u6388\u6743\uFF1A{0} \xB7 \u8FDC\u7A0B\u6765\u6E90\u5728\u672C\u673A\u6267\u884C shell \u6388\u6743\uFF1A{1}"
306
+ },
307
+ autoStateOnPersisted: {
308
+ en: "granted (saved)",
309
+ zh: "\u5DF2\u6388\u6743\uFF08\u5DF2\u4FDD\u5B58\uFF09"
310
+ },
311
+ autoStateOff: {
312
+ en: "ask every time",
313
+ zh: "\u9010\u6B21\u8BE2\u95EE"
314
+ },
315
+ autoKindLocal: {
316
+ en: "local-run confirmations (destructive shell / outside-workspace files / file writes)",
317
+ zh: "\u672C\u673A run \u7684\u786E\u8BA4\uFF08\u7834\u574F\u6027\u547D\u4EE4 / \u5DE5\u4F5C\u533A\u5916\u6587\u4EF6 / \u5199\u6587\u4EF6\uFF09"
318
+ },
319
+ autoKindRemote: {
320
+ en: "a remote origin running shell on this machine",
321
+ zh: "\u8FDC\u7A0B\u6765\u6E90\u5728\u672C\u673A\u6267\u884C shell"
322
+ },
323
+ autoGrantOn: {
324
+ en: "Approved and saved: {0}. That class no longer asks (this session and future starts). Undo with {1}.",
325
+ zh: "\u5DF2\u6279\u51C6\u5E76\u4FDD\u5B58\uFF1A{0}\u3002\u8BE5\u7C7B\u786E\u8BA4\u4E0D\u518D\u8BE2\u95EE\uFF08\u672C\u6B21\u4E0E\u540E\u7EED\u542F\u52A8\u90FD\u751F\u6548\uFF09\u3002\u64A4\u9500\u7528 {1}\u3002"
306
326
  },
307
- autoOn: {
308
- en: "Permission auto-approve ON \u2014 destructive shell and external-file confirmations will be skipped for this session.",
309
- zh: "\u6743\u9650\u81EA\u52A8\u5316\u5DF2\u5F00\u542F\uFF1A\u672C\u4F1A\u8BDD\u5185\u7834\u574F\u6027 shell \u4E0E\u5916\u90E8\u6587\u4EF6\u8BBF\u95EE\u786E\u8BA4\u5C06\u81EA\u52A8\u653E\u884C\u3002"
327
+ autoGrantOff: {
328
+ en: "Revoked and saved: {0}. Those confirmations ask again (this session and future starts). Re-enable with {1}.",
329
+ zh: "\u5DF2\u64A4\u9500\u5E76\u4FDD\u5B58\uFF1A{0}\u3002\u8BE5\u7C7B\u786E\u8BA4\u6062\u590D\u9010\u6B21\u8BE2\u95EE\uFF08\u672C\u4F1A\u8BDD\u4E0E\u540E\u7EED\u542F\u52A8\u90FD\u751F\u6548\uFF09\u3002\u91CD\u65B0\u5F00\u542F\u7528 {1}\u3002"
310
330
  },
311
- autoOff: {
312
- en: "Permission auto-approve OFF \u2014 confirmations will ask again.",
313
- zh: "\u6743\u9650\u81EA\u52A8\u5316\u5DF2\u5173\u95ED\uFF1A\u6062\u590D\u9010\u6B21\u786E\u8BA4\u3002"
331
+ autoReset: {
332
+ en: "Cleared and saved: both permission buckets are reset \u2014 every confirmation asks again.",
333
+ zh: "\u5DF2\u6E05\u7A7A\u5E76\u4FDD\u5B58\uFF1A\u672C\u673A\u4E0E\u8FDC\u7A0B\u4E24\u6876\u6388\u6743\u90FD\u6E05\u96F6\uFF0C\u6240\u6709\u786E\u8BA4\u6062\u590D\u9010\u6B21\u8BE2\u95EE\u3002"
334
+ },
335
+ autoPersistFailed: {
336
+ en: "This grant applies to this session only \u2014 it could not be saved to your config (no profile?).",
337
+ zh: "\u8BE5\u6388\u6743\u4EC5\u672C\u6B21\u4F1A\u8BDD\u6709\u6548\uFF1A\u672A\u80FD\u4FDD\u5B58\u5230\u914D\u7F6E\uFF08\u53EF\u80FD\u8FD8\u6CA1\u6709 profile\uFF09\u3002"
338
+ },
339
+ autoPersistedStartup: {
340
+ en: "Approved from your saved config: {0}. Those confirmations are skipped; undo with /auto reset.",
341
+ zh: "\u5DF2\u4ECE\u4FDD\u5B58\u7684\u914D\u7F6E\u751F\u6548\u7684\u6388\u6743\uFF1A{0}\u3002\u8FD9\u4E9B\u786E\u8BA4\u5DF2\u88AB\u8DF3\u8FC7\uFF1B\u64A4\u9500\u7528 /auto reset\u3002"
314
342
  },
315
343
  langSwitched: {
316
344
  en: "Language switched to English.",
@@ -580,40 +608,52 @@ var STRINGS = {
580
608
  zh: "\uFF08\u2191\u2193 \u79FB\u52A8 \xB7 Enter \u9009\u62E9 \xB7 Esc \u53D6\u6D88\uFF09"
581
609
  },
582
610
  dialogConfirmTitle: {
583
- en: "Confirm destructive shell command",
584
- zh: "\u786E\u8BA4\u6267\u884C\u7834\u574F\u6027 shell \u547D\u4EE4"
611
+ en: "Allow destructive shell commands from local runs?",
612
+ zh: "\u5141\u8BB8\u672C\u673A run \u6267\u884C\u7834\u574F\u6027 shell \u547D\u4EE4\u5417\uFF1F"
585
613
  },
586
614
  dialogConfirmBody: {
587
- en: "This command may delete or reset user content and needs explicit confirmation before it runs.",
588
- zh: "\u8BE5\u547D\u4EE4\u53EF\u80FD\u5220\u9664\u6216\u91CD\u7F6E\u7528\u6237\u5185\u5BB9\uFF0C\u9700\u8981\u7528\u6237\u660E\u786E\u786E\u8BA4\u540E\u624D\u80FD\u6267\u884C\u3002"
615
+ en: "This command may delete or reset user content \u2014 a local-run destructive shell command.",
616
+ zh: "\u8BE5\u547D\u4EE4\u53EF\u80FD\u5220\u9664\u6216\u91CD\u7F6E\u7528\u6237\u5185\u5BB9\uFF0C\u5C5E\u4E8E\u672C\u673A run \u7684\u7834\u574F\u6027 shell \u547D\u4EE4\u3002"
589
617
  },
590
618
  dialogConfirmExternalFileTitle: {
591
- en: "Confirm reading a file outside the workspace",
592
- zh: "\u786E\u8BA4\u8BFB\u53D6\u5DE5\u4F5C\u533A\u5916\u90E8\u6587\u4EF6"
619
+ en: "Allow reading files outside the workspace?",
620
+ zh: "\u5141\u8BB8\u8BFB\u53D6\u5DE5\u4F5C\u533A\u5916\u90E8\u6587\u4EF6\u5417\uFF1F"
593
621
  },
594
622
  dialogConfirmExternalFileBody: {
595
- en: "This path is outside the current workspace. Allow this one-time access, or deny it.",
596
- zh: "\u8BE5\u8DEF\u5F84\u4F4D\u4E8E\u5F53\u524D\u5DE5\u4F5C\u533A\u4E4B\u5916\u3002\u786E\u8BA4\u540E\u672C\u6B21\u8BBF\u95EE\u653E\u884C\uFF0C\u5426\u5219\u62D2\u7EDD\u3002"
623
+ en: "This path is outside the current workspace \u2014 a local-run outside-workspace file access.",
624
+ zh: "\u8BE5\u8DEF\u5F84\u4F4D\u4E8E\u5F53\u524D\u5DE5\u4F5C\u533A\u4E4B\u5916\uFF0C\u5C5E\u4E8E\u672C\u673A run \u7684\u5DE5\u4F5C\u533A\u5916\u6587\u4EF6\u8BBF\u95EE\u3002"
625
+ },
626
+ dialogConfirmFileWriteTitle: {
627
+ en: "Allow writing files from local runs?",
628
+ zh: "\u5141\u8BB8\u672C\u673A run \u5199\u5165\u6587\u4EF6\u5417\uFF1F"
629
+ },
630
+ dialogConfirmFileWriteBody: {
631
+ en: "This action writes into the workspace \u2014 a local-run file-write confirmation.",
632
+ zh: "\u8BE5\u64CD\u4F5C\u4F1A\u5199\u5165\u5DE5\u4F5C\u533A\u6587\u4EF6\uFF0C\u5C5E\u4E8E\u672C\u673A run \u7684\u5199\u6587\u4EF6\u786E\u8BA4\u3002"
633
+ },
634
+ dialogConfirmRememberLocal: {
635
+ en: "Approving covers all three local-run classes (destructive shell / outside-workspace files / file writes) and is saved, so they stop asking \u2014 this session and future starts. Undo with /auto local off or /auto reset.",
636
+ zh: "\u6279\u51C6\u540E\u672C\u673A run \u7684\u4E09\u7C7B\u786E\u8BA4\uFF08\u7834\u574F\u6027\u547D\u4EE4 / \u5DE5\u4F5C\u533A\u5916\u6587\u4EF6 / \u5199\u6587\u4EF6\uFF09\u90FD\u4E0D\u518D\u8BE2\u95EE\uFF0C\u5E76\u4FDD\u5B58\u5230\u914D\u7F6E\uFF08\u672C\u6B21\u4E0E\u540E\u7EED\u542F\u52A8\u90FD\u751F\u6548\uFF09\u3002\u64A4\u9500\u7528 /auto local off \u6216 /auto reset\u3002"
597
637
  },
598
638
  dialogConfirmCommandTruncated: {
599
639
  en: "(truncated)",
600
640
  zh: "\uFF08\u5DF2\u622A\u65AD\uFF09"
601
641
  },
602
642
  dialogConfirmAllowLabel: {
603
- en: "Allow",
604
- zh: "\u5141\u8BB8"
643
+ en: "Approve & remember",
644
+ zh: "\u6279\u51C6\u5E76\u8BB0\u4F4F"
605
645
  },
606
646
  dialogConfirmAllowDetail: {
607
- en: "execute this time",
608
- zh: "\u672C\u6B21\u6267\u884C"
647
+ en: "stop asking for this class (saved)",
648
+ zh: "\u540C\u7C7B\u786E\u8BA4\u4E0D\u518D\u8BE2\u95EE\uFF08\u5DF2\u4FDD\u5B58\uFF09"
609
649
  },
610
650
  dialogConfirmCancelLabel: {
611
- en: "Cancel",
612
- zh: "\u53D6\u6D88"
651
+ en: "Reject",
652
+ zh: "\u62D2\u7EDD"
613
653
  },
614
654
  dialogConfirmCancelDetail: {
615
- en: "abort the operation",
616
- zh: "\u4E2D\u6B62\u64CD\u4F5C"
655
+ en: "do not run it; ask again next time",
656
+ zh: "\u4E0D\u6267\u884C\uFF0C\u4E0B\u6B21\u4ECD\u4F1A\u8BE2\u95EE"
617
657
  },
618
658
  // --- Ask choice (ask_user) ------------------------------------------
619
659
  askChoiceTitle: {
@@ -859,7 +899,7 @@ var STRINGS = {
859
899
  " Drag a file in Drop an image file on the terminal to attach it; audio/video transcribes; other files stay paths",
860
900
  " Shift+Enter / Ctrl+J Insert a newline in the draft",
861
901
  " /mouse <on|off> Toggle mouse mode (off = drag to select text)",
862
- " /auto <on|off> Toggle permission auto-approve (skip destructive-shell, external-file & file-write confirms)",
902
+ " /auto [local|remote] <on|off> Approve one permission bucket (local-run confirms / remote-origin shell) so it stops asking; saved to your config. /auto reset clears both",
863
903
  " /shell-revoke Revoke this session's shell grant; the next shell call re-asks (works while a reply runs; does not interrupt a running command)",
864
904
  " /math <on|off> Toggle math formula rendering (Unicode transcription)",
865
905
  " /altscreen <on|off> Toggle the terminal alternate screen (default on; off shares shell scrollback)",
@@ -905,7 +945,7 @@ var STRINGS = {
905
945
  " \u62D6\u5165\u6587\u4EF6 \u628A\u56FE\u7247\u6587\u4EF6\u62D6\u8FDB\u7EC8\u7AEF\u5373\u6210\u4E3A\u9644\u4EF6\uFF1B\u97F3\u89C6\u9891\u81EA\u52A8\u8F6C\u5199\uFF1B\u5176\u4ED6\u6587\u4EF6\u53EA\u7559\u8DEF\u5F84",
906
946
  " Shift+Enter / Ctrl+J \u5728\u8349\u7A3F\u91CC\u6362\u884C",
907
947
  " /mouse <on|off> \u5207\u6362\u9F20\u6807\u6A21\u5F0F\uFF08off \u540E\u53EF\u76F4\u63A5\u62D6\u9009\u6587\u672C\uFF09",
908
- " /auto <on|off> \u5207\u6362\u6743\u9650\u81EA\u52A8\u5316\uFF08\u81EA\u52A8\u653E\u884C\u7834\u574F\u6027 shell\u3001\u5916\u90E8\u6587\u4EF6\u4E0E\u5199\u6587\u4EF6\u786E\u8BA4\uFF09",
948
+ " /auto [local|remote] <on|off> \u6388\u6743\u67D0\u4E00\u6876\uFF08\u672C\u673A run \u786E\u8BA4 / \u8FDC\u7A0B\u6765\u6E90 shell\uFF09\u4E0D\u518D\u9010\u6B21\u8BE2\u95EE\uFF0C\u5E76\u4FDD\u5B58\u5230\u914D\u7F6E\uFF1B/auto reset \u4E24\u6876\u6E05\u96F6",
909
949
  " /shell-revoke \u64A4\u9500\u672C\u4F1A\u8BDD\u7684 shell \u6267\u884C\u6388\u6743\uFF0C\u4E0B\u4E00\u6B21 shell \u8C03\u7528\u91CD\u65B0\u786E\u8BA4\uFF08\u56DE\u590D\u8FDB\u884C\u4E2D\u4E5F\u53EF\u7528\uFF1B\u4E0D\u4E2D\u65AD\u5DF2\u653E\u884C\u7684\u547D\u4EE4\uFF09",
910
950
  " /math <on|off> \u5207\u6362\u6570\u5B66\u516C\u5F0F\u6E32\u67D3\uFF08Unicode \u8F6C\u5199\uFF09",
911
951
  " /altscreen <on|off> \u5207\u6362\u7EC8\u7AEF\u5907\u7528\u5C4F\uFF08\u9ED8\u8BA4 on\uFF1Boff \u6539\u4E3A\u4E0E shell \u5171\u7528\u56DE\u6EDA\uFF09",
@@ -1567,13 +1607,23 @@ Use /switch, /switch list, /switch minimax-m3, or a full agent key.`,
1567
1607
  // 分享 OAuth agent 的 shell 会话授权确认(块 D):首次 execShell/
1568
1608
  // launchProcess 前弹。必须把三件事说清——这是谁的 agent / 命令在哪台
1569
1609
  // 设备哪个工作区跑 / 任意 shell 可读写该用户可访问的资源。
1610
+ // 子 run 的 per-call shell 确认(远程来源在本机跑一条命令):与会话授权同一套
1611
+ // 语义,参数为 runId / agentKey / owner / device / workspace / 权限提示。
1612
+ "shellPerCall.title": {
1613
+ en: "Allow a remote origin to run this command on this machine?",
1614
+ zh: "\u5141\u8BB8\u8FDC\u7A0B\u6765\u6E90\u5728\u672C\u673A\u6267\u884C\u8FD9\u6761\u547D\u4EE4\u5417\uFF1F"
1615
+ },
1616
+ "shellPerCall.body": {
1617
+ en: "A remote origin asked to run one shell command on this device.\nRun: {0}\nAgent: {1}\nOwner: {2}\nDevice: {3}\nWorkspace: {4}\n{5}\n\nShell commands can read/write anything this user can access. Approving covers this whole class: remote-origin shell confirmations stop asking one by one (this session and future starts). Undo with /shell-revoke or /auto remote off.",
1618
+ zh: "\u8FDC\u7A0B\u6765\u6E90\u8BF7\u6C42\u5728\u672C\u673A\u6267\u884C\u4E00\u6761 shell \u547D\u4EE4\u3002\nRun\uFF1A{0}\nAgent\uFF1A{1}\n\u4E3B\u4EBA\uFF1A{2}\n\u8BBE\u5907\uFF1A{3}\n\u5DE5\u4F5C\u533A\uFF1A{4}\n{5}\n\n\u4EFB\u610F shell \u547D\u4EE4\u53EF\u8BFB\u5199\u672C\u673A\u8BE5\u7528\u6237\u80FD\u8BBF\u95EE\u7684\u8D44\u6E90\u3002\u6279\u51C6\u540E\u300C\u8FDC\u7A0B\u6765\u6E90\u5728\u672C\u673A\u6267\u884C shell\u300D\u8FD9\u4E00\u7C7B\u786E\u8BA4\u4E0D\u518D\u9010\u6761\u8BE2\u95EE\uFF08\u672C\u6B21\u4E0E\u540E\u7EED\u542F\u52A8\u90FD\u751F\u6548\uFF09\u3002\u64A4\u9500\uFF1A/shell-revoke \u6216 /auto remote off\u3002"
1619
+ },
1570
1620
  "shellGrant.confirmTitle": {
1571
- en: "Allow shell commands for shared agent {0}?",
1572
- zh: "\u5141\u8BB8\u5206\u4EAB agent {0} \u6267\u884C shell \u547D\u4EE4\u5417\uFF1F"
1621
+ en: "Allow remote agent {0} to run shell commands on this machine?",
1622
+ zh: "\u5141\u8BB8\u8FDC\u7A0B agent {0} \u5728\u672C\u673A\u6267\u884C shell \u547D\u4EE4\u5417\uFF1F"
1573
1623
  },
1574
1624
  "shellGrant.confirmBody": {
1575
- en: "Agent {0} (owner {1}) asked to run shell commands on this device.\nDevice: {2} ({3})\nWorkspace: {4}\n\nShell commands can read/write anything this user can access. Allowed for the rest of this session; revoke any time with /shell-revoke.",
1576
- zh: "\u5206\u4EAB agent {0}\uFF08\u4E3B\u4EBA {1}\uFF09\u8BF7\u6C42\u5728\u672C\u673A\u6267\u884C shell \u547D\u4EE4\u3002\n\u8BBE\u5907\uFF1A{2}\uFF08{3}\uFF09\n\u5DE5\u4F5C\u533A\uFF1A{4}\n\n\u4EFB\u610F shell \u547D\u4EE4\u53EF\u8BFB\u5199\u672C\u673A\u8BE5\u7528\u6237\u80FD\u8BBF\u95EE\u7684\u5168\u90E8\u8D44\u6E90\u3002\u5141\u8BB8\u540E\u5728\u672C\u4F1A\u8BDD\u6301\u7EED\u6709\u6548\uFF1B\u968F\u65F6\u53EF\u7528 /shell-revoke \u64A4\u9500\u3002"
1625
+ en: "Remote agent {0} (owner {1}) requested to run a shell command on this machine.\nDevice: {2} ({3})\nWorkspace: {4}\nCommand: {5}\n\nShell commands can read/write anything this user can access. Approving covers this whole class: remote-origin shell confirmations stop asking one by one (this session and future starts). Undo with /shell-revoke (this session) or /auto remote off (also clears the saved grant).",
1626
+ zh: "\u8FDC\u7A0B agent {0}\uFF08\u4E3B\u4EBA {1}\uFF09\u8BF7\u6C42\u5728\u672C\u673A\u6267\u884C shell \u547D\u4EE4\u3002\n\u8BBE\u5907\uFF1A{2}\uFF08{3}\uFF09\n\u5DE5\u4F5C\u533A\uFF1A{4}\n\u547D\u4EE4\uFF1A{5}\n\n\u4EFB\u610F shell \u547D\u4EE4\u53EF\u8BFB\u5199\u672C\u673A\u8BE5\u7528\u6237\u80FD\u8BBF\u95EE\u7684\u8D44\u6E90\u3002\u6279\u51C6\u540E\u300C\u8FDC\u7A0B\u6765\u6E90\u5728\u672C\u673A\u6267\u884C shell\u300D\u8FD9\u4E00\u7C7B\u786E\u8BA4\u4E0D\u518D\u9010\u6761\u8BE2\u95EE\uFF08\u672C\u6B21\u4E0E\u540E\u7EED\u542F\u52A8\u90FD\u751F\u6548\uFF09\u3002\u64A4\u9500\uFF1A/shell-revoke\uFF08\u672C\u4F1A\u8BDD\uFF09\u6216 /auto remote off\uFF08\u540C\u65F6\u6E05\u9664\u6301\u4E45\u6388\u6743\uFF09\u3002"
1577
1627
  },
1578
1628
  "shellGrant.revoked": {
1579
1629
  en: "[nolo] Shell permission revoked for shared agents in this session.",
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createSelector
3
- } from "./chunk-7BSQK2UC.js";
3
+ } from "./chunk-WRCZXJ4N.js";
4
4
  import {
5
5
  getAllServers,
6
6
  getIsDesktopApp
@@ -24,12 +24,6 @@ async function isDrainExhaustedResponse(response) {
24
24
  }
25
25
  }
26
26
 
27
- // packages/core/positiveFiniteNumberOrFallback.ts
28
- function parsePositiveFiniteNumberOrFallback(value, fallback) {
29
- const parsed = Number(value);
30
- return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
31
- }
32
-
33
27
  // packages/core/retryAfterMs.ts
34
28
  function normalizeNonNegativeMs(value, fallbackMs) {
35
29
  const parsed = Number(value);
@@ -57,6 +51,5 @@ export {
57
51
  createDrainExhaustedResponse,
58
52
  isDrainExhaustedResponse,
59
53
  normalizeNonNegativeMs,
60
- parseRetryAfterHeaderMs,
61
- parsePositiveFiniteNumberOrFallback
54
+ parseRetryAfterHeaderMs
62
55
  };
@@ -206,7 +206,7 @@ async function readDocFunc(args, thunkApi) {
206
206
  throw new Error(`\u65E0\u6548\u7684\u9875\u9762 ID: ${id}\u3002\u9875\u9762 ID \u901A\u5E38\u4EE5 "page-" \u5F00\u5934\u3002`);
207
207
  }
208
208
  try {
209
- const { readAction } = await import("./read-5KAZHHDM.js");
209
+ const { readAction } = await import("./read-7JPIWRBQ.js");
210
210
  const pageData = await readAction({ dbKey: id }, thunkApi);
211
211
  if (!pageData) {
212
212
  throw new Error(`\u672A\u627E\u5230 ID \u4E3A ${id} \u7684\u9875\u9762\u3002`);
@@ -1239,6 +1239,121 @@ function buildNoloWorkspaceCommandArgs(call) {
1239
1239
  }
1240
1240
  }
1241
1241
 
1242
+ // packages/agent-runtime/subtaskBudget.ts
1243
+ var DEFAULT_SUBTASK_MAX_TOOL_CALLS = 200;
1244
+ var DEFAULT_SUBTASK_MAX_WALL_CLOCK_MS = 60 * 60 * 1e3;
1245
+ var SUBTASK_MAX_TOOL_CALLS_ENV = "NOLO_SUBTASK_MAX_TOOL_CALLS";
1246
+ var SUBTASK_MAX_WALL_CLOCK_MS_ENV = "NOLO_SUBTASK_MAX_WALL_CLOCK_MS";
1247
+ var SUBTASK_BUDGET_EXHAUSTED_MARKER = "[budget-exhausted]";
1248
+ function parseSubtaskBudgetLimit(raw, fallback) {
1249
+ if (typeof raw === "number") {
1250
+ if (!Number.isFinite(raw) || raw <= 0) return fallback;
1251
+ return Math.floor(raw);
1252
+ }
1253
+ if (typeof raw !== "string") return fallback;
1254
+ const trimmed = raw.trim();
1255
+ if (!trimmed) return fallback;
1256
+ const parsed = Number(trimmed);
1257
+ if (!Number.isFinite(parsed) || parsed <= 0) return fallback;
1258
+ return Math.floor(parsed);
1259
+ }
1260
+ function resolveSubtaskBudgetLimits(options) {
1261
+ const env = options?.env ?? (typeof process !== "undefined" ? process.env : {});
1262
+ const explicitToolCalls = options?.maxToolCalls;
1263
+ const explicitWallClock = options?.maxWallClockMs;
1264
+ return {
1265
+ maxToolCalls: typeof explicitToolCalls === "number" ? parseSubtaskBudgetLimit(explicitToolCalls, parseSubtaskBudgetLimit(env?.[SUBTASK_MAX_TOOL_CALLS_ENV], DEFAULT_SUBTASK_MAX_TOOL_CALLS)) : parseSubtaskBudgetLimit(env?.[SUBTASK_MAX_TOOL_CALLS_ENV], DEFAULT_SUBTASK_MAX_TOOL_CALLS),
1266
+ maxWallClockMs: typeof explicitWallClock === "number" ? parseSubtaskBudgetLimit(explicitWallClock, parseSubtaskBudgetLimit(env?.[SUBTASK_MAX_WALL_CLOCK_MS_ENV], DEFAULT_SUBTASK_MAX_WALL_CLOCK_MS)) : parseSubtaskBudgetLimit(env?.[SUBTASK_MAX_WALL_CLOCK_MS_ENV], DEFAULT_SUBTASK_MAX_WALL_CLOCK_MS)
1267
+ };
1268
+ }
1269
+ function resolveSubtaskBudgetDeadlineMs(args) {
1270
+ const ownDeadlineAtMs = args.childStartedAtMs + args.limits.maxWallClockMs;
1271
+ const parentDeadlineAtMs = args.parentDeadlineAtMs;
1272
+ if (typeof parentDeadlineAtMs === "number" && Number.isFinite(parentDeadlineAtMs)) {
1273
+ return Math.min(parentDeadlineAtMs, ownDeadlineAtMs);
1274
+ }
1275
+ return ownDeadlineAtMs;
1276
+ }
1277
+ function resolveDispatchedSubtaskBudget(args) {
1278
+ const limits = resolveSubtaskBudgetLimits({
1279
+ ...typeof args?.maxToolCalls === "number" ? { maxToolCalls: args.maxToolCalls } : {},
1280
+ ...typeof args?.maxWallClockMs === "number" ? { maxWallClockMs: args.maxWallClockMs } : {},
1281
+ ...args?.env ? { env: args.env } : {}
1282
+ });
1283
+ const childStartedAtMs = args?.childStartedAtMs ?? Date.now();
1284
+ const deadlineAtMs = resolveSubtaskBudgetDeadlineMs({
1285
+ parentDeadlineAtMs: args?.parentDeadlineAtMs ?? null,
1286
+ childStartedAtMs,
1287
+ limits
1288
+ });
1289
+ return {
1290
+ // 父截止更早时,子 run 的墙钟额度被压到「距离父截止的剩余时间」。
1291
+ limits: {
1292
+ maxToolCalls: limits.maxToolCalls,
1293
+ maxWallClockMs: Math.max(1, deadlineAtMs - childStartedAtMs)
1294
+ },
1295
+ deadlineAtMs
1296
+ };
1297
+ }
1298
+ function createSubtaskBudgetTracker(options) {
1299
+ const now = options.now ?? (() => Date.now());
1300
+ const startedAtMs = options.startedAtMs ?? now();
1301
+ let toolCallsExecuted = 0;
1302
+ const elapsedMs = () => Math.max(0, now() - startedAtMs);
1303
+ const exhaustion = () => {
1304
+ const elapsed = elapsedMs();
1305
+ if (toolCallsExecuted >= options.limits.maxToolCalls) {
1306
+ return {
1307
+ limit: "max-tool-calls",
1308
+ limits: options.limits,
1309
+ toolCallsExecuted,
1310
+ elapsedMs: elapsed,
1311
+ atMs: now()
1312
+ };
1313
+ }
1314
+ if (elapsed >= options.limits.maxWallClockMs) {
1315
+ return {
1316
+ limit: "max-wall-clock-ms",
1317
+ limits: options.limits,
1318
+ toolCallsExecuted,
1319
+ elapsedMs: elapsed,
1320
+ atMs: now()
1321
+ };
1322
+ }
1323
+ return null;
1324
+ };
1325
+ return {
1326
+ limits: options.limits,
1327
+ startedAtMs,
1328
+ get toolCallsExecuted() {
1329
+ return toolCallsExecuted;
1330
+ },
1331
+ elapsedMs,
1332
+ remainingToolCalls: () => Math.max(0, options.limits.maxToolCalls - toolCallsExecuted),
1333
+ isExhausted: () => exhaustion() !== null,
1334
+ exhaustion,
1335
+ recordToolCallExecuted: () => {
1336
+ toolCallsExecuted += 1;
1337
+ return toolCallsExecuted;
1338
+ }
1339
+ };
1340
+ }
1341
+ function buildSubtaskBudgetExhaustedContent(args) {
1342
+ const { exhaustion } = args;
1343
+ const limitLabel = exhaustion.limit === "max-tool-calls" ? `\u5DE5\u5177\u8C03\u7528\u4E0A\u9650\uFF08\u5DF2\u6267\u884C ${exhaustion.toolCallsExecuted}/${exhaustion.limits.maxToolCalls} \u6B21\uFF09` : `\u5899\u949F\u4E0A\u9650\uFF08\u5DF2\u8FD0\u884C ${Math.round(exhaustion.elapsedMs / 1e3)} \u79D2 / \u4E0A\u9650 ${Math.round(
1344
+ exhaustion.limits.maxWallClockMs / 1e3
1345
+ )} \u79D2\uFF09`;
1346
+ const recent = (args.recentToolNames ?? []).slice(-5);
1347
+ const recentText = recent.length > 0 ? recent.join("\u3001") : "\uFF08\u672C\u8F6E\u65E0\u5DE5\u5177\u8C03\u7528\uFF09";
1348
+ return [
1349
+ `${SUBTASK_BUDGET_EXHAUSTED_MARKER} \u5DF2\u8FBE\u5B50\u4EFB\u52A1\u9884\u7B97\u4E0A\u9650\uFF08${limitLabel}\uFF09\uFF0C\u672C\u6B21\u5B50\u4EFB\u52A1\u5230\u6B64\u4F18\u96C5\u7EC8\u6B62\u3002`,
1350
+ "\u8FD9\u662F\u4E00\u4EFD**\u4E2D\u95F4\u7ED3\u8BBA**\uFF0C\u4E0D\u662F\u5B8C\u6574\u4EA4\u4ED8\uFF0C\u4E5F\u4E0D\u662F\u5931\u8D25\uFF1A\u4E0A\u6587\u4FDD\u7559\u7684\u662F\u672C\u8F6E\u5DF2\u5B8C\u6210\u7684\u9636\u6BB5\u6027\u6210\u679C\uFF0C\u53EF\u76F4\u63A5\u4F5C\u4E3A\u9636\u6BB5\u4EA4\u63A5\u4F7F\u7528\u3002",
1351
+ `\u5F53\u524D\u5B8C\u6210\u5230\u54EA\u4E00\u6B65\uFF1A\u5DF2\u5B8C\u6210 ${args.roundsCompleted} \u8F6E\u6A21\u578B\u5F80\u8FD4\u3001${exhaustion.toolCallsExecuted} \u6B21\u5DE5\u5177\u8C03\u7528\uFF1B\u6700\u8FD1\u5B8C\u6210\u7684\u5DE5\u5177\uFF1A${recentText}\u3002`,
1352
+ "\u5DF2\u5B8C\u6210\u7684\u5DE5\u5177\u7ED3\u679C\u5168\u90E8\u4FDD\u7559\u5728\u672C\u56DE\u5408\u7684 transcript / \u7ED3\u679C\u4E2D\uFF0C\u6CA1\u6709\u4EFB\u4F55\u56DE\u6EDA\u6216\u4E22\u5F03\u3002",
1353
+ "\u5982\u9700\u7EE7\u7EED\u63A8\u8FDB\uFF0C\u8BF7\u7531\u7236\u65B9\u643A\u5E26\u5F53\u524D\u4E2D\u95F4\u7ED3\u8BBA\u91CD\u65B0\u6D3E\u53D1\uFF08\u53EF\u6309\u9700\u8C03\u9AD8\u9884\u7B97\u4E0A\u9650\uFF09\u3002"
1354
+ ].join("\n");
1355
+ }
1356
+
1242
1357
  // packages/ai/agent/agentSelectionPriority.ts
1243
1358
  function parseAgentTimestamp(value) {
1244
1359
  if (typeof value === "number" && Number.isFinite(value)) return value;
@@ -1328,6 +1443,11 @@ export {
1328
1443
  verifyNoloDialogSubjectRefQuery,
1329
1444
  buildNoloTableQueryRequest,
1330
1445
  buildNoloWorkspaceCommandArgs,
1446
+ DEFAULT_SUBTASK_MAX_TOOL_CALLS,
1447
+ DEFAULT_SUBTASK_MAX_WALL_CLOCK_MS,
1448
+ resolveDispatchedSubtaskBudget,
1449
+ createSubtaskBudgetTracker,
1450
+ buildSubtaskBudgetExhaustedContent,
1331
1451
  compareAgentSelection,
1332
1452
  AGENT_SELECTION_PRIORITY_INSTRUCTIONS,
1333
1453
  buildAgentRuntimeAgentLookupKeys,
@@ -2,7 +2,7 @@ import {
2
2
  clipMultilineText,
3
3
  fetchAndSerializeTable,
4
4
  waitForAbortableDelay
5
- } from "./chunk-RUNKPFM5.js";
5
+ } from "./chunk-K6Y5T4GE.js";
6
6
  import {
7
7
  isGatewayHttpStatus
8
8
  } from "./chunk-NF64D32W.js";
@@ -11,34 +11,37 @@ import {
11
11
  isCoreDrainingBody,
12
12
  normalizeNonNegativeMs,
13
13
  parseRetryAfterHeaderMs
14
- } from "./chunk-XPWGOTBQ.js";
14
+ } from "./chunk-3L2WKC3W.js";
15
15
  import {
16
16
  resolvePageReadMarkdown,
17
17
  slateToSimplifiedMarkdown
18
- } from "./chunk-3XZKV7QQ.js";
18
+ } from "./chunk-3L5MSPWX.js";
19
19
  import {
20
20
  extractCategorizedMentions
21
21
  } from "./chunk-AGIM7IMJ.js";
22
22
  import {
23
23
  fetchAndCacheMessages
24
- } from "./chunk-H4KACZMG.js";
24
+ } from "./chunk-XZIW3Q5B.js";
25
25
  import {
26
26
  createSpaceKey
27
27
  } from "./chunk-UAD2WT54.js";
28
28
  import {
29
29
  read
30
- } from "./chunk-HP6O6LTV.js";
30
+ } from "./chunk-CDLP56BS.js";
31
31
  import {
32
32
  getRuntimeServerContext
33
- } from "./chunk-Z6KQDSZW.js";
33
+ } from "./chunk-43OFVLWJ.js";
34
34
  import {
35
35
  extractRuntimePageCapabilities,
36
36
  resolveBuiltinSkillPage,
37
37
  resolveSkillGraphFromRoots
38
- } from "./chunk-4Z245KOA.js";
38
+ } from "./chunk-SH3XD4E2.js";
39
39
  import {
40
40
  isAbortError
41
41
  } from "./chunk-7DPNBQSV.js";
42
+ import {
43
+ wrapHistoricalSummaryWithReplayGuard
44
+ } from "./chunk-4VJAC32I.js";
42
45
  import {
43
46
  extractCustomId
44
47
  } from "./chunk-M2EJHDJP.js";
@@ -51,9 +54,6 @@ import {
51
54
  import {
52
55
  asTrimmedString
53
56
  } from "./chunk-3EUW3WEO.js";
54
- import {
55
- wrapHistoricalSummaryWithReplayGuard
56
- } from "./chunk-4VJAC32I.js";
57
57
 
58
58
  // packages/ai/chat/errorDiagnostics.ts
59
59
  var record = (value) => value !== null && typeof value === "object" && !Array.isArray(value) ? value : {};
@@ -8,7 +8,7 @@ import {
8
8
  noloUploadRequest,
9
9
  noloWriteRequest,
10
10
  syncWithServers
11
- } from "./chunk-7BSQK2UC.js";
11
+ } from "./chunk-WRCZXJ4N.js";
12
12
  import {
13
13
  getAllServers,
14
14
  getIsDesktopApp
@@ -17,20 +17,20 @@ import {
17
17
  selectIdentityToken,
18
18
  selectIdentityUser,
19
19
  selectIdentityUserId
20
- } from "./chunk-SEJ5OS6F.js";
20
+ } from "./chunk-PXYBUFDB.js";
21
21
  import {
22
22
  asOptionalPositiveFiniteNumber
23
23
  } from "./chunk-U6VC4MU4.js";
24
+ import {
25
+ SERVERS,
26
+ normalizeKnownServerOrigin
27
+ } from "./chunk-LCBAMY2M.js";
24
28
  import {
25
29
  isRecord
26
30
  } from "./chunk-KUG52IAP.js";
27
31
  import {
28
32
  asTrimmedString
29
33
  } from "./chunk-3EUW3WEO.js";
30
- import {
31
- SERVERS,
32
- normalizeKnownServerOrigin
33
- } from "./chunk-LCBAMY2M.js";
34
34
  import {
35
35
  isLocalServerUrl
36
36
  } from "./chunk-4SN6J65J.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  requireTokenUser
3
- } from "./chunk-UTIMX333.js";
3
+ } from "./chunk-DJ2BOPJY.js";
4
4
  import {
5
5
  t
6
- } from "./chunk-SW4S4XYB.js";
6
+ } from "./chunk-2AB2HA4M.js";
7
7
  import {
8
8
  resolveServerUrl
9
9
  } from "./chunk-A7GB5UGH.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getModelContextWindow
3
- } from "./chunk-2MTE2PEH.js";
3
+ } from "./chunk-QA2C5NKI.js";
4
4
  import {
5
5
  isRecord
6
6
  } from "./chunk-KUG52IAP.js";
@@ -854,6 +854,8 @@ var STREAM_USAGE_PROVIDERS = /* @__PURE__ */ new Set([
854
854
  // kimi-code CLI also sends include_usage). Custom agents pointing at the
855
855
  // same endpoint are covered by the endpoint check below, not here.
856
856
  "kimi-code",
857
+ // MiniMax 官方 API(api.minimaxi.com):OpenAI 兼容流式端点,支持 stream_options.include_usage。
858
+ "minimax",
857
859
  // OpenDesign (open-design.ai) and OpenCode Go (opencode.ai): OpenAI-compatible
858
860
  // aggregation / subscription endpoints. Verified to emit terminal usage with
859
861
  // prompt_tokens_details.cached_tokens.
@@ -862,10 +864,22 @@ var STREAM_USAGE_PROVIDERS = /* @__PURE__ */ new Set([
862
864
  "opencode-go"
863
865
  ]);
864
866
  var KIMI_CODE_ENDPOINT_MARKER = "api.kimi.com";
867
+ function extractHostname(endpoint) {
868
+ try {
869
+ const raw = endpoint.includes("://") ? endpoint : `https://${endpoint}`;
870
+ return new URL(raw).hostname.toLowerCase();
871
+ } catch {
872
+ return null;
873
+ }
874
+ }
875
+ var isMiniMaxEndpoint = (endpoint) => {
876
+ const host = extractHostname(endpoint);
877
+ return host === "api.minimaxi.com" || host === "api.minimax.chat";
878
+ };
865
879
  var isSupportedCustomEndpoint = (endpoint) => {
866
880
  if (typeof endpoint !== "string") return false;
867
881
  const ep = endpoint.toLowerCase();
868
- return ep.includes(KIMI_CODE_ENDPOINT_MARKER) || ep.includes("open-design.ai") || ep.includes("opencode.ai") || isOllamaEndpoint(endpoint);
882
+ return isMiniMaxEndpoint(endpoint) || ep.includes(KIMI_CODE_ENDPOINT_MARKER) || ep.includes("open-design.ai") || ep.includes("opencode.ai") || isOllamaEndpoint(endpoint);
869
883
  };
870
884
  var EXTRA_USAGE_FIELD_PROVIDERS = /* @__PURE__ */ new Set(["openrouter"]);
871
885
  var normalizeProviderName = (providerName) => asTrimmedLowercaseString(providerName);