nolo-cli 0.191.0-alpha.3 → 0.191.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/{_executeModel-WQ2D4ZRH.js → _executeModel-4HQQXPN4.js} +44 -46
  2. package/{action-BHWB4MOK.js → action-HNG2JKWK.js} +3 -3
  3. package/{addContentAction-BY375D35.js → addContentAction-FEN3H2EE.js} +6 -6
  4. package/{addDialogAgentAction-HOZYOCWC.js → addDialogAgentAction-DDA6S3WS.js} +5 -5
  5. package/{agentDeleteCommand-TTCVC74A.js → agentDeleteCommand-HZFWSKED.js} +57 -59
  6. package/{agentEmailCommands-PTG35KER.js → agentEmailCommands-HRYMVHC7.js} +59 -61
  7. package/{agentListCommands-MAG736RU.js → agentListCommands-HE2CCZEW.js} +33 -31
  8. package/{agentMachineCommands-ATOZK3R5.js → agentMachineCommands-ISSULCRR.js} +23 -23
  9. package/{agentProviderCommands-XSZUCNIR.js → agentProviderCommands-4EAYN3ZY.js} +3 -3
  10. package/{agentRecordCommands-KGRPIJN5.js → agentRecordCommands-WGAMWQLA.js} +57 -59
  11. package/{agentRunCommand-75VVJTNU.js → agentRunCommand-7EQ64FIB.js} +59 -61
  12. package/{agentRunControl-6HHESKDB.js → agentRunControl-EJPBPVLU.js} +5 -5
  13. package/{agentRuntimeLocal-NAAYNHCW.js → agentRuntimeLocal-ONSIOOQB.js} +20 -20
  14. package/{agentSlice-UJPIKKKP.js → agentSlice-CHWNVAS5.js} +6 -6
  15. package/{appDeleteCommands-VDHCDVBF.js → appDeleteCommands-RNAF4V5C.js} +25 -25
  16. package/{appDeployCommands-V6UTKVXR.js → appDeployCommands-LTIZ4QH7.js} +25 -25
  17. package/{appDeployStatusCommands-4UIFSEPC.js → appDeployStatusCommands-OJJR4LDK.js} +25 -25
  18. package/{appGetCommands-XKDXLC3C.js → appGetCommands-UJZF6U4V.js} +25 -25
  19. package/{appListCommands-BELRVX2Y.js → appListCommands-M5C5BIDY.js} +25 -25
  20. package/{authCommand-RV5MQDWN.js → authCommand-RMUBRAXF.js} +11 -11
  21. package/{builtinSkillRegistry-7MBUY5EY.js → builtinSkillRegistry-XDBPVNY6.js} +3 -5
  22. package/{chromeOpsCommands-C46BXHEE.js → chromeOpsCommands-P4PFQDT7.js} +19 -4
  23. package/{chunk-7UODCAWW.js → chunk-32GANJHJ.js} +1 -1
  24. package/{chunk-G6OOUQWJ.js → chunk-4KB6WQUL.js} +2 -0
  25. package/{chunk-LHOR5MC2.js → chunk-4KYV2TAI.js} +164 -323
  26. package/{chunk-5EFNSNAV.js → chunk-6CFXWUYE.js} +7 -7
  27. package/{chunk-6XIE5ZGI.js → chunk-6HIGYUBQ.js} +1 -1
  28. package/{chunk-LBXUNNDS.js → chunk-6K2AKJAD.js} +1 -1
  29. package/{chunk-U5ZHUOLT.js → chunk-6OBTQSJ2.js} +2 -2
  30. package/{chunk-XPL63OIC.js → chunk-7SUYSFPG.js} +140 -66
  31. package/{chunk-53RSTB7T.js → chunk-7TMVGMM3.js} +26 -31
  32. package/{chunk-ZBCBFOWC.js → chunk-A2ZMIRLN.js} +2 -2
  33. package/{chunk-MJWUBTK7.js → chunk-AOYR4XOA.js} +1 -1
  34. package/{chunk-IIX6VWLW.js → chunk-AV6IE6NM.js} +224 -38
  35. package/{chunk-WFUIXNKC.js → chunk-BMXR7CFX.js} +3 -3
  36. package/{chunk-JIFYXQRD.js → chunk-BTYQAODF.js} +26 -8
  37. package/{chunk-VHGD6FHV.js → chunk-BZKBX5BO.js} +28 -5
  38. package/{chunk-Q6RMLYSA.js → chunk-CMLBKYEI.js} +4 -2
  39. package/chunk-CMTTXP5Y.js +291 -0
  40. package/{chunk-OHRDHS4N.js → chunk-CVCRAO6Q.js} +9 -4
  41. package/{chunk-SM56M7N7.js → chunk-DBRXPVWY.js} +39 -5
  42. package/{chunk-2KBNF477.js → chunk-DSVR6ZAV.js} +30 -21
  43. package/{chunk-ADTJJVDJ.js → chunk-DXDG4XLD.js} +2838 -2255
  44. package/{chunk-R5LJWMZE.js → chunk-EMXVOJDB.js} +3 -3
  45. package/{chunk-KHCLMKZZ.js → chunk-EY7V7REW.js} +280 -6
  46. package/{chunk-KGP7UTNN.js → chunk-FNXSQ7A3.js} +15 -15
  47. package/{chunk-BTBT2566.js → chunk-FSEGCTZQ.js} +1 -1
  48. package/{chunk-CNMQATUF.js → chunk-GL7W7TTR.js} +2 -2
  49. package/{chunk-5KTQVMCX.js → chunk-GOO6G4PY.js} +85 -0
  50. package/{chunk-HTLIKE5U.js → chunk-GVMF62PR.js} +2 -2
  51. package/{chunk-UZHYRBUB.js → chunk-H4CFODT7.js} +137 -61
  52. package/{chunk-R4BMKAR5.js → chunk-HAB2UDLT.js} +1 -1
  53. package/{chunk-3NPXGNSK.js → chunk-HVXL4VOO.js} +348 -87
  54. package/{chunk-32ZKZET7.js → chunk-HWZT5DKX.js} +1 -1
  55. package/{chunk-GYVLAHA4.js → chunk-IY7DGZSY.js} +10 -4
  56. package/{chunk-FEDJHD5X.js → chunk-J5Z2SSIY.js} +6 -6
  57. package/{chunk-UVWBGWBO.js → chunk-JA6WCCDO.js} +3 -3
  58. package/{chunk-YE6A72XL.js → chunk-JI5MQU5B.js} +35 -31
  59. package/{chunk-TFSMPRAY.js → chunk-JLOCKFSI.js} +4 -4
  60. package/{chunk-UBLITLAZ.js → chunk-K2GL335R.js} +13 -3
  61. package/{chunk-DS5DAOIY.js → chunk-KYQXW7DL.js} +3 -3
  62. package/{chunk-5HAPEKNH.js → chunk-LFJRTOUV.js} +158 -43
  63. package/{chunk-N7E3LQ4A.js → chunk-LGW6A7GK.js} +1 -1
  64. package/{chunk-UNOILAZP.js → chunk-M6AGLVV4.js} +74 -2
  65. package/{chunk-BA2FHPS4.js → chunk-MOCY5LJI.js} +1 -1
  66. package/{chunk-INFHX73M.js → chunk-MR6L6U46.js} +55 -3
  67. package/{chunk-CTPFBJAF.js → chunk-N7IBYQEC.js} +182 -91
  68. package/{chunk-QU3TLYBR.js → chunk-NHI3JZP4.js} +32 -8
  69. package/{chunk-B2N5GZBU.js → chunk-OHYCQKPW.js} +6 -6
  70. package/{chunk-WAZ6BTSC.js → chunk-OOERQPG5.js} +1 -1
  71. package/{chunk-EHB4CKUI.js → chunk-OTKNEZE3.js} +9 -9
  72. package/chunk-OVBUUU7L.js +2648 -0
  73. package/{chunk-PVD7CRYV.js → chunk-P7SUBTGZ.js} +3 -3
  74. package/{chunk-RJ3EYB5G.js → chunk-PRIROPK4.js} +1 -1
  75. package/chunk-PRJ473FK.js +63 -0
  76. package/{chunk-K6TZSON4.js → chunk-PXERKNSJ.js} +1 -1
  77. package/{chunk-B6EZB6DW.js → chunk-QAYCF4CH.js} +2 -2
  78. package/{chunk-5DPVRMSY.js → chunk-RBJASUX4.js} +1 -1
  79. package/{chunk-NVOYW6H4.js → chunk-RDKNGJ5M.js} +12 -8
  80. package/{chunk-GTP6VNWH.js → chunk-RQ22OZD7.js} +3 -3
  81. package/{chunk-2E5M3JVS.js → chunk-RWGIVUH3.js} +11 -5
  82. package/{chunk-DFF6B7P7.js → chunk-RXUKDHS5.js} +1 -1
  83. package/{chunk-JLR5NWP2.js → chunk-RXX262QX.js} +17 -3
  84. package/{chunk-GC64WGMD.js → chunk-SM3NSZJV.js} +16 -5
  85. package/{chunk-A5BLRE3G.js → chunk-T3U2KQF4.js} +2 -2
  86. package/{chunk-HLAL63BZ.js → chunk-T43B7LB2.js} +1 -1
  87. package/{chunk-LCSAJ5TJ.js → chunk-UDKNC3CV.js} +3 -3
  88. package/{chunk-VE3FEZIT.js → chunk-WKGOIXFV.js} +5 -5
  89. package/{chunk-4YMD7B4Y.js → chunk-WPOKOKZA.js} +2 -2
  90. package/{chunk-YIRADHSY.js → chunk-WYKMOZTW.js} +1 -1
  91. package/{chunk-WRCZXJ4N.js → chunk-X4F26D5K.js} +2 -0
  92. package/{chunk-4MYCKDSI.js → chunk-XUOF4MA7.js} +2 -2
  93. package/{chunk-PD2YRFAI.js → chunk-Y5ZEHS3F.js} +1 -1
  94. package/{chunk-4CEAZRZ4.js → chunk-YU2DGFKG.js} +1 -1
  95. package/{chunk-TVGX5QIN.js → chunk-YUA6OAH5.js} +2 -2
  96. package/{chunk-53PBXLID.js → chunk-Z3MQYKRN.js} +17 -17
  97. package/{chunk-I3HWJODB.js → chunk-ZHOKF4MY.js} +31 -26
  98. package/{chunk-2XUOREKD.js → chunk-ZI5MFQ42.js} +5 -4
  99. package/{chunk-DYQXB46J.js → chunk-ZSCIGIJS.js} +1 -1
  100. package/{commandRegistry-4JHVRMW7.js → commandRegistry-O2657YC7.js} +86 -66
  101. package/{contentThunks-HQBAAXNW.js → contentThunks-THWDEBJU.js} +17 -17
  102. package/{cooldownCommands-4XKJFEBW.js → cooldownCommands-V4EEBD55.js} +3 -3
  103. package/{createAgentAutomationAction-KELPOVMP.js → createAgentAutomationAction-2ZZTFGWG.js} +17 -17
  104. package/{createDialogAction-Z3SASMTM.js → createDialogAction-FCRKPKIT.js} +20 -22
  105. package/{createPageAction-PNHOIG44.js → createPageAction-EC25JTKW.js} +18 -19
  106. package/{dbSlice-QAUXABCC.js → dbSlice-JK7LWBDO.js} +5 -5
  107. package/{deleteFile-R5OBP7OM.js → deleteFile-CE24BROO.js} +3 -3
  108. package/{dialogCommands-4BGV6DPD.js → dialogCommands-QH7BJ3DJ.js} +26 -26
  109. package/{dialogSlice-QHV6I3OQ.js → dialogSlice-Z5E7POEN.js} +16 -16
  110. package/{docCreateCommands-3CW75UF2.js → docCreateCommands-KP42NGIF.js} +26 -27
  111. package/{docDeleteCommands-NL4ZYMN5.js → docDeleteCommands-7YOCX5GC.js} +27 -28
  112. package/{docReadCommands-HXCNVDPQ.js → docReadCommands-EJEIAOKQ.js} +26 -27
  113. package/{docStore-LVMUSECS.js → docStore-6MHLMMWO.js} +6 -6
  114. package/{docUpdateCommands-RMVBAMDE.js → docUpdateCommands-ACJLISGA.js} +26 -27
  115. package/{getPricing-E2PLNWCR.js → getPricing-3PQY3TGI.js} +3 -3
  116. package/{handleSendMessageAction-7TONIXHY.js → handleSendMessageAction-MTOPN4D3.js} +86 -42
  117. package/index.js +7 -7
  118. package/{lib-4YTWAGY7.js → lib-5KKIBFIT.js} +439 -272
  119. package/{localRuntimeAdapter-HRAB7P5E.js → localRuntimeAdapter-4USQ3EP7.js} +55 -57
  120. package/{machineCommands-OTXFRTDA.js → machineCommands-CJMSDSOO.js} +56 -58
  121. package/{machineWsRunDispatch-KWVWOHHG.js → machineWsRunDispatch-YIPO76QH.js} +56 -58
  122. package/{memberThunks-ZAE52VIP.js → memberThunks-WT2KVRP4.js} +158 -55
  123. package/{models-UUNO6DOL.js → models-PJBE6JDV.js} +2 -2
  124. package/package.json +1 -1
  125. package/{providerPresetApply-JGNMO2KX.js → providerPresetApply-ISA35424.js} +5 -5
  126. package/{providerRegistry-33J3ZYFJ.js → providerRegistry-QIQCHVNP.js} +5 -5
  127. package/{read-D6NEWSGG.js → read-ILTT75DW.js} +3 -3
  128. package/{readDocTool-NTAXO7SX.js → readDocTool-374CFJYO.js} +1 -1
  129. package/{readlineWorkspace-CEX5TXGM.js → readlineWorkspace-RORGDWZN.js} +291 -99
  130. package/{removeDialogAgentAction-YEPO5AYI.js → removeDialogAgentAction-BDLO7UC2.js} +7 -7
  131. package/{runAgentClientLoop-DCV4BD2W.js → runAgentClientLoop-CDCBSUWW.js} +41 -43
  132. package/{runtimeDoctorCommands-NYBOTA6D.js → runtimeDoctorCommands-AM2V5YVH.js} +5 -5
  133. package/{secretCommands-N6CMCJDZ.js → secretCommands-G5XYCXZB.js} +308 -1
  134. package/{setDialogExtraReferencesAction-EH5GWDAJ.js → setDialogExtraReferencesAction-GBIT7WAG.js} +6 -6
  135. package/{setPrimaryDialogAgentAction-PNWRK6IY.js → setPrimaryDialogAgentAction-PGBTR247.js} +7 -7
  136. package/{settingThunks-7VCWB6P7.js → settingThunks-XQJZVA4D.js} +38 -7
  137. package/{skillDiscovery-F3TMVQOJ.js → skillDiscovery-DO5372J5.js} +2 -3
  138. package/{spaceCommands-ZUI4CTSO.js → spaceCommands-BTSANKDH.js} +23 -23
  139. package/{streamAgentChatTurn-NKFKMFQ2.js → streamAgentChatTurn-VUF3EUMS.js} +66 -59
  140. package/{switchDialogAgentAction-23BFWJMV.js → switchDialogAgentAction-O7WTPLKG.js} +5 -5
  141. package/{tools-626VXEY7.js → tools-GAAYAIEW.js} +35 -37
  142. package/{tuiSummaryLlmCaller-FSOADMXK.js → tuiSummaryLlmCaller-MKOLOSH3.js} +11 -11
  143. package/{updateCommands-KE6LP3QX.js → updateCommands-W7TXEV7N.js} +3 -3
  144. package/{updateDialogTitleAction-RNNQAMXG.js → updateDialogTitleAction-LE2DBQDS.js} +17 -17
  145. package/{windowsSelfUpdate-26TSFXEZ.js → windowsSelfUpdate-575VQ6QO.js} +2 -2
  146. package/chunk-7KWPNGVJ.js +0 -150
  147. package/chunk-AETZ7AD6.js +0 -274
  148. package/chunk-EUGTFFO6.js +0 -42
  149. package/chunk-VYNMQ6HW.js +0 -138
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  fetchReferenceContents,
3
3
  resolveReferenceAssets
