nolo-cli 0.100.0-alpha.1 → 0.100.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.
- package/README.md +1 -1
- package/{_executeModel-UM3TAOM3.js → _executeModel-WLFACVFR.js} +74 -67
- package/action-PNPQLJHG.js +20 -0
- package/{addContentAction-O7R66HEX.js → addContentAction-RBOUD7SJ.js} +12 -11
- package/{addDialogAgentAction-74OA7KYP.js → addDialogAgentAction-IODCR6TB.js} +18 -19
- package/{agentDeleteCommand-2YAHAZFJ.js → agentDeleteCommand-EFWZSSZA.js} +47 -42
- package/{agentEmailCommands-IYEMKJR3.js → agentEmailCommands-XQMUAB4R.js} +97 -87
- package/agentListCommands-EDV4RJ4D.js +742 -0
- package/{agentMachineCommands-E3IKDCBZ.js → agentMachineCommands-UOEI4TPN.js} +48 -43
- package/{agentProviderCommands-GNPTL5XR.js → agentProviderCommands-IRNZXVGE.js} +1 -1
- package/{agentPullCommand-O5MPVJ5E.js → agentPullCommand-B4T2DJ5H.js} +1 -1
- package/agentRecordCommands-BIV7NMQZ.js +138 -0
- package/agentRunCommand-SY7N2BDL.js +167 -0
- package/{agentRunControl-AVJR4JW4.js → agentRunControl-3HWA2LLQ.js} +2 -2
- package/{agentRuntimeLocal-VXZSDIGT.js → agentRuntimeLocal-SXYAKX3A.js} +48 -39
- package/{agentSlice-B7KLSPJV.js → agentSlice-WBSSBKBB.js} +14 -13
- package/{appDeleteCommands-32MHLR4L.js → appDeleteCommands-GTTBG53T.js} +46 -41
- package/{appDeployCommands-WCQOUSOB.js → appDeployCommands-ZZCHUJAT.js} +46 -41
- package/{appDeployStatusCommands-6QKB7DYN.js → appDeployStatusCommands-GZLLGY7Z.js} +46 -41
- package/{appGetCommands-SFAPP5PB.js → appGetCommands-ZRLWHJ3C.js} +46 -41
- package/{appListCommands-EKUBDRUO.js → appListCommands-OHARWLIL.js} +46 -41
- package/{authCommand-F4EFRRX6.js → authCommand-NHDLY3IB.js} +118 -24
- package/{authCommands-RGOGCPP6.js → authCommands-UDBJVSZU.js} +7 -5
- package/{builtinSkillRegistry-FUAVTRVZ.js → builtinSkillRegistry-MAR5LPAC.js} +10 -8
- package/{chromeCommands-FZYAU75D.js → chromeCommands-K27J4OVZ.js} +124 -28
- package/{chromeOpsCommands-62P2Q2YB.js → chromeOpsCommands-IXRLN57H.js} +4 -3
- package/{chunk-6OZ36FXI.js → chunk-27ONFIEY.js} +22 -4
- package/{chunk-JEDZAO7L.js → chunk-2SYTUTLI.js} +257 -37
- package/{chunk-53HEEOTT.js → chunk-2WJ57RJA.js} +83 -16
- package/{chunk-OIVSQH2O.js → chunk-3BXNTXYI.js} +299 -5
- package/{chunk-ABQYVJBJ.js → chunk-46Y5D2BZ.js} +5 -5
- package/{chunk-EYAQT56M.js → chunk-4DPP773Q.js} +2 -2
- package/{chunk-H62HCIUP.js → chunk-4FFUDT6D.js} +24 -21
- package/chunk-4LCOCOR5.js +50 -0
- package/{chunk-2GRGFCF6.js → chunk-4VJAC32I.js} +2 -1
- package/{chunk-IIVGDG4I.js → chunk-4YSOUKUR.js} +13 -7
- package/{chunk-MC4XLIJ7.js → chunk-523DITKR.js} +1 -1
- package/{chunk-E4MARS3Q.js → chunk-5GVBDNTO.js} +1 -1
- package/chunk-5J3PYNUP.js +255 -0
- package/{chunk-UIZCMBT3.js → chunk-5LTAPGPV.js} +10 -10
- package/chunk-5MMAK75Q.js +15 -0
- package/{chunk-JPGCXHNM.js → chunk-5OA5HMTL.js} +1 -1
- package/{chunk-42V6BK2E.js → chunk-62IL3KQV.js} +4 -34
- package/{chunk-3BMYXEUW.js → chunk-6O4IK4V2.js} +1 -1
- package/{chunk-GQBOR3G6.js → chunk-7KVZ5LDQ.js} +2 -2
- package/{chunk-DNCEALKX.js → chunk-7MMSLEPA.js} +22 -29
- package/{chunk-L5UXH3B2.js → chunk-7TKWCTSY.js} +22 -6
- package/chunk-A4SQRTZ6.js +15 -0
- package/{chunk-7S4YWN7P.js → chunk-ADBZWMFB.js} +4 -4
- package/chunk-AGIM7IMJ.js +147 -0
- package/{chunk-5UTFL4QJ.js → chunk-AOTBKDRK.js} +7 -0
- package/{chunk-Q554LLSI.js → chunk-AUDNYVRC.js} +1 -1
- package/chunk-BMQ2MJUK.js +153 -0
- package/{chunk-6YTOJY35.js → chunk-BZ7NPA6G.js} +35 -2
- package/{chunk-KFFZBS5O.js → chunk-CHNCM7EF.js} +11 -9
- package/chunk-CHOZJMJS.js +78 -0
- package/chunk-CJN5OERD.js +13545 -0
- package/{chunk-ACTMNVHM.js → chunk-CYSYR67N.js} +1 -1
- package/{chunk-GBRG75BQ.js → chunk-D2MDMY2M.js} +1 -0
- package/{chunk-MYUU2OIZ.js → chunk-DNHENQ3T.js} +23 -28
- package/chunk-DZ7R5V3Y.js +164 -0
- package/{chunk-3VNWWVKB.js → chunk-E3YWHWCR.js} +50 -18
- package/{chunk-V4MJDUSR.js → chunk-E73ON47R.js} +2 -2
- package/{chunk-KQ4ONNQD.js → chunk-EKPKW6RM.js} +155 -8
- package/{chunk-TRV2MIDW.js → chunk-EXAJ6DCR.js} +1 -0
- package/{chunk-FUANZCER.js → chunk-F3NUFVSP.js} +24 -5
- package/{chunk-HJUYAD4A.js → chunk-FJ5BGMNM.js} +5 -5
- package/{chunk-2F7RJC6L.js → chunk-FOXQ7BAB.js} +1 -1
- package/{chunk-6IG4XSS6.js → chunk-FY7DCYW7.js} +88 -17
- package/{chunk-6VFARHZW.js → chunk-G53AA7RW.js} +934 -1091
- package/{chunk-J4MOO56S.js → chunk-GARACBQB.js} +10 -2
- package/chunk-GMZLP5DV.js +82 -0
- package/{chunk-NA2YVRDF.js → chunk-GUYEMTRK.js} +551 -516
- package/{chunk-FDTR4QJ6.js → chunk-H6A6X4EK.js} +32 -1
- package/{chunk-DVINR3PL.js → chunk-HDLLCBRF.js} +1 -1
- package/{chunk-QOKAKDPE.js → chunk-HIM3FCLF.js} +0 -1
- package/{chunk-ONXOABJR.js → chunk-HNGRBWYF.js} +3 -0
- package/{chunk-VLTIYV3X.js → chunk-HP57OUJO.js} +4 -4
- package/{chunk-GPCZ7UXG.js → chunk-K6U4NKFJ.js} +1 -1
- package/{chunk-A2G4JCCZ.js → chunk-KLUBZL6X.js} +1 -1
- package/{chunk-4OEFYTWL.js → chunk-LKERWYPX.js} +67 -48
- package/{chunk-OEVAY4J6.js → chunk-LNVJHIGA.js} +18 -20
- package/{chunk-LS2ZANRJ.js → chunk-LOCNXNOU.js} +1 -1
- package/{chunk-PUOC4YRO.js → chunk-M7VLQGQP.js} +11 -0
- package/{chunk-BFU6C242.js → chunk-NMFV26UG.js} +1 -1
- package/{chunk-FZGV4FGK.js → chunk-NUHHBEJC.js} +378 -187
- package/chunk-NWENLDMM.js +42 -0
- package/{chunk-AEOE4Z6Q.js → chunk-NZWAO6LH.js} +13 -15
- package/chunk-OCZKATRC.js +129 -0
- package/{chunk-Q7UVOSGX.js → chunk-ODTDLPBV.js} +20 -11
- package/chunk-OW4APERY.js +870 -0
- package/{chunk-KQHGZWSV.js → chunk-OXME3PEE.js} +1 -1
- package/{chunk-EKXNDUWE.js → chunk-OYPMWCIQ.js} +67 -45
- package/{chunk-TOP2VXOR.js → chunk-PCF3QU5Q.js} +5 -5
- package/chunk-PH275YDS.js +7881 -0
- package/{chunk-WV42OMV7.js → chunk-PTDYOADJ.js} +8 -8
- package/{chunk-5H7KJX7J.js → chunk-SEB5HAUU.js} +5 -5
- package/{chunk-6D6VBVEW.js → chunk-SNMQMOD2.js} +80 -14
- package/{chunk-BYMV6QZG.js → chunk-TNIX77YM.js} +4 -0
- package/{chunk-Z77CRGTW.js → chunk-TVCAR26G.js} +1 -1
- package/chunk-TY3TIUJK.js +89 -0
- package/{chunk-I3TQJXQ7.js → chunk-U3C3IA32.js} +9 -2
- package/{chunk-JGLUFHZG.js → chunk-U6IGAJT4.js} +47 -67
- package/{chunk-RG6JBBX5.js → chunk-U7XXEI5R.js} +166 -13
- package/{chunk-UZGQNTVW.js → chunk-UA324D4O.js} +8 -6
- package/chunk-UJXNKP5V.js +760 -0
- package/{chunk-UKZDAFYT.js → chunk-UM4PH574.js} +6 -10
- package/{chunk-GEPUP7OO.js → chunk-UVKDJUTL.js} +3 -3
- package/{chunk-ZCYXJSTU.js → chunk-V5OWQOJZ.js} +19 -88
- package/{chunk-NA35QHCF.js → chunk-V7Y6KRAH.js} +1 -1
- package/{chunk-3DII57IT.js → chunk-VCAQFMVN.js} +1 -1
- package/{chunk-JRQFUXY7.js → chunk-VEYL5MO5.js} +99 -22
- package/chunk-VIWDGTDA.js +8 -0
- package/chunk-VJVNU77E.js +83 -0
- package/{chunk-UKWGR5SS.js → chunk-VY6VFGKR.js} +194 -1144
- package/{chunk-BP4XNZRM.js → chunk-W72ISAKC.js} +4 -4
- package/{chunk-DHDMC6FO.js → chunk-WCGC6S77.js} +14 -9
- package/{chunk-QDSINZM3.js → chunk-WJ3B6FX6.js} +1 -14
- package/{chunk-GTXHENTD.js → chunk-X34KOYU2.js} +873 -227
- package/{chunk-HVURBGF3.js → chunk-XFUBXRVI.js} +6 -6
- package/{chunk-3QWE3CFY.js → chunk-XIRXOUBV.js} +19 -17
- package/{chunk-O6OSWFZQ.js → chunk-XUWRURDF.js} +6 -0
- package/{chunk-Q67DOFOO.js → chunk-Y3PMXGLH.js} +2 -0
- package/{chunk-ETI2NYVF.js → chunk-YPOPJAKN.js} +4 -4
- package/{chunk-SH43IESU.js → chunk-YUNJN43V.js} +44 -9
- package/chunk-YV25TM3R.js +780 -0
- package/{chunk-X4N6F4VS.js → chunk-Z56IK6UT.js} +29 -78
- package/chunk-ZRAU6T47.js +56 -0
- package/commandRegistry-NKJIYWXB.js +833 -0
- package/{contentThunks-TFZIJAUK.js → contentThunks-F2BNWOZV.js} +36 -34
- package/{cooldownCommands-REAWYVTY.js → cooldownCommands-ZLEPIB4A.js} +2 -2
- package/{createAgentAutomationAction-FF3MPCIU.js → createAgentAutomationAction-5N2NRNR7.js} +38 -36
- package/createDialogAction-DSEG4L5Y.js +69 -0
- package/{createPageAction-33ZEWWTG.js → createPageAction-K32FYQPE.js} +45 -42
- package/{chunk-LCX62BV6.js → cursorProvider-YGGNMVWX.js} +2496 -9897
- package/{dbSlice-XVWBAGYN.js → dbSlice-Q25STFGJ.js} +11 -10
- package/{deleteFile-YG6QMJLU.js → deleteFile-AJ2EZMHT.js} +7 -6
- package/{dialogCommands-5J56DFWN.js → dialogCommands-LF7PLYAD.js} +49 -45
- package/{dialogSlice-QDMNWIA5.js → dialogSlice-4GBOUTGL.js} +40 -33
- package/{dist-VODFSGNG.js → dist-NJC2W7I4.js} +61 -54
- package/{docCreateCommands-KYI2DC2U.js → docCreateCommands-NQR3S7A4.js} +48 -43
- package/{docDeleteCommands-67REUSRY.js → docDeleteCommands-V3IAQ2HT.js} +49 -44
- package/{docReadCommands-HOSVSBDJ.js → docReadCommands-GDX4CLSU.js} +47 -42
- package/{docStore-TEB62I7A.js → docStore-ZTYSP3YE.js} +16 -12
- package/{docUpdateCommands-EMGCSMXY.js → docUpdateCommands-QMYXWQOU.js} +48 -43
- package/{fetchMessages-EIU7UFFK.js → fetchMessages-I5ICDDHM.js} +5 -5
- package/{getPricing-LUSEABA6.js → getPricing-NMMFT3YI.js} +4 -4
- package/{handleSendMessageAction-ABLLW47K.js → handleSendMessageAction-XFZH2TQS.js} +110 -86
- package/index.js +87 -884
- package/{lib-FRRS27KN.js → lib-PU2G2MSO.js} +523 -191
- package/{localDialogRead-BTFJ4V2I.js → localDialogRead-ZHZ3KXDM.js} +2 -2
- package/{localRuntimeAuthority-6IR6BBXE.js → localRuntimeAuthority-TU6OBC76.js} +9 -6
- package/{localRuntimeDb-SYQGUF4U.js → localRuntimeDb-VKWVOPPI.js} +1 -1
- package/{machineCommands-IX7TOATI.js → machineCommands-KMU3D5I5.js} +91 -81
- package/machineWsRunDispatch-6GJ5YOSW.js +154 -0
- package/{memberThunks-QGFLFVCI.js → memberThunks-R75S3RWP.js} +20 -18
- package/{models-T3SG6MJ5.js → models-ZPU5EDF4.js} +2 -2
- package/oauthTokenStore-ITEB663N.js +23 -0
- package/package.json +1 -1
- package/pdf-U6KSUEZZ.js +26435 -0
- package/processSpawn-SOAV3FEV.js +11 -0
- package/profileConfig-ZGOFORWV.js +43 -0
- package/{providerPresetApply-FG6NZ57W.js → providerPresetApply-TEBH7FDX.js} +7 -7
- package/{providerRegistry-757OWH3O.js → providerRegistry-CBJLNCET.js} +11 -7
- package/{read-COE3ZYR6.js → read-SRQMNO26.js} +7 -6
- package/{readDocTool-5USN4A6V.js → readDocTool-RC3JUNJ2.js} +5 -3
- package/{readlineWorkspace-KZNVDXAK.js → readlineWorkspace-ZMNRQXMC.js} +2704 -2060
- package/{removeDialogAgentAction-IX3MN2ZO.js → removeDialogAgentAction-46XQV5Q7.js} +21 -25
- package/{runAgentClientLoop-7WPY36JC.js → runAgentClientLoop-URRDZ5WG.js} +75 -69
- package/{runtimeDoctorCommands-X6WDBEQX.js → runtimeDoctorCommands-PIVSBZRZ.js} +4 -4
- package/runtimeModeArgs-2Y7BALTO.js +31 -0
- package/{setDialogExtraReferencesAction-X4HCPNZL.js → setDialogExtraReferencesAction-J4V5ADQF.js} +15 -13
- package/{setPrimaryDialogAgentAction-4GMIQLOD.js → setPrimaryDialogAgentAction-UHHV2QZW.js} +22 -26
- package/{chunk-AFUORTY4.js → settingThunks-PPZZZOWN.js} +226 -940
- package/{skillDiscovery-CYUCJMAG.js → skillDiscovery-ZBU76COE.js} +3 -3
- package/{slateUtils-RIZES3PV.js → slateUtils-NGV2NMKM.js} +1 -1
- package/{spaceCommands-NKJVJCQQ.js → spaceCommands-2P2X37MC.js} +51 -46
- package/{streamAgentChatTurn-PCKWJVSK.js → streamAgentChatTurn-YPUYKXDX.js} +206 -105
- package/{switchDialogAgentAction-N52LRPA3.js → switchDialogAgentAction-A2TMVGAE.js} +18 -19
- package/{tableCommands-O6NWHFKV.js → tableCommands-6U4BMLRR.js} +10 -10
- package/{toolApiClient-QVJ6HDNN.js → toolApiClient-EJT6TMFG.js} +3 -3
- package/tools-M5ENXZRJ.js +116 -0
- package/{tuiSummaryLlmCaller-WFRWERGK.js → tuiSummaryLlmCaller-Q65IBDGO.js} +24 -21
- package/{updateCommands-2M74UL7P.js → updateCommands-4EHDLF5J.js} +3 -3
- package/{updateDialogTitleAction-6QWA2RRC.js → updateDialogTitleAction-7PNUE23W.js} +82 -44
- package/action-YVYQEAAV.js +0 -31
- package/agentListCommands-KMS675GZ.js +0 -406
- package/agentRecordCommands-OSWVOMZE.js +0 -128
- package/agentRunCommand-CE5WBXBP.js +0 -155
- package/browser-image-compression-MFDTD7K6.js +0 -1763
- package/chatQueueReduxAdapter-7ZM7QWC6.js +0 -186
- package/chunk-BZPERCRA.js +0 -19009
- package/chunk-M76ECQRD.js +0 -13658
- package/chunk-MEYIRKDN.js +0 -8967
- package/chunk-Q5FJJ6XI.js +0 -103
- package/chunk-S7Z2HMCN.js +0 -25
- package/chunk-Y5GCAMGP.js +0 -9
- package/chunk-YPREESF4.js +0 -225
- package/createDialogAction-I2TXOWUI.js +0 -65
- package/machineWsRunDispatch-OOZS2DG5.js +0 -144
- package/settingSlice-ZQZVUPKK.js +0 -204
- package/syncMapping-N6RGXGBW.js +0 -437
- package/tools-JU7UHNZ4.js +0 -110
- package/{chunk-VMFTFOWF.js → chunk-3AH7LNUB.js} +7 -7
- package/{chunk-X7HHHIOZ.js → chunk-Y6ROFCZO.js} +0 -0
- package/{db-WK5MDZVN.js → db-VQSAOWAO.js} +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ANTIGRAVITY_CLOUD_CODE_BASE_URL
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-UA324D4O.js";
|
|
4
4
|
import {
|
|
5
5
|
kimiCodeModels,
|
|
6
6
|
moonshotModels,
|
|
@@ -9,13 +9,16 @@ import {
|
|
|
9
9
|
qwenTokenPlanModels,
|
|
10
10
|
stepfunModels,
|
|
11
11
|
stepfunStepPlanModels
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-3BXNTXYI.js";
|
|
13
13
|
import {
|
|
14
14
|
PLATFORM_HOSTED_DEEPSEEK_FLASH_OFF_PEAK_PRICE,
|
|
15
15
|
PLATFORM_HOSTED_DEEPSEEK_FLASH_PEAK_PRICE,
|
|
16
16
|
PLATFORM_HOSTED_DEEPSEEK_PRO_OFF_PEAK_PRICE,
|
|
17
17
|
PLATFORM_HOSTED_DEEPSEEK_PRO_PEAK_PRICE
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-Y3PMXGLH.js";
|
|
19
|
+
import {
|
|
20
|
+
asTrimmedLowercaseString
|
|
21
|
+
} from "./chunk-QSJ3HFEF.js";
|
|
19
22
|
|
|
20
23
|
// packages/integrations/commandcode/models.ts
|
|
21
24
|
var commandCodeModels = [
|
|
@@ -203,6 +206,60 @@ var deepseekModels = [
|
|
|
203
206
|
}
|
|
204
207
|
];
|
|
205
208
|
|
|
209
|
+
// packages/integrations/mistral/models.ts
|
|
210
|
+
var mistralModels = [
|
|
211
|
+
// ── Vibe 编码档(订阅主打,Vibe CLI 默认用最新档)──
|
|
212
|
+
{
|
|
213
|
+
name: "mistral-vibe-cli-latest",
|
|
214
|
+
displayName: "Mistral Vibe CLI",
|
|
215
|
+
hasVision: true,
|
|
216
|
+
contextWindow: 262144,
|
|
217
|
+
jsonOutput: true,
|
|
218
|
+
fnCall: true,
|
|
219
|
+
supportsTool: true,
|
|
220
|
+
price: { input: 0, output: 0 },
|
|
221
|
+
provider: "mistral",
|
|
222
|
+
description: "Mistral Vibe \u9ED8\u8BA4\u7F16\u7801\u6A21\u578B\uFF08\u8BA2\u9605\u6C60\u5185\uFF09\uFF0C\u9762\u5411 agentic coding\u3002"
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
name: "mistral-vibe-cli-fast",
|
|
226
|
+
displayName: "Mistral Vibe CLI Fast",
|
|
227
|
+
hasVision: true,
|
|
228
|
+
contextWindow: 262144,
|
|
229
|
+
jsonOutput: true,
|
|
230
|
+
fnCall: true,
|
|
231
|
+
supportsTool: true,
|
|
232
|
+
price: { input: 0, output: 0 },
|
|
233
|
+
provider: "mistral",
|
|
234
|
+
description: "Vibe \u7F16\u7801\u6863\u7684\u5FEB\u6863\uFF08\u8BA2\u9605\u6C60\u5185\uFF09\uFF0C\u4E0E latest \u540C\u4E3A 262k \u4E0A\u4E0B\u6587\u7684\u7F16\u7801\u6863\u3002"
|
|
235
|
+
},
|
|
236
|
+
// ── 通用档 ──
|
|
237
|
+
{
|
|
238
|
+
name: "mistral-medium-3.5",
|
|
239
|
+
displayName: "Mistral Medium 3.5",
|
|
240
|
+
hasVision: true,
|
|
241
|
+
contextWindow: 262144,
|
|
242
|
+
jsonOutput: true,
|
|
243
|
+
fnCall: true,
|
|
244
|
+
supportsTool: true,
|
|
245
|
+
price: { input: 0, output: 0 },
|
|
246
|
+
provider: "mistral",
|
|
247
|
+
description: "Mistral \u4E2D\u6863\u901A\u7528\u6A21\u578B\uFF08\u8BA2\u9605\u6C60\u5185\uFF09\uFF0C\u591A\u6A21\u6001\uFF0C\u9002\u5408\u65E5\u5E38\u95EE\u7B54\u4E0E\u8F7B\u91CF\u7F16\u7801\u3002"
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
name: "mistral-large-latest",
|
|
251
|
+
displayName: "Mistral Large (latest)",
|
|
252
|
+
hasVision: true,
|
|
253
|
+
contextWindow: 262144,
|
|
254
|
+
jsonOutput: true,
|
|
255
|
+
fnCall: true,
|
|
256
|
+
supportsTool: true,
|
|
257
|
+
price: { input: 0, output: 0 },
|
|
258
|
+
provider: "mistral",
|
|
259
|
+
description: "Mistral \u65D7\u8230\u6863\uFF08\u8BA2\u9605\u6C60\u5185\uFF09\uFF0C\u8BA2\u9605\u989D\u5EA6\u6D88\u8017\u6700\u5FEB\uFF0C\u9002\u5408\u96BE\u9898\u515C\u5E95\u3002"
|
|
260
|
+
}
|
|
261
|
+
];
|
|
262
|
+
|
|
206
263
|
// packages/ai/agent/providerRegistry.ts
|
|
207
264
|
var QWEN_MODEL_OPTIONS = qwenModels.map((m, i) => ({
|
|
208
265
|
id: m.name,
|
|
@@ -267,6 +324,23 @@ var STEPFUN_STEP_PLAN_MODEL_OPTIONS = stepfunStepPlanModels.map((m, i) => ({
|
|
|
267
324
|
hasVision: m.hasVision,
|
|
268
325
|
...i === 0 ? { recommended: true } : {}
|
|
269
326
|
}));
|
|
327
|
+
var MISTRAL_MODEL_OPTIONS = mistralModels.map((m, i) => ({
|
|
328
|
+
id: m.name,
|
|
329
|
+
label: m.displayName ?? m.name,
|
|
330
|
+
hasVision: m.hasVision,
|
|
331
|
+
...i === 0 ? { recommended: true } : {}
|
|
332
|
+
}));
|
|
333
|
+
var TOGETHER_MODEL_OPTIONS = [
|
|
334
|
+
{
|
|
335
|
+
id: "meta-llama/Llama-3.3-70B-Instruct-Turbo",
|
|
336
|
+
label: "Llama 3.3 70B Instruct Turbo",
|
|
337
|
+
recommended: true
|
|
338
|
+
},
|
|
339
|
+
{ id: "deepseek-ai/DeepSeek-V4-Pro-0813", label: "DeepSeek V4 Pro" },
|
|
340
|
+
{ id: "Qwen/Qwen3.6-Plus", label: "Qwen3.6 Plus" },
|
|
341
|
+
{ id: "zai-org/GLM-5.2", label: "GLM-5.2" },
|
|
342
|
+
{ id: "openai/gpt-oss-120b", label: "GPT-OSS 120B" }
|
|
343
|
+
];
|
|
270
344
|
var SUBSCRIPTION_OAUTH_PROVIDERS = [
|
|
271
345
|
{
|
|
272
346
|
kind: "oauth",
|
|
@@ -279,6 +353,9 @@ var SUBSCRIPTION_OAUTH_PROVIDERS = [
|
|
|
279
353
|
defaultReasoningEffort: "medium",
|
|
280
354
|
modelOptions: [
|
|
281
355
|
{ id: "gpt-6-astra", label: "GPT-6 Astra", hasVision: true, recommended: true },
|
|
356
|
+
// GPT-6.1 Sol 已列入 Codex 订阅通道选型指南,但按账号灰度("when available
|
|
357
|
+
// to your account and client"),未开通的账号选它会 400,不影响其他选项。
|
|
358
|
+
{ id: "gpt-6.1-sol", label: "GPT-6.1 Sol", hasVision: true },
|
|
282
359
|
{ id: "gpt-5.6-sol", label: "GPT-5.6 Sol", hasVision: true },
|
|
283
360
|
{ id: "gpt-5.6-terra", label: "GPT-5.6 Terra", hasVision: true },
|
|
284
361
|
{ id: "gpt-5.6-luna", label: "GPT-5.6 Luna", hasVision: true }
|
|
@@ -324,11 +401,13 @@ var SUBSCRIPTION_OAUTH_PROVIDERS = [
|
|
|
324
401
|
description: "Anthropic Subscription",
|
|
325
402
|
apiKeyRef: "claude",
|
|
326
403
|
provider: "anthropic",
|
|
327
|
-
defaultModel: "claude-sonnet-5",
|
|
404
|
+
defaultModel: "claude-sonnet-5-5",
|
|
328
405
|
defaultReasoningEffort: "high",
|
|
329
406
|
modelOptions: [
|
|
407
|
+
{ id: "claude-opus-5-5", label: "Claude Opus 5.5", hasVision: true, recommended: true },
|
|
408
|
+
{ id: "claude-sonnet-5-5", label: "Claude Sonnet 5.5", hasVision: true },
|
|
330
409
|
{ id: "claude-sonnet-5", label: "Claude Sonnet 5", hasVision: true },
|
|
331
|
-
{ id: "claude-opus-5", label: "Claude Opus 5", hasVision: true
|
|
410
|
+
{ id: "claude-opus-5", label: "Claude Opus 5", hasVision: true },
|
|
332
411
|
{ id: "claude-opus-4-8", label: "Claude Opus 4.8", hasVision: true },
|
|
333
412
|
{ id: "claude-fable-5", label: "Claude Fable 5", hasVision: true }
|
|
334
413
|
]
|
|
@@ -533,13 +612,31 @@ var CUSTOM_API_KEY_TEMPLATES = [
|
|
|
533
612
|
commercialKind: "subscription",
|
|
534
613
|
accessVariant: "token_plan_endpoint"
|
|
535
614
|
},
|
|
615
|
+
{
|
|
616
|
+
kind: "api_key_template",
|
|
617
|
+
id: "mistral-plan",
|
|
618
|
+
label: "Mistral \u8BA2\u9605 (Vibe/Pro)",
|
|
619
|
+
description: "Mistral \u5B98\u65B9\u8BA2\u9605\uFF08Free $10 / Pro $30 \u6708\u5EA6 API credits\uFF0C\u8DE8 Studio/API/Vibe \u5171\u4EAB\uFF1BKey \u4ECE chat.mistral.ai \u203A Code \u203A Extensions \u751F\u6210\uFF09",
|
|
620
|
+
provider: "mistral",
|
|
621
|
+
baseUrl: "https://api.mistral.ai/v1",
|
|
622
|
+
defaultModel: "mistral-vibe-cli-latest",
|
|
623
|
+
modelOptions: MISTRAL_MODEL_OPTIONS,
|
|
624
|
+
keyFormatHint: "\u5728 chat.mistral.ai \u203A Code \u203A Extensions \u203A Vibe API Key \u751F\u6210\uFF0845 \u4F4D\uFF0C\u5F62\u5982 xxxxx\u2026nb3A\uFF09\uFF1B\u4E5F\u53EF\u7528 Studio \u7684 API Key\u3002\u4E24\u8005\u90FD\u76F4\u63A5\u6709\u6548\u4E8E api.mistral.ai/v1\u3002",
|
|
625
|
+
commercialKind: "subscription",
|
|
626
|
+
accessVariant: "token_plan_endpoint"
|
|
627
|
+
},
|
|
536
628
|
{
|
|
537
629
|
kind: "api_key_template",
|
|
538
630
|
id: "openai-api",
|
|
539
631
|
label: "OpenAI API",
|
|
540
632
|
provider: "openai",
|
|
541
633
|
baseUrl: "https://api.openai.com/v1",
|
|
542
|
-
defaultModel: "gpt-6-
|
|
634
|
+
defaultModel: "gpt-6.1-sol",
|
|
635
|
+
modelOptions: [
|
|
636
|
+
{ id: "gpt-6.1-sol", label: "GPT-6.1 Sol", hasVision: true, recommended: true },
|
|
637
|
+
{ id: "gpt-6-astra", label: "GPT-6 Astra", hasVision: true },
|
|
638
|
+
{ id: "gpt-6-luna", label: "GPT-6 Luna", hasVision: true }
|
|
639
|
+
],
|
|
543
640
|
commercialKind: "api",
|
|
544
641
|
accessVariant: "metered_key"
|
|
545
642
|
},
|
|
@@ -549,7 +646,7 @@ var CUSTOM_API_KEY_TEMPLATES = [
|
|
|
549
646
|
label: "Anthropic API",
|
|
550
647
|
provider: "anthropic",
|
|
551
648
|
baseUrl: "https://api.anthropic.com",
|
|
552
|
-
defaultModel: "claude-sonnet-5",
|
|
649
|
+
defaultModel: "claude-sonnet-5-5",
|
|
553
650
|
apiKeyHeader: "x-api-key",
|
|
554
651
|
commercialKind: "api",
|
|
555
652
|
accessVariant: "metered_key"
|
|
@@ -575,6 +672,19 @@ var CUSTOM_API_KEY_TEMPLATES = [
|
|
|
575
672
|
commercialKind: "api",
|
|
576
673
|
accessVariant: "metered_key"
|
|
577
674
|
},
|
|
675
|
+
// anthropic/claude-sonnet-5、qwen/qwen3.8-27b),不维护易腐的静态清单。
|
|
676
|
+
{
|
|
677
|
+
kind: "api_key_template",
|
|
678
|
+
id: "openrouter-api",
|
|
679
|
+
label: "OpenRouter API \u7528\u91CF\u8BA1\u8D39",
|
|
680
|
+
description: "OpenRouter \u805A\u5408\u7F51\u5173\uFF08OpenAI \u517C\u5BB9\uFF0C\u4E00\u4E2A Key \u8BBF\u95EE\u591A\u5BB6\u6A21\u578B\uFF0C\u6309\u91CF\u8BA1\u8D39\uFF09",
|
|
681
|
+
provider: "openrouter",
|
|
682
|
+
baseUrl: "https://openrouter.ai/api/v1",
|
|
683
|
+
defaultModel: "anthropic/claude-sonnet-5",
|
|
684
|
+
keyFormatHint: "\u5728 openrouter.ai/keys \u521B\u5EFA\uFF0C\u5F62\u5982 sk-or-\u2026",
|
|
685
|
+
commercialKind: "api",
|
|
686
|
+
accessVariant: "metered_key"
|
|
687
|
+
},
|
|
578
688
|
// DeepSeek 模型统一改走 nolo provider(Ollama Cloud,thinking=max 快 28-49%)。
|
|
579
689
|
// 现按用户选择回归:自带 Key 的 metered 通道与平台托管通道并存,互不影响。
|
|
580
690
|
{
|
|
@@ -649,6 +759,21 @@ var CUSTOM_API_KEY_TEMPLATES = [
|
|
|
649
759
|
defaultModel: "MiniMax-Text-01",
|
|
650
760
|
commercialKind: "api",
|
|
651
761
|
accessVariant: "metered_key"
|
|
762
|
+
},
|
|
763
|
+
// Together AI 平台:用户自带 Key 的 metered 通道(复用 OpenAI-compatible 通道,
|
|
764
|
+
// apiSource:"custom",不扣平台积分)。模型 ID 为 namespaced 全 ID,直传不 remap;
|
|
765
|
+
// OpenAI 兼容 base_url = https://api.together.ai/v1(官方兼容文档在案)。
|
|
766
|
+
{
|
|
767
|
+
kind: "api_key_template",
|
|
768
|
+
id: "together-api",
|
|
769
|
+
label: "Together AI API \u7528\u91CF\u8BA1\u8D39",
|
|
770
|
+
description: "Together AI\uFF08OpenAI \u517C\u5BB9\uFF0C\u6309\u91CF\u8BA1\u8D39\uFF09",
|
|
771
|
+
provider: "together",
|
|
772
|
+
baseUrl: "https://api.together.ai/v1",
|
|
773
|
+
defaultModel: "meta-llama/Llama-3.3-70B-Instruct-Turbo",
|
|
774
|
+
modelOptions: TOGETHER_MODEL_OPTIONS,
|
|
775
|
+
commercialKind: "api",
|
|
776
|
+
accessVariant: "metered_key"
|
|
652
777
|
}
|
|
653
778
|
];
|
|
654
779
|
var ALL_PROVIDER_REGISTRY = [
|
|
@@ -666,6 +791,26 @@ function isCustomApiKeyTemplate(id) {
|
|
|
666
791
|
if (!id) return false;
|
|
667
792
|
return CUSTOM_API_KEY_TEMPLATES.some((p) => p.id === id);
|
|
668
793
|
}
|
|
794
|
+
function normalizeEndpointUrl(url) {
|
|
795
|
+
return asTrimmedLowercaseString(url).replace(/\/+$/, "");
|
|
796
|
+
}
|
|
797
|
+
var SUBSCRIPTION_ENDPOINT_URLS = new Set(
|
|
798
|
+
CUSTOM_API_KEY_TEMPLATES.filter((t) => t.commercialKind === "subscription").map(
|
|
799
|
+
(t) => normalizeEndpointUrl(t.baseUrl)
|
|
800
|
+
)
|
|
801
|
+
);
|
|
802
|
+
var SUBSCRIPTION_OAUTH_APIKEY_REFS = new Set(
|
|
803
|
+
SUBSCRIPTION_OAUTH_PROVIDERS.map((p) => asTrimmedLowercaseString(p.apiKeyRef))
|
|
804
|
+
);
|
|
805
|
+
function isSubscriptionEndpoint(customProviderUrl) {
|
|
806
|
+
if (typeof customProviderUrl !== "string") return false;
|
|
807
|
+
const normalized = normalizeEndpointUrl(customProviderUrl);
|
|
808
|
+
return normalized.length > 0 && SUBSCRIPTION_ENDPOINT_URLS.has(normalized);
|
|
809
|
+
}
|
|
810
|
+
function isSubscriptionOAuthCredential(apiKeyRef) {
|
|
811
|
+
const ref = asTrimmedLowercaseString(apiKeyRef ?? "");
|
|
812
|
+
return ref.length > 0 && SUBSCRIPTION_OAUTH_APIKEY_REFS.has(ref);
|
|
813
|
+
}
|
|
669
814
|
|
|
670
815
|
export {
|
|
671
816
|
SUBSCRIPTION_OAUTH_PROVIDERS,
|
|
@@ -673,5 +818,7 @@ export {
|
|
|
673
818
|
ALL_PROVIDER_REGISTRY,
|
|
674
819
|
findProviderById,
|
|
675
820
|
isSubscriptionOAuthProvider,
|
|
676
|
-
isCustomApiKeyTemplate
|
|
821
|
+
isCustomApiKeyTemplate,
|
|
822
|
+
isSubscriptionEndpoint,
|
|
823
|
+
isSubscriptionOAuthCredential
|
|
677
824
|
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
clearCliLocalRuntimePreparedAgentCache
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-PH275YDS.js";
|
|
4
4
|
import {
|
|
5
5
|
getReadableCliDb
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-LOCNXNOU.js";
|
|
7
7
|
import {
|
|
8
8
|
buildCreatedAgentRecord,
|
|
9
9
|
buildUpdatedAgentRecord,
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
resolveAgentRecordFromHybridStore,
|
|
13
13
|
sanitizeAgentRecordForCliOutput,
|
|
14
14
|
writeAgentRecord
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-NZWAO6LH.js";
|
|
16
16
|
import {
|
|
17
17
|
resolveCliAgentKeyInput
|
|
18
18
|
} from "./chunk-SV5IJK6K.js";
|
|
@@ -212,7 +212,7 @@ async function runAgentCreateCommand(args, deps = {}) {
|
|
|
212
212
|
clearCliLocalRuntimePreparedAgentCache();
|
|
213
213
|
let verifyResult;
|
|
214
214
|
if (parsed.verify) {
|
|
215
|
-
const { verifyCustomProvider } = await import("./agentProviderCommands-
|
|
215
|
+
const { verifyCustomProvider } = await import("./agentProviderCommands-IRNZXVGE.js");
|
|
216
216
|
const rec = built.nextRecord;
|
|
217
217
|
verifyResult = await verifyCustomProvider({
|
|
218
218
|
providerUrl: rec.customProviderUrl,
|
|
@@ -222,15 +222,34 @@ async function runAgentCreateCommand(args, deps = {}) {
|
|
|
222
222
|
fetchImpl
|
|
223
223
|
});
|
|
224
224
|
}
|
|
225
|
+
const apiKeyRef = String(built.updates?.apiKeyRef || "").trim();
|
|
226
|
+
let authHint;
|
|
227
|
+
const OAUTH_REFS = /* @__PURE__ */ new Set(["claude", "chatgpt", "xai", "antigravity", "cloudflare"]);
|
|
228
|
+
if (apiKeyRef && OAUTH_REFS.has(apiKeyRef)) {
|
|
229
|
+
try {
|
|
230
|
+
const { createOAuthTokenStore } = await import("./oauthTokenStore-ITEB663N.js");
|
|
231
|
+
const store = createOAuthTokenStore();
|
|
232
|
+
if (!store.read(apiKeyRef)) {
|
|
233
|
+
authHint = `Subscription "${apiKeyRef}" is not authorized yet. Run \`nolo auth ${apiKeyRef}\` to log in.`;
|
|
234
|
+
}
|
|
235
|
+
} catch {
|
|
236
|
+
}
|
|
237
|
+
}
|
|
225
238
|
output.write(JSON.stringify({
|
|
226
239
|
ok: true,
|
|
227
240
|
agentKey: built.agentKey,
|
|
228
241
|
baseUrl: built.serverUrl,
|
|
229
242
|
updates: sanitizeAgentRecordForCliOutput(built.updates),
|
|
230
243
|
record: sanitizeAgentRecordForCliOutput(built.nextRecord),
|
|
231
|
-
...verifyResult ? { verify: verifyResult } : {}
|
|
244
|
+
...verifyResult ? { verify: verifyResult } : {},
|
|
245
|
+
...authHint ? { hint: authHint } : {}
|
|
232
246
|
}, null, 2));
|
|
233
247
|
output.write("\n");
|
|
248
|
+
if (authHint) {
|
|
249
|
+
const errorOutput = deps.error ?? process.stderr;
|
|
250
|
+
errorOutput.write(`[nolo] Hint: ${authHint}
|
|
251
|
+
`);
|
|
252
|
+
}
|
|
234
253
|
return 0;
|
|
235
254
|
} catch (error) {
|
|
236
255
|
output.write(
|
|
@@ -7,18 +7,18 @@ import {
|
|
|
7
7
|
} from "./chunk-UAD2WT54.js";
|
|
8
8
|
import {
|
|
9
9
|
toTimestampMs
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-4FFUDT6D.js";
|
|
11
|
+
import {
|
|
12
|
+
isTombstoneRecord
|
|
13
|
+
} from "./chunk-D2MDMY2M.js";
|
|
11
14
|
import {
|
|
12
15
|
fetchFromServer,
|
|
13
16
|
getAllServers
|
|
14
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-HIM3FCLF.js";
|
|
15
18
|
import {
|
|
16
19
|
selectIdentityToken,
|
|
17
20
|
selectIdentityUserId
|
|
18
21
|
} from "./chunk-SEJ5OS6F.js";
|
|
19
|
-
import {
|
|
20
|
-
isTombstoneRecord
|
|
21
|
-
} from "./chunk-GBRG75BQ.js";
|
|
22
22
|
import {
|
|
23
23
|
__toESM
|
|
24
24
|
} from "./chunk-4VNS5WPM.js";
|
|
@@ -14,7 +14,7 @@ function buildCliLocalRuntimeDbEnv(env = process.env) {
|
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
16
|
async function getDefaultCliLocalRuntimeDb(options = {}) {
|
|
17
|
-
const { getDefaultCliLocalRuntimeDb: getAuthorityBackedDb } = await import("./localRuntimeAuthority-
|
|
17
|
+
const { getDefaultCliLocalRuntimeDb: getAuthorityBackedDb } = await import("./localRuntimeAuthority-TU6OBC76.js");
|
|
18
18
|
return getAuthorityBackedDb(options);
|
|
19
19
|
}
|
|
20
20
|
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
listUserRecordsFromServers,
|
|
3
3
|
readLiveDbRecordAfterTombstoneMerge
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-UVKDJUTL.js";
|
|
5
5
|
import {
|
|
6
6
|
agentRecordHasConfiguredCredential
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-NZWAO6LH.js";
|
|
8
8
|
import {
|
|
9
|
-
deriveCredentialGroup
|
|
10
|
-
|
|
11
|
-
} from "./chunk-RG6JBBX5.js";
|
|
9
|
+
deriveCredentialGroup
|
|
10
|
+
} from "./chunk-U7XXEI5R.js";
|
|
12
11
|
import {
|
|
13
12
|
PUBLIC_AGENT_KEY_PREFIX,
|
|
14
|
-
isOwnedAgentKey,
|
|
15
13
|
ownedAgentKey,
|
|
16
14
|
ownedAgentKeyPrefix,
|
|
17
15
|
parseOwnedAgentId,
|
|
@@ -53,6 +51,9 @@ function normalizeListedAgent(record) {
|
|
|
53
51
|
...typeof record?.handle === "string" && record.handle ? { handle: record.handle } : {},
|
|
54
52
|
...typeof record?.introduction === "string" && record.introduction ? { introduction: record.introduction } : typeof record?.description === "string" && record.description ? { introduction: record.description } : {},
|
|
55
53
|
...typeof record?.provider === "string" && record.provider ? { provider: record.provider } : {},
|
|
54
|
+
// 仅供 resolveBillingSource 判定订阅端点(Step Plan / OpenCode Go 等),
|
|
55
|
+
// safe 投影不输出它。缺了它本地 agent list 会把订阅端点全报成 user_api。
|
|
56
|
+
...typeof record?.customProviderUrl === "string" && record.customProviderUrl ? { customProviderUrl: record.customProviderUrl } : {},
|
|
56
57
|
...typeof record?.inputPrice === "number" && Number.isFinite(record.inputPrice) ? { inputPrice: record.inputPrice } : {},
|
|
57
58
|
...typeof record?.outputPrice === "number" && Number.isFinite(record.outputPrice) ? { outputPrice: record.outputPrice } : {},
|
|
58
59
|
updatedAt: typeof record?.updatedAt === "string" || typeof record?.updatedAt === "number" ? record.updatedAt : typeof record?.createdAt === "string" || typeof record?.createdAt === "number" ? record.createdAt : typeof record?.created === "string" || typeof record?.created === "number" ? record.created : null,
|
|
@@ -67,16 +68,10 @@ function normalizeListedAgent(record) {
|
|
|
67
68
|
...credentialKind !== void 0 ? { credentialKind } : {},
|
|
68
69
|
...typeof record?.apiSource === "string" && record.apiSource ? { apiSource: record.apiSource } : {},
|
|
69
70
|
...typeof record?.cliProvider === "string" && record.cliProvider ? { cliProvider: record.cliProvider } : {},
|
|
70
|
-
...typeof record?.nextAvailableAt === "number" && Number.isFinite(record.nextAvailableAt) ? { nextAvailableAt: record.nextAvailableAt } : {}
|
|
71
|
+
...typeof record?.nextAvailableAt === "number" && Number.isFinite(record.nextAvailableAt) ? { nextAvailableAt: record.nextAvailableAt } : {},
|
|
72
|
+
...record?.quota && typeof record.quota === "object" && Array.isArray(record.quota.windows) ? { quota: record.quota } : {}
|
|
71
73
|
};
|
|
72
74
|
}
|
|
73
|
-
function toSafeListedAgentSummary(agent, options) {
|
|
74
|
-
const summary = toSafeAgentSummary(agent, options);
|
|
75
|
-
if (agent.publicRecordExists === false) {
|
|
76
|
-
delete summary.publicKey;
|
|
77
|
-
}
|
|
78
|
-
return summary;
|
|
79
|
-
}
|
|
80
75
|
function sortListedAgents(agents) {
|
|
81
76
|
agents.sort((a, b) => {
|
|
82
77
|
const ta = a.updatedAt == null ? 0 : new Date(a.updatedAt).getTime();
|
|
@@ -97,6 +92,7 @@ function parseAgentListArgs(args) {
|
|
|
97
92
|
publicOnly: args.includes("--public-only"),
|
|
98
93
|
idsOnly: args.includes("--ids-only"),
|
|
99
94
|
scope: readArgValue(args, "--scope"),
|
|
95
|
+
query: readArgValue(args, "--query"),
|
|
100
96
|
showUnavailable: args.includes("--show-unavailable"),
|
|
101
97
|
// --safe 默认输出精简投影(与 server listAgents 一致,防大列表被截断);
|
|
102
98
|
// --verbose 拿回完整字段集排障。
|
|
@@ -110,7 +106,7 @@ async function listLocalCachedAgents(args) {
|
|
|
110
106
|
for (const prefix of [ownedPrefix, PUBLIC_AGENT_KEY_PREFIX]) {
|
|
111
107
|
for await (const [key, value] of args.db.iterator({ gte: prefix, lte: `${prefix}\uFFFF` })) {
|
|
112
108
|
if (typeof key !== "string" || !value || typeof value !== "object") continue;
|
|
113
|
-
if (
|
|
109
|
+
if (key.startsWith(ownedPrefix)) {
|
|
114
110
|
privateRecords.set(key, { ...value, dbKey: key });
|
|
115
111
|
continue;
|
|
116
112
|
}
|
|
@@ -237,14 +233,89 @@ async function decorateAgentsWithPublicStatusAcrossServers(args) {
|
|
|
237
233
|
return args.agents;
|
|
238
234
|
}
|
|
239
235
|
|
|
236
|
+
// packages/ai/agent/quotaSnapshot.ts
|
|
237
|
+
function findTightestQuotaWindow(quota, now = Date.now()) {
|
|
238
|
+
if (!quota || !Array.isArray(quota.windows) || quota.windows.length === 0) {
|
|
239
|
+
return void 0;
|
|
240
|
+
}
|
|
241
|
+
let best;
|
|
242
|
+
let bestScore = -Infinity;
|
|
243
|
+
for (const w of quota.windows) {
|
|
244
|
+
let score = 0;
|
|
245
|
+
if (typeof w.utilization === "number" && w.utilization >= 0) {
|
|
246
|
+
score = 500 + Math.min(w.utilization, 1) * 500;
|
|
247
|
+
} else if (typeof w.remaining === "number" && typeof w.limit === "number" && w.limit > 0) {
|
|
248
|
+
const util = Math.max(0, 1 - w.remaining / w.limit);
|
|
249
|
+
score = 500 + util * 500;
|
|
250
|
+
} else if (typeof w.resetAt === "number" && w.resetAt > now) {
|
|
251
|
+
score = 200;
|
|
252
|
+
} else if (typeof w.remaining === "number") {
|
|
253
|
+
score = 100;
|
|
254
|
+
}
|
|
255
|
+
if (score > bestScore) {
|
|
256
|
+
bestScore = score;
|
|
257
|
+
best = w;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return best ?? quota.windows[0];
|
|
261
|
+
}
|
|
262
|
+
function formatQuotaSummary(quota, now = Date.now(), options) {
|
|
263
|
+
const compact = options?.compact === true;
|
|
264
|
+
const planText = formatPlanLabel(quota?.plan);
|
|
265
|
+
const planName = typeof quota?.plan?.name === "string" ? quota.plan.name.trim() : "";
|
|
266
|
+
const tightest = findTightestQuotaWindow(quota, now);
|
|
267
|
+
if (!tightest) return compact ? planName || void 0 : planText;
|
|
268
|
+
const parts = [];
|
|
269
|
+
if (typeof tightest.utilization === "number") {
|
|
270
|
+
const pct = Math.round(tightest.utilization * 100);
|
|
271
|
+
parts.push(`${pct}%\u5DF2\u7528`);
|
|
272
|
+
} else if (typeof tightest.remaining === "number") {
|
|
273
|
+
if (typeof tightest.limit === "number") {
|
|
274
|
+
parts.push(`${tightest.remaining}/${tightest.limit}${tightest.unit ? ` ${tightest.unit}` : ""}`);
|
|
275
|
+
} else {
|
|
276
|
+
parts.push(`\u4F59${tightest.remaining}${tightest.unit ? ` ${tightest.unit}` : ""}`);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
if (compact) {
|
|
280
|
+
const head = parts.length > 0 ? parts[0] : void 0;
|
|
281
|
+
return [planName || void 0, head].filter(Boolean).join(" \xB7 ") || void 0;
|
|
282
|
+
}
|
|
283
|
+
if (tightest.scope && tightest.scope !== "user" && tightest.scope !== "project" && tightest.scope !== tightest.unit) {
|
|
284
|
+
parts.push(tightest.scope);
|
|
285
|
+
}
|
|
286
|
+
if (typeof tightest.resetAt === "number" && tightest.resetAt > now) {
|
|
287
|
+
const diffSec = Math.round((tightest.resetAt - now) / 1e3);
|
|
288
|
+
if (diffSec < 60) {
|
|
289
|
+
parts.push(`${diffSec}s\u540E\u91CD\u7F6E`);
|
|
290
|
+
} else if (diffSec < 3600) {
|
|
291
|
+
parts.push(`${Math.round(diffSec / 60)}m\u540E\u91CD\u7F6E`);
|
|
292
|
+
} else if (diffSec < 86400) {
|
|
293
|
+
const hours = (diffSec / 3600).toFixed(1).replace(/\.0$/, "");
|
|
294
|
+
parts.push(`${hours}h\u540E\u91CD\u7F6E`);
|
|
295
|
+
} else {
|
|
296
|
+
const days = (diffSec / 86400).toFixed(1).replace(/\.0$/, "");
|
|
297
|
+
parts.push(`${days}d\u540E\u91CD\u7F6E`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
const onlyScope = parts.length === 0 || parts.length === 1 && parts[0] === tightest.scope;
|
|
301
|
+
if (onlyScope) return planText;
|
|
302
|
+
return [planText, ...parts].filter(Boolean).join(" \xB7 ");
|
|
303
|
+
}
|
|
304
|
+
function formatPlanLabel(plan) {
|
|
305
|
+
const name = typeof plan?.name === "string" ? plan.name.trim() : "";
|
|
306
|
+
if (!name) return void 0;
|
|
307
|
+
const credits = typeof plan?.monthlyCreditsUsd === "number" && Number.isFinite(plan.monthlyCreditsUsd) && plan.monthlyCreditsUsd > 0 ? `\u6708\u5EA6\u989D\u5EA6 $${plan.monthlyCreditsUsd}` : void 0;
|
|
308
|
+
return [`${name} \u5957\u9910`, credits].filter(Boolean).join(" \xB7 ");
|
|
309
|
+
}
|
|
310
|
+
|
|
240
311
|
export {
|
|
241
312
|
normalizeListedAgent,
|
|
242
|
-
toSafeListedAgentSummary,
|
|
243
313
|
parseAgentListArgs,
|
|
244
314
|
listLocalCachedAgents,
|
|
245
315
|
listRemotePublicAgents,
|
|
246
316
|
listRemoteAgents,
|
|
247
317
|
listRemoteAgentsAcrossServers,
|
|
248
318
|
listFavoriteAgentIdsAcrossServers,
|
|
249
|
-
decorateAgentsWithPublicStatusAcrossServers
|
|
319
|
+
decorateAgentsWithPublicStatusAcrossServers,
|
|
320
|
+
formatQuotaSummary
|
|
250
321
|
};
|