nolo-cli 0.212.0-alpha.1 → 0.222.0-alpha.2

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 (263) hide show
  1. package/README.md +3 -2
  2. package/{_executeModel-KE6MBNUJ.js → _executeModel-4GGQQHOB.js} +111 -82
  3. package/{accountResolver-4LKIHEKL.js → accountResolver-EK2S4PWF.js} +6 -6
  4. package/{action-DF5UYSJF.js → action-CK64LS6S.js} +12 -11
  5. package/{addContentAction-N2YC5IL3.js → addContentAction-GDHDOF4U.js} +18 -17
  6. package/{addDialogAgentAction-3NKVQCEC.js → addDialogAgentAction-CAKRU3ZT.js} +21 -20
  7. package/{agentDeleteCommand-NWK7VU4N.js → agentDeleteCommand-BPV2XZL7.js} +128 -119
  8. package/{agentEmailCommands-UZ4DHEX2.js → agentEmailCommands-EJOS75YL.js} +132 -124
  9. package/{agentFavoriteCommands-EDK743YA.js → agentFavoriteCommands-2LKGKSUD.js} +7 -8
  10. package/{agentGrantCommands-RQWK2TEV.js → agentGrantCommands-QQV4N4JW.js} +5 -5
  11. package/{agentListCommands-HE7L2A6L.js → agentListCommands-HIZODBF3.js} +196 -124
  12. package/{agentMachineCommands-6TE4MBMP.js → agentMachineCommands-ZMQ2CY7Y.js} +62 -53
  13. package/{agentProviderCommands-Q5O33MED.js → agentProviderCommands-WKJOAWBP.js} +5 -5
  14. package/{agentPullCommand-6EM3URVK.js → agentPullCommand-XN6ZPBUW.js} +7 -7
  15. package/agentRecordCommands-OMXVDLDX.js +176 -0
  16. package/agentRunCommand-CB34YWMV.js +206 -0
  17. package/{agentRunControl-OI3LOENH.js → agentRunControl-JNONH3RP.js} +30 -15
  18. package/{agentRuntimeLocal-HL526DNQ.js → agentRuntimeLocal-QZPFWMLG.js} +52 -45
  19. package/{agentSlice-TMYP2UEA.js → agentSlice-RD2CDU7T.js} +20 -19
  20. package/{appDeleteCommands-ZERW4AXY.js → appDeleteCommands-QCCFDIEQ.js} +61 -52
  21. package/{appDeployCommands-DUWSMYHL.js → appDeployCommands-V2T7TNMQ.js} +61 -52
  22. package/{appDeployStatusCommands-N2KIE4BF.js → appDeployStatusCommands-6PGH7ZCG.js} +61 -52
  23. package/{appGetCommands-YVR4NPVY.js → appGetCommands-3L7WWJA6.js} +61 -52
  24. package/{appListCommands-JS6HOHZS.js → appListCommands-ENJCK4PO.js} +61 -52
  25. package/{authCommand-FE2C3ZUM.js → authCommand-6V47SYGK.js} +29 -28
  26. package/{authCommands-HV3EAU3V.js → authCommands-GAJ3NIXO.js} +14 -13
  27. package/{builtinSkillRegistry-3YOIGEF6.js → builtinSkillRegistry-2ECA42FC.js} +11 -13
  28. package/{chromeCommands-REEAH4SX.js → chromeCommands-G5UDKVSV.js} +3 -3
  29. package/{chromeOpsCommands-HEN5AX2J.js → chromeOpsCommands-YKX2QX3A.js} +20 -10
  30. package/{chunk-DM6UMOEL.js → chunk-27PCUMJI.js} +2 -2
  31. package/chunk-2CI3ZFWD.js +97 -0
  32. package/{chunk-HIRC32DV.js → chunk-2GJKRKI6.js} +543 -29
  33. package/{chunk-SM3NSZJV.js → chunk-2UCBGYO4.js} +20 -1
  34. package/{chunk-PYRUW7XN.js → chunk-2VUZSVAS.js} +136 -54
  35. package/chunk-2YGBI2XB.js +30 -0
  36. package/chunk-2ZKFCIJJ.js +13 -0
  37. package/{chunk-CJRONOYL.js → chunk-34J5K2YA.js} +19 -75
  38. package/{chunk-LOEO7LRC.js → chunk-3IK6ILVW.js} +4 -1
  39. package/{chunk-CTPXME7U.js → chunk-3LMUPOHG.js} +29 -6
  40. package/chunk-44X52WOJ.js +1621 -0
  41. package/{chunk-6VLJ6YA7.js → chunk-4DESLZTK.js} +9 -9
  42. package/{chunk-MYOH447Z.js → chunk-4JVNURX4.js} +1 -1
  43. package/chunk-5CHGAKRT.js +364 -0
  44. package/{chunk-YDH3FDFQ.js → chunk-5FUN7EG4.js} +1 -1
  45. package/{chunk-LKDF3ATR.js → chunk-5RKUPJYL.js} +1 -1
  46. package/{chunk-ZC3CMUKU.js → chunk-6OVNSQHN.js} +84 -2
  47. package/{chunk-IF45XG7K.js → chunk-6WU5572L.js} +40 -24
  48. package/{chunk-OHNELDTO.js → chunk-7EEZJ6BS.js} +11 -152
  49. package/{chunk-Y6ORVLSS.js → chunk-7ET2U67U.js} +1 -1
  50. package/{chunk-G7MLNNEX.js → chunk-7JLY4WYF.js} +5 -5
  51. package/{chunk-P5L7CXOC.js → chunk-7Z6EW7AH.js} +3 -2
  52. package/{chunk-IIQ6JGRI.js → chunk-AD5EWDFD.js} +2 -2
  53. package/{chunk-WXYLV624.js → chunk-AIHYNKGV.js} +4 -4
  54. package/{chunk-HPFCI4SK.js → chunk-AK5O76CC.js} +3 -3
  55. package/{chunk-Y63ZSOR6.js → chunk-AL3TYDIF.js} +1 -1
  56. package/{chunk-PJNFNEJE.js → chunk-AMEOV5VZ.js} +59 -13
  57. package/chunk-AN74ON4G.js +675 -0
  58. package/{chunk-HRMJUN5J.js → chunk-AQZ6BMRK.js} +1 -1
  59. package/{chunk-CQ46IRNN.js → chunk-B4GOW4MT.js} +445 -201
  60. package/{chunk-4KB6WQUL.js → chunk-BGP2EDFG.js} +1 -1
  61. package/{chunk-NBTY7YJF.js → chunk-BR3GT6MR.js} +1 -0
  62. package/{chunk-7RFNTILS.js → chunk-BUDVRYES.js} +2 -2
  63. package/{chunk-D2MDMY2M.js → chunk-BV3FLP2L.js} +47 -1
  64. package/{chunk-25JZEIXN.js → chunk-C4VAR65S.js} +92 -150
  65. package/{chunk-AVTVGMDY.js → chunk-C4WTX5TU.js} +2 -2
  66. package/{chunk-ZL5RAEEB.js → chunk-CIRB724Q.js} +1 -1
  67. package/{chunk-F6UUQOG6.js → chunk-CKT6QUE2.js} +4 -4
  68. package/{chunk-M6RL5JCD.js → chunk-CMZ3Z5PT.js} +14 -14
  69. package/{secretCommands-4QS3HCA2.js → chunk-D726I5AZ.js} +191 -16
  70. package/{chunk-INSBKSBB.js → chunk-DNKTQ3IN.js} +4 -4
  71. package/chunk-DVQH4BTR.js +1137 -0
  72. package/{chunk-SOHTHFV2.js → chunk-DWX2HEVC.js} +91 -132
  73. package/{chunk-NOMIGOST.js → chunk-EIAI3PPH.js} +116 -124
  74. package/chunk-EUCFKKDM.js +247 -0
  75. package/chunk-EWQ3HGNZ.js +90 -0
  76. package/{chunk-RPQXPZZF.js → chunk-F3GRJO4Z.js} +908 -13
  77. package/{chunk-GSQNH63I.js → chunk-FIYSMXHY.js} +3 -19
  78. package/{chunk-KSTEXKL6.js → chunk-FJ23FZXF.js} +76 -31
  79. package/{chunk-INN4LTAJ.js → chunk-FJK526XH.js} +2 -2
  80. package/chunk-FS2XP5D7.js +142 -0
  81. package/{chunk-QT6PKHYJ.js → chunk-FYF2TONJ.js} +5 -5
  82. package/{chunk-OXME3PEE.js → chunk-GBWGPTA7.js} +2 -1
  83. package/{chunk-RU4SD66C.js → chunk-GYVCJABP.js} +30 -254
  84. package/{chunk-YUXQAVRD.js → chunk-HOCHUZQ7.js} +257 -90
  85. package/{chunk-Y2WUYX4I.js → chunk-HXER7YJF.js} +4 -4
  86. package/chunk-HYIETXA6.js +99 -0
  87. package/{chunk-H2TJUNCH.js → chunk-I4EADJ4P.js} +6 -6
  88. package/{chunk-TCZHTTUU.js → chunk-I7WBYGBP.js} +8 -8
  89. package/{chunk-5RYBGBQH.js → chunk-IILMY4W4.js} +14 -9
  90. package/chunk-JA3ICVJY.js +271 -0
  91. package/{chunk-ZRSNONOB.js → chunk-JWXITTQB.js} +8 -3
  92. package/{chunk-JNKSDZFS.js → chunk-KEN3N2TN.js} +310 -66
  93. package/{chunk-LEC5ALIN.js → chunk-KEPOVMF4.js} +1 -1
  94. package/{chunk-UHJGXRJ4.js → chunk-KQSYAIZR.js} +3 -3
  95. package/{chunk-4VJAC32I.js → chunk-L5I543VB.js} +3 -2
  96. package/chunk-LKA64WH4.js +227 -0
  97. package/{chunk-6OQUPIQF.js → chunk-LVL6GFCM.js} +4 -4
  98. package/{chunk-UTV2AYEG.js → chunk-MAIITKBT.js} +2 -2
  99. package/chunk-MBG66ZBH.js +226 -0
  100. package/{chunk-YUA6OAH5.js → chunk-MDLS23JK.js} +2 -2
  101. package/{chunk-VL5KOY2C.js → chunk-MK2Q7ZJD.js} +67 -5
  102. package/{chunk-B7NJ3T4A.js → chunk-MS4NZNKI.js} +10 -10
  103. package/{chunk-3AKFVZ2I.js → chunk-MYHNBEXD.js} +3 -3
  104. package/{chunk-VZKUKCA6.js → chunk-MZLE5HQ3.js} +3673 -241
  105. package/{chunk-AZMYUSVF.js → chunk-N5Z2V73W.js} +1 -1
  106. package/chunk-NIZ2BXFD.js +526 -0
  107. package/{chunk-YPD3VJZW.js → chunk-NWP2OYOX.js} +20 -20
  108. package/{chunk-3FOQHGHN.js → chunk-O6J3OTOP.js} +4 -4
  109. package/{chunk-3RQVYR4B.js → chunk-OB6DVWPF.js} +197 -65
  110. package/{chunk-YWSEPJ7C.js → chunk-OBWT45ZU.js} +3 -3
  111. package/{chunk-5AQR3DGV.js → chunk-ODJ7BVSI.js} +80 -11
  112. package/{chunk-XJWWBO34.js → chunk-OJKUU3LP.js} +5 -7
  113. package/{chunk-GNDJKC4B.js → chunk-ON37YXGX.js} +29 -29
  114. package/{chunk-D5RCRX4A.js → chunk-P5ZJRTCH.js} +9415 -5169
  115. package/{chunk-6XIE5ZGI.js → chunk-PDCV7P5W.js} +1 -1
  116. package/{chunk-EZFQ6XRV.js → chunk-PJCIP64Z.js} +861 -59
  117. package/{chunk-GPO7FCEZ.js → chunk-PJVKMGPZ.js} +1222 -1719
  118. package/{chunk-CKAHAVMK.js → chunk-PPJYZRSQ.js} +40 -26
  119. package/chunk-QHEN7NZ7.js +46 -0
  120. package/{chunk-4KH4J3G5.js → chunk-QNWG52I4.js} +19 -7
  121. package/{chunk-YGILMZ7N.js → chunk-QVBXJNZ2.js} +1 -1
  122. package/chunk-RDH5CQ4T.js +1382 -0
  123. package/{chunk-C6KNNXWU.js → chunk-RGQ4UUWZ.js} +25 -2
  124. package/{chunk-OWYYDMGJ.js → chunk-S2NTVGA2.js} +4 -2
  125. package/{chunk-KC4XDTT3.js → chunk-SOF4OWDM.js} +6 -4
  126. package/{chunk-IAPCBNEE.js → chunk-SQYIK6HO.js} +1 -1
  127. package/{chunk-22CIEBYO.js → chunk-SVT62ULE.js} +50 -48
  128. package/{chunk-KIM6CLW5.js → chunk-SY3C4SQ7.js} +42 -15
  129. package/{chunk-JY5NGFFH.js → chunk-SYTHYBMI.js} +5 -5
  130. package/{chunk-6NSSLV67.js → chunk-T6DXNI6Z.js} +52 -50
  131. package/chunk-TLE77UJ5.js +230 -0
  132. package/{chunk-4VNS5WPM.js → chunk-U67V476Y.js} +1 -8
  133. package/{chunk-F7CI2ZC5.js → chunk-UAIHKQIA.js} +2 -1
  134. package/{chunk-MMNYUVLW.js → chunk-UB3D4TRQ.js} +11 -77
  135. package/{chunk-WPORQFYN.js → chunk-UVLYNWIE.js} +2 -2
  136. package/{chunk-YOIW77S2.js → chunk-UYOICCYG.js} +29 -19
  137. package/{chunk-4I7ERB7F.js → chunk-VREDDN25.js} +1 -1
  138. package/{chunk-JIT6FSXJ.js → chunk-WAE3GFCJ.js} +3 -3
  139. package/{chunk-IJXYFTV7.js → chunk-WI67URFP.js} +20 -20
  140. package/{chunk-7OCO4TDT.js → chunk-WJVYAO6P.js} +1 -1
  141. package/{chunk-T43B7LB2.js → chunk-WKGQSYTB.js} +1 -1
  142. package/{chunk-YJMRHHGY.js → chunk-WUUH4LWZ.js} +60 -30
  143. package/{chunk-PDGKOTO7.js → chunk-X7UF53VA.js} +33 -22
  144. package/{chunk-TY3TIUJK.js → chunk-XI2BWJM5.js} +65 -0
  145. package/{chunk-OOF4UPC5.js → chunk-XWVCYUUU.js} +16 -159
  146. package/{chunk-J5JTMQIA.js → chunk-YFLVRVYK.js} +1 -1
  147. package/{chunk-EYLGAEB4.js → chunk-YGMBIXCF.js} +132 -0
  148. package/chunk-YL3EFYL3.js +199 -0
  149. package/{chunk-MMA3LZ3W.js → chunk-YNIYE47Z.js} +1 -1
  150. package/{chunk-W4S457LU.js → chunk-YU4ZPWVF.js} +41 -5
  151. package/{chunk-NJR3WKVP.js → chunk-YWWDC3O7.js} +281 -159
  152. package/chunk-YZMNK53S.js +68 -0
  153. package/{chunk-FHU44LN3.js → chunk-Z2PITYZN.js} +2179 -552
  154. package/{chunk-FY7F4Q6X.js → chunk-Z4PCXPUE.js} +2 -2
  155. package/{cliAgentConfigHelpers-WJBZQTLW.js → cliAgentConfigHelpers-TKYL43MT.js} +15 -16
  156. package/{cliAuthorityBrokerClient-PM3U6Q6J.js → cliAuthorityBrokerClient-XHH7MH2P.js} +1 -1
  157. package/{cliAuthorityStoreDriver-TKLXNNTG.js → cliAuthorityStoreDriver-6FE3BJNB.js} +1 -1
  158. package/{cliEnvHelpers-BVYTMUPJ.js → cliEnvHelpers-VPSJ4XWC.js} +3 -3
  159. package/{cliExecutor-BWBF2MTI.js → cliExecutor-4MAX3PZL.js} +2 -2
  160. package/cliLocalAgentRecordReader-MHHD4T7R.js +90 -0
  161. package/{commandRegistry-VVMTPFAX.js → commandRegistry-5DA5UP7S.js} +106 -98
  162. package/{contentThunks-N52O67MI.js → contentThunks-5GUQ7FWJ.js} +47 -43
  163. package/{cooldownCommands-YXLWOXWR.js → cooldownCommands-X7P5M2V5.js} +5 -4
  164. package/{createAgentAutomationAction-ZC57YRSV.js → createAgentAutomationAction-UCLTHQRI.js} +51 -49
  165. package/{createDialogAction-VQW5WDYX.js → createDialogAction-UPN774AF.js} +46 -48
  166. package/{createPageAction-M5VDA7SC.js → createPageAction-JRQ2TA4O.js} +50 -48
  167. package/{cursorProvider-YGGNMVWX.js → cursorProvider-2RACMEMF.js} +1 -1
  168. package/{db-HUCI5R4G.js → db-CS4ZJQKV.js} +1 -1
  169. package/{dbSlice-HP7G4LX3.js → dbSlice-WNON7TOL.js} +17 -16
  170. package/{deleteFile-7VQGLK2V.js → deleteFile-Q3YDB4ML.js} +9 -9
  171. package/{desktopFolderProjects-SFY5EZS3.js → desktopFolderProjects-4POAMVJN.js} +2 -2
  172. package/{dialogCommands-JHMR2N2Y.js → dialogCommands-VRI7VCXH.js} +64 -57
  173. package/dialogNotifyCommand-6TMCX4D2.js +36 -0
  174. package/{dialogSlice-GRSVGDTF.js → dialogSlice-LFNVUSAN.js} +42 -40
  175. package/{dialogUsageCommand-7KCPYGHG.js → dialogUsageCommand-HTVPR2CX.js} +11 -10
  176. package/{docCreateCommands-F2K3UPSQ.js → docCreateCommands-AMPXMOX3.js} +61 -54
  177. package/{docDeleteCommands-XGXB5RFT.js → docDeleteCommands-I5WFAEHP.js} +63 -57
  178. package/{docReadCommands-7HWZZV6J.js → docReadCommands-X53ELNIE.js} +61 -54
  179. package/{docStore-KNZK6Y2G.js → docStore-2VAWVLWH.js} +21 -20
  180. package/{docUpdateCommands-OZZ7NQII.js → docUpdateCommands-6QPNDC7M.js} +64 -57
  181. package/{fetchMessages-M3QU7ZCQ.js → fetchMessages-TQEUZD7H.js} +8 -7
  182. package/{getPricing-2MNMXEVG.js → getPricing-MB2GBXOK.js} +6 -6
  183. package/{handleSendMessageAction-SHIH74GJ.js → handleSendMessageAction-AAJOHXOB.js} +193 -301
  184. package/{hostCredentialCreate-X64WK4JD.js → hostCredentialCreate-GLMJ22M6.js} +123 -114
  185. package/index.js +29 -29
  186. package/{keys-BEGDOTRL.js → keys-RWF7UCB4.js} +5 -4
  187. package/legacyMigration-TF4SYJCZ.js +19 -0
  188. package/{lib-5KKIBFIT.js → lib-OT5OTXRU.js} +7087 -6664
  189. package/{localDialogRead-XRLAH4CZ.js → localDialogRead-SVTPA5GY.js} +3 -3
  190. package/{localFirstLog-DHNOY2NA.js → localFirstLog-OIETGK66.js} +1 -1
  191. package/localRecall-2J6QPOK2.js +15 -0
  192. package/{localRuntimeAdapter-A7K3ABA6.js → localRuntimeAdapter-BMP57P42.js} +119 -110
  193. package/{localRuntimeAuthority-OYH4AE4G.js → localRuntimeAuthority-IBJAT62G.js} +1 -1
  194. package/{localRuntimeDb-VBIMCWUC.js → localRuntimeDb-N7KHDXS2.js} +2 -2
  195. package/{machineCommands-DE3MR7CJ.js → machineCommands-3MLIAK5Q.js} +128 -119
  196. package/{machineInfo-UKPTZO5Y.js → machineInfo-LWHTEBHJ.js} +1 -1
  197. package/machineWsRunDispatch-FKIGROQF.js +191 -0
  198. package/{memberThunks-7WJAY5V6.js → memberThunks-ZGLZ36PK.js} +29 -28
  199. package/{memoryCommands-ASCE5STX.js → memoryCommands-5WC3T66U.js} +4 -4
  200. package/models-ULVWLSQ6.js +9 -0
  201. package/{oauthTokenStore-OEERZFUC.js → oauthTokenStore-RUYNYALS.js} +1 -1
  202. package/{offlineMarxistsAgentCommand-2QTHJCHV.js → offlineMarxistsAgentCommand-4IC3Y4C6.js} +4 -4
  203. package/overlay-THLKYIWY.js +11 -0
  204. package/package.json +2 -2
  205. package/{pdf-U6KSUEZZ.js → pdf-KE3QI2V7.js} +1 -1
  206. package/{processSpawn-ZU5QFM43.js → processSpawn-6GEO77KV.js} +1 -1
  207. package/{profileConfig-KN3N2BLF.js → profileConfig-KOWK4HOG.js} +1 -1
  208. package/{projectArchive-GGL5HLMD.js → projectArchive-HK63GMF4.js} +52 -50
  209. package/{providerPresetApply-YXGV6NXB.js → providerPresetApply-OIFQ73LH.js} +19 -12
  210. package/{providerRegistry-S6UL6UNA.js → providerRegistry-KZ3SDZ3D.js} +10 -10
  211. package/{read-4VZQODSN.js → read-MRQHJMJ2.js} +10 -10
  212. package/{readDocTool-AVD32RUJ.js → readDocTool-4BGTXTXA.js} +2 -2
  213. package/{readlineWorkspace-XKYKNL2I.js → readlineWorkspace-AKAHSCNY.js} +6505 -4634
  214. package/{removeDialogAgentAction-FKL4BYMR.js → removeDialogAgentAction-B6H7DXFM.js} +23 -22
  215. package/{runAgentClientLoop-V7E2WBVM.js → runAgentClientLoop-UVAWGEON.js} +81 -79
  216. package/{runtimeDoctorCommands-QAI3MBKQ.js → runtimeDoctorCommands-FW6XKDUG.js} +12 -12
  217. package/{runtimeModeArgs-2Y7BALTO.js → runtimeModeArgs-X7DL7PUN.js} +1 -1
  218. package/secretCommands-LJXOOYA7.js +24 -0
  219. package/{setDialogExtraReferencesAction-TLIOLWWI.js → setDialogExtraReferencesAction-EVCY3TRW.js} +22 -21
  220. package/{setPrimaryDialogAgentAction-2OLWRFYR.js → setPrimaryDialogAgentAction-KPFVPHCJ.js} +23 -22
  221. package/{settingThunks-UGBPCNYF.js → settingThunks-ENOAK2WV.js} +97 -88
  222. package/{skillDiscovery-XKHROSH2.js → skillDiscovery-B5V23AXP.js} +4 -4
  223. package/{skillSummaryMarker-42HKSXYY.js → skillSummaryMarker-62UW7HI7.js} +1 -1
  224. package/{slateToRenderMarkdown-Y5IYN73U.js → slateToRenderMarkdown-R3X74MCX.js} +1 -1
  225. package/{slateUtils-NGV2NMKM.js → slateUtils-ESQAJ6RN.js} +1 -1
  226. package/{spaceCommands-4KSLKVNF.js → spaceCommands-DTTNAS2L.js} +61 -53
  227. package/store-JRVN62NM.js +46 -0
  228. package/{streamAgentChatTurn-7FR7X2NU.js → streamAgentChatTurn-R5UY25VB.js} +875 -618
  229. package/{switchDialogAgentAction-UZSAG2N5.js → switchDialogAgentAction-SZ44XDRY.js} +21 -20
  230. package/{tableCommands-MP6VFSVT.js → tableCommands-HITDSLHS.js} +10 -10
  231. package/tombstones-FQQMEDOW.js +32 -0
  232. package/{toolApiClient-HGNO53TC.js → toolApiClient-OGQEBQVX.js} +4 -4
  233. package/{tools-ZLKCC25W.js → tools-HWFG6GMJ.js} +75 -74
  234. package/tuiSummaryLlmCaller-HQQZAMYF.js +44 -0
  235. package/{updateCommands-4744PL3P.js → updateCommands-RJVCRSBP.js} +10 -8
  236. package/{updateDialogTitleAction-U53ZT7PJ.js → updateDialogTitleAction-KNPOAMVS.js} +48 -46
  237. package/{usageCommand-F4IPVMIZ.js → usageCommand-FWZCB7AM.js} +11 -10
  238. package/{usageRebuildCommand-HAW2AD5N.js → usageRebuildCommand-SP2BLNJU.js} +12 -11
  239. package/userDataMerge-HT2ZVHBJ.js +13 -0
  240. package/{windowsSelfUpdate-XSQVF2GK.js → windowsSelfUpdate-KERHIAB4.js} +3 -3
  241. package/{workloadLifecycle-4BEQHMSD.js → workloadLifecycle-DYNEYHV5.js} +7 -6
  242. package/agentRecordCommands-L3QQ7HZ4.js +0 -167
  243. package/agentRunCommand-2IFGQHCO.js +0 -196
  244. package/chunk-3CGG2PAL.js +0 -594
  245. package/chunk-5XBUWM6I.js +0 -89
  246. package/chunk-BFM34N54.js +0 -842
  247. package/chunk-CJEIOP3E.js +0 -0
  248. package/chunk-CZM5YTZ7.js +0 -977
  249. package/chunk-EYUBHHFB.js +0 -636
  250. package/chunk-JTDORD5P.js +0 -415
  251. package/chunk-NRFKLKRU.js +0 -339
  252. package/chunk-VPAZOH2D.js +0 -115
  253. package/chunk-WJZOQR2J.js +0 -151
  254. package/chunk-ZCWRMUWT.js +0 -89
  255. package/dist-M676ULYG.js +0 -7314
  256. package/machineWsRunDispatch-R26P5V36.js +0 -182
  257. package/models-PJBE6JDV.js +0 -9
  258. package/tuiSummaryLlmCaller-WC54MVGP.js +0 -160
  259. package/{chunk-WACI5I6V.js → chunk-2THCNKE4.js} +3 -3
  260. package/{chunk-2QHFH3DR.js → chunk-47ITIXO7.js} +6 -6
  261. package/{chunk-GOO6G4PY.js → chunk-CKG3PRZ7.js} +0 -0
  262. package/{chunk-OQHIVPG4.js → chunk-SNBZZPYH.js} +3 -3
  263. package/{chunk-AETZ7AD6.js → chunk-W6RFEDN4.js} +3 -3