4
- } from "./chunk-FEDJHD5X.js";
4
+ } from "./chunk-J5Z2SSIY.js";
5
5
  import {
6
6
  updateTokensAction
7
- } from "./chunk-YE6A72XL.js";
7
+ } from "./chunk-JI5MQU5B.js";
8
8
  import {
9
9
  applyUpdateTokensFulfilled
10
10
  } from "./chunk-OWYYDMGJ.js";
@@ -12,7 +12,7 @@ import {
12
12
  extractReasoningFromResponseOutput,
13
13
  extractTextFromResponseOutput,
14
14
  extractToolCallsFromResponseOutput
15
- } from "./chunk-OHRDHS4N.js";
15
+ } from "./chunk-CVCRAO6Q.js";
16
16
  import {
17
17
  isRecord
18
18
  } from "./chunk-KUG52IAP.js";
@@ -1,4 +1,11 @@
1
- // node_modules/js-yaml/dist/js-yaml.mjs
1
+ import {
2
+ asTrimmedNonEmptyStringArray
3
+ } from "./chunk-I42VC5KR.js";
4
+ import {
5
+ asOptionalTrimmedString
6
+ } from "./chunk-G3SUCT4W.js";
7
+
8
+ // packages/ai/node_modules/js-yaml/dist/js-yaml.mjs
2
9
  function getDefaultExportFromCjs(x) {
3
10
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
4
11
  }
@@ -1276,16 +1283,21 @@ function requireLoader() {
1276
1283
  state.result += _result;
1277
1284
  }
1278
1285
  }
1286
+ function chargeMergeWork(state) {
1287
+ state.totalMergeKeys++;
1288
+ if (state.maxTotalMergeKeys !== -1 && state.totalMergeKeys > state.maxTotalMergeKeys) {
1289
+ throwError(state, "merge keys exceeded maxTotalMergeKeys (" + state.maxTotalMergeKeys + ")");
1290
+ }
1291
+ }
1279
1292
  function mergeMappings(state, destination, source, overridableKeys) {
1280
1293
  if (!common2.isObject(source)) {
1281
1294
  throwError(state, "cannot merge mappings; the provided source object is unacceptable");
1282
1295
  }
1296
+ chargeMergeWork(state);
1283
1297
  const sourceKeys = Object.keys(source);
1284
1298
  for (let index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {
1285
1299
  const key = sourceKeys[index];
1286
- if (state.maxTotalMergeKeys !== -1 && ++state.totalMergeKeys > state.maxTotalMergeKeys) {
1287
- throwError(state, "merge keys exceeded maxTotalMergeKeys (" + state.maxTotalMergeKeys + ")");
1288
- }
1300
+ chargeMergeWork(state);
1289
1301
  if (!_hasOwnProperty.call(destination, key)) {
1290
1302
  setProperty(destination, key, source[key]);
1291
1303
  overridableKeys[key] = true;
@@ -1313,6 +1325,9 @@ function requireLoader() {
1313
1325
  }
1314
1326
  if (keyTag === "tag:yaml.org,2002:merge") {
1315
1327
  if (Array.isArray(valueNode)) {
1328
+ if (valueNode.length > 100) {
1329
+ throwError(state, "abnormal merge sequence size");
1330
+ }
1316
1331
  for (let index = 0, quantity = valueNode.length; index < quantity; index += 1) {
1317
1332
  mergeMappings(state, _result, valueNode[index], overridableKeys);
1318
1333
  }
@@ -3056,7 +3071,266 @@ var {
3056
3071
  safeDump
3057
3072
  } = yaml;
3058
3073
 
3074
+ // packages/ai/skills/skillDocProtocol.ts
3075
+ var SKILL_DOC_ENUMS = {
3076
+ triggerMode: ["explicit", "required", "recommended"],
3077
+ // budgetTier 只服务 WorkflowReferenceConfig;skill 侧已移除(零读点)。
3078
+ budgetTier: ["low", "medium", "high"],
3079
+ modality: ["text", "image", "video", "audio", "3d"],
3080
+ docKind: ["knowledge", "instruction", "skill"]
3081
+ };
3082
+ var SKILL_CONFIG_BLOCK = "skill-config";
3083
+ var EVAL_CONFIG_BLOCK = "eval-config";
3084
+ var WORKFLOW_CONFIG_BLOCK = "workflow-config";
3085
+ var normalizeStringArray = (value) => {
3086
+ if (!Array.isArray(value)) return void 0;
3087
+ const items = [...new Set(asTrimmedNonEmptyStringArray(value))];
3088
+ return items.length > 0 ? items : void 0;
3089
+ };
3090
+ var normalizeSkillEnumValue = (key, value) => typeof value === "string" && SKILL_DOC_ENUMS[key].includes(value) ? value : void 0;
3091
+ var normalizeSkillModalities = (value) => {
3092
+ const raw = normalizeStringArray(value);
3093
+ if (!raw) return void 0;
3094
+ const filtered = raw.flatMap((item) => {
3095
+ const modality = normalizeSkillEnumValue("modality", item);
3096
+ return modality ? [modality] : [];
3097
+ });
3098
+ return filtered.length > 0 ? Array.from(new Set(filtered)) : void 0;
3099
+ };
3100
+ var normalizeSkillConfig = (value, fallbackTools) => {
3101
+ if (!value || typeof value !== "object") return void 0;
3102
+ const record = value;
3103
+ const name = asOptionalTrimmedString(record.name) ?? "";
3104
+ const description = asOptionalTrimmedString(record.description) ?? "";
3105
+ if (!name || !description) return void 0;
3106
+ const triggerMode = normalizeSkillEnumValue("triggerMode", record.triggerMode);
3107
+ const modalities = normalizeSkillModalities(record.modalities);
3108
+ const toolNames = normalizeStringArray(record.toolNames) ?? normalizeStringArray(fallbackTools) ?? void 0;
3109
+ return {
3110
+ version: "0.1",
3111
+ kind: "skill",
3112
+ id: asOptionalTrimmedString(record.id),
3113
+ name,
3114
+ description,
3115
+ triggerMode,
3116
+ toolNames,
3117
+ modalities,
3118
+ requiredSkills: normalizeStringArray(record.requiredSkills),
3119
+ recommendedSkills: normalizeStringArray(record.recommendedSkills),
3120
+ promptPatch: asOptionalTrimmedString(record.promptPatch)
3121
+ };
3122
+ };
3123
+ var normalizeEvalConfig = (value) => {
3124
+ if (!value || typeof value !== "object") return void 0;
3125
+ const record = value;
3126
+ if (!Array.isArray(record.cases)) return void 0;
3127
+ const cases = [];
3128
+ for (const item of record.cases) {
3129
+ if (!item || typeof item !== "object") continue;
3130
+ const testCase = item;
3131
+ const input = asOptionalTrimmedString(testCase.input) ?? "";
3132
+ if (!input) continue;
3133
+ cases.push({
3134
+ input,
3135
+ expectedTools: normalizeStringArray(testCase.expectedTools),
3136
+ expectedSignals: normalizeStringArray(testCase.expectedSignals),
3137
+ forbiddenSignals: normalizeStringArray(testCase.forbiddenSignals)
3138
+ });
3139
+ }
3140
+ return cases.length > 0 ? {
3141
+ version: "0.1",
3142
+ cases
3143
+ } : void 0;
3144
+ };
3145
+ var normalizeWorkflowConfig = (value) => {
3146
+ if (!value || typeof value !== "object") return void 0;
3147
+ const record = value;
3148
+ const name = asOptionalTrimmedString(record.name) ?? "";
3149
+ const description = asOptionalTrimmedString(record.description) ?? "";
3150
+ if (!name || !description) return void 0;
3151
+ const budgetTier = normalizeSkillEnumValue("budgetTier", record.budgetTier);
3152
+ return {
3153
+ version: "0.1",
3154
+ kind: "workflow",
3155
+ id: asOptionalTrimmedString(record.id),
3156
+ name,
3157
+ description,
3158
+ defaultAgent: asOptionalTrimmedString(record.defaultAgent),
3159
+ inputs: normalizeStringArray(record.inputs),
3160
+ recommendedTools: normalizeStringArray(record.recommendedTools),
3161
+ requiredTools: normalizeStringArray(record.requiredTools),
3162
+ requiredOutputs: normalizeStringArray(record.requiredOutputs),
3163
+ gates: normalizeStringArray(record.gates),
3164
+ budgetTier,
3165
+ contextStrategy: asOptionalTrimmedString(record.contextStrategy),
3166
+ failureProtocol: asOptionalTrimmedString(record.failureProtocol)
3167
+ };
3168
+ };
3169
+ var normalizePageSkillMetadata = (value, fallbackTools) => {
3170
+ if (!value || typeof value !== "object") return void 0;
3171
+ const record = value;
3172
+ const kind = normalizeSkillEnumValue("docKind", record.kind);
3173
+ const meta = {
3174
+ kind,
3175
+ requiredSkills: normalizeStringArray(record.requiredSkills),
3176
+ recommendedSkills: normalizeStringArray(record.recommendedSkills),
3177
+ skillConfig: normalizeSkillConfig(record.skillConfig, fallbackTools),
3178
+ evalConfig: normalizeEvalConfig(record.evalConfig),
3179
+ workflowConfig: normalizeWorkflowConfig(record.workflowConfig)
3180
+ };
3181
+ if (meta.skillConfig && !meta.kind) {
3182
+ meta.kind = "skill";
3183
+ }
3184
+ if (meta.workflowConfig && !meta.kind) {
3185
+ meta.kind = "instruction";
3186
+ }
3187
+ return meta.kind || meta.requiredSkills || meta.recommendedSkills || meta.skillConfig || meta.evalConfig || meta.workflowConfig ? meta : void 0;
3188
+ };
3189
+ var extractCommentBlock = (markdown, blockName) => {
3190
+ if (!markdown) return void 0;
3191
+ const matcher = new RegExp(
3192
+ `<!--\\s*${blockName}\\s*\\n([\\s\\S]*?)-->`,
3193
+ "i"
3194
+ );
3195
+ const match = markdown.match(matcher);
3196
+ return asOptionalTrimmedString(match?.[1]);
3197
+ };
3198
+ var removeCommentBlock = (markdown, blockName) => markdown.replace(
3199
+ new RegExp(`\\n?<!--\\s*${blockName}\\s*\\n[\\s\\S]*?-->\\s*`, "gi"),
3200
+ "\n\n"
3201
+ );
3202
+ var parseYamlObject = (raw) => {
3203
+ if (!raw) return void 0;
3204
+ try {
3205
+ const parsed = load(raw);
3206
+ return parsed && typeof parsed === "object" ? parsed : void 0;
3207
+ } catch {
3208
+ return void 0;
3209
+ }
3210
+ };
3211
+ var parseSkillDocProtocol = (markdown, existingMeta, fallbackTools) => {
3212
+ const source = typeof markdown === "string" ? markdown : "";
3213
+ const skillBlock = parseYamlObject(extractCommentBlock(source, SKILL_CONFIG_BLOCK));
3214
+ const evalBlock = parseYamlObject(extractCommentBlock(source, EVAL_CONFIG_BLOCK));
3215
+ const workflowBlock = parseYamlObject(extractCommentBlock(source, WORKFLOW_CONFIG_BLOCK));
3216
+ const cleanedContent = removeCommentBlock(
3217
+ removeCommentBlock(
3218
+ removeCommentBlock(source, SKILL_CONFIG_BLOCK),
3219
+ EVAL_CONFIG_BLOCK
3220
+ ),
3221
+ WORKFLOW_CONFIG_BLOCK
3222
+ ).replace(/\n{3,}/g, "\n\n").trim();
3223
+ const parsedMeta = normalizePageSkillMetadata(
3224
+ {
3225
+ ...existingMeta ?? {},
3226
+ ...skillBlock ? {
3227
+ kind: existingMeta?.kind === "skill" || skillBlock.kind === "skill" ? "skill" : existingMeta?.kind,
3228
+ requiredSkills: skillBlock.requiredSkills ?? existingMeta?.requiredSkills,
3229
+ recommendedSkills: skillBlock.recommendedSkills ?? existingMeta?.recommendedSkills,
3230
+ skillConfig: skillBlock
3231
+ } : {},
3232
+ ...evalBlock ? { evalConfig: evalBlock } : {},
3233
+ ...workflowBlock ? { workflowConfig: workflowBlock } : {}
3234
+ },
3235
+ fallbackTools
3236
+ );
3237
+ return {
3238
+ content: cleanedContent,
3239
+ meta: parsedMeta
3240
+ };
3241
+ };
3242
+ var resolvePageSkillMetadata = (page) => {
3243
+ if (!page) return void 0;
3244
+ const existingMeta = normalizePageSkillMetadata(page.meta, page.tools);
3245
+ return parseSkillDocProtocol(page.content ?? "", existingMeta, page.tools).meta;
3246
+ };
3247
+ var yamlBlock = (value) => dump(value, { lineWidth: 120, noRefs: true }).trim();
3248
+ var buildSkillConfigComment = (config) => {
3249
+ const payload = {
3250
+ version: config.version,
3251
+ kind: config.kind,
3252
+ ...config.id ? { id: config.id } : {},
3253
+ name: config.name,
3254
+ description: config.description,
3255
+ ...config.triggerMode ? { triggerMode: config.triggerMode } : {},
3256
+ ...config.requiredSkills?.length ? { requiredSkills: config.requiredSkills } : {},
3257
+ ...config.recommendedSkills?.length ? { recommendedSkills: config.recommendedSkills } : {},
3258
+ ...config.toolNames?.length ? { toolNames: config.toolNames } : {},
3259
+ ...config.modalities?.length ? { modalities: config.modalities } : {},
3260
+ ...config.promptPatch ? { promptPatch: config.promptPatch } : {}
3261
+ };
3262
+ return `<!-- ${SKILL_CONFIG_BLOCK}
3263
+ ${yamlBlock(payload)}
3264
+ -->`;
3265
+ };
3266
+ var buildEvalConfigComment = (config) => `<!-- ${EVAL_CONFIG_BLOCK}
3267
+ ${yamlBlock({
3268
+ version: config.version,
3269
+ cases: config.cases
3270
+ })}
3271
+ -->`;
3272
+ var buildWorkflowConfigComment = (config) => `<!-- ${WORKFLOW_CONFIG_BLOCK}
3273
+ ${yamlBlock({
3274
+ version: config.version,
3275
+ kind: config.kind,
3276
+ ...config.id ? { id: config.id } : {},
3277
+ name: config.name,
3278
+ description: config.description,
3279
+ ...config.defaultAgent ? { defaultAgent: config.defaultAgent } : {},
3280
+ ...config.inputs?.length ? { inputs: config.inputs } : {},
3281
+ ...config.recommendedTools?.length ? { recommendedTools: config.recommendedTools } : {},
3282
+ ...config.requiredTools?.length ? { requiredTools: config.requiredTools } : {},
3283
+ ...config.requiredOutputs?.length ? { requiredOutputs: config.requiredOutputs } : {},
3284
+ ...config.gates?.length ? { gates: config.gates } : {},
3285
+ ...config.budgetTier ? { budgetTier: config.budgetTier } : {},
3286
+ ...config.contextStrategy ? { contextStrategy: config.contextStrategy } : {},
3287
+ ...config.failureProtocol ? { failureProtocol: config.failureProtocol } : {}
3288
+ })}
3289
+ -->`;
3290
+ var buildSkillDocMarkdown = (options) => {
3291
+ const sections = [
3292
+ asOptionalTrimmedString(options.body) ?? "",
3293
+ buildSkillConfigComment(options.skillConfig),
3294
+ options.evalConfig ? buildEvalConfigComment(options.evalConfig) : "",
3295
+ options.workflowConfig ? buildWorkflowConfigComment(options.workflowConfig) : ""
3296
+ ].filter(Boolean);
3297
+ return sections.join("\n\n").trim();
3298
+ };
3299
+ var extractFrontmatter = (markdown) => {
3300
+ const match = markdown.match(/^\s*---\s*\n([\s\S]*?)\n\s*---\s*\n?/);
3301
+ if (!match) return { body: markdown.trim() };
3302
+ const frontmatter = parseYamlObject(match[1]);
3303
+ const body = markdown.slice(match[0].length).trim();
3304
+ return { frontmatter, body };
3305
+ };
3306
+ var normalizeAllowedTools = (value) => {
3307
+ if (Array.isArray(value)) {
3308
+ return normalizeStringArray(value) ?? [];
3309
+ }
3310
+ if (typeof value === "string") {
3311
+ return value.split(/\s+/).map((item) => item.trim()).filter(Boolean);
3312
+ }
3313
+ return [];
3314
+ };
3315
+ var parseExternalSkillMarkdown = (markdown) => {
3316
+ const { frontmatter, body } = extractFrontmatter(markdown);
3317
+ return {
3318
+ name: asOptionalTrimmedString(frontmatter?.name),
3319
+ description: asOptionalTrimmedString(frontmatter?.description),
3320
+ compatibility: asOptionalTrimmedString(frontmatter?.compatibility),
3321
+ allowedTools: normalizeAllowedTools(frontmatter?.["allowed-tools"]),
3322
+ metadata: frontmatter?.metadata && typeof frontmatter.metadata === "object" ? Object.fromEntries(
3323
+ Object.entries(frontmatter.metadata).filter(([, value]) => typeof value === "string").map(([key, value]) => [key, String(value)])
3324
+ ) : void 0,
3325
+ body
3326
+ };
3327
+ };
3328
+
3059
3329
  export {
3060
- load,
3061
- dump
3330
+ normalizeStringArray,
3331
+ normalizeSkillModalities,
3332
+ parseSkillDocProtocol,
3333
+ resolvePageSkillMetadata,
3334
+ buildSkillDocMarkdown,
3335
+ parseExternalSkillMarkdown
3062
3336
  };
@@ -5,7 +5,7 @@ import {
5
5
  inlineImageUrlsForCustomProvider,
6
6
  prepareTools,
7
7
  shouldInlineImageUrlsForAgent
8
- } from "./chunk-LCSAJ5TJ.js";
8
+ } from "./chunk-UDKNC3CV.js";
9
9
  import {
10
10
  CONFIRMATION_INPUT_KEYS,
11
11
  INVALID_TOOL_ARGS_REPLACEMENT,
@@ -14,16 +14,16 @@ import {
14
14
  performFetchRequest,
15
15
  sanitizeOutboundMessages,
16
16
  stripModelToolArgs
17
- } from "./chunk-EHB4CKUI.js";
17
+ } from "./chunk-OTKNEZE3.js";
18
18
  import {
19
19
  findToolExecutor,
20
20
  toolDefinitionsByName
21
- } from "./chunk-LHOR5MC2.js";
21
+ } from "./chunk-4KYV2TAI.js";
22
22
  import {
23
23
  classifyApiError,
24
24
  classifyGenerationError,
25
25
  extractErrorDiagnostics
26
- } from "./chunk-FEDJHD5X.js";
26
+ } from "./chunk-J5Z2SSIY.js";
27
27
  import {
28
28
  createSSEParser,
29
29
  createToolRunId,
@@ -32,7 +32,7 @@ import {
32
32
  toolRunSetPending,
33
33
  toolRunStarted,
34
34
  toolRunSucceeded
35
- } from "./chunk-3NPXGNSK.js";
35
+ } from "./chunk-HVXL4VOO.js";
36
36
  import {
37
37
  getPublicImageAgentMode
38
38
  } from "./chunk-VIDPVFP3.js";
@@ -45,10 +45,10 @@ import {
45
45
  messageStreaming,
46
46
  toolResultNeedsUserConfirmation,
47
47
  updateToolMessage
48
- } from "./chunk-YE6A72XL.js";
48
+ } from "./chunk-JI5MQU5B.js";
49
49
  import {
50
50
  streamAgentChatTurn
51
- } from "./chunk-CTPFBJAF.js";
51
+ } from "./chunk-N7IBYQEC.js";
52
52
  import {
53
53
  addActiveController,
54
54
  removeActiveController,
@@ -56,13 +56,13 @@ import {
56
56
  } from "./chunk-OWYYDMGJ.js";
57
57
  import {
58
58
  selectCurrentServer
59
- } from "./chunk-32ZKZET7.js";
59
+ } from "./chunk-HWZT5DKX.js";
60
60
  import {
61
61
  write
62
- } from "./chunk-B2N5GZBU.js";
62
+ } from "./chunk-OHYCQKPW.js";
63
63
  import {
64
64
  createAsyncThunk
65
- } from "./chunk-WRCZXJ4N.js";
65
+ } from "./chunk-X4F26D5K.js";
66
66
  import {
67
67
  selectIdentityToken
68
68
  } from "./chunk-PXYBUFDB.js";
@@ -73,7 +73,7 @@ import {
73
73
  projectUserPartForModel,
74
74
  resolveOutboundDiagnosticSink,
75
75
  resolveOutboundWire
76
- } from "./chunk-G6OOUQWJ.js";
76
+ } from "./chunk-4KB6WQUL.js";
77
77
  import {
78
78
  accumulateToolCallDelta,
79
79
  createThinkParserState,
@@ -85,13 +85,13 @@ import {
85
85
  } from "./chunk-56GBUMO5.js";
86
86
  import {
87
87
  normalizeChatCompletionsBodyForProvider
88
- } from "./chunk-OHRDHS4N.js";
88
+ } from "./chunk-CVCRAO6Q.js";
89
89
  import {
90
90
  EMPTY_ASSISTANT_REPAIR_PROMPT
91
- } from "./chunk-K6TZSON4.js";
91
+ } from "./chunk-PXERKNSJ.js";
92
92
  import {
93
93
  getModelInfo
94
- } from "./chunk-JIFYXQRD.js";
94
+ } from "./chunk-BTYQAODF.js";
95
95
  import {
96
96
  isAbortError
97
97
  } from "./chunk-7DPNBQSV.js";
@@ -103,7 +103,7 @@ import {
103
103
  } from "./chunk-HNMXYYJR.js";
104
104
  import {
105
105
  getApiEndpoint
106
- } from "./chunk-GC64WGMD.js";
106
+ } from "./chunk-SM3NSZJV.js";
107
107
  import {
108
108
  isRecord
109
109
  } from "./chunk-KUG52IAP.js";
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-PJNFNEJE.js";
5
5
  import {
6
6
  resolvePlatformAuthToken
7
- } from "./chunk-4YMD7B4Y.js";
7
+ } from "./chunk-WPOKOKZA.js";
8
8
  import {
9
9
  isCompiledBinary,
10
10
  resolveCliEntrypointPath
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  selectCurrentServer,
3
3
  selectRemoteServers
4
- } from "./chunk-32ZKZET7.js";
4
+ } from "./chunk-HWZT5DKX.js";
5
5
  import {
6
6
  noloDeleteRequest,
7
7
  noloWriteRequest
8
- } from "./chunk-WRCZXJ4N.js";
8
+ } from "./chunk-X4F26D5K.js";
9
9
  import {
10
10
  normalizeTimeFields
11
11
  } from "./chunk-6Q7UTJKR.js";
@@ -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 保留给历史记录只读重放(不追溯)。
@@ -15,10 +15,10 @@ import {
15
15
  } from "./chunk-Y6ROFCZO.js";
16
16
  import {
17
17
  scheduleWindowsSelfUpdate
18
- } from "./chunk-WAZ6BTSC.js";
18
+ } from "./chunk-OOERQPG5.js";
19
19
  import {
20
20
  t
21
- } from "./chunk-UNOILAZP.js";
21
+ } from "./chunk-M6AGLVV4.js";
22
22
 
23
23
  // packages/cli/updateCommands.ts
24
24
  import { existsSync, readFileSync, accessSync, constants } from "node:fs";