nolo-cli 0.201.0-alpha.2 → 0.202.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 (124) hide show
  1. package/{_executeModel-BNYZLAN6.js → _executeModel-IPRTPSW7.js} +34 -33
  2. package/{agentDeleteCommand-4V4YSAXS.js → agentDeleteCommand-6HFA37FH.js} +49 -47
  3. package/{agentEmailCommands-EYIQEH6Z.js → agentEmailCommands-TDBNVIAT.js} +51 -49
  4. package/{agentListCommands-2KGUT7UB.js → agentListCommands-YSQSDQM3.js} +81 -45
  5. package/{agentMachineCommands-WUN47ILO.js → agentMachineCommands-5W23BLFR.js} +28 -26
  6. package/{agentProviderCommands-T6E3JCR6.js → agentProviderCommands-5ALOQLE5.js} +2 -2
  7. package/{agentRecordCommands-XL2CON36.js → agentRecordCommands-SRIMZZFK.js} +47 -45
  8. package/{agentRunCommand-R237ZGMQ.js → agentRunCommand-BLYHIN6S.js} +49 -47
  9. package/{agentRunControl-6HHESKDB.js → agentRunControl-ABDUPJLX.js} +10 -5
  10. package/{agentRuntimeLocal-XLLWFAVI.js → agentRuntimeLocal-FE66EBRC.js} +24 -22
  11. package/{agentSlice-Z5NKGMB7.js → agentSlice-BFDKYW6H.js} +4 -3
  12. package/{appDeleteCommands-IPF2VI3W.js → appDeleteCommands-BEVZGCAG.js} +29 -27
  13. package/{appDeployCommands-IBQ7GUXO.js → appDeployCommands-E7TFCHSP.js} +29 -27
  14. package/{appDeployStatusCommands-6ESVU6XE.js → appDeployStatusCommands-MYY5Z5G3.js} +29 -27
  15. package/{appGetCommands-VTSYTM4V.js → appGetCommands-HNED5JUU.js} +29 -27
  16. package/{appListCommands-VCP5TUX7.js → appListCommands-MSBFWPIY.js} +29 -27
  17. package/{authCommand-RV5MQDWN.js → authCommand-W34UWJGR.js} +14 -13
  18. package/{builtinSkillRegistry-7RAJP7FD.js → builtinSkillRegistry-NJVHQIKY.js} +1 -1
  19. package/{chromeOpsCommands-BA6CS4DI.js → chromeOpsCommands-USKE4B4K.js} +15 -4
  20. package/{chunk-RE3B2OCC.js → chunk-266E37EL.js} +69 -14
  21. package/chunk-2BMURXSB.js +1863 -0
  22. package/{chunk-NABJEYPJ.js → chunk-2Q3LOAFE.js} +38 -3
  23. package/{chunk-EOLPKHSB.js → chunk-326HCB6L.js} +28 -24
  24. package/{chunk-4CEAZRZ4.js → chunk-33W4IFUU.js} +1 -1
  25. package/{chunk-V3MGT3RF.js → chunk-3CWF2EUZ.js} +8 -8
  26. package/{chunk-G6OOUQWJ.js → chunk-4KB6WQUL.js} +2 -0
  27. package/{chunk-DYQXB46J.js → chunk-4KPB3KWX.js} +2 -2
  28. package/{chunk-WAZ6BTSC.js → chunk-5E4FSR4J.js} +1 -1
  29. package/{chunk-PVD7CRYV.js → chunk-6I7ZP7KJ.js} +3 -3
  30. package/chunk-6UBGXX2W.js +12 -0
  31. package/{chunk-ZBCBFOWC.js → chunk-A2ZMIRLN.js} +2 -2
  32. package/{chunk-Z646E5YH.js → chunk-ASG7VWPK.js} +3 -3
  33. package/{chunk-QWVGFBOQ.js → chunk-BLFZULEQ.js} +3 -3
  34. package/{chunk-RRHJJUA3.js → chunk-BRZTSZBG.js} +174 -100
  35. package/{chunk-JIFYXQRD.js → chunk-BTYQAODF.js} +26 -8
  36. package/{chunk-KORCRPLO.js → chunk-C7PKPHK6.js} +334 -12
  37. package/{chunk-6WZQGT5X.js → chunk-CJ37ZMCQ.js} +6 -2
  38. package/{chunk-VHGD6FHV.js → chunk-CKAHAVMK.js} +40 -10
  39. package/{chunk-UNOILAZP.js → chunk-CLTGWJVT.js} +76 -4
  40. package/{chunk-Q6RMLYSA.js → chunk-CMLBKYEI.js} +4 -2
  41. package/{chunk-NVOYW6H4.js → chunk-CQHMBWZH.js} +12 -8
  42. package/{chunk-7KWPNGVJ.js → chunk-CTZ4O3XD.js} +1 -1
  43. package/{chunk-OHRDHS4N.js → chunk-CVCRAO6Q.js} +9 -4
  44. package/{chunk-26CRLZFD.js → chunk-D57YYGMD.js} +2 -2
  45. package/{chunk-TEC5UHQK.js → chunk-DHJXDGC3.js} +2 -2
  46. package/{chunk-QYOB7RVA.js → chunk-DKZJJ2NQ.js} +3 -2
  47. package/{chunk-4YX7VQOC.js → chunk-E2FC5RMU.js} +17 -14
  48. package/{chunk-EH4MNUMF.js → chunk-ETTDZBK5.js} +4 -4
  49. package/{chunk-ZWQUWF6W.js → chunk-G7Y4GXTY.js} +8 -14
  50. package/{chunk-5KTQVMCX.js → chunk-GOO6G4PY.js} +85 -0
  51. package/{chunk-FMOZ57LN.js → chunk-H7HWWNJB.js} +1 -1
  52. package/{chunk-SW5AAI5D.js → chunk-HKMPGHFZ.js} +5 -5
  53. package/{chunk-H44LQSZ2.js → chunk-HKWGI3TM.js} +178 -311
  54. package/{chunk-BBGYSMUE.js → chunk-JH7KMNGT.js} +143 -19
  55. package/{chunk-YXMZHGNA.js → chunk-KDUYNEJ5.js} +33 -16
  56. package/{chunk-FEKMTBKJ.js → chunk-LAYFVGS4.js} +192 -55
  57. package/{chunk-O5V7QQAF.js → chunk-LEX6DEH4.js} +114 -2
  58. package/{chunk-BTBT2566.js → chunk-MNUOMXJH.js} +412 -9
  59. package/{chunk-N7E3LQ4A.js → chunk-MZXWSY4E.js} +1 -1
  60. package/{chunk-ZQ3EAOY3.js → chunk-NTLJGRAT.js} +1 -1
  61. package/{chunk-BUXH3H5M.js → chunk-OIB4GARE.js} +3743 -4848
  62. package/{chunk-WFUIXNKC.js → chunk-P4YLK2OD.js} +3 -3
  63. package/chunk-PRJ473FK.js +63 -0
  64. package/{chunk-2SHLT6JB.js → chunk-Q7GNBUT4.js} +2 -2
  65. package/{chunk-C2UXCAMB.js → chunk-RIKSN62L.js} +3 -3
  66. package/{chunk-GTP6VNWH.js → chunk-RQ22OZD7.js} +3 -3
  67. package/{chunk-H7NIQGTU.js → chunk-RS66RJLA.js} +2 -2
  68. package/{chunk-GC64WGMD.js → chunk-SM3NSZJV.js} +16 -5
  69. package/{chunk-QKDMI22S.js → chunk-SSK4WNJA.js} +1 -1
  70. package/{chunk-6MAFLMAO.js → chunk-SUBNV2JH.js} +3 -3
  71. package/{chunk-HLAL63BZ.js → chunk-T43B7LB2.js} +1 -1
  72. package/{chunk-HTLIKE5U.js → chunk-TWVVTUNG.js} +2 -2
  73. package/{chunk-X3RWBJDQ.js → chunk-U7HTU2S7.js} +1 -1
  74. package/{chunk-76YUTLOT.js → chunk-UIOEHFF6.js} +1 -1
  75. package/{chunk-IIX6VWLW.js → chunk-VCFU3BO5.js} +224 -38
  76. package/{chunk-QU3TLYBR.js → chunk-VEUSD6OF.js} +35 -11
  77. package/{chunk-4YMD7B4Y.js → chunk-WPOKOKZA.js} +2 -2
  78. package/{chunk-A5VR65AE.js → chunk-WPQGLJHU.js} +4 -4
  79. package/{chunk-K6TZSON4.js → chunk-WTKYP6QO.js} +19 -5
  80. package/{chunk-ZSO5B6SW.js → chunk-Y2WUYX4I.js} +9 -0
  81. package/{chunk-A3SXTJDE.js → chunk-YAGFPXOX.js} +14 -14
  82. package/{chunk-TVGX5QIN.js → chunk-YUA6OAH5.js} +2 -2
  83. package/{chunk-NYE2INIO.js → chunk-YV2RSLM4.js} +13 -13
  84. package/{chunk-MJWUBTK7.js → chunk-YZGNKHUM.js} +2 -2
  85. package/{commandRegistry-YFXWA5SF.js → commandRegistry-ZU3RX7A2.js} +87 -67
  86. package/{contentThunks-2BV7CFUP.js → contentThunks-I4IHSDTM.js} +14 -13
  87. package/{cooldownCommands-KRILPXOZ.js → cooldownCommands-5SJ74DNP.js} +1 -1
  88. package/{createAgentAutomationAction-T6CGXCSO.js → createAgentAutomationAction-WQCH5HR2.js} +14 -13
  89. package/{createDialogAction-X27IA3G2.js → createDialogAction-CKMZK5JQ.js} +15 -14
  90. package/{createPageAction-EHDHNW5P.js → createPageAction-QAZHQGY7.js} +14 -13
  91. package/{dialogCommands-XZXH3HSQ.js → dialogCommands-NEQ6NW5H.js} +30 -28
  92. package/{dialogSlice-AZNPVOCU.js → dialogSlice-GEGACCH2.js} +13 -12
  93. package/{docCreateCommands-Z64V5BFZ.js → docCreateCommands-EXV267FP.js} +28 -26
  94. package/{docDeleteCommands-7UFHIM4C.js → docDeleteCommands-TSBILA2Z.js} +29 -27
  95. package/{docReadCommands-NLU7Y67R.js → docReadCommands-AKVYHITD.js} +28 -26
  96. package/{docStore-M37Q6JFO.js → docStore-B4EFT53J.js} +1 -1
  97. package/{docUpdateCommands-S2KGBEG3.js → docUpdateCommands-G6GULDGZ.js} +28 -26
  98. package/{fetchMessages-HWBVATSE.js → fetchMessages-YY4SATNR.js} +1 -1
  99. package/{getPricing-E2PLNWCR.js → getPricing-3PQY3TGI.js} +3 -3
  100. package/{handleSendMessageAction-KUJQZ6B6.js → handleSendMessageAction-4BACQWOG.js} +70 -29
  101. package/index.js +7 -7
  102. package/{lib-4YTWAGY7.js → lib-5KKIBFIT.js} +439 -272
  103. package/{localDialogRead-CT5HGDMC.js → localDialogRead-FUXGZ57B.js} +1 -1
  104. package/{localRuntimeAdapter-5BNHO6JZ.js → localRuntimeAdapter-MTDULOUZ.js} +45 -43
  105. package/{machineCommands-2KDROAVV.js → machineCommands-OGHHBRV3.js} +48 -46
  106. package/{machineWsRunDispatch-4NP5M574.js → machineWsRunDispatch-R6DNC3H7.js} +46 -44
  107. package/{models-UUNO6DOL.js → models-PJBE6JDV.js} +2 -2
  108. package/{oauthTokenStore-PADKLNOC.js → oauthTokenStore-OEERZFUC.js} +2 -1
  109. package/package.json +1 -1
  110. package/{providerPresetApply-JGNMO2KX.js → providerPresetApply-HBBUUVJD.js} +6 -6
  111. package/{providerRegistry-33J3ZYFJ.js → providerRegistry-5LK2NXYE.js} +6 -6
  112. package/{readlineWorkspace-MKUSR6HA.js → readlineWorkspace-NC2O4DQP.js} +290 -121
  113. package/{runAgentClientLoop-J32KRVN7.js → runAgentClientLoop-QKV66PX5.js} +31 -30
  114. package/{runtimeDoctorCommands-NYBOTA6D.js → runtimeDoctorCommands-3VFVTGPI.js} +8 -7
  115. package/{secretCommands-N6CMCJDZ.js → secretCommands-MKU25CDP.js} +311 -3
  116. package/{settingThunks-YRYNPWJM.js → settingThunks-4WU7YE62.js} +2 -2
  117. package/{skillDiscovery-F3TMVQOJ.js → skillDiscovery-BKLWW2EZ.js} +2 -2
  118. package/{spaceCommands-VV4K7TGI.js → spaceCommands-J7BRTTM3.js} +27 -25
  119. package/{streamAgentChatTurn-S2Q7STXS.js → streamAgentChatTurn-GM3UNSLS.js} +46 -43
  120. package/{tools-KOIPW4ZA.js → tools-UJLEQBKI.js} +25 -24
  121. package/{tuiSummaryLlmCaller-FSOADMXK.js → tuiSummaryLlmCaller-73QO3HAD.js} +12 -12
  122. package/{updateCommands-KE6LP3QX.js → updateCommands-RVDAFHBT.js} +3 -3
  123. package/{updateDialogTitleAction-ILS5OIXF.js → updateDialogTitleAction-24QO27NT.js} +14 -13
  124. package/{windowsSelfUpdate-26TSFXEZ.js → windowsSelfUpdate-N2VH2OBW.js} +2 -2