@@ -77,6 +77,10 @@ var turnStrings = {
77
77
  en: "Stopped waiting. {0} may still be finishing in the background \u2014 its result won't be added to this conversation.",
78
78
  zh: "\u5DF2\u505C\u6B62\u7B49\u5F85\u3002{0} \u53EF\u80FD\u4ECD\u5728\u540E\u53F0\u5B8C\u6210\uFF0C\u5176\u7ED3\u679C\u4E0D\u4F1A\u8BA1\u5165\u672C\u6B21\u5BF9\u8BDD\u3002"
79
79
  },
80
+ wakeQueuedWhileStopped: {
81
+ en: "Stopped. {0} queued background result(s) are waiting \u2014 press Enter to continue (Ctrl+S sends all at once).",
82
+ zh: "\u5DF2\u505C\u6B62\u3002\u8FD8\u6709 {0} \u9879\u540E\u53F0\u7ED3\u679C\u5728\u961F\u5217\u91CC\u7B49\u7740\u2014\u2014\u6309 Enter \u7EE7\u7EED\uFF08Ctrl+S \u5408\u5E76\u53D1\u9001\uFF09\u3002"
83
+ },
80
84
  turnStopping: {
81
85
  en: "Stopping\u2026 press Esc again to force",
82
86
  zh: "\u6B63\u5728\u505C\u6B62\u2026\u518D\u6309\u4E00\u6B21 Esc \u5F3A\u5236\u505C\u6B62"
@@ -91,13 +95,45 @@ var turnStrings = {
91
95
  zh: "\u8F93\u51FA {0}"
92
96
  },
93
97
  // --- Ask choice (ask_user) ------------------------------------------
94
- askChoiceTitle: {
95
- en: "question",
96
- zh: "\u95EE\u9898"
98
+ askChoiceHintMove: {
99
+ en: "\u2191\u2193 select",
100
+ zh: "\u2191\u2193 \u9009\u62E9"
101
+ },
102
+ askChoiceHintPick: {
103
+ en: "Enter pick",
104
+ zh: "Enter \u9009\u62E9"
105
+ },
106
+ askChoiceHintToggle: {
107
+ en: "Enter toggle",
108
+ zh: "Enter \u5207\u6362"
109
+ },
110
+ askChoiceHintSkip: {
111
+ en: "skip",
112
+ zh: "\u53EF\u8DF3\u8FC7"
113
+ },
114
+ askChoiceHintSend: {
115
+ en: "\u2193 Done sends",
116
+ zh: "\u2193 \u5B8C\u6210\u53D1\u9001"
117
+ },
118
+ askChoiceHintOther: {
119
+ en: "Other: text",
120
+ zh: "\u5176\u4ED6\u53EF\u8F93\u5165"
121
+ },
122
+ askChoiceHintTab: {
123
+ en: "Tab",
124
+ zh: "Tab \u5207\u6362"
125
+ },
126
+ askChoiceHintCancel: {
127
+ en: "Esc cancels",
128
+ zh: "Esc \u53D6\u6D88"
129
+ },
130
+ askChoiceHintWheelHistory: {
131
+ en: "wheel: history",
132
+ zh: "\u6EDA\u8F6E\u770B\u4E0A\u6587"
97
133
  },
98
- askChoiceScrollHint: {
99
- en: "\u2191 Shift+wheel scrolls back terminal history",
100
- zh: "\u2191 Shift+\u6EDA\u8F6E\u53EF\u56DE\u770B\u4E0A\u65B9\u6D88\u606F"
134
+ askChoiceHintWheelSelect: {
135
+ en: "wheel: list",
136
+ zh: "\u6EDA\u8F6E\u9009\u62E9"
101
137
  },
102
138
  askChoiceSubmit: {
103
139
  en: "submit \u2193",
@@ -115,30 +151,6 @@ var turnStrings = {
115
151
  en: "Other",
116
152
  zh: "\u5176\u4ED6"
117
153
  },
118
- askChoiceHintSingle: {
119
- en: "Enter/Space picks \xB7 single question sends \xB7 multi-question jumps to the next unanswered \xB7 Enter in Other confirms and continues",
120
- zh: "Enter/\u7A7A\u683C \u9009\u62E9\uFF1A\u5355\u9898\u76F4\u63A5\u53D1\u9001\u3001\u591A\u9898\u8DF3\u5230\u4E0B\u4E00\u672A\u7B54\u9898 \xB7 \u5176\u4ED6\u8F93\u5165\u540E Enter \u786E\u8BA4\u5E76\u7EE7\u7EED"
121
- },
122
- askChoiceHintOptional: {
123
- en: "Optional question \u2014 Enter/Space picks (one step) \xB7 skip if you don't want to answer",
124
- zh: "\u53EF\u9009\u9898 \u2014 Enter/\u7A7A\u683C \u9009\u62E9\u5373\u5B8C\u6210 \xB7 \u4E0D\u60F3\u56DE\u7B54\u53EF\u8DF3\u8FC7"
125
- },
126
- askChoiceHintMulti: {
127
- en: "Enter/Space toggles \xB7 \u2193 to Done row, Enter sends",
128
- zh: "Enter/\u7A7A\u683C \u5207\u6362\u9009\u4E2D \xB7 \u2193 \u5230\u5B8C\u6210\u884C Enter \u53D1\u9001"
129
- },
130
- askChoiceFooterSingle: {
131
- en: "\u21B5 pick/send \xB7 tab switch \xB7 esc cancel",
132
- zh: "\u21B5 \u9009\u62E9/\u53D1\u9001 \xB7 tab \u5207\u6362 \xB7 esc \u53D6\u6D88"
133
- },
134
- askChoiceFooterSkip: {
135
- en: "\u21B5 pick/send \xB7 \u2193 skip row \u21B5 skip \xB7 tab switch \xB7 esc cancel",
136
- zh: "\u21B5 \u9009\u62E9/\u53D1\u9001 \xB7 \u2193 \u8DF3\u8FC7\u884C \u21B5 \u8DF3\u8FC7 \xB7 tab \u5207\u6362 \xB7 esc \u53D6\u6D88"
137
- },
138
- askChoiceFooterMulti: {
139
- en: "\u21B5 toggle \xB7 \u2193 done row \u21B5 send \xB7 ctrl+s send \xB7 tab switch \xB7 esc cancel",
140
- zh: "\u21B5 \u5207\u6362 \xB7 \u2193 \u5B8C\u6210\u884C \u21B5 \u53D1\u9001 \xB7 ctrl+s \u53D1\u9001 \xB7 tab \u5207\u6362 \xB7 esc \u53D6\u6D88"
141
- },
142
154
  askChoiceValidationRequired: {
143
155
  en: "Required questions are unanswered \u2014 jumped to the first one.",
144
156
  zh: "\u5FC5\u586B\u95EE\u9898\u5C1A\u672A\u56DE\u7B54 \u2014 \u5DF2\u8DF3\u8F6C\u5230\u7B2C\u4E00\u4E2A\u672A\u7B54\u9898\u3002"
@@ -241,12 +253,12 @@ var sessionStrings = {
241
253
  " /skill detach <ref> Detach a skill",
242
254
  " /skill clear Detach all skills",
243
255
  " /customize Describe how you want to tune nolo",
244
- " /tasks List background process tasks (aliases: /jobs, /procs)",
256
+ " /tasks List child agent runs and background processes",
245
257
  " /stop <pid|all> Stop background process tasks",
246
258
  " /login Show login/profile hint (/login --server <url> to log in here)",
247
259
  " /auth Show provider OAuth status (/auth <provider> to authorize, /auth logout <provider> to remove)",
248
260
  " /profile Show active profile",
249
- " /update Update the nolo CLI install",
261
+ " /update Check for updates and install (status|force)",
250
262
  " /version Show version/update hint",
251
263
  " /logs Show recent diagnostics and the log file path",
252
264
  " /learn Review this dialog for reusable tool/prompt improvements",
@@ -288,12 +300,12 @@ var sessionStrings = {
288
300
  " /skill detach <ref> \u5378\u8F7D\u6307\u5B9A\u6280\u80FD",
289
301
  " /skill clear \u5378\u8F7D\u5168\u90E8\u6280\u80FD",
290
302
  " /customize \u63CF\u8FF0\u4F60\u60F3\u600E\u4E48\u8C03\u6559 nolo",
291
- " /tasks \u5217\u51FA\u540E\u53F0\u5B50\u8FDB\u7A0B\u4EFB\u52A1\uFF08\u522B\u540D\uFF1A/jobs, /procs\uFF09",
303
+ " /tasks \u5217\u51FA\u5B50 agent \u8FD0\u884C\u548C\u540E\u53F0\u8FDB\u7A0B",
292
304
  " /stop <pid|all> \u505C\u6B62\u6307\u5B9A\u7684\u540E\u53F0\u4EFB\u52A1",
293
305
  " /login \u67E5\u770B\u767B\u5F55 / \u914D\u7F6E\u63D0\u793A\uFF08/login --server <url> \u53EF\u5728\u672C\u4F1A\u8BDD\u5185\u767B\u5F55\uFF09",
294
306
  " /auth \u67E5\u770B\u6A21\u578B provider \u6388\u6743\u72B6\u6001\uFF08/auth <provider> \u5F00\u59CB\u6388\u6743\uFF0C/auth logout <provider> \u6CE8\u9500\uFF09",
295
307
  " /profile \u67E5\u770B\u5F53\u524D\u914D\u7F6E\u73AF\u5883",
296
- " /update \u66F4\u65B0 nolo CLI",
308
+ " /update \u68C0\u67E5\u5E76\u5B89\u88C5\u66F4\u65B0\uFF08status|force\uFF09",
297
309
  " /version \u67E5\u770B\u7248\u672C\u4E0E\u66F4\u65B0\u63D0\u793A",
298
310
  " /logs \u67E5\u770B\u6700\u8FD1\u8BCA\u65AD\u8BB0\u5F55\u4E0E\u65E5\u5FD7\u6587\u4EF6\u4F4D\u7F6E",
299
311
  " /learn \u4ECE\u5F53\u524D\u5BF9\u8BDD\u590D\u76D8\u53EF\u590D\u7528\u7684\u5DE5\u5177/\u63D0\u793A\u8BCD\u6539\u8FDB",
@@ -464,11 +476,6 @@ var agentStrings = {
464
476
  en: "\u26A0 {0} favorite(s) unavailable right now",
465
477
  zh: "\u26A0 {0} \u4E2A\u6536\u85CF\u9879\u6682\u65F6\u4E0D\u53EF\u7528"
466
478
  },
467
- // 派发前的本地冷却拦截(原两行英文 → 本地化单行压缩)。
468
- agentCooldownBlocked: {
469
- en: "[nolo] Agent {0} is in 429 cooldown until {1}. This dispatch was not sent \u2014 pick another agent, or retry after the cooldown.",
470
- zh: "[nolo] Agent {0} \u51B7\u5374\u4E2D\uFF0C\u81F3 {1}\u3002\u672C\u6B21\u6D3E\u53D1\u672A\u53D1\u51FA\u2014\u2014\u6362\u4E00\u4E2A agent\uFF0C\u6216\u5230\u70B9\u540E\u91CD\u8BD5\u3002"
471
- },
472
479
  // --- Agent-run orchestration cards (injected into packages/ai helpers) ---
473
480
  runStatusLabel: {
474
481
  en: "Run status",
@@ -478,6 +485,9 @@ var agentStrings = {
478
485
  en: "Run started",
479
486
  zh: "\u8FD0\u884C\u5DF2\u542F\u52A8"
480
487
  },
488
+ agentStartingLabel: { en: "Starting agent", zh: "\u6B63\u5728\u542F\u52A8\u667A\u80FD\u4F53" },
489
+ agentStartedLabel: { en: "Agent started", zh: "\u667A\u80FD\u4F53\u5DF2\u542F\u52A8" },
490
+ agentStartFailedLabel: { en: "Agent start failed", zh: "\u667A\u80FD\u4F53\u542F\u52A8\u5931\u8D25" },
481
491
  runStoppedLabel: {
482
492
  en: "Run stopped",
483
493
  zh: "\u8FD0\u884C\u5DF2\u505C\u6B62"
@@ -510,13 +520,21 @@ var agentStrings = {
510
520
  runRowNote: { en: "note", zh: "\u5907\u6CE8" },
511
521
  runRowError: { en: "error", zh: "\u9519\u8BEF" },
512
522
  runRowTask: { en: "task", zh: "\u4EFB\u52A1" },
513
- // listAgents card header (`Agents (3)` / `智能体 (3)`). The shared ai
514
- // renderer keeps the English default; the CLI relabels the header line.
515
- agentsListLabel: { en: "Agents ({0})", zh: "\u667A\u80FD\u4F53 ({0})" },
523
+ // listAgents card header (`🤖 (3)` / `🤖 · 3 个`). The 🤖 marker replaces the
524
+ // stiff type word ("Agents" / "智能体"), the same way the run zone labels an
525
+ // agent run; the count stays a plain number. The shared ai renderer keeps the
526
+ // English default; the CLI relabels the header line.
527
+ agentsListLabel: { en: "\u{1F916} ({0})", zh: "\u{1F916} ({0})" },
528
+ agentsCompactCount: { en: "\u{1F916} \xB7 {0}", zh: "\u{1F916} \xB7 {0} \u4E2A" },
529
+ agentsPageCount: { en: "{0} on this page", zh: "\u672C\u9875 {0} \u4E2A" },
530
+ agentsTruncated: { en: "incomplete", zh: "\u7ED3\u679C\u4E0D\u5B8C\u6574" },
516
531
  // Fallback identity for auto-generated agent ids (run zone / dock / panel).
517
532
  subAgentName: {
518
- en: "Sub-agent",
519
- zh: "\u5B50\u667A\u80FD\u4F53"
533
+ // Type marker for an agent row without a real name. The emoji replaces the
534
+ // stiff type words ("Sub-agent" / "智能体"); real names, titles and
535
+ // status keep their own slots.
536
+ en: "\u{1F916}",
537
+ zh: "\u{1F916}"
520
538
  },
521
539
  // Status vocabulary the fixed run zone does not label (running shows only its
522
540
  // elapsed time there). `en` must stay equal to the raw store status so a
@@ -538,13 +556,14 @@ var agentStrings = {
538
556
  zh: "{0}\uFF08\u5F85\u5BF9\u8D26\uFF09"
539
557
  },
540
558
  // --- Fixed run zone (top of composer, replaces the ⚙ running status chip) --
541
- // Each active run renders as `⚙ <title> · <agent> · <elapsed> · N tools`.
559
+ // Each active run renders as `↳ agent <title> · <agent> · <elapsed> · N tools`.
542
560
  // runZoneFor is the elapsed-time fact for a *running* run (`for 1m23s` /
543
561
  // `已运行 1m23s`); terminal runs print `<status> <age>` instead and don't use it.
544
562
  runZoneFor: {
545
563
  en: "for {0}",
546
564
  zh: "\u5DF2\u8FD0\u884C {0}"
547
565
  },
566
+ runZoneAgentType: { en: "\u{1F916}", zh: "\u{1F916}" },
548
567
  // Terminal linger line: `✓ <run> · done · took 12m03s`.
549
568
  runZoneDone: { en: "done", zh: "\u5B8C\u6210" },
550
569
  runZoneFailed: { en: "failed", zh: "\u5931\u8D25" },
@@ -605,13 +624,13 @@ Use /switch, /switch list, /switch minimax-m3, or a full agent key.`,
605
624
  zh: "API"
606
625
  },
607
626
  // ── Non-TUI CLI output: nolo agent / nolo run ─────────────────────────────
608
- "agent.unavailableHidden": {
609
- en: "\u26D4 {0} agent(s) temporarily unavailable (429) hidden. Use --show-unavailable to list them.\n",
610
- zh: "\u26D4 \u5DF2\u9690\u85CF {0} \u4E2A\u6682\u65F6\u4E0D\u53EF\u7528\u7684 agent\uFF08429\uFF09\u3002\u7528 --show-unavailable \u5217\u51FA\u5B83\u4EEC\u3002\n"
627
+ "agent.rateLimitedSummary": {
628
+ en: "[nolo] {0} agent(s) have quota/cooldown restrictions (reference info; dispatch is not restricted).\n",
629
+ zh: "[nolo] {0} \u4E2A agent \u6709\u989D\u5EA6/\u51B7\u5374\u53D7\u9650\u8BB0\u5F55\uFF08\u53C2\u8003\u4FE1\u606F\uFF0C\u4E0D\u9650\u5236\u6D3E\u53D1\uFF09\u3002\n"
611
630
  },
612
631
  "agent.rateLimitedRecovery": {
613
- en: " - [429 rate-limited] {0} (id: {1}) recovers in {2}s{3}\n",
614
- zh: " - [429 \u9650\u6D41] {0} (id: {1}) \u9884\u8BA1 {2} \u79D2\u540E\u6062\u590D{3}\n"
632
+ en: " - {0} (id: {1}) quota-limited until {4} ({2}s remaining; reference info, dispatch is not restricted){3}\n",
633
+ zh: " - {0} (id: {1}) \u989D\u5EA6\u53D7\u9650\u81F3 {4}\uFF08\u5269\u4F59 {2} \u79D2\uFF1B\u53C2\u8003\u4FE1\u606F\uFF0C\u4E0D\u9650\u5236\u6D3E\u53D1\uFF09{3}\n"
615
634
  },
616
635
  "agentRun.autoRouteOverrideFailed": {
617
636
  en: "[nolo] auto-route: could not read the source agent, running the selected agent as-is.\n",
@@ -783,12 +802,16 @@ var authStrings = {
783
802
  zh: "\u767B\u5F55\u6210\u529F\u3002Token \u5DF2\u5199\u5165 profile\uFF0C\u5F53\u524D\u4F1A\u8BDD\u7ACB\u5373\u751F\u6548\u3002"
784
803
  },
785
804
  loginFailed: {
786
- en: "Login failed: {0}",
787
- zh: "\u767B\u5F55\u5931\u8D25\uFF1A{0}"
805
+ en: "Login failed: {0}. Run /login again.",
806
+ zh: "\u767B\u5F55\u5931\u8D25\uFF1A{0}\u3002\u8BF7\u91CD\u65B0\u6267\u884C /login\u3002"
788
807
  },
789
808
  loginTimeout: {
790
- en: "Login timed out. Run /login again, or use `nolo login --token <jwt>` in a shell.",
791
- zh: "\u767B\u5F55\u8D85\u65F6\u3002\u8BF7\u91CD\u65B0\u6267\u884C /login\uFF0C\u6216\u5728 shell \u91CC\u7528 nolo login --token <jwt>\u3002"
809
+ en: "Login timed out. Run /login again.",
810
+ zh: "\u767B\u5F55\u8D85\u65F6\u3002\u8BF7\u91CD\u65B0\u6267\u884C /login\u3002"
811
+ },
812
+ loginAlreadyRunning: {
813
+ en: "Login is already running. Press Esc or Ctrl+C to cancel it before retrying /login.",
814
+ zh: "\u767B\u5F55\u6B63\u5728\u8FDB\u884C\u3002\u8BF7\u5148\u6309 Esc \u6216 Ctrl+C \u53D6\u6D88\uFF0C\u518D\u91CD\u65B0\u6267\u884C /login\u3002"
792
815
  },
793
816
  loginCancelled: {
794
817
  en: "Login cancelled.",
@@ -1082,7 +1105,22 @@ var updateStrings = {
1082
1105
  updateNotifyFinished: { "en": "Update finished - the next Nolo launch uses the new version", "zh": "\u66F4\u65B0\u5B8C\u6210\uFF0C\u4E0B\u6B21\u542F\u52A8 Nolo \u5373\u4F7F\u7528\u65B0\u7248\u672C" },
1083
1106
  updateUsage: { "en": "Usage:\n nolo update Install the latest CLI\n nolo update status Show version, channel, and background-update state", "zh": "\u7528\u6CD5\uFF1A\n nolo update \u5B89\u88C5\u6700\u65B0 CLI\n nolo update status \u663E\u793A\u7248\u672C\u3001channel \u4E0E\u540E\u53F0\u66F4\u65B0\u72B6\u6001" },
1084
1107
  updateNotifyFailed: { "en": "Update failed - see log: {0}", "zh": "\u66F4\u65B0\u5931\u8D25\uFF0C\u8BF7\u67E5\u770B\u65E5\u5FD7\uFF1A{0}" },
1085
- updateVersionChanged: { "en": "\u25B8 Nolo version changed: {0} \u2192 {1}", "zh": "\u25B8 Nolo \u7248\u672C\u53D8\u5316\uFF1A{0} \u2192 {1}" }
1108
+ updateVersionChanged: { "en": "\u25B8 Nolo version changed: {0} \u2192 {1}", "zh": "\u25B8 Nolo \u7248\u672C\u53D8\u5316\uFF1A{0} \u2192 {1}" },
1109
+ // ── /update 在 TUI 里的可见文案 ──────────────────────────────────────────
1110
+ // 检查先于安装:确知已最新时直接告知并跳过安装,检查失败(离线/超时)如实
1111
+ // 说明后照常安装——不确定的信息不得否决用户的正常操作。
1112
+ updateChecking: { en: "\u25B8 Checking for a newer version\u2026", zh: "\u25B8 \u6B63\u5728\u68C0\u67E5\u662F\u5426\u6709\u65B0\u7248\u672C\u2026" },
1113
+ updateAlreadyLatest: { en: "\u2713 nolo {0} is already the latest version. Reinstall anyway with: /update force", zh: "\u2713 nolo {0} \u5DF2\u662F\u6700\u65B0\u7248\u672C\u3002\u5982\u9700\u5F3A\u5236\u91CD\u88C5\uFF1A/update force" },
1114
+ updateCheckSkipped: { en: "\u25B8 Could not check for a newer version (offline or timeout) \u2014 installing anyway.", zh: "\u25B8 \u65E0\u6CD5\u68C0\u67E5\u6700\u65B0\u7248\u672C\uFF08\u79BB\u7EBF\u6216\u8D85\u65F6\uFF09\uFF0C\u7EE7\u7EED\u5B89\u88C5\u3002" },
1115
+ updateTuiScheduled: { en: "\u2713 Update is ready. Nolo now exits so the installer can replace this build.", zh: "\u2713 \u66F4\u65B0\u5DF2\u5C31\u7EEA\u3002Nolo \u73B0\u5728\u9000\u51FA\uFF0C\u4EE5\u4FBF\u5B89\u88C5\u7A0B\u5E8F\u66FF\u6362\u5F53\u524D\u7248\u672C\u3002" },
1116
+ updateTuiFinished: { en: "\u2713 Update finished. Restart nolo to use the new version.", zh: "\u2713 \u66F4\u65B0\u5B8C\u6210\u3002\u91CD\u542F nolo \u540E\u751F\u6548\u3002" },
1117
+ updateTuiFailed: { en: "\u2717 Update failed. See the error above, then run /update again or `nolo update`.", zh: "\u2717 \u66F4\u65B0\u5931\u8D25\u3002\u8BF7\u67E5\u770B\u4E0A\u9762\u7684\u9519\u8BEF\uFF0C\u7136\u540E\u91CD\u8BD5 /update \u6216\u4F7F\u7528 `nolo update`\u3002" },
1118
+ updateTuiUsage: { en: "Usage:\n /update Check for a newer version and install it\n /update status Show version, channel, and whether a newer version exists\n /update force Reinstall even when already up to date", zh: "\u7528\u6CD5\uFF1A\n /update \u68C0\u67E5\u5E76\u5B89\u88C5\u6700\u65B0\u7248\u672C\n /update status \u663E\u793A\u7248\u672C\u3001\u6E20\u9053\uFF0C\u4EE5\u53CA\u662F\u5426\u6709\u65B0\u7248\u672C\n /update force \u5373\u4F7F\u5DF2\u662F\u6700\u65B0\u4E5F\u5F3A\u5236\u91CD\u88C5" },
1119
+ updateTuiUnknownArg: { en: "\u2717 Unknown argument: {0}", zh: "\u2717 \u672A\u77E5\u53C2\u6570\uFF1A{0}" },
1120
+ updateTuiStatus: { en: "nolo {0}\nchannel {1}", zh: "nolo {0}\n\u6E20\u9053 {1}" },
1121
+ updateUpToDate: { en: "\u2713 Already up to date", zh: "\u2713 \u5DF2\u662F\u6700\u65B0\u7248\u672C" },
1122
+ updateCheckUnavailable: { en: "? Could not check for a newer version (offline or timeout)", zh: "? \u65E0\u6CD5\u68C0\u67E5\u6700\u65B0\u7248\u672C\uFF08\u79BB\u7EBF\u6216\u8D85\u65F6\uFF09" },
1123
+ profileCurrent: { en: "Profile: {0}", zh: "\u5F53\u524D\u914D\u7F6E\u73AF\u5883 (Profile)\uFF1A{0}" }
1086
1124
  };
1087
1125
 
1088
1126
  // packages/cli/i18n/strings/secret.ts
@@ -1090,8 +1128,8 @@ var secretStrings = {
1090
1128
  "secret.help": {
1091
1129
  en: `Usage:
1092
1130
  nolo secret list [--json] List saved secret names (without values; --json outputs machine-readable list)
1093
- nolo secret get <name> Print the value of a secret (for debugging; agents must not read)
1094
- nolo secret set <name> --prompt Set a secret via hidden interactive prompt (TTY only; does not echo secret)
1131
+ nolo secret get <name> [--reveal] Print masked secret preview (default masked; --reveal requires interactive TTY confirmation)
1132
+ nolo secret set <name> --prompt Set a secret via hidden interactive prompt (masked TTY prompt; opens a graphical dialog when no TTY)
1095
1133
  nolo secret set <name> --stdin Set a secret securely from stdin (recommended; prevents leaking secrets in argv)
1096
1134
  nolo secret set <name> <value|json> Set a secret via argv (legacy; discouraged: exposes secrets in shell history and process list)
1097
1135
  nolo secret delete <name> Delete a secret
@@ -1103,8 +1141,8 @@ var secretStrings = {
1103
1141
  `,
1104
1142
  zh: `\u7528\u6CD5:
1105
1143
  nolo secret list [--json] \u5217\u51FA\u5DF2\u4FDD\u5B58\u7684 secret \u540D\u79F0\uFF08\u4E0D\u663E\u793A\u503C\uFF1B--json \u8F93\u51FA\u673A\u5668\u53EF\u8BFB\u6E05\u5355\uFF09
1106
- nolo secret get <name> \u6253\u5370\u6307\u5B9A secret \u7684\u503C\uFF08\u4F9B\u8C03\u8BD5\uFF1BAgent \u4E0D\u5F97\u8BFB\u53D6\uFF09
1107
- nolo secret set <name> --prompt \u901A\u8FC7\u9690\u85CF\u8F93\u5165\u4EA4\u4E92\u8BBE\u7F6E secret\uFF08\u4EC5\u9650 TTY\uFF0C\u4E0D\u56DE\u663E\u51ED\u636E\uFF09
1144
+ nolo secret get <name> [--reveal] \u6253\u5370\u8131\u654F\u9884\u89C8\uFF08\u9ED8\u8BA4\u8131\u654F\uFF1B\u660E\u6587\u9700\u5728\u4EA4\u4E92\u5F0F TTY \u4E0B\u4F7F\u7528 --reveal \u5E76\u7ECF\u786E\u8BA4\uFF09
1145
+ nolo secret set <name> --prompt \u901A\u8FC7\u9690\u85CF\u8F93\u5165\u4EA4\u4E92\u8BBE\u7F6E secret\uFF08TTY \u4E0B\u4E3A\u63A9\u7801\u8F93\u5165\uFF1B\u65E0 TTY \u65F6\u5F39\u51FA\u56FE\u5F62\u8F93\u5165\u6846\uFF09
1108
1146
  nolo secret set <name> --stdin \u4ECE stdin \u5B89\u5168\u8BBE\u7F6E secret\uFF08\u63A8\u8350\uFF1B\u907F\u514D\u901A\u8FC7\u547D\u4EE4\u884C\u53C2\u6570\u6CC4\u9732\u51ED\u636E\uFF09
1109
1147
  nolo secret set <name> <value|json> \u901A\u8FC7\u547D\u4EE4\u884C\u53C2\u6570\u8BBE\u7F6E secret\uFF08\u517C\u5BB9\u65E7\u8BED\u6CD5\uFF1B\u4E0D\u63A8\u8350\uFF1A\u51ED\u636E\u4F1A\u66B4\u9732\u5728\u8FDB\u7A0B\u5217\u8868\u4E0E shell \u5386\u53F2\u4E2D\uFF09
1110
1148
  nolo secret delete <name> \u5220\u9664\u6307\u5B9A\u7684 secret
@@ -1135,6 +1173,22 @@ var secretStrings = {
1135
1173
  en: 'Error: Secret "{0}" not found',
1136
1174
  zh: '\u9519\u8BEF: \u672A\u627E\u5230\u540D\u4E3A "{0}" \u7684 secret'
1137
1175
  },
1176
+ "secret.getRevealHint": {
1177
+ en: "To view plaintext, run 'nolo secret get {0} --reveal' in an interactive terminal",
1178
+ zh: "\u5982\u9700\u67E5\u770B\u660E\u6587\uFF0C\u8BF7\u5728\u4EA4\u4E92\u5F0F\u7EC8\u7AEF\u4E2D\u8FD0\u884C 'nolo secret get {0} --reveal'"
1179
+ },
1180
+ "secret.getRevealNonTty": {
1181
+ en: "Error: --reveal requires an interactive terminal (TTY) and cannot be used in scripts or automated pipelines",
1182
+ zh: "\u9519\u8BEF: --reveal \u9700\u8981\u4EA4\u4E92\u5F0F\u7EC8\u7AEF (TTY)\uFF0C\u4E0D\u5F97\u5728\u811A\u672C\u6216\u81EA\u52A8\u5316\u6D41\u7A0B\u4E2D\u4F7F\u7528"
1183
+ },
1184
+ "secret.getRevealConfirmPrompt": {
1185
+ en: 'Reveal plaintext for secret "{0}"? (y/N) ',
1186
+ zh: '\u786E\u8BA4\u663E\u793A secret "{0}" \u7684\u660E\u6587\u5185\u5BB9\uFF1F(y/N) '
1187
+ },
1188
+ "secret.getRevealCancelled": {
1189
+ en: "Aborted: secret plaintext was not revealed",
1190
+ zh: "\u5DF2\u53D6\u6D88: \u672A\u663E\u793A secret \u660E\u6587"
1191
+ },
1138
1192
  "secret.setNameAndValueRequired": {
1139
1193
  en: "Error: Please provide both secret name and value",
1140
1194
  zh: "\u9519\u8BEF: \u8BF7\u63D0\u4F9B secret \u540D\u79F0\u4E0E\u503C"
@@ -1275,6 +1329,10 @@ var secretStrings = {
1275
1329
  en: "Error: Interactive terminal (TTY) required for --prompt. For automated pipelines use --stdin",
1276
1330
  zh: "\u9519\u8BEF: --prompt \u9700\u8981\u4EA4\u4E92\u5F0F\u7EC8\u7AEF (TTY)\u3002\u81EA\u52A8\u5316\u6D41\u6C34\u7EBF\u8BF7\u4F7F\u7528 --stdin"
1277
1331
  },
1332
+ "secret.promptGuiUnavailable": {
1333
+ en: "Error: --prompt has no input channel here: stdin is not a terminal and no graphical password dialog (zenity/kdialog/yad) is available in this environment. Pipe the value instead: nolo secret set <name> --stdin (recommended), or run --prompt inside an interactive terminal",
1334
+ zh: "\u9519\u8BEF: --prompt \u5728\u5F53\u524D\u73AF\u5883\u6CA1\u6709\u53EF\u7528\u7684\u8F93\u5165\u901A\u9053\uFF1Astdin \u4E0D\u662F\u7EC8\u7AEF\uFF0C\u4E14\u6CA1\u6709\u53EF\u7528\u7684\u56FE\u5F62\u5BC6\u7801\u8F93\u5165\u6846\uFF08zenity/kdialog/yad\uFF09\u3002\u8BF7\u6539\u7528\u7BA1\u9053\u8F93\u5165\uFF1Anolo secret set <name> --stdin\uFF08\u63A8\u8350\uFF09\uFF0C\u6216\u5728\u4EA4\u4E92\u5F0F\u7EC8\u7AEF\u4E2D\u8FD0\u884C --prompt"
1335
+ },
1278
1336
  "secret.promptEmpty": {
1279
1337
  en: "Error: Secret input from prompt cannot be empty or pure whitespace",
1280
1338
  zh: "\u9519\u8BEF: \u6765\u81EA\u63D0\u793A\u7B26\u7684 secret \u8F93\u5165\u4E0D\u80FD\u4E3A\u7A7A\u6216\u7EAF\u7A7A\u767D"
@@ -1684,8 +1742,8 @@ var cliSurfaceStrings = {
1684
1742
  "zh": "\u672A\u77E5\u547D\u4EE4\uFF1A{0}"
1685
1743
  },
1686
1744
  "cliCooldownHelp": {
1687
- "en": "Manage per-credential availability cooldowns (429 rate-limit cooldown).\n\nUsage:\n nolo auth cooldown List all active cooldowns\n nolo auth cooldown --clear <credential> Clear one credential's cooldown\n nolo auth cooldown --clear-all Clear all cooldowns\n\nOptions:\n --clear <credential> Clear the cooldown for the given credential\n (e.g. chatgpt / claude / antigravity, or a custom API credential).\n --clear-all Clear every credential cooldown.\n --help Show this help.\n\nNo argument lists the currently cooled credentials with their human-readable\nrecovery time and remaining duration.\n",
1688
- "zh": "\u7BA1\u7406\u5404\u51ED\u636E\u7684\u53EF\u7528\u6027\u51B7\u5374\uFF08429 \u9650\u6D41\u51B7\u5374\uFF09\u3002\n\n\u7528\u6CD5\uFF1A\n nolo auth cooldown \u5217\u51FA\u6240\u6709\u751F\u6548\u4E2D\u7684\u51B7\u5374\n nolo auth cooldown --clear <credential> \u6E05\u9664\u6307\u5B9A\u51ED\u636E\u7684\u51B7\u5374\n nolo auth cooldown --clear-all \u6E05\u9664\u6240\u6709\u51B7\u5374\n\n\u9009\u9879\uFF1A\n --clear <credential> \u6E05\u9664\u6307\u5B9A\u51ED\u636E\u7684\u51B7\u5374\n \uFF08\u4F8B\u5982 chatgpt / claude / antigravity\uFF0C\u6216\u81EA\u5B9A\u4E49 API \u51ED\u636E\uFF09\u3002\n --clear-all \u6E05\u9664\u5168\u90E8\u51ED\u636E\u51B7\u5374\u3002\n --help \u663E\u793A\u6B64\u5E2E\u52A9\u3002\n\n\u4E0D\u5E26\u53C2\u6570\u65F6\u5217\u51FA\u5904\u4E8E\u51B7\u5374\u4E2D\u7684\u51ED\u636E\u3001\u6062\u590D\u65F6\u95F4\u548C\u5269\u4F59\u65F6\u957F\u3002\n"
1745
+ "en": "Manage per-credential availability cooldowns (429 rate-limit cooldown).\n\nNote: cooldowns no longer block requests - quota/cooldown is reference info only\nand every dispatch still goes upstream. This command is for reading that reference\ninfo and for clearing stale entries (e.g. after topping up an account).\n\nUsage:\n nolo auth cooldown List all active cooldowns\n nolo auth cooldown --clear <credential> Clear one credential's cooldown\n nolo auth cooldown --clear-all Clear all cooldowns\n\nOptions:\n --clear <credential> Clear the cooldown for the given credential\n (e.g. chatgpt / claude / antigravity, or a custom API credential).\n --clear-all Clear every credential cooldown.\n --help Show this help.\n\nNo argument lists the currently cooled credentials with their human-readable\nrecovery time and remaining duration.\n",
1746
+ "zh": "\u7BA1\u7406\u5404\u51ED\u636E\u7684\u53EF\u7528\u6027\u51B7\u5374\uFF08429 \u9650\u6D41\u51B7\u5374\uFF09\u3002\n\n\u8BF4\u660E\uFF1A\u51B7\u5374\u4E0D\u518D\u62E6\u622A\u8BF7\u6C42\u2014\u2014\u989D\u5EA6/\u51B7\u5374\u53EA\u4F5C\u53C2\u8003\u4FE1\u606F\uFF0C\u4EFB\u4F55\u6D3E\u53D1\u90FD\u4F1A\u76F4\u8FBE\u4E0A\u6E38\u3002\n\u6B64\u547D\u4EE4\u7528\u4E8E\u67E5\u770B\u8FD9\u4EFD\u53C2\u8003\u4FE1\u606F\uFF0C\u4EE5\u53CA\u6E05\u7406\u9648\u65E7\u8BB0\u5F55\uFF08\u4F8B\u5982\u5145\u503C\u540E\uFF09\u3002\n\n\u7528\u6CD5\uFF1A\n nolo auth cooldown \u5217\u51FA\u6240\u6709\u751F\u6548\u4E2D\u7684\u51B7\u5374\n nolo auth cooldown --clear <credential> \u6E05\u9664\u6307\u5B9A\u51ED\u636E\u7684\u51B7\u5374\n nolo auth cooldown --clear-all \u6E05\u9664\u6240\u6709\u51B7\u5374\n\n\u9009\u9879\uFF1A\n --clear <credential> \u6E05\u9664\u6307\u5B9A\u51ED\u636E\u7684\u51B7\u5374\n \uFF08\u4F8B\u5982 chatgpt / claude / antigravity\uFF0C\u6216\u81EA\u5B9A\u4E49 API \u51ED\u636E\uFF09\u3002\n --clear-all \u6E05\u9664\u5168\u90E8\u51ED\u636E\u51B7\u5374\u3002\n --help \u663E\u793A\u6B64\u5E2E\u52A9\u3002\n\n\u4E0D\u5E26\u53C2\u6570\u65F6\u5217\u51FA\u5904\u4E8E\u51B7\u5374\u4E2D\u7684\u51ED\u636E\u3001\u6062\u590D\u65F6\u95F4\u548C\u5269\u4F59\u65F6\u957F\u3002\n"
1689
1747
  },
1690
1748
  "cliCooldownClearedCount": {
1691
1749
  "en": "Cleared {0} credential cooldown(s).",
@@ -1908,6 +1966,30 @@ var commonStrings = {
1908
1966
  en: 'This turn failed, but the dialog is kept. Send another message (or say "continue") to keep going in the same conversation.',
1909
1967
  zh: "\u672C\u8F6E\u5931\u8D25\u4E86\uFF0C\u4F46\u5BF9\u8BDD\u5DF2\u4FDD\u7559\u3002\u76F4\u63A5\u518D\u8BF4\u4E00\u53E5\uFF08\u6216\u8BF4\u300C\u7EE7\u7EED\u300D\uFF09\u5373\u53EF\u5728\u540C\u4E00\u5BF9\u8BDD\u91CC\u63A5\u7740\u804A\u3002"
1910
1968
  },
1969
+ contextRefusalBudgetDetail: {
1970
+ en: "History {0} / budget {1}. ",
1971
+ zh: "\u5386\u53F2 {0} / \u9884\u7B97 {1}\uFF0C"
1972
+ },
1973
+ contextRefusalSummaryBusy: {
1974
+ en: "Not sent: summary channel busy. {0}Retry in about 30 seconds.",
1975
+ zh: "\u6CA1\u53D1\u51FA\u53BB\uFF1A\u6458\u8981\u901A\u9053\u5FD9\u3002{0}\u7EA6 30 \u79D2\u540E\u91CD\u8BD5\u5373\u53EF\u3002"
1976
+ },
1977
+ contextRefusalSummaryFailed: {
1978
+ en: "Not sent: summary compaction failed. {0}Retry, or run /compact first.",
1979
+ zh: "\u6CA1\u53D1\u51FA\u53BB\uFF1A\u6458\u8981\u538B\u7F29\u5931\u8D25\u3002{0}\u53EF\u91CD\u8BD5\uFF0C\u6216\u5148 /compact\u3002"
1980
+ },
1981
+ contextRefusalNoCompactableContent: {
1982
+ en: "Not sent: history cannot shrink further. Run /compact, or switch to a model with a larger context window.",
1983
+ zh: "\u6CA1\u53D1\u51FA\u53BB\uFF1A\u5386\u53F2\u538B\u4E0D\u52A8\u4E86\u3002\u5148 /compact\uFF0C\u6216\u6362\u66F4\u5927\u7A97\u53E3\u7684\u6A21\u578B\u3002"
1984
+ },
1985
+ contextRefusalSingleMessageTooLarge: {
1986
+ en: "Not sent: this message alone is {0}, meeting or exceeding the {1} budget. Split it, or use a model with a larger context window.",
1987
+ zh: "\u6CA1\u53D1\u51FA\u53BB\uFF1A\u8FD9\u6761\u6D88\u606F\u672C\u8EAB {0}\uFF0C\u8FBE\u5230\u6216\u8D85\u8FC7\u53EF\u7528\u9884\u7B97 {1}\u3002\u62C6\u5F00\u53D1\u9001\uFF0C\u6216\u6362\u66F4\u5927\u7A97\u53E3\u7684\u6A21\u578B\u3002"
1988
+ },
1989
+ contextPreflightBlockedHint: {
1990
+ en: "Not sent: the context does not fit. Your input is kept; retry or run /compact.",
1991
+ zh: "\u6CA1\u53D1\u51FA\u53BB\uFF1A\u4E0A\u4E0B\u6587\u88C5\u4E0D\u4E0B\u3002\u4F60\u7684\u8BDD\u5DF2\u4FDD\u7559\uFF0C\u91CD\u8BD5\u6216 /compact\u3002"
1992
+ },
1911
1993
  dialogNotSavedHint: {
1912
1994
  en: "This turn did not create a dialog. Your next message will start a new conversation \u2014 restate what you need.",
1913
1995
  zh: "\u672C\u8F6E\u6CA1\u6709\u5EFA\u6210\u5BF9\u8BDD\u3002\u4E0B\u4E00\u53E5\u4F1A\u662F\u65B0\u5BF9\u8BDD\u2014\u2014\u8BF7\u628A\u4F60\u60F3\u505A\u7684\u4E8B\u518D\u8BF4\u4E00\u904D\u3002"
@@ -2018,6 +2100,10 @@ var commonStrings = {
2018
2100
  en: "Compacting history\u2026 (Esc/Ctrl+C to cancel)",
2019
2101
  zh: "\u6B63\u5728\u538B\u7F29\u5386\u53F2\u8BB0\u5F55\u2026\uFF08Esc/Ctrl+C \u53D6\u6D88\uFF09"
2020
2102
  },
2103
+ contextCompactingRetry: {
2104
+ en: "Compacting history\u2026 (summary channel busy, retry {0}/{1}) (Esc/Ctrl+C to cancel)",
2105
+ zh: "\u6B63\u5728\u538B\u7F29\u5386\u53F2\u8BB0\u5F55\u2026\uFF08\u6458\u8981\u901A\u9053\u5FD9\uFF0C\u91CD\u8BD5 {0}/{1}\uFF09\uFF08Esc/Ctrl+C \u53D6\u6D88\uFF09"
2106
+ },
2021
2107
  waitingForModel: {
2022
2108
  en: "Waiting for the model\u2026",
2023
2109
  zh: "\u6B63\u5728\u7B49\u5F85\u6A21\u578B\u54CD\u5E94\u2026"
@@ -2059,10 +2145,12 @@ var commonStrings = {
2059
2145
  zh: "\uFF08\u4E0A\u6E38\u7EA6 {0}\u540E\u590D\u4F4D\uFF09"
2060
2146
  },
2061
2147
  // 第 2 行:{0} = 冷却截止(本地时间,当天 HH:MM / 跨天 MM-DD HH:MM),
2062
- // {1} = 复位提示或空串,{2} = 自动探测间隔(分钟)。无 cooldownUntil 时整行省略。
2148
+ // {1} = 复位提示或空串。无 cooldownUntil 时整行省略。
2149
+ // 冷却只作参考:额度信息不再有否决权,请求不会被本地拦下,故文案不得承诺
2150
+ // 「每 N 分钟自动试探一次」——那套 gate 节流已随否决权一并拆除。
2063
2151
  localRunRateLimitCooldown: {
2064
- en: " Cooldown until {0}{1}; auto-probing every {2} min meanwhile (the upstream may not be restored by then).",
2065
- zh: " \u51B7\u5374\u81F3 {0}{1}\uFF1B\u671F\u95F4\u6BCF {2} \u5206\u949F\u81EA\u52A8\u8BD5\u63A2\u4E00\u6B21\uFF08\u4E0A\u6E38\u672A\u5FC5\u5C4A\u65F6\u6062\u590D\uFF09\u3002"
2152
+ en: " Cooldown until {0}{1}; requests are not blocked locally by this timestamp \u2014 it is only a reference for when the upstream may recover (it may not have recovered by then).",
2153
+ zh: " \u51B7\u5374\u81F3 {0}{1}\uFF1B\u672C\u5730\u4E0D\u636E\u6B64\u62E6\u622A\u8BF7\u6C42\uFF0C\u8BE5\u65F6\u523B\u4EC5\u4F5C\u53C2\u8003\uFF08\u4E0A\u6E38\u672A\u5FC5\u5C4A\u65F6\u6062\u590D\uFF09\u3002"
2066
2154
  },
2067
2155
  // 第 3 行:三个出口(换 agent / 强制走服务器 / 已充值清冷却)。
2068
2156
  localRunRateLimitExits: {
@@ -2106,6 +2194,14 @@ var commonStrings = {
2106
2194
  en: "Used Skill",
2107
2195
  zh: "\u5DF2\u52A0\u8F7D\u6280\u80FD"
2108
2196
  },
2197
+ loadSkillLabel: {
2198
+ en: "Load Skill",
2199
+ zh: "\u52A0\u8F7D\u6280\u80FD"
2200
+ },
2201
+ unnamedSkillReference: {
2202
+ en: "unknown reference",
2203
+ zh: "\u672A\u77E5\u5F15\u7528"
2204
+ },
2109
2205
  // Background-process rows in the same zone (`❯ npm run dev · 已运行 3m · pid 123`).
2110
2206
  // The pid is how the user targets /stop, so it is a fact, not decoration.
2111
2207
  procZonePid: { en: "pid {0}", zh: "pid {0}" },
@@ -2626,6 +2722,15 @@ var commonStrings = {
2626
2722
  };
2627
2723
 
2628
2724
  // packages/cli/i18n/index.ts
2725
+ var controlMessageStrings = {
2726
+ controlQueued: { en: "queued", zh: "\u5DF2\u5165\u961F" },
2727
+ controlEnqueued: { en: "[enqueued {0}]", zh: "[\u5DF2\u5165\u961F {0}]" },
2728
+ controlContinued: { en: "continued", zh: "\u5DF2\u7EED\u8DD1" },
2729
+ controlConsumed: { en: "consumed", zh: "\u5DF2\u6D88\u8D39" },
2730
+ controlRun: { en: "run", zh: "\u4EFB\u52A1" },
2731
+ controlTarget: { en: "target", zh: "\u76EE\u6807" },
2732
+ controlMessage: { en: "message", zh: "\u6D88\u606F" }
2733
+ };
2629
2734
  var STRINGS = {
2630
2735
  ...turnStrings,
2631
2736
  ...sessionStrings,
@@ -2638,7 +2743,8 @@ var STRINGS = {
2638
2743
  ...docCommandStrings,
2639
2744
  ...cliSurfaceStrings,
2640
2745
  ...dialogCommandStrings,
2641
- ...commonStrings
2746
+ ...commonStrings,
2747
+ ...controlMessageStrings
2642
2748
  };
2643
2749
  function t(key, ...params) {
2644
2750
  const text = STRINGS[key][getCliLocale()];
@@ -2778,6 +2884,10 @@ var COMMAND_DESCRIPTIONS = {
2778
2884
  en: "Run an agent",
2779
2885
  zh: "\u8FD0\u884C\u667A\u80FD\u4F53"
2780
2886
  },
2887
+ "agent recover-prepared-writer": {
2888
+ en: "Revoke an exact fenced-launch-v1 prepared writer attempt (--attempt-id required; no force)",
2889
+ zh: "\u64A4\u9500\u67D0\u4E2A\u7CBE\u786E\u5339\u914D\u7684 fenced-launch-v1 \u5DF2\u51C6\u5907\u5199\u5165\u8005\u5C1D\u8BD5\uFF08\u5FC5\u987B\u5E26 --attempt-id\uFF0C\u4E0D\u652F\u6301\u5F3A\u5236\uFF09"
2890
+ },
2781
2891
  "agent ps": {
2782
2892
  en: "List active and recent local agent runs (--json for machine-readable output)",
2783
2893
  zh: "\u5217\u51FA\u6D3B\u8DC3\u4E0E\u8FD1\u671F\u7684\u672C\u5730\u667A\u80FD\u4F53\u8FD0\u884C\uFF08--json \u8F93\u51FA\u673A\u5668\u53EF\u8BFB\u683C\u5F0F\uFF09"
@@ -2882,6 +2992,11 @@ var COMMAND_DESCRIPTIONS = {
2882
2992
  en: "Read compact dialog status",
2883
2993
  zh: "\u8BFB\u53D6\u7CBE\u7B80\u7684\u5BF9\u8BDD\u72B6\u6001"
2884
2994
  },
2995
+ "dialog notify": {
2996
+ // 与 dialogInternalCommandEntries 的 registry 描述逐字一致(门禁按字节比对)。
2997
+ en: "Deliver a notification into a live CLI dialog's existing queue (--message/--file, --idempotency-key; --status for the receipt)",
2998
+ zh: "\u5411\u6B63\u5728\u8FD0\u884C\u7684 CLI \u5BF9\u8BDD\u961F\u5217\u6295\u9012\u901A\u77E5\uFF08--message/--file\u3001--idempotency-key\uFF1B--status \u67E5\u6295\u9012\u56DE\u6267\uFF09"
2999
+ },
2885
3000
  "doc create": {
2886
3001
  en: "Create a normal doc",
2887
3002
  zh: "\u521B\u5EFA\u666E\u901A\u6587\u6863"
@@ -3150,6 +3265,10 @@ var COMMAND_DESCRIPTIONS = {
3150
3265
  en: "Evaluate JS in a tab, user-approved per call (--tab <id> --expr <js> [--await] [--timeout-ms N]) (Compatibility alias of `nolo browser eval`)",
3151
3266
  zh: "\u5728\u6807\u7B7E\u9875\u4E2D\u6267\u884C JS\uFF0C\u6BCF\u6B21\u8C03\u7528\u9700\u7528\u6237\u6279\u51C6\uFF08--tab <id> --expr <js> [--await] [--timeout-ms N]\uFF09\uFF08`nolo browser eval` \u7684\u517C\u5BB9\u522B\u540D\uFF09"
3152
3267
  },
3268
+ "ci cancel": {
3269
+ en: "Cancel an alpha deploy job",
3270
+ zh: "\u53D6\u6D88 alpha \u90E8\u7F72\u4EFB\u52A1"
3271
+ },
3153
3272
  "ci status": {
3154
3273
  en: "Show recent nolo-ci deploy jobs (alpha / main)",
3155
3274
  zh: "\u67E5\u770B\u6700\u8FD1\u7684 nolo-ci \u90E8\u7F72\u4EFB\u52A1\uFF08alpha / main\uFF09"
@@ -3158,6 +3277,10 @@ var COMMAND_DESCRIPTIONS = {
3158
3277
  en: "Show dialog tokens, recorded duration and speed by basis",
3159
3278
  zh: "\u663E\u793A\u5BF9\u8BDD\u7684 token \u6570\u3001\u8BB0\u5F55\u65F6\u957F\u4E0E\u6309\u57FA\u51C6\u8BA1\u7B97\u7684\u901F\u5EA6"
3160
3279
  },
3280
+ "usage": {
3281
+ en: "Summarize local token usage by day/provider/model/agent (reads DayStats via LevelDB iterator)",
3282
+ zh: "\u6309\u65E5\u3001\u63D0\u4F9B\u5546\u3001\u6A21\u578B\u548C\u667A\u80FD\u4F53\u6C47\u603B\u672C\u5730 token \u7528\u91CF\uFF08\u901A\u8FC7 LevelDB \u8FED\u4EE3\u5668\u8BFB\u53D6 DayStats\uFF09"
3283
+ },
3161
3284
  "login": {
3162
3285
  en: "Log in to Nolo",
3163
3286
  zh: "\u767B\u5F55 Nolo"
@@ -3300,6 +3423,15 @@ function agentRunStatusWord(status) {
3300
3423
  }
3301
3424
  function agentRunCardLabels() {
3302
3425
  return {
3426
+ controlMessage: {
3427
+ queued: t("controlQueued"),
3428
+ enqueued: (count) => t("controlEnqueued", String(count)),
3429
+ continued: t("controlContinued"),
3430
+ consumed: t("controlConsumed"),
3431
+ run: t("controlRun"),
3432
+ target: t("controlTarget"),
3433
+ message: t("controlMessage")
3434
+ },
3303
3435
  runStatus: t("runStatusLabel"),
3304
3436
  runStarted: t("runStartedLabel"),
3305
3437
  runStopped: t("runStoppedLabel"),
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  resolveAgentCallPlan
3
- } from "./chunk-UHJGXRJ4.js";
3
+ } from "./chunk-KQSYAIZR.js";
4
4
  import {
5
5
  SUBSCRIPTION_OAUTH_PROVIDERS
6
- } from "./chunk-KIM6CLW5.js";
6
+ } from "./chunk-SY3C4SQ7.js";
7
7
  import {
8
8
  findModelConfig,
9
9
  getProviderByModelName
10
- } from "./chunk-SM3NSZJV.js";
10
+ } from "./chunk-2UCBGYO4.js";
11
11
  import {
12
12
  asTrimmedLowercaseString
13
13
  } from "./chunk-QSJ3HFEF.js";
@@ -1,32 +1,101 @@
1
1
  import {
2
2
  DEFAULT_AGENT_BASE_POLICY,
3
3
  DEFAULT_USER_PREFERENCE_PROFILE,
4
- isAgentSkillDisabled,
5
- resolveAgentSkillConfig,
4
+ isAccountOnDemandWorkflowSkill,
6
5
  resolveUserEnabledSkills
7
- } from "./chunk-MMNYUVLW.js";
6
+ } from "./chunk-UB3D4TRQ.js";
7
+ import {
8
+ collectAgentSkillConfigIssues,
9
+ describeAgentSkillModeValue,
10
+ isAgentSkillDisabled,
11
+ resolveAgentSkillConfig
12
+ } from "./chunk-FS2XP5D7.js";
8
13
  import {
9
14
  resolveBuiltinSkillEntry,
10
15
  resolveBuiltinSkillPage,
11
16
  resolveSkillGraphFromRoots
12
- } from "./chunk-EZFQ6XRV.js";
17
+ } from "./chunk-PJCIP64Z.js";
13
18
  import {
14
19
  parseSkillDocProtocol
15
- } from "./chunk-AETZ7AD6.js";
20
+ } from "./chunk-W6RFEDN4.js";
21
+
22
+ // packages/ai/skills/agentSkillPreferenceDiagnostics.ts
23
+ var hasOwn = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
24
+ var resolveAgentSkillPreferenceSource = (preferences) => {
25
+ if (!preferences || typeof preferences !== "object") {
26
+ return { source: "empty", field: null };
27
+ }
28
+ if (hasOwn(preferences, "enabledSkills")) {
29
+ return { source: "settings-record", field: "enabledSkills" };
30
+ }
31
+ if (hasOwn(preferences, "enabledPromptSkills")) {
32
+ return { source: "legacy-field", field: "enabledPromptSkills" };
33
+ }
34
+ return { source: "empty", field: null };
35
+ };
36
+ var buildAgentSkillPreferenceDiagnostic = (input) => {
37
+ const { source, field } = resolveAgentSkillPreferenceSource(input.preferences);
38
+ const config = resolveAgentSkillConfig(input.agentConfig);
39
+ const agentSkillModes = {};
40
+ for (const slug of Object.keys(config).sort()) {
41
+ agentSkillModes[slug] = config[slug];
42
+ }
43
+ const discardedSkills = collectAgentSkillConfigIssues(input.agentConfig).map(
44
+ (issue) => ({
45
+ slug: issue.slug,
46
+ value: describeAgentSkillModeValue(issue.value),
47
+ reason: issue.reason
48
+ })
49
+ );
50
+ return {
51
+ event: "agent_skill_preference_resolved",
52
+ preferenceSource: source,
53
+ preferenceField: field,
54
+ enabledSkills: [...input.enabledSkills],
55
+ enabledSkillCount: input.enabledSkills.length,
56
+ agentSkillModes,
57
+ agentSkillCount: Object.keys(agentSkillModes).length,
58
+ discardedSkills,
59
+ discardedSkillCount: discardedSkills.length
60
+ };
61
+ };
62
+ var DIAGNOSTIC_PREFIX = "[nolo.skill.diagnostics] ";
63
+ var seenSignatures = /* @__PURE__ */ new Set();
64
+ var reportAgentSkillPreferenceDiagnostic = (diagnostic, sink) => {
65
+ const signature = JSON.stringify(diagnostic);
66
+ if (seenSignatures.has(signature)) return false;
67
+ seenSignatures.add(signature);
68
+ const write = sink ?? ((line) => {
69
+ process.stderr.write(line);
70
+ });
71
+ write(`${DIAGNOSTIC_PREFIX}${signature}
72
+ `);
73
+ return true;
74
+ };
16
75
 
17
76
  // packages/ai/skills/userSkillRuntime.ts
18
77
  async function resolveUserSkillRuntime(agentConfig, preferences) {
19
78
  const effectiveConfig = agentConfig && typeof agentConfig === "object" ? "rawRecord" in agentConfig && agentConfig.rawRecord && typeof agentConfig.rawRecord === "object" ? agentConfig.rawRecord : agentConfig : null;
20
79
  const disabledSlugs = /* @__PURE__ */ new Set();
21
- for (const identifier of Object.keys(resolveAgentSkillConfig(effectiveConfig))) {
22
- if (!isAgentSkillDisabled(effectiveConfig, identifier)) continue;
80
+ const requiredSlugs = /* @__PURE__ */ new Set();
81
+ for (const [identifier, mode] of Object.entries(resolveAgentSkillConfig(effectiveConfig))) {
23
82
  const entry = resolveBuiltinSkillEntry(identifier);
24
- if (entry) disabledSlugs.add(entry.slug);
83
+ if (!entry) continue;
84
+ if (mode === "disabled") disabledSlugs.add(entry.slug);
85
+ if (mode === "required") requiredSlugs.add(entry.slug);
25
86
  }
87
+ const enabledSkills = resolveUserEnabledSkills(preferences);
88
+ reportAgentSkillPreferenceDiagnostic(
89
+ buildAgentSkillPreferenceDiagnostic({
90
+ agentConfig: effectiveConfig,
91
+ preferences,
92
+ enabledSkills
93
+ })
94
+ );
26
95
  const graph = await resolveSkillGraphFromRoots({
27
- roots: resolveUserEnabledSkills(preferences).map((identifier) => ({
96
+ roots: enabledSkills.map((identifier) => ({
28
97
  identifier,
29
- mode: "required"
98
+ mode: isAccountOnDemandWorkflowSkill(identifier) && !requiredSlugs.has(identifier) ? "recommended" : "required"
30
99
  })),
31
100
  loadPage: async (identifier) => {
32
101
  const entry = resolveBuiltinSkillEntry(identifier);
@@ -45,7 +114,7 @@ async function resolveUserSkillRuntime(agentConfig, preferences) {
45
114
  const skillPromptPatches = /* @__PURE__ */ new Set();
46
115
  const seen = /* @__PURE__ */ new Set();
47
116
  for (const visit of graph.visits) {
48
- if (seen.has(visit.dbKey)) continue;
117
+ if (visit.mode !== "required" || seen.has(visit.dbKey)) continue;
49
118
  seen.add(visit.dbKey);
50
119
  const page = contentByKey.get(visit.dbKey);
51
120
  const patch = (visit.meta?.skillConfig?.promptPatch || parseSkillDocProtocol(page?.content ?? "", visit.meta).content).trim();