@@ -976,7 +976,9 @@ var secretStrings = {
976
976
  en: `Usage:
977
977
  nolo secret list [--json] List saved secret names (without values; --json outputs machine-readable list)
978
978
  nolo secret get <name> Print the value of a secret (for debugging; agents must not read)
979
- nolo secret set <name> <value|json> Set a secret (string, or JSON starting with { / [)
979
+ nolo secret set <name> --prompt Set a secret via hidden interactive prompt (TTY only; does not echo secret)
980
+ nolo secret set <name> --stdin Set a secret securely from stdin (recommended; prevents leaking secrets in argv)
981
+ nolo secret set <name> <value|json> Set a secret via argv (legacy; discouraged: exposes secrets in shell history and process list)
980
982
  nolo secret delete <name> Delete a secret
981
983
  nolo secret run --with <names> -- <cmd> Safely inject secret environment variables and run a command
982
984
  nolo secret bind <alias> <ref> [--env <ENV_NAME>] Bind a managed credential reference to an alias
@@ -986,7 +988,9 @@ var secretStrings = {
986
988
  zh: `\u7528\u6CD5:
987
989
  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
988
990
  nolo secret get <name> \u6253\u5370\u6307\u5B9A secret \u7684\u503C\uFF08\u4F9B\u8C03\u8BD5\uFF1BAgent \u4E0D\u5F97\u8BFB\u53D6\uFF09
989
- nolo secret set <name> <value|json> \u8BBE\u7F6E secret\uFF08\u5B57\u7B26\u4E32\uFF0C\u6216\u4EE5 { / [ \u5F00\u5934\u7684 JSON\uFF09
991
+ 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
992
+ 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
993
+ 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
990
994
  nolo secret delete <name> \u5220\u9664\u6307\u5B9A\u7684 secret
991
995
  nolo secret run --with <names> -- <cmd> \u5B89\u5168\u6CE8\u5165 secret \u73AF\u5883\u53D8\u91CF\u5E76\u6267\u884C\u5B50\u547D\u4EE4
992
996
  nolo secret bind <alias> <ref> [--env <ENV_NAME>] \u5C06\u53D7\u63A7\u51ED\u636E\u5F15\u7528\u7ED1\u5B9A\u5230\u522B\u540D
@@ -1101,6 +1105,74 @@ var secretStrings = {
1101
1105
  "secret.jsonScalar": {
1102
1106
  en: "JSON values must be an object or an array, not a scalar",
1103
1107
  zh: "JSON \u503C\u5FC5\u987B\u662F\u5BF9\u8C61\u6216\u6570\u7EC4\uFF0C\u4E0D\u80FD\u662F\u6807\u91CF"
1108
+ },
1109
+ "secret.setNameRequired": {
1110
+ en: "Error: Please provide a secret name. Example: nolo secret set <name> --stdin",
1111
+ zh: "\u9519\u8BEF: \u8BF7\u63D0\u4F9B secret \u540D\u79F0\u3002\u4F8B\u5982: nolo secret set <name> --stdin"
1112
+ },
1113
+ "secret.stdinDuplicateFlag": {
1114
+ en: "Error: Duplicate --stdin flag",
1115
+ zh: "\u9519\u8BEF: --stdin \u53C2\u6570\u91CD\u590D"
1116
+ },
1117
+ "secret.stdinMixedWithValue": {
1118
+ en: "Error: Cannot mix --stdin with value arguments. Pass value via stream only",
1119
+ zh: "\u9519\u8BEF: \u4E0D\u80FD\u5C06 --stdin \u4E0E\u503C\u53C2\u6570\u6DF7\u7528\u3002\u8BF7\u4EC5\u901A\u8FC7\u6D41\u8F93\u5165\u63D0\u4F9B\u503C"
1120
+ },
1121
+ "secret.stdinTtyNotSupported": {
1122
+ en: "Error: Interactive terminal (TTY) detected. --stdin is not an interactive prompt; please pipe input via stdin (e.g. pass show secret | nolo secret set <name> --stdin)",
1123
+ zh: "\u9519\u8BEF: \u68C0\u6D4B\u5230\u4EA4\u4E92\u5F0F\u7EC8\u7AEF (TTY)\u3002--stdin \u4E0D\u662F\u4EA4\u4E92\u5F0F\u9690\u85CF\u63D0\u793A\u7B26\uFF1B\u8BF7\u901A\u8FC7\u7BA1\u9053\u63D0\u4F9B\u8F93\u5165\uFF08\u4F8B\u5982: pass show secret | nolo secret set <name> --stdin\uFF09"
1124
+ },
1125
+ "secret.stdinEmpty": {
1126
+ en: "Error: Secret input from stdin cannot be empty or pure whitespace",
1127
+ zh: "\u9519\u8BEF: \u6765\u81EA stdin \u7684 secret \u8F93\u5165\u4E0D\u80FD\u4E3A\u7A7A\u6216\u7EAF\u7A7A\u767D"
1128
+ },
1129
+ "secret.stdinTooLarge": {
1130
+ en: "Error: Secret input from stdin exceeds maximum limit (64 KiB)",
1131
+ zh: "\u9519\u8BEF: \u6765\u81EA stdin \u7684 secret \u8F93\u5165\u8D85\u8FC7\u6700\u5927\u9650\u5236 (64 KiB)"
1132
+ },
1133
+ "secret.stdinTimeout": {
1134
+ en: "Error: Timed out waiting for stdin input (10s limit)",
1135
+ zh: "\u9519\u8BEF: \u7B49\u5F85 stdin \u8F93\u5165\u8D85\u65F6\uFF08\u9650\u5236 10 \u79D2\uFF09"
1136
+ },
1137
+ "secret.stdinReadError": {
1138
+ en: "Error: Failed to read secret from stdin",
1139
+ zh: "\u9519\u8BEF: \u4ECE stdin \u8BFB\u53D6 secret \u5931\u8D25"
1140
+ },
1141
+ "secret.promptDuplicateFlag": {
1142
+ en: "Error: Duplicate --prompt flag",
1143
+ zh: "\u9519\u8BEF: --prompt \u53C2\u6570\u91CD\u590D"
1144
+ },
1145
+ "secret.cannotMixStdinAndPrompt": {
1146
+ en: "Error: Cannot mix --stdin and --prompt flags",
1147
+ zh: "\u9519\u8BEF: \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528 --stdin \u548C --prompt \u53C2\u6570"
1148
+ },
1149
+ "secret.promptMixedWithValue": {
1150
+ en: "Error: Cannot mix --prompt with value arguments. Pass value via interactive prompt only",
1151
+ zh: "\u9519\u8BEF: \u4E0D\u80FD\u5C06 --prompt \u4E0E\u503C\u53C2\u6570\u6DF7\u7528\u3002\u8BF7\u4EC5\u901A\u8FC7\u4EA4\u4E92\u63D0\u793A\u7B26\u63D0\u4F9B\u503C"
1152
+ },
1153
+ "secret.promptNameRequired": {
1154
+ en: "Error: Please provide a secret name. Example: nolo secret set <name> --prompt",
1155
+ zh: "\u9519\u8BEF: \u8BF7\u63D0\u4F9B secret \u540D\u79F0\u3002\u4F8B\u5982: nolo secret set <name> --prompt"
1156
+ },
1157
+ "secret.promptNonTtyNotSupported": {
1158
+ en: "Error: Interactive terminal (TTY) required for --prompt. For automated pipelines use --stdin",
1159
+ zh: "\u9519\u8BEF: --prompt \u9700\u8981\u4EA4\u4E92\u5F0F\u7EC8\u7AEF (TTY)\u3002\u81EA\u52A8\u5316\u6D41\u6C34\u7EBF\u8BF7\u4F7F\u7528 --stdin"
1160
+ },
1161
+ "secret.promptEmpty": {
1162
+ en: "Error: Secret input from prompt cannot be empty or pure whitespace",
1163
+ zh: "\u9519\u8BEF: \u6765\u81EA\u63D0\u793A\u7B26\u7684 secret \u8F93\u5165\u4E0D\u80FD\u4E3A\u7A7A\u6216\u7EAF\u7A7A\u767D"
1164
+ },
1165
+ "secret.promptAborted": {
1166
+ en: "Secret input cancelled",
1167
+ zh: "\u7528\u6237\u53D6\u6D88\u4E86 secret \u8F93\u5165"
1168
+ },
1169
+ "secret.promptLabel": {
1170
+ en: 'Enter secret value for "{0}": ',
1171
+ zh: '\u8BF7\u8F93\u5165 "{0}" \u7684 secret \u503C\uFF08\u8F93\u5165\u5185\u5BB9\u5DF2\u9690\u85CF\uFF09: '
1172
+ },
1173
+ "secret.promptReadError": {
1174
+ en: "Error: Failed to read secret from prompt",
1175
+ zh: "\u9519\u8BEF: \u4ECE\u4EA4\u4E92\u63D0\u793A\u7B26\u8BFB\u53D6 secret \u5931\u8D25"
1104
1176
  }
1105
1177
  };
1106
1178
 
@@ -2594,8 +2666,8 @@ var COMMAND_DESCRIPTIONS = {
2594
2666
  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"
2595
2667
  },
2596
2668
  "agent status": {
2597
- en: "Show status of a local agent run (--json, --watch, --interval-ms N)",
2598
- zh: "\u67E5\u770B\u672C\u5730\u667A\u80FD\u4F53\u8FD0\u884C\u72B6\u6001\uFF08--json\u3001--watch\u3001--interval-ms N\uFF09"
2669
+ en: "Show status of a local agent run (--json, --include-checkpoint, --watch, --interval-ms N)",
2670
+ zh: "\u67E5\u770B\u672C\u5730\u667A\u80FD\u4F53\u8FD0\u884C\u72B6\u6001\uFF08--json\u3001--include-checkpoint\u3001--watch\u3001--interval-ms N\uFF09"
2599
2671
  },
2600
2672
  "agent logs": {
2601
2673
  en: "Show logs of a local agent run",
@@ -295,13 +295,14 @@ var buildSkillDiscoveryCatalogLayer = (catalog) => {
295
295
  }
296
296
  return makeLayer("skill-discovery", lines.join("\n"), "session");
297
297
  };
298
+ var buildAgentsMdLayerHeader = (fileName = "AGENTS.md") => `--- \u9879\u76EE\u6307\u4EE4\uFF08${fileName}\uFF09---
299
+ `;
298
300
  var buildAgentsMdLayer = (content, fileName = "AGENTS.md") => {
299
301
  const trimmed = content.trim();
300
302
  if (!trimmed) return null;
301
303
  return makeLayer(
302
304
  "agents-md",
303
- `--- \u9879\u76EE\u6307\u4EE4\uFF08${fileName}\uFF09---
304
- ${trimmed}`,
305
+ `${buildAgentsMdLayerHeader(fileName)}${trimmed}`,
305
306
  "session"
306
307
  );
307
308
  };
@@ -375,6 +376,7 @@ export {
375
376
  resolveSkillCatalogSync,
376
377
  buildSpaceContextLayer,
377
378
  buildSkillDiscoveryCatalogLayer,
379
+ buildAgentsMdLayerHeader,
378
380
  buildAgentsMdLayer,
379
381
  buildLinkedSpacesSection,
380
382
  renderTurnContextBlocksWithScope,
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-HNUWUO75.js";
4
4
  import {
5
5
  resolveToolImagePolicy
6
- } from "./chunk-PVD7CRYV.js";
6
+ } from "./chunk-6I7ZP7KJ.js";
7
7
  import {
8
8
  accumulateToolCallDelta,
9
9
  createThinkParserState,
@@ -30,7 +30,7 @@ import {
30
30
  stablePromptCacheKey,
31
31
  toOpenAiCompatibleMessages,
32
32
  toResponsesTools
33
- } from "./chunk-OHRDHS4N.js";
33
+ } from "./chunk-CVCRAO6Q.js";
34
34
  import {
35
35
  isMeaningfulChatCompletionOutput,
36
36
  isMeaningfulResponsesOutput
@@ -47,14 +47,14 @@ import {
47
47
  resolvePlatformAuthToken,
48
48
  resolvePlatformServerUrl,
49
49
  resolveProviderTransportDecision
50
- } from "./chunk-4YMD7B4Y.js";
50
+ } from "./chunk-WPOKOKZA.js";
51
51
  import {
52
52
  isRecord
53
53
  } from "./chunk-KUG52IAP.js";
54
54
  import {
55
55
  NOLO_CLIENT_VERSION_HEADER,
56
56
  isPlatformMimoProviderModel
57
- } from "./chunk-5KTQVMCX.js";
57
+ } from "./chunk-GOO6G4PY.js";
58
58
 
59
59
  // packages/ai/token/sseUsageExtract.ts
60
60
  var TOKEN_FIELDS = [
@@ -715,7 +715,7 @@ function processPlatformChatSseEvent(event, state) {
715
715
  if (!payload) continue;
716
716
  if (payload === "[DONE]") {
717
717
  state.sawDone = true;
718
- continue;
718
+ return;
719
719
  }
720
720
  let parsed;
721
721
  try {
@@ -782,8 +782,10 @@ function processPlatformChatSseEvent(event, state) {
782
782
  applyResponsesToolEvent(state.responsesToolCalls, parsed);
783
783
  continue;
784
784
  }
785
- if (eventType === "response.completed" && parsed?.response) {
785
+ if (eventType === "response.completed") {
786
+ state.sawResponseCompleted = true;
786
787
  state.completedResponsesPayload = parsed.response;
788
+ continue;
787
789
  }
788
790
  }
789
791
  }
@@ -807,12 +809,14 @@ async function readPlatformChatSseCompletion(args) {
807
809
  thinkState: createThinkParserState(),
808
810
  toolCallTextState: createToolCallTextParserState(),
809
811
  finishReason: void 0,
810
- sawDone: false
812
+ sawDone: false,
813
+ sawResponseCompleted: false
811
814
  };
812
815
  try {
813
816
  for await (const frame of readSseFrames(args.response)) {
814
817
  frameCount += 1;
815
818
  processPlatformChatSseEvent(frame, state);
819
+ if (state.sawDone) break;
816
820
  }
817
821
  } catch (cause) {
818
822
  if (cause instanceof PlatformStreamInterruptedError) {
@@ -853,7 +857,7 @@ async function readPlatformChatSseCompletion(args) {
853
857
  if (dsml.content) state.content += dsml.content;
854
858
  }
855
859
  throwIfChatCompletionStreamFailed(state);
856
- const streamComplete = state.sawDone || Boolean(state.usage) || Boolean(state.finishReason);
860
+ const streamComplete = state.sawDone || state.sawResponseCompleted || Boolean(state.usage) || Boolean(state.finishReason);
857
861
  const streamTruncated = !streamComplete;
858
862
  if (state.usesResponsesApi) {
859
863
  const response = state.completedResponsesPayload;
@@ -8,7 +8,7 @@ import {
8
8
  mapDiscoveredSkillsToCatalogEntries,
9
9
  resolveSkillCatalog,
10
10
  resolveSkillCatalogSync
11
- } from "./chunk-Q6RMLYSA.js";
11
+ } from "./chunk-CMLBKYEI.js";
12
12
 
13
13
  // packages/agent-runtime/skillDiscovery.ts
14
14
  import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-E2BESSAW.js";
11
11
  import {
12
12
  getModelContextWindow
13
- } from "./chunk-JIFYXQRD.js";
13
+ } from "./chunk-BTYQAODF.js";
14
14
  import {
15
15
  isRecord
16
16
  } from "./chunk-KUG52IAP.js";
@@ -21,7 +21,7 @@ import {
21
21
  PLATFORM_HOSTED_KIMI_K3_MODEL,
22
22
  isFireworksKimiModel,
23
23
  isNoloHostedProvider
24
- } from "./chunk-5KTQVMCX.js";
24
+ } from "./chunk-GOO6G4PY.js";
25
25
  import {
26
26
  asTrimmedLowercaseString
27
27
  } from "./chunk-QSJ3HFEF.js";
@@ -914,7 +914,8 @@ var STREAM_USAGE_PROVIDERS = /* @__PURE__ */ new Set([
914
914
  // prompt_tokens_details.cached_tokens.
915
915
  "opendesign",
916
916
  "opencode",
917
- "opencode-go"
917
+ "opencode-go",
918
+ "longcat"
918
919
  ]);
919
920
  var KIMI_CODE_ENDPOINT_MARKER = "api.kimi.com";
920
921
  function extractHostname(endpoint) {
@@ -929,10 +930,14 @@ var isMiniMaxEndpoint = (endpoint) => {
929
930
  const host = extractHostname(endpoint);
930
931
  return host === "api.minimaxi.com" || host === "api.minimax.chat";
931
932
  };
933
+ var isLongCatEndpoint = (endpoint) => {
934
+ const host = extractHostname(endpoint);
935
+ return host === "api.longcat.chat" || host === "api.longcat.ai";
936
+ };
932
937
  var isSupportedCustomEndpoint = (endpoint) => {
933
938
  if (typeof endpoint !== "string") return false;
934
939
  const ep = endpoint.toLowerCase();
935
- return isMiniMaxEndpoint(endpoint) || ep.includes(KIMI_CODE_ENDPOINT_MARKER) || ep.includes("open-design.ai") || ep.includes("opencode.ai") || isOllamaEndpoint(endpoint);
940
+ return isMiniMaxEndpoint(endpoint) || isLongCatEndpoint(endpoint) || ep.includes(KIMI_CODE_ENDPOINT_MARKER) || ep.includes("open-design.ai") || ep.includes("opencode.ai") || isOllamaEndpoint(endpoint);
936
941
  };
937
942
  var EXTRA_USAGE_FIELD_PROVIDERS = /* @__PURE__ */ new Set(["openrouter"]);
938
943
  var normalizeProviderName = (providerName) => asTrimmedLowercaseString(providerName);
@@ -333,7 +333,7 @@ async function saveDocState(arg, { dispatch, getState }) {
333
333
  ).unwrap();
334
334
  if (dbSpaceId) {
335
335
  try {
336
- const { updateContentTitle } = await import("./contentThunks-2BV7CFUP.js");
336
+ const { updateContentTitle } = await import("./contentThunks-I4IHSDTM.js");
337
337
  await dispatch(
338
338
  updateContentTitle({
339
339
  spaceId: dbSpaceId,
@@ -372,7 +372,7 @@ async function saveDocState(arg, { dispatch, getState }) {
372
372
  }
373
373
  }
374
374
  async function createDocState(args, thunkApi) {
375
- const { createPageAction } = await import("./createPageAction-EHDHNW5P.js");
375
+ const { createPageAction } = await import("./createPageAction-QAZHQGY7.js");
376
376
  return createPageAction(args, thunkApi);
377
377
  }
378
378
  function subscribe(listener) {
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  requireTokenUser
3
- } from "./chunk-ZQ3EAOY3.js";
3
+ } from "./chunk-NTLJGRAT.js";
4
4
  import {
5
5
  resolveServerUrl
6
6
  } from "./chunk-WACI5I6V.js";
7
7
  import {
8
8
  t
9
- } from "./chunk-UNOILAZP.js";
9
+ } from "./chunk-CLTGWJVT.js";
10
10
 
11
11
  // packages/cli/cliApiClient.ts
12
12
  var CliApiError = class extends Error {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  resolveBuiltinCapability,
3
3
  resolveBuiltinSkillEntry
4
- } from "./chunk-O5V7QQAF.js";
4
+ } from "./chunk-LEX6DEH4.js";
5
5
  import {
6
6
  noloAgentId
7
7
  } from "./chunk-Y6ORVLSS.js";
@@ -186,7 +186,8 @@ var SUPPORTED_USER_SKILL_SLUGS = [
186
186
  "skill-creator",
187
187
  "code-planning",
188
188
  "coding",
189
- "coding-review"
189
+ "coding-review",
190
+ "android-adb"
190
191
  ];
191
192
  var SUPPORTED_USER_SKILL_SLUG_SET = new Set(
192
193
  SUPPORTED_USER_SKILL_SLUGS
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  buildStaticUserPolicyContext,
3
3
  resolveSpaceContextPreloadPlan
4
- } from "./chunk-2SHLT6JB.js";
4
+ } from "./chunk-Q7GNBUT4.js";
5
5
  import {
6
6
  fetchReferenceContents,
7
7
  mergeReferences,
8
8
  resolveReferenceAssets,
9
9
  resolveToolsFromKeys
10
- } from "./chunk-C2UXCAMB.js";
10
+ } from "./chunk-RIKSN62L.js";
11
11
  import {
12
12
  UI_CARD_ENVELOPE_MAX_BYTES,
13
13
  getAllToolRuns,
@@ -18,14 +18,14 @@ import {
18
18
  selectSpaceContextLevel,
19
19
  selectUserTonePreset,
20
20
  uiCardFallback
21
- } from "./chunk-KORCRPLO.js";
21
+ } from "./chunk-C7PKPHK6.js";
22
22
  import {
23
23
  resolveAgentRecommendedSkillNames,
24
24
  resolveAgentRequiredPackIds
25
- } from "./chunk-QYOB7RVA.js";
25
+ } from "./chunk-DKZJJ2NQ.js";
26
26
  import {
27
27
  getDocState
28
- } from "./chunk-26CRLZFD.js";
28
+ } from "./chunk-D57YYGMD.js";
29
29
  import {
30
30
  resolveToolBaseUrl
31
31
  } from "./chunk-MYOH447Z.js";
@@ -34,10 +34,10 @@ import {
34
34
  getModelPricing,
35
35
  getPrices,
36
36
  hasExplicitAgentPricing
37
- } from "./chunk-ZBCBFOWC.js";
37
+ } from "./chunk-A2ZMIRLN.js";
38
38
  import {
39
39
  getTableState
40
- } from "./chunk-QKDMI22S.js";
40
+ } from "./chunk-SSK4WNJA.js";
41
41
  import {
42
42
  getCurrentSpaceIdRaw,
43
43
  getViewMode
@@ -46,7 +46,7 @@ import {
46
46
  PERSONALIZATION_DIALOG_CATEGORY,
47
47
  buildPersonalizationDialogPolicyContext,
48
48
  selectAllMsgs
49
- } from "./chunk-EOLPKHSB.js";
49
+ } from "./chunk-326HCB6L.js";
50
50
  import {
51
51
  selectPendingFiles
52
52
  } from "./chunk-OWYYDMGJ.js";
@@ -78,11 +78,11 @@ import {
78
78
  } from "./chunk-WJZOQR2J.js";
79
79
  import {
80
80
  extractReferenceKeysFromMessage
81
- } from "./chunk-K6TZSON4.js";
81
+ } from "./chunk-WTKYP6QO.js";
82
82
  import {
83
83
  getModelContextWindow,
84
84
  planContextUsage
85
- } from "./chunk-JIFYXQRD.js";
85
+ } from "./chunk-BTYQAODF.js";
86
86
  import {
87
87
  asRecordOrEmpty
88
88
  } from "./chunk-KX6YBIHG.js";
@@ -92,7 +92,7 @@ import {
92
92
  import {
93
93
  buildLinkedSpacesSection,
94
94
  buildSpaceContextLayer
95
- } from "./chunk-Q6RMLYSA.js";
95
+ } from "./chunk-CMLBKYEI.js";
96
96
  import {
97
97
  canonicalizeToolNames,
98
98
  prioritizeToolNames
@@ -106,7 +106,7 @@ import {
106
106
  import {
107
107
  getModelConfig,
108
108
  getProviderByModelName
109
- } from "./chunk-GC64WGMD.js";
109
+ } from "./chunk-SM3NSZJV.js";
110
110
  import {
111
111
  isRecord
112
112
  } from "./chunk-KUG52IAP.js";
@@ -1257,7 +1257,7 @@ ${content}
1257
1257
  var validateAccessAndBalance = (agentConfig, state) => {
1258
1258
  const userBalance = selectIdentityUserBalance(state);
1259
1259
  const currentUserId = selectIdentityUserId(state);
1260
- const isCustomApi = agentConfig.apiSource === "custom";
1260
+ const isCustomApi = agentConfig.apiSource === "custom" || Boolean(agentConfig.customProviderUrl);
1261
1261
  const isCliApi = agentConfig.apiSource === "cli";
1262
1262
  const isDeviceLocalOwner = agentConfig.userId === "local" && !currentUserId;
1263
1263
  const isOwner = isDeviceLocalOwner || Boolean(currentUserId) && agentConfig.userId === currentUserId;
@@ -1722,7 +1722,10 @@ async function resolveTurnToolContext(input) {
1722
1722
  const mentionedToolNames = canonicalizeToolNames(mentionResult.toolNames);
1723
1723
  const agentRefs = Array.isArray(input.agentConfig?.references) ? input.agentConfig.references : [];
1724
1724
  const dialogExtraRefs = Array.isArray(input.dialogConfig?.extraReferences) ? input.dialogConfig.extraReferences : [];
1725
- const mergedReferences = mergeReferences(agentRefs, dialogExtraRefs);
1725
+ const mergedReferences = mergeReferences(
1726
+ mergeReferences(agentRefs, dialogExtraRefs),
1727
+ input.ephemeralReferences
1728
+ );
1726
1729
  let refAssets = {
1727
1730
  references: [],
1728
1731
  referencedTools: [],
@@ -22,7 +22,7 @@ import {
22
22
  } from "./chunk-TRZP7JZ7.js";
23
23
  import {
24
24
  createFileCredentialBroker
25
- } from "./chunk-76YUTLOT.js";
25
+ } from "./chunk-UIOEHFF6.js";
26
26
  import {
27
27
  asRecordOrEmpty
28
28
  } from "./chunk-KX6YBIHG.js";
@@ -458,7 +458,7 @@ var slice = createSliceWithThunks({
458
458
  const overrides = {};
459
459
  if (args.systemPromptOverride !== void 0) overrides.prompt = args.systemPromptOverride;
460
460
  if (args.toolsOverride !== void 0) overrides.tools = args.toolsOverride;
461
- const { _executeModel } = await import("./_executeModel-BNYZLAN6.js");
461
+ const { _executeModel } = await import("./_executeModel-IPRTPSW7.js");
462
462
  return _executeModel(
463
463
  {
464
464
  isStreaming: args.isStreaming ?? false,
@@ -479,7 +479,7 @@ var slice = createSliceWithThunks({
479
479
  * - 循环直到无工具调用或触发其他运行时停止条件
480
480
  */
481
481
  runAgent: create.asyncThunk(async (args, thunkApi) => {
482
- const { runAgentClientLoop } = await import("./runAgentClientLoop-J32KRVN7.js");
482
+ const { runAgentClientLoop } = await import("./runAgentClientLoop-QKV66PX5.js");
483
483
  const { content: loopContent, toolCallCount } = await runAgentClientLoop(
484
484
  {
485
485
  agentKey: args.agentKey,
@@ -495,7 +495,7 @@ var slice = createSliceWithThunks({
495
495
  * 聊天轮次流式 Agent 调用
496
496
  */
497
497
  streamAgentChatTurn: create.asyncThunk(async (args, thunkApi) => {
498
- const { streamAgentChatTurnHandler } = await import("./streamAgentChatTurn-S2Q7STXS.js");
498
+ const { streamAgentChatTurnHandler } = await import("./streamAgentChatTurn-GM3UNSLS.js");
499
499
  return streamAgentChatTurnHandler(args, thunkApi);
500
500
  }),
501
501
  /**
@@ -1,3 +1,7 @@
1
+ import {
2
+ resolveNoloStateDir
3
+ } from "./chunk-6UBGXX2W.js";
4
+
1
5
  // packages/agent-runtime/oauthTokenStore.ts
2
6
  import {
3
7
  chmodSync as chmodSync2,
@@ -7,8 +11,8 @@ import {
7
11
  unlinkSync as unlinkSync2,
8
12
  writeFileSync as writeFileSync2
9
13
  } from "node:fs";
10
- import { homedir as homedir2 } from "node:os";
11
- import { join as join3 } from "node:path";
14
+ import { homedir } from "node:os";
15
+ import { join as join2 } from "node:path";
12
16
 
13
17
  // packages/agent-runtime/credentialLocationMigration.ts
14
18
  import {
@@ -97,22 +101,13 @@ function migrateLegacyCredentialFile(args) {
97
101
  }
98
102
  }
99
103
 
100
- // packages/agent-runtime/noloStateDir.ts
101
- import { homedir } from "node:os";
102
- import { join as join2 } from "node:path";
103
- function resolveNoloStateDir(name, homeDir) {
104
- if (homeDir) return join2(homeDir, ".nolo", name);
105
- const noloHome = process.env.NOLO_HOME?.trim();
106
- return noloHome ? join2(noloHome, name) : join2(homedir(), ".nolo", name);
107
- }
108
-
109
104
  // packages/agent-runtime/oauthTokenStore.ts
110
105
  var DEFAULT_REFRESH_SKEW_MS = 5 * 60 * 1e3;
111
106
  function getCredentialsDir(homeDir) {
112
107
  return resolveNoloStateDir("credentials", homeDir);
113
108
  }
114
109
  function getCredentialPath(provider, homeDir) {
115
- return join3(getCredentialsDir(homeDir), `${provider}.json`);
110
+ return join2(getCredentialsDir(homeDir), `${provider}.json`);
116
111
  }
117
112
  function ensurePrivateDir2(dir) {
118
113
  mkdirSync2(dir, { recursive: true, mode: 448 });
@@ -138,7 +133,7 @@ function isValidOAuthCredential(raw, provider) {
138
133
  }
139
134
  function migrateOAuthCredentialIfNeeded(provider, homeDir, migration) {
140
135
  if (homeDir !== void 0 || !migration?.enableLegacyMigration) return;
141
- const legacyHomeDir = migration.legacyHomeDir ?? homedir2();
136
+ const legacyHomeDir = migration.legacyHomeDir ?? homedir();
142
137
  const canonicalPath = getCredentialPath(provider);
143
138
  migrateLegacyCredentialFile({
144
139
  canonicalPath,
@@ -235,7 +230,6 @@ async function resolveFreshAccessToken(args) {
235
230
  }
236
231
 
237
232
  export {
238
- resolveNoloStateDir,
239
233
  getLegacyCredentialPath,
240
234
  migrateLegacyCredentialFile,
241
235
  DEFAULT_REFRESH_SKEW_MS,
@@ -62,10 +62,12 @@ var CLOUDFLARE_AI_MESSAGES_ENDPOINT_TEMPLATE = "https://api.cloudflare.com/clien
62
62
  var PLATFORM_HOSTED_GROK_4_6_MODEL = "grok-4.6";
63
63
  var PLATFORM_HOSTED_GPT_6_ASTRA_MODEL = "gpt-6-astra";
64
64
  var PLATFORM_HOSTED_GPT_6_LUNA_MODEL = "gpt-6-luna";
65
+ var PLATFORM_HOSTED_GPT_6_SOL_MODEL = "gpt-6-sol";
65
66
  var PLATFORM_HOSTED_GPT_56_SOL_MODEL = "gpt-5.6-sol";
66
67
  var PLATFORM_HOSTED_GPT_56_TERRA_MODEL = "gpt-5.6-terra";
67
68
  var PLATFORM_HOSTED_GPT_56_LUNA_MODEL = "gpt-5.6-luna";
68
69
  var PLATFORM_HOSTED_GPT_6_1_SOL_MODEL = "gpt-6.1-sol";
70
+ var PLATFORM_HOSTED_GPT_6_1_TERRA_MODEL = "gpt-6.1-terra";
69
71
  var PLATFORM_HOSTED_KIMI_K26_OPENROUTER_MODEL_ID = "qwen/qwen3.8-27b";
70
72
  var PLATFORM_HOSTED_GLM_53_MODEL = "glm-5.3";
71
73
  var PLATFORM_HOSTED_GLM_52_MODEL = "glm-5.2";
@@ -91,6 +93,7 @@ var CLOUDFLARE_GPT_6_LUNA_UPSTREAM_MODEL_ID = "openai/gpt-6-luna";
91
93
  var CLOUDFLARE_GPT_56_TERRA_UPSTREAM_MODEL_ID = "openai/gpt-5.6-terra";
92
94
  var CLOUDFLARE_GPT_56_LUNA_UPSTREAM_MODEL_ID = "openai/gpt-5.6-luna";
93
95
  var CLOUDFLARE_GPT_6_1_SOL_UPSTREAM_MODEL_ID = "openai/gpt-6.1-sol";
96
+ var CLOUDFLARE_GPT_6_1_TERRA_UPSTREAM_MODEL_ID = "openai/gpt-6.1-terra";
94
97
  var CLOUDFLARE_AI_RESPONSES_ENDPOINT_TEMPLATE = "https://api.cloudflare.com/client/v4/accounts/{account}/ai/v1/responses";
95
98
  var PLATFORM_HOSTED_KIMI_K3_MIN_CLIENT_VERSION = "0.38.0-alpha.4";
96
99
  var PLATFORM_HOSTED_GLM_53_FLASH_MIN_CLIENT_VERSION = "0.33.0-alpha.1";
@@ -344,6 +347,17 @@ var PLATFORM_HOSTED_ROUTING_TABLE = {
344
347
  wire: "responses",
345
348
  agentRunHosted: true
346
349
  },
350
+ // GPT-6.1 Terra(2026-11-01 新增):与 6.1 Sol 同一条 Responses 线(CF 官方页同样
351
+ // 只声明「Responses, Chat Completions」与 reasoning.effort);上游是独立 catalog id,
352
+ // 不得与 sol 混用。不是任何模型的别名 —— gpt-5.6-terra 仍指它自己的 5.6 上游。
353
+ [PLATFORM_HOSTED_GPT_6_1_TERRA_MODEL]: {
354
+ endpoint: CLOUDFLARE_AI_RESPONSES_ENDPOINT_TEMPLATE,
355
+ usageProvider: "cloudflare",
356
+ keyName: "cloudflare",
357
+ upstreamModelId: CLOUDFLARE_GPT_6_1_TERRA_UPSTREAM_MODEL_ID,
358
+ wire: "responses",
359
+ agentRunHosted: true
360
+ },
347
361
  // Grok -> xAI(server agentRun 侧未分流,保持 no upstream route 报错)
348
362
  [PLATFORM_HOSTED_GROK_4_6_MODEL]: {
349
363
  endpoint: "https://api.x.ai/v1/chat/completions",
@@ -435,6 +449,24 @@ var PLATFORM_MODEL_ALIASES = {
435
449
  aliasOf: PLATFORM_HOSTED_GPT_6_1_SOL_MODEL,
436
450
  since: "2026-10-13",
437
451
  reason: "CF \u5B98\u65B9\u76EE\u5F55\u6362\u4EE3\uFF1Agpt-5.6-sol \u7531 gpt-6.1-sol \u627F\u63A5\uFF08owner \u6388\u6743\u900F\u660E\u6620\u5C04\uFF0C\u6309 6.1 \u8BA1\u8D39\uFF09\u3002"
452
+ },
453
+ // 家族内换代(owner 2026-11-01 决定):每个模型指向**自己家族的最新版本**,
454
+ // 不跨家族合并——故 luna 仍落 luna(不并到 terra,避免廉价档被抬到 10 倍价),
455
+ // astra 家族无新版、保持独立。
456
+ [PLATFORM_HOSTED_GPT_56_TERRA_MODEL]: {
457
+ aliasOf: PLATFORM_HOSTED_GPT_6_1_TERRA_MODEL,
458
+ since: "2026-11-01",
459
+ reason: "\u540C\u5BB6\u65CF\u6362\u4EE3\uFF08owner 2026-11-01 \u51B3\u5B9A\uFF09\uFF1Agpt-5.6-terra \u6307\u5411\u540C\u5BB6\u65CF\u6700\u65B0\u4EE3 gpt-6.1-terra\uFF0C\u900F\u660E\u6620\u5C04\uFF0C\u6309 6.1 Terra \u8BA1\u8D39\u3002"
460
+ },
461
+ [PLATFORM_HOSTED_GPT_56_LUNA_MODEL]: {
462
+ aliasOf: PLATFORM_HOSTED_GPT_6_LUNA_MODEL,
463
+ since: "2026-11-01",
464
+ reason: "\u540C\u5BB6\u65CF\u6362\u4EE3\uFF08owner 2026-11-01 \u51B3\u5B9A\uFF09\uFF1Agpt-5.6-luna \u6307\u5411\u540C\u5BB6\u65CF\u6700\u65B0\u4EE3 gpt-6-luna\uFF08\u4E0A\u6E38\u65E0 6.1-luna\uFF09\uFF0C\u900F\u660E\u6620\u5C04\uFF0C\u6309 6 Luna \u8BA1\u8D39\u3002"
465
+ },
466
+ [PLATFORM_HOSTED_GPT_6_SOL_MODEL]: {
467
+ aliasOf: PLATFORM_HOSTED_GPT_6_1_SOL_MODEL,
468
+ since: "2026-11-01",
469
+ reason: "\u540C\u5BB6\u65CF\u6362\u4EE3\uFF08owner 2026-11-01 \u51B3\u5B9A\uFF09\uFF1Agpt-6-sol \u6307\u5411\u540C\u5BB6\u65CF\u6700\u65B0\u4EE3 gpt-6.1-sol\uFF0C\u900F\u660E\u6620\u5C04\uFF0C\u6309 6.1 Sol \u8BA1\u8D39\u3002"
438
470
  }
439
471
  };
440
472
  function resolvePlatformEffectiveModel(model) {
@@ -799,6 +831,30 @@ var PLATFORM_HOSTED_GPT_6_1_SOL_LONG_CONTEXT_PRICE = {
799
831
  output: toPlatformCredits(15)
800
832
  // 120 credits
801
833
  };
834
+ var PLATFORM_HOSTED_GPT_6_1_TERRA_PRICE = {
835
+ input: toPlatformCredits(1),
836
+ // 8 credits
837
+ inputCacheHit: toPlatformCredits(0.05),
838
+ // 0.4 credits
839
+ cachingRead: toPlatformCredits(0.05),
840
+ // 0.4 credits(CF 官方短档 cached in)
841
+ cachingWrite: toPlatformCredits(1.25),
842
+ // 10 credits(CF 官方短档 cache write)
843
+ output: toPlatformCredits(5)
844
+ // 40 credits
845
+ };
846
+ var PLATFORM_HOSTED_GPT_6_1_TERRA_LONG_CONTEXT_PRICE = {
847
+ input: toPlatformCredits(2),
848
+ // 16 credits
849
+ inputCacheHit: toPlatformCredits(0.1),
850
+ // 0.8 credits
851
+ cachingRead: toPlatformCredits(0.1),
852
+ // 0.8 credits(CF 官方长档 cached in)
853
+ cachingWrite: toPlatformCredits(2.5),
854
+ // 20 credits(CF 官方长档 cache write)
855
+ output: toPlatformCredits(7.5)
856
+ // 60 credits
857
+ };
802
858
  var PLATFORM_HOSTED_GLM_53_FLASH_PRICE = {
803
859
  input: toPlatformCredits(0.1),
804
860
  // 0.8 credits
@@ -1254,6 +1310,35 @@ var platformHostedModels = [
1254
1310
  contextWindow: 105e4,
1255
1311
  supportsReasoningEffort: true
1256
1312
  },
1313
+ {
1314
+ // GPT-6.1 Terra(2026-11-01 收进广场,上游 Cloudflare AI Responses):
1315
+ // 事实仅取 CF 官方模型页(developers.cloudflare.com/ai/models/openai/gpt-6.1-terra/,
1316
+ // 2026-11-01 核对):上下文 1,050,000 tokens;请求格式 Responses / Chat Completions;
1317
+ // 官方示例使用 reasoning.effort(→ supportsReasoningEffort);价格见
1318
+ // PLATFORM_HOSTED_GPT_6_1_TERRA_PRICE。
1319
+ // hasVision:官方页模型描述明写「visual reasoning」「match product photos to catalog
1320
+ // entries / interpret technical drawings」= 官方声明了图像理解,故为 true(有文字依据,
1321
+ // 不是猜测;与 6.1 Sol 的 false 是按同一口径——Sol 页无任何视觉声明)。
1322
+ // 同 6.1 Sol:官方页无模型级 tools 能力与 max output 声明 → 不声明 supportsTool、
1323
+ // 不填 maxOutputTokens(沿用缺省,不猜数值)。
1324
+ name: PLATFORM_HOSTED_GPT_6_1_TERRA_MODEL,
1325
+ displayName: "GPT-6.1 Terra",
1326
+ hasVision: true,
1327
+ price: { ...PLATFORM_HOSTED_GPT_6_1_TERRA_PRICE },
1328
+ pricingStrategy: {
1329
+ type: "tiered_context",
1330
+ tiers: [
1331
+ {
1332
+ minContext: PLATFORM_HOSTED_GPT_LONG_CONTEXT_MIN_TOKENS,
1333
+ price: { ...PLATFORM_HOSTED_GPT_6_1_TERRA_LONG_CONTEXT_PRICE }
1334
+ }
1335
+ ]
1336
+ },
1337
+ // 2026-11-01 收进广场(= 平台上架日):CF 官方页未给发布日,故不冒称发布日。
1338
+ releasedAtMs: catalogReleasedAt(2026, 11, 1),
1339
+ contextWindow: 105e4,
1340
+ supportsReasoningEffort: true
1341
+ },
1257
1342
  // gpt-5.6-sol(2026-10-13):旧 id 是 gpt-6.1-sol 的兼容别名(PLATFORM_MODEL_ALIASES),
1258
1343
  // 不再作为可选商品上架;平台托管请求透明落到 6.1 的上游与 6.1 目录价。
1259
1344
  // 旧价目常量 PLATFORM_HOSTED_GPT_56_SOL_PRICE 保留给历史记录只读重放(不追溯)。
@@ -2,7 +2,7 @@ import {
2
2
  deleteDbRecord,
3
3
  queryUserRecords,
4
4
  readDbRecord
5
- } from "./chunk-6WZQGT5X.js";
5
+ } from "./chunk-CJ37ZMCQ.js";
6
6
  import {
7
7
  mergeAndDedupUserData
8
8
  } from "./chunk-OXME3PEE.js";