luckytri 1.0.6 → 1.0.8

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 (168) hide show
  1. package/LICENSE +21 -21
  2. package/README.en.md +7 -3
  3. package/README.md +7 -3
  4. package/docs/en/CHANGELOG.md +35 -16
  5. package/docs/en/chat-style.md +28 -9
  6. package/docs/en/guide.md +5 -5
  7. package/docs/en/her-life.md +2 -2
  8. package/docs/en/webui.md +1 -1
  9. package/docs/zh/CHANGELOG.md +35 -16
  10. package/docs/zh/chat-style.md +30 -9
  11. package/docs/zh/guide.md +5 -5
  12. package/docs/zh/her-life.md +2 -2
  13. package/docs/zh/webui.md +1 -1
  14. package/package.json +1 -1
  15. package/public/app/assets/{ChatsPage-DCYMkJ91.js → ChatsPage-CshdtTzV.js} +2 -2
  16. package/public/app/assets/ChatsPage-DfyPCS9N.css +1 -0
  17. package/public/app/assets/{Empty-CLyZkxR5.js → Empty-C7yzOBzy.js} +1 -1
  18. package/public/app/assets/{Empty-DIobYG3x.css → Empty-DmUB2-Bk.css} +1 -1
  19. package/public/app/assets/{Field-BpaRwLI_.js → Field-BjFv4Rfn.js} +1 -1
  20. package/public/app/assets/HeartPage-Bft9wZp5.css +1 -0
  21. package/public/app/assets/{HeartPage-BIOMTiwr.js → HeartPage-eqo6ru16.js} +1 -1
  22. package/public/app/assets/LifePage-BUi5euBF.css +1 -0
  23. package/public/app/assets/{LifePage-BCgM4JkR.js → LifePage-CN8GE5NK.js} +1 -1
  24. package/public/app/assets/{MemoryPage-vShvRqMt.js → MemoryPage-CCpMN4Wg.js} +1 -1
  25. package/public/app/assets/MemoryPage-cZvXfkXb.css +1 -0
  26. package/public/app/assets/{NaturePage-Cy9ptr4G.js → NaturePage-C0JqdBTR.js} +2 -2
  27. package/public/app/assets/NaturePage-CHkpb5NK.css +1 -0
  28. package/public/app/assets/PeoplePage-BTU0H1pM.css +1 -0
  29. package/public/app/assets/{PeoplePage-CUZekB2E.js → PeoplePage-BXGBbO4u.js} +1 -1
  30. package/public/app/assets/{PluginsPage-1RM4rmJP.js → PluginsPage-Dksp5AV5.js} +1 -1
  31. package/public/app/assets/{SystemPage-BI2CB5Ig.css → SystemPage-BenIyTvk.css} +1 -1
  32. package/public/app/assets/{SystemPage-BeT5TmIV.js → SystemPage-Cd7aa8eE.js} +1 -1
  33. package/public/app/assets/TimePage-BOms_n4I.css +1 -0
  34. package/public/app/assets/{TimePage-taTmPMM8.js → TimePage-Bs_zImb4.js} +2 -2
  35. package/public/app/assets/{index-DY5AM0Hz.css → index-BHZcHUMh.css} +1 -1
  36. package/public/app/assets/{index-DdYwC5ZU.js → index-CyRtYxP3.js} +3 -3
  37. package/public/app/assets/{knowledge-DJmfu2KN.js → knowledge-BJOIyuJo.js} +1 -1
  38. package/public/app/assets/{media-BEtnE0Gv.js → media-Bwtx8blz.js} +1 -1
  39. package/public/app/assets/{mind-Dtiw0-QK.js → mind-DtTVrW6Z.js} +1 -1
  40. package/public/app/index.html +5 -6
  41. package/public/guide.en.html +3 -3
  42. package/public/guide.html +3 -3
  43. package/scripts/import-data.js +128 -128
  44. package/scripts/proxy-config.js +167 -167
  45. package/scripts/update-instance.js +201 -201
  46. package/server/channels/adapters.js +27 -27
  47. package/server/channels/onebot/adapter.js +288 -288
  48. package/server/channels/qqbot/adapter.js +253 -253
  49. package/server/channels/qqbot/api.js +199 -199
  50. package/server/channels/qqbot/credentials.js +11 -11
  51. package/server/channels/qqbot/gateway.js +274 -274
  52. package/server/channels/qqbot/index.js +389 -389
  53. package/server/channels/segments.js +40 -40
  54. package/server/channels/session-key.js +153 -153
  55. package/server/channels/state.js +42 -42
  56. package/server/core/api.js +564 -564
  57. package/server/core/context-builder.js +288 -288
  58. package/server/core/context-compactor.js +454 -454
  59. package/server/core/conversation-cues.js +385 -325
  60. package/server/core/conversation-grounding.js +304 -0
  61. package/server/core/conversation-manager.js +87 -87
  62. package/server/core/dialogue-context.js +244 -0
  63. package/server/core/dialogue-contract.js +35 -0
  64. package/server/core/feedback.js +8 -8
  65. package/server/core/group-style.js +72 -72
  66. package/server/core/initiative-context.js +68 -66
  67. package/server/core/input-budget.js +32 -32
  68. package/server/core/local-demo.js +98 -98
  69. package/server/core/message-manager.js +118 -118
  70. package/server/core/message-scheduler.js +78 -78
  71. package/server/core/model-json.js +190 -190
  72. package/server/core/model-manager.js +5 -8
  73. package/server/core/model-presets.js +900 -900
  74. package/server/core/name-call.js +29 -29
  75. package/server/core/network.js +157 -157
  76. package/server/core/person-name.js +22 -22
  77. package/server/core/persona-manager.js +359 -269
  78. package/server/core/reader-check.js +62 -0
  79. package/server/core/reply-delivery.js +537 -404
  80. package/server/core/reply-target-resolver.js +50 -50
  81. package/server/core/response-generator.js +92 -50
  82. package/server/core/response-validator.js +53 -32
  83. package/server/core/retired-prompts.js +51 -51
  84. package/server/core/sessions.js +109 -109
  85. package/server/core/speaker-names.js +92 -92
  86. package/server/core/topic-tracker.js +65 -65
  87. package/server/core/turn.js +82 -15
  88. package/server/http.js +18 -18
  89. package/server/i18n/decisions.js +209 -209
  90. package/server/i18n/errors.js +2 -0
  91. package/server/i18n/index.js +144 -144
  92. package/server/i18n/labels.js +6 -10
  93. package/server/i18n/models.js +111 -111
  94. package/server/knowledge/api.js +342 -342
  95. package/server/knowledge/embedding-profile.js +114 -114
  96. package/server/knowledge/index.js +13 -13
  97. package/server/knowledge/retrieval.js +93 -93
  98. package/server/knowledge/schema.js +158 -158
  99. package/server/knowledge/vector-index.js +90 -90
  100. package/server/mind/affect.js +265 -265
  101. package/server/mind/attention.js +200 -200
  102. package/server/mind/bonds.js +565 -565
  103. package/server/mind/clock.js +83 -83
  104. package/server/mind/context-selection.js +16 -4
  105. package/server/mind/continuity.js +562 -562
  106. package/server/mind/conversation-origin.js +175 -175
  107. package/server/mind/days.js +210 -210
  108. package/server/mind/evidence-read.js +45 -45
  109. package/server/mind/expression-grounding.js +21 -0
  110. package/server/mind/faces.js +373 -373
  111. package/server/mind/guard.js +68 -60
  112. package/server/mind/initiative.js +338 -338
  113. package/server/mind/life/activities.js +21 -21
  114. package/server/mind/life/context.js +330 -330
  115. package/server/mind/life/growth.js +261 -261
  116. package/server/mind/life/presence.js +305 -305
  117. package/server/mind/meetings.js +1069 -1069
  118. package/server/mind/memory-policy.js +48 -48
  119. package/server/mind/memory.js +888 -888
  120. package/server/mind/nature.js +358 -358
  121. package/server/mind/novelty.js +19 -19
  122. package/server/mind/own-voice.js +35 -0
  123. package/server/mind/periods.js +118 -118
  124. package/server/mind/reading.js +132 -120
  125. package/server/mind/relationship-context.js +71 -71
  126. package/server/mind/relationships.js +390 -390
  127. package/server/mind/salience.js +201 -201
  128. package/server/mind/schema.js +567 -567
  129. package/server/mind/self.js +496 -484
  130. package/server/mind/thoughts.js +274 -274
  131. package/server/mind/time/agenda.js +242 -242
  132. package/server/mind/time/api.js +200 -200
  133. package/server/mind/time/attention.js +34 -34
  134. package/server/mind/time/availability.js +23 -1
  135. package/server/mind/time/executor.js +4 -2
  136. package/server/mind/time/games.js +20 -11
  137. package/server/mind/time/index.js +9 -2
  138. package/server/mind/time/kinds.js +29 -2
  139. package/server/mind/time/material-relevance.js +19 -0
  140. package/server/mind/time/model-material.js +77 -77
  141. package/server/mind/time/presentation.js +35 -51
  142. package/server/mind/time/reading-input.js +31 -0
  143. package/server/mind/time/schedule.js +83 -83
  144. package/server/mind/time/schema.js +84 -84
  145. package/server/mind/time/search.js +383 -383
  146. package/server/mind/time/sharing.js +482 -472
  147. package/server/mind/time/task-links.js +311 -311
  148. package/server/mind/time/tasks.js +41 -3
  149. package/server/mind/time/works.js +527 -432
  150. package/server/mind/traits.js +191 -191
  151. package/server/mind/view.js +62 -12
  152. package/server/runtime/installation.js +116 -116
  153. package/server/runtime/update-manager.js +140 -140
  154. package/server/storage/data-package.js +298 -298
  155. package/server/storage/data-transfer-api.js +50 -50
  156. package/server/storage/data-transfer-worker.js +18 -18
  157. package/server/storage/data-transfer.js +416 -416
  158. package/server/studio/display-names.js +139 -139
  159. package/server/studio/management.js +102 -102
  160. package/server/studio/updates.js +144 -144
  161. package/server/version.js +10 -10
  162. package/public/app/assets/ChatsPage-CFMVozoG.css +0 -1
  163. package/public/app/assets/HeartPage-C-2jvgzF.css +0 -1
  164. package/public/app/assets/LifePage-CG1OHbRK.css +0 -1
  165. package/public/app/assets/MemoryPage-C_Bu4rfb.css +0 -1
  166. package/public/app/assets/NaturePage-CPZlImT0.css +0 -1
  167. package/public/app/assets/PeoplePage-3RRUITDz.css +0 -1
  168. package/public/app/assets/TimePage-C-guwPk2.css +0 -1
@@ -457,6 +457,8 @@ export const ERRORS = {
457
457
  "正在推进活动步骤,请稍后测试":
458
458
  "An activity step is in progress. Test again shortly.",
459
459
  只有真实完成稿可以交付: "Only a genuinely finished piece can be delivered",
460
+ "这篇记录引用了与作品无关的资料,不能作为游戏阅读进度分享":
461
+ "This note uses material unrelated to the work and cannot be shared as reading progress",
460
462
  正文包含其他会话的私下内容:
461
463
  "The text contains private content from another session",
462
464
  作品来源不允许在此会话分享:
@@ -1,144 +1,144 @@
1
- import { ERRORS, ERROR_PATTERNS } from "./errors.js";
2
- import { LABELS, LABEL_PATTERNS } from "./labels.js";
3
- import { MODEL_LABELS, MODEL_PATTERNS } from "./models.js";
4
- import { DECISIONS, DECISION_PATTERNS } from "./decisions.js";
5
-
6
- // The server writes its own wording in Chinese, which is the key here. When the
7
- // page asks for English (header `X-LuckyTri-Locale: en`), strings that match a
8
- // known sentence are swapped on the way out of /api. Everything she or anyone
9
- // else wrote is a different string and passes through untouched.
10
-
11
- export const LOCALE_HEADER = "x-luckytri-locale";
12
-
13
- const HAN = /[\u3400-\u9fff]/;
14
- const MAX_DEPTH = 4;
15
-
16
- // Values under these keys are somebody's words, never the system's.
17
- const CONTENT_KEYS = new Set([
18
- "content",
19
- "text",
20
- "body",
21
- "raw",
22
- "rawContent",
23
- "raw_content",
24
- "summary_text",
25
- "nickname",
26
- ]);
27
-
28
- const EXACT = new Map(
29
- Object.entries({ ...LABELS, ...MODEL_LABELS, ...DECISIONS, ...ERRORS }),
30
- );
31
-
32
- const SEPARATORS = { ",": ", ", ";": "; ", "、": ", " };
33
-
34
- function compile([zh, en]) {
35
- const parts = zh.split(/\{\d\}/);
36
- const slots = [...zh.matchAll(/\{(\d)\}/g)].map((m) => Number(m[1]));
37
- const source = parts
38
- .map((part) => part.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"))
39
- .join("(.+?)");
40
- return {
41
- weight: parts.join("").length,
42
- re: new RegExp(`^${source}$`, "s"),
43
- slots,
44
- en,
45
- };
46
- }
47
-
48
- const PATTERNS = [
49
- ...ERROR_PATTERNS,
50
- ...LABEL_PATTERNS,
51
- ...MODEL_PATTERNS,
52
- ...DECISION_PATTERNS,
53
- ]
54
- .map(compile)
55
- .sort((a, b) => b.weight - a.weight);
56
-
57
- // "1 days ago" reads badly; the code writes numbers, not grammar.
58
- function singular(text) {
59
- return text.replace(
60
- /(^|[^\d.,])1 (day|week|month|year|session|message|character)s\b/g,
61
- (_, lead, noun) => `${lead}1 ${noun}`,
62
- );
63
- }
64
-
65
- function translateText(text, depth = 0) {
66
- if (!HAN.test(text)) return text;
67
- const hit = EXACT.get(text);
68
- if (hit !== undefined) return hit;
69
- if (depth >= MAX_DEPTH) return text;
70
-
71
- for (const { re, slots, en } of PATTERNS) {
72
- const match = re.exec(text);
73
- if (!match) continue;
74
- const values = [];
75
- slots.forEach((slot, index) => {
76
- values[slot] = translateText(match[index + 1], depth + 1);
77
- });
78
- return singular(en.replace(/\{(\d)\}/g, (_, i) => values[Number(i)] ?? ""));
79
- }
80
-
81
- // A sentence with a detail in brackets: "…(detail)".
82
- const bracket = /^([^()]+)(([^()]+))(。?)$/.exec(text);
83
- if (bracket) {
84
- const head = translateText(bracket[1], depth + 1);
85
- if (!HAN.test(head))
86
- return `${head} (${translateText(bracket[2], depth + 1)})${bracket[3] ? "." : ""}`;
87
- }
88
-
89
- // "a,b" lists and a closing full stop: translate when every piece is known.
90
- if (text.endsWith("。")) {
91
- const head = translateText(text.slice(0, -1), depth + 1);
92
- if (!HAN.test(head)) return `${head}.`;
93
- }
94
- if (/[,;、]/.test(text)) {
95
- const pieces = text.split(/([,;、])/);
96
- const out = pieces.map((piece, index) =>
97
- index % 2 ? SEPARATORS[piece] : translateText(piece, depth + 1),
98
- );
99
- const joined = out.join("").trim();
100
- if (!HAN.test(joined)) return joined;
101
- }
102
- return text;
103
- }
104
-
105
- export function localeOf(req) {
106
- const raw = String(req?.headers?.[LOCALE_HEADER] || "").toLowerCase();
107
- return raw === "en" || raw.startsWith("en-") ? "en" : "zh";
108
- }
109
-
110
- export function translate(text, locale = "en") {
111
- return locale === "en" && typeof text === "string"
112
- ? translateText(text)
113
- : text;
114
- }
115
-
116
- export function localizeValue(value, locale = "en") {
117
- if (locale !== "en") return value;
118
- return walk(value);
119
- }
120
-
121
- function walk(value, key = "") {
122
- if (typeof value === "string") {
123
- return CONTENT_KEYS.has(key) ? value : translateText(value);
124
- }
125
- if (Array.isArray(value)) return value.map((item) => walk(item, key));
126
- if (value && typeof value === "object") {
127
- if (value instanceof Date) return value;
128
- const out = {};
129
- for (const [name, item] of Object.entries(value))
130
- out[name] = walk(item, name);
131
- return out;
132
- }
133
- return value;
134
- }
135
-
136
- // Mounted first on /api so that errors raised by later middleware are covered.
137
- export function localizeApi(req, res, next) {
138
- req.locale = localeOf(req);
139
- if (req.locale === "en") {
140
- const json = res.json.bind(res);
141
- res.json = (body) => json(localizeValue(body, "en"));
142
- }
143
- next();
144
- }
1
+ import { ERRORS, ERROR_PATTERNS } from "./errors.js";
2
+ import { LABELS, LABEL_PATTERNS } from "./labels.js";
3
+ import { MODEL_LABELS, MODEL_PATTERNS } from "./models.js";
4
+ import { DECISIONS, DECISION_PATTERNS } from "./decisions.js";
5
+
6
+ // The server writes its own wording in Chinese, which is the key here. When the
7
+ // page asks for English (header `X-LuckyTri-Locale: en`), strings that match a
8
+ // known sentence are swapped on the way out of /api. Everything she or anyone
9
+ // else wrote is a different string and passes through untouched.
10
+
11
+ export const LOCALE_HEADER = "x-luckytri-locale";
12
+
13
+ const HAN = /[\u3400-\u9fff]/;
14
+ const MAX_DEPTH = 4;
15
+
16
+ // Values under these keys are somebody's words, never the system's.
17
+ const CONTENT_KEYS = new Set([
18
+ "content",
19
+ "text",
20
+ "body",
21
+ "raw",
22
+ "rawContent",
23
+ "raw_content",
24
+ "summary_text",
25
+ "nickname",
26
+ ]);
27
+
28
+ const EXACT = new Map(
29
+ Object.entries({ ...LABELS, ...MODEL_LABELS, ...DECISIONS, ...ERRORS }),
30
+ );
31
+
32
+ const SEPARATORS = { ",": ", ", ";": "; ", "、": ", " };
33
+
34
+ function compile([zh, en]) {
35
+ const parts = zh.split(/\{\d\}/);
36
+ const slots = [...zh.matchAll(/\{(\d)\}/g)].map((m) => Number(m[1]));
37
+ const source = parts
38
+ .map((part) => part.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"))
39
+ .join("(.+?)");
40
+ return {
41
+ weight: parts.join("").length,
42
+ re: new RegExp(`^${source}$`, "s"),
43
+ slots,
44
+ en,
45
+ };
46
+ }
47
+
48
+ const PATTERNS = [
49
+ ...ERROR_PATTERNS,
50
+ ...LABEL_PATTERNS,
51
+ ...MODEL_PATTERNS,
52
+ ...DECISION_PATTERNS,
53
+ ]
54
+ .map(compile)
55
+ .sort((a, b) => b.weight - a.weight);
56
+
57
+ // "1 days ago" reads badly; the code writes numbers, not grammar.
58
+ function singular(text) {
59
+ return text.replace(
60
+ /(^|[^\d.,])1 (day|week|month|year|session|message|character)s\b/g,
61
+ (_, lead, noun) => `${lead}1 ${noun}`,
62
+ );
63
+ }
64
+
65
+ function translateText(text, depth = 0) {
66
+ if (!HAN.test(text)) return text;
67
+ const hit = EXACT.get(text);
68
+ if (hit !== undefined) return hit;
69
+ if (depth >= MAX_DEPTH) return text;
70
+
71
+ for (const { re, slots, en } of PATTERNS) {
72
+ const match = re.exec(text);
73
+ if (!match) continue;
74
+ const values = [];
75
+ slots.forEach((slot, index) => {
76
+ values[slot] = translateText(match[index + 1], depth + 1);
77
+ });
78
+ return singular(en.replace(/\{(\d)\}/g, (_, i) => values[Number(i)] ?? ""));
79
+ }
80
+
81
+ // A sentence with a detail in brackets: "…(detail)".
82
+ const bracket = /^([^()]+)(([^()]+))(。?)$/.exec(text);
83
+ if (bracket) {
84
+ const head = translateText(bracket[1], depth + 1);
85
+ if (!HAN.test(head))
86
+ return `${head} (${translateText(bracket[2], depth + 1)})${bracket[3] ? "." : ""}`;
87
+ }
88
+
89
+ // "a,b" lists and a closing full stop: translate when every piece is known.
90
+ if (text.endsWith("。")) {
91
+ const head = translateText(text.slice(0, -1), depth + 1);
92
+ if (!HAN.test(head)) return `${head}.`;
93
+ }
94
+ if (/[,;、]/.test(text)) {
95
+ const pieces = text.split(/([,;、])/);
96
+ const out = pieces.map((piece, index) =>
97
+ index % 2 ? SEPARATORS[piece] : translateText(piece, depth + 1),
98
+ );
99
+ const joined = out.join("").trim();
100
+ if (!HAN.test(joined)) return joined;
101
+ }
102
+ return text;
103
+ }
104
+
105
+ export function localeOf(req) {
106
+ const raw = String(req?.headers?.[LOCALE_HEADER] || "").toLowerCase();
107
+ return raw === "en" || raw.startsWith("en-") ? "en" : "zh";
108
+ }
109
+
110
+ export function translate(text, locale = "en") {
111
+ return locale === "en" && typeof text === "string"
112
+ ? translateText(text)
113
+ : text;
114
+ }
115
+
116
+ export function localizeValue(value, locale = "en") {
117
+ if (locale !== "en") return value;
118
+ return walk(value);
119
+ }
120
+
121
+ function walk(value, key = "") {
122
+ if (typeof value === "string") {
123
+ return CONTENT_KEYS.has(key) ? value : translateText(value);
124
+ }
125
+ if (Array.isArray(value)) return value.map((item) => walk(item, key));
126
+ if (value && typeof value === "object") {
127
+ if (value instanceof Date) return value;
128
+ const out = {};
129
+ for (const [name, item] of Object.entries(value))
130
+ out[name] = walk(item, name);
131
+ return out;
132
+ }
133
+ return value;
134
+ }
135
+
136
+ // Mounted first on /api so that errors raised by later middleware are covered.
137
+ export function localizeApi(req, res, next) {
138
+ req.locale = localeOf(req);
139
+ if (req.locale === "en") {
140
+ const json = res.json.bind(res);
141
+ res.json = (body) => json(localizeValue(body, "en"));
142
+ }
143
+ next();
144
+ }
@@ -3,6 +3,10 @@
3
3
  // key, exactly as the code writes it. Only a whole string that equals a key is
4
4
  // translated, so what she writes herself is never touched.
5
5
  export const LABELS = {
6
+ 等待约定的正文或资料: "Waiting for the agreed manuscript or material",
7
+ 等待来稿的阅读约定不能当成写作执行:
8
+ "A promise to read an incoming manuscript cannot run as writing",
9
+ 指定的正文还不可阅读: "The specified manuscript is not available to read yet",
6
10
  存在运行伴随文件: "Runtime sidecar files exist",
7
11
  近期自动恢复点: "Recent automatic restore point",
8
12
  // feedback.js
@@ -466,12 +470,7 @@ export const LABELS = {
466
470
 
467
471
  // mind/time/model-material.js, presentation.js, search.js
468
472
  用模型整理资料主题: "Sorting the material topic with the model",
469
- 游玩体验: "Play experience",
470
473
  本段游玩记录: "This span's play record",
471
- "留下第一印象,想好接下来要做什么":
472
- "Leave first impressions and decide what to do next",
473
- 继续游玩: "Keep playing",
474
- 自己的游玩体验: "Her own play experience",
475
474
  "实例中断,查询结果未确认":
476
475
  "The instance was interrupted; the query result is unconfirmed",
477
476
  "资料查询条件已恢复,重新按优先级安排":
@@ -613,7 +612,6 @@ export const LABEL_PATTERNS = [
613
612
  "Touched by others' words {0} times; last {1}, and she {2}",
614
613
  ],
615
614
  ["第 {0} / {1} 段", "Passage {0} / {1}"],
616
- ["主题片段 {0}", "Topic passage {0}"],
617
615
  [
618
616
  "正在玩,本段预计约 {0} 分钟",
619
617
  "Playing; this span should take about {0} min",
@@ -623,10 +621,8 @@ export const LABEL_PATTERNS = [
623
621
  "I finished piece {1} of “{0}”. The text is saved in the works library; the plot and characters in it are made up.",
624
622
  ],
625
623
  ["接续《{0}》第 {1} 篇", "Continue piece {1} of “{0}”"],
626
- [
627
- "玩过第 {0} 段,留下自己的游玩记录",
628
- "Played passage {0} and left her own play record",
629
- ],
624
+ ["已留下《{0}》这篇阅读笔记", "Saved a reading note titled “{0}”"],
625
+ ["已接触一些游戏资料", "Has read some game reference material"],
630
626
  ["{0},已保存 {1} 字完成稿", "{0}, saved a finished piece of {1} characters"],
631
627
  ["{0},已保存 {1} 字正文", "{0}, saved {1} characters of text"],
632
628
  [
@@ -1,111 +1,111 @@
1
- // English for the model library: provider names, tiers, thinking levels and the
2
- // notes beside each preset. Product and model names stay as the vendors write
3
- // them; only the Chinese around them is translated.
4
- const STANDARD_TAIL = "输入超过 272K 整单按长上下文计价。";
5
- const STANDARD_TAIL_EN =
6
- "Input over 272K is billed entirely at the long-context rate.";
7
- const FLAT_TAIL = "1M 内同一价格,没有分档。";
8
- const FLAT_TAIL_EN = "One price within 1M, no tiers.";
9
-
10
- export const MODEL_LABELS = {
11
- // tiers
12
- "标准(输入 ≤272K)": "Standard (input ≤272K)",
13
- "百万(1.05M)": "Million (1.05M)",
14
-
15
- // thinking levels
16
- 关闭: "Off",
17
- 极低: "Minimal",
18
- 低: "Low",
19
- 中: "Medium",
20
- 高: "High",
21
- 极高: "Extra high",
22
- 最深: "Deepest",
23
-
24
- // providers and labels
25
- 火山方舟: "Volcengine Ark",
26
- "火山方舟 Coding Plan": "Volcengine Ark Coding Plan",
27
- "方舟自动路由(ark-code-latest)": "Ark auto-routing (ark-code-latest)",
28
- "GLM 最新别名(glm-latest)": "GLM latest alias (glm-latest)",
29
- "小米 MiMo": "Xiaomi MiMo",
30
- "智谱 GLM": "Zhipu GLM",
31
- 通义千问: "Qwen",
32
- "亚马逊 Bedrock": "Amazon Bedrock",
33
- 自定义: "Custom",
34
- 自定义兼容接口: "Custom compatible API",
35
- "OpenRouter · 自选模型": "OpenRouter · your own model",
36
-
37
- // notes
38
- "控制台管理的动态模型入口;实际使用哪一个模型由 Coding Plan 控制台选择,切换通常数分钟后生效。支持图片理解。":
39
- "A dynamic model entry managed in the console; which model is actually used is chosen in the Coding Plan console, and a switch usually takes a few minutes. Supports image understanding.",
40
- [`当前主力。思考默认开启(high),可关闭;支持看图。${FLAT_TAIL}`]: `The current mainstay. Thinking is on by default (high) and can be turned off; supports images. ${FLAT_TAIL_EN}`,
41
- [`V4-Pro-0813。思考默认开启(high),可关闭;仅文本。${FLAT_TAIL}`]: `V4-Pro-0813. Thinking is on by default (high) and can be turned off; text only. ${FLAT_TAIL_EN}`,
42
- [`旗舰。思考默认开启,可关闭;支持图片、视频、音频输入。${FLAT_TAIL}`]: `Flagship. Thinking is on by default and can be turned off; accepts image, video and audio input. ${FLAT_TAIL_EN}`,
43
- [`高频调用。思考默认开启,可关闭;支持图片、视频、音频输入。${FLAT_TAIL}`]: `For frequent calls. Thinking is on by default and can be turned off; accepts image, video and audio input. ${FLAT_TAIL_EN}`,
44
- [`旗舰。思考不能关闭,默认 max;仅文本。${FLAT_TAIL}`]: `Flagship. Thinking cannot be turned off and defaults to max; text only. ${FLAT_TAIL_EN}`,
45
- [`原生多模态。思考不能关闭,默认 max;支持图片、视频。${FLAT_TAIL}`]: `Natively multimodal. Thinking cannot be turned off and defaults to max; supports images and video. ${FLAT_TAIL_EN}`,
46
- "旗舰。思考不能关闭,默认 max;支持看图。1M 内同一价格;输出和输入共用窗口,官方默认输出 128K。":
47
- "Flagship. Thinking cannot be turned off and defaults to max; supports images. One price within 1M; output and input share the window, with a vendor default output of 128K.",
48
- "通用模型。思考默认开启,可关闭;支持看图。输出和输入共用 256K 窗口,官方默认输出 32K。":
49
- "General-purpose. Thinking is on by default and can be turned off; supports images. Output and input share a 256K window, with a vendor default output of 32K.",
50
- [`最强旗舰。思考不能关闭,官方未写默认档,预填 medium;支持看图。${STANDARD_TAIL}`]: `The strongest flagship. Thinking cannot be turned off; the vendor states no default level, so medium is prefilled; supports images. ${STANDARD_TAIL_EN}`,
51
- [`复杂编码与智能体。思考默认 medium,可关闭;支持看图。${STANDARD_TAIL}`]: `Complex coding and agents. Thinking defaults to medium and can be turned off; supports images. ${STANDARD_TAIL_EN}`,
52
- [`高频轻量。思考默认 medium,可关闭;支持看图。${STANDARD_TAIL}`]: `Lightweight for frequent calls. Thinking defaults to medium and can be turned off; supports images. ${STANDARD_TAIL_EN}`,
53
- "OpenRouter 路由 · openai/gpt-6-astra。1.05M 上下文、128K 最大输出;支持图片、结构化输出和工具调用。":
54
- "OpenRouter route · openai/gpt-6-astra. 1.05M context, 128K max output; supports images, structured output and tool calls.",
55
- "OpenRouter 路由 · openai/gpt-6-sol。1.05M 上下文、128K 最大输出;支持图片、结构化输出和工具调用。":
56
- "OpenRouter route · openai/gpt-6-sol. 1.05M context, 128K max output; supports images, structured output and tool calls.",
57
- "OpenRouter 路由 · openai/gpt-6-luna。1.05M 上下文、128K 最大输出;支持图片、结构化输出和工具调用。":
58
- "OpenRouter route · openai/gpt-6-luna. 1.05M context, 128K max output; supports images, structured output and tool calls.",
59
- "OpenRouter 路由 · z-ai/glm-5.3-flash。1,310,720 上下文、131,072 最大输出;支持图片、结构化输出和工具调用。":
60
- "OpenRouter route · z-ai/glm-5.3-flash. 1,310,720 context, 131,072 max output; supports images, structured output and tool calls.",
61
- [`上一代旗舰,别名 gpt-5.6。思考默认 medium,可关闭;支持看图。${STANDARD_TAIL}`]: `Previous-generation flagship, alias gpt-5.6. Thinking defaults to medium and can be turned off; supports images. ${STANDARD_TAIL_EN}`,
62
- [`上一代均衡款。思考默认 medium,可关闭;支持看图。${STANDARD_TAIL}`]: `Previous-generation balanced model. Thinking defaults to medium and can be turned off; supports images. ${STANDARD_TAIL_EN}`,
63
- [`上一代高性价比。思考默认 medium,可关闭;支持看图。${STANDARD_TAIL}`]: `Previous-generation value model. Thinking defaults to medium and can be turned off; supports images. ${STANDARD_TAIL_EN}`,
64
- [`旗舰,快照 qwen3.8-max-0902。思考默认开启(xhigh),可关闭;支持图片、视频。${FLAT_TAIL}`]: `Flagship, snapshot qwen3.8-max-0902. Thinking is on by default (xhigh) and can be turned off; supports images and video. ${FLAT_TAIL_EN}`,
65
- [`轻量。思考默认开启(xhigh),可关闭;支持图片、视频。${FLAT_TAIL}`]: `Lightweight. Thinking is on by default (xhigh) and can be turned off; supports images and video. ${FLAT_TAIL_EN}`,
66
- [`美国跨区推理。思考不能关闭,预填 medium;支持看图。runtime 不支持结构化输出,已关闭 JSON 输出。${STANDARD_TAIL}`]: `US cross-region inference. Thinking cannot be turned off and medium is prefilled; supports images. The runtime has no structured output, so JSON output is turned off. ${STANDARD_TAIL_EN}`,
67
- [`AWS 模型卡尚未发布,模型 ID 取自 OpenAI 的 Bedrock 指南,JSON 输出先关闭。思考默认 medium,可关闭;支持看图。${STANDARD_TAIL}`]: `The AWS model card is not published yet; the model ID comes from OpenAI's Bedrock guide, and JSON output is off for now. Thinking defaults to medium and can be turned off; supports images. ${STANDARD_TAIL_EN}`,
68
- "OpenCode Zen · GPT-6 系列旗舰 · Responses 接口。":
69
- "OpenCode Zen · GPT-6 series flagship · Responses API.",
70
- "OpenCode Zen · GPT-6 均衡款 · Responses 接口。":
71
- "OpenCode Zen · GPT-6 balanced · Responses API.",
72
- "OpenCode Zen · GPT-6 轻量款 · Responses 接口。":
73
- "OpenCode Zen · GPT-6 lightweight · Responses API.",
74
- "OpenCode Zen · 快速推理 · Chat Completions 接口。":
75
- "OpenCode Zen · fast inference · Chat Completions API.",
76
- "OpenCode Zen · DeepSeek V4 旗舰 · Chat Completions 接口。":
77
- "OpenCode Zen · DeepSeek V4 flagship · Chat Completions API.",
78
- "OpenCode Zen · 轻量高速 · Chat Completions 接口。":
79
- "OpenCode Zen · lightweight and fast · Chat Completions API.",
80
- "OpenCode Zen · 智谱轻量多模态 · Chat Completions 接口。":
81
- "OpenCode Zen · Zhipu lightweight multimodal · Chat Completions API.",
82
- "OpenCode Zen · 智谱旗舰 · Chat Completions 接口。":
83
- "OpenCode Zen · Zhipu flagship · Chat Completions API.",
84
- "OpenCode Zen · Kimi 旗舰 · Chat Completions 接口。":
85
- "OpenCode Zen · Kimi flagship · Chat Completions API.",
86
- "OpenCode Zen · 通义千问轻量多模态 · Anthropic Messages 接口。":
87
- "OpenCode Zen · Qwen lightweight multimodal · Anthropic Messages API.",
88
- "OpenCode Zen · MiniMax 主力模型 · Chat Completions 接口。":
89
- "OpenCode Zen · MiniMax main model · Chat Completions API.",
90
- "OpenCode Zen · 当前限时免费 · Chat Completions 接口。参考 OpenRouter Space Bunny Alpha 规格:1M 上下文、最高 524K 输出,支持图像/视频、推理、工具和 JSON;其匿名第三方提供方可能保留提示和回答。LuckyTri 默认输入 128K、输出 8K、低推理;当前图片链路可用,视频链路未支持。Zen 路由能力与数据政策可能不同。":
91
- "OpenCode Zen · free for a limited time · Chat Completions API. Modeled on the OpenRouter Space Bunny Alpha spec: 1M context, up to 524K output, image/video, reasoning, tools and JSON; its anonymous third-party providers may keep prompts and replies. LuckyTri defaults to 128K input, 8K output and low reasoning; images work today, video is not supported. Zen routes may differ in ability and data policy.",
92
- "OpenAI 兼容接口。上下文先按 128K 填,思考档可按供应商再改。":
93
- "OpenAI-compatible API. Context is prefilled at 128K; the thinking level can be changed per provider.",
94
- "已填好 OpenRouter API 地址。请自行填写模型 ID、API Key,并按所选模型设置上下文、输出和能力参数。":
95
- "The OpenRouter API URL is filled in. Enter the model ID and API key yourself, and set the context, output and ability parameters for the chosen model.",
96
- };
97
-
98
- export const MODEL_PATTERNS = [
99
- [
100
- "OpenCode Go · {0} · {1} 接口。默认上下文和输出预算为保守起始值,可按账户实际模型上限调整。",
101
- "OpenCode Go · {0} · {1} API. Default context and output budgets are conservative starting values; adjust them to your account's real model limits.",
102
- ],
103
- [
104
- "Coding Plan 专属 Responses 接口 · 上下文 {0} · 官方最大输出 {1} · 支持图片理解。默认中等推理;Kimi K2.8 Preview 在 LuckyTri 中预留 64K 输出预算以保留长上下文。",
105
- "Coding Plan–only Responses API · context {0} · vendor max output {1} · supports image understanding. Medium reasoning by default; Kimi K2.8 Preview reserves a 64K output budget in LuckyTri to keep the long context.",
106
- ],
107
- [
108
- "Coding Plan 专属 Responses 接口 · 上下文 {0} · 官方最大输出 {1} · 文本模型。默认中等推理;Kimi K2.8 Preview 在 LuckyTri 中预留 64K 输出预算以保留长上下文。",
109
- "Coding Plan–only Responses API · context {0} · vendor max output {1} · text model. Medium reasoning by default; Kimi K2.8 Preview reserves a 64K output budget in LuckyTri to keep the long context.",
110
- ],
111
- ];
1
+ // English for the model library: provider names, tiers, thinking levels and the
2
+ // notes beside each preset. Product and model names stay as the vendors write
3
+ // them; only the Chinese around them is translated.
4
+ const STANDARD_TAIL = "输入超过 272K 整单按长上下文计价。";
5
+ const STANDARD_TAIL_EN =
6
+ "Input over 272K is billed entirely at the long-context rate.";
7
+ const FLAT_TAIL = "1M 内同一价格,没有分档。";
8
+ const FLAT_TAIL_EN = "One price within 1M, no tiers.";
9
+
10
+ export const MODEL_LABELS = {
11
+ // tiers
12
+ "标准(输入 ≤272K)": "Standard (input ≤272K)",
13
+ "百万(1.05M)": "Million (1.05M)",
14
+
15
+ // thinking levels
16
+ 关闭: "Off",
17
+ 极低: "Minimal",
18
+ 低: "Low",
19
+ 中: "Medium",
20
+ 高: "High",
21
+ 极高: "Extra high",
22
+ 最深: "Deepest",
23
+
24
+ // providers and labels
25
+ 火山方舟: "Volcengine Ark",
26
+ "火山方舟 Coding Plan": "Volcengine Ark Coding Plan",
27
+ "方舟自动路由(ark-code-latest)": "Ark auto-routing (ark-code-latest)",
28
+ "GLM 最新别名(glm-latest)": "GLM latest alias (glm-latest)",
29
+ "小米 MiMo": "Xiaomi MiMo",
30
+ "智谱 GLM": "Zhipu GLM",
31
+ 通义千问: "Qwen",
32
+ "亚马逊 Bedrock": "Amazon Bedrock",
33
+ 自定义: "Custom",
34
+ 自定义兼容接口: "Custom compatible API",
35
+ "OpenRouter · 自选模型": "OpenRouter · your own model",
36
+
37
+ // notes
38
+ "控制台管理的动态模型入口;实际使用哪一个模型由 Coding Plan 控制台选择,切换通常数分钟后生效。支持图片理解。":
39
+ "A dynamic model entry managed in the console; which model is actually used is chosen in the Coding Plan console, and a switch usually takes a few minutes. Supports image understanding.",
40
+ [`当前主力。思考默认开启(high),可关闭;支持看图。${FLAT_TAIL}`]: `The current mainstay. Thinking is on by default (high) and can be turned off; supports images. ${FLAT_TAIL_EN}`,
41
+ [`V4-Pro-0813。思考默认开启(high),可关闭;仅文本。${FLAT_TAIL}`]: `V4-Pro-0813. Thinking is on by default (high) and can be turned off; text only. ${FLAT_TAIL_EN}`,
42
+ [`旗舰。思考默认开启,可关闭;支持图片、视频、音频输入。${FLAT_TAIL}`]: `Flagship. Thinking is on by default and can be turned off; accepts image, video and audio input. ${FLAT_TAIL_EN}`,
43
+ [`高频调用。思考默认开启,可关闭;支持图片、视频、音频输入。${FLAT_TAIL}`]: `For frequent calls. Thinking is on by default and can be turned off; accepts image, video and audio input. ${FLAT_TAIL_EN}`,
44
+ [`旗舰。思考不能关闭,默认 max;仅文本。${FLAT_TAIL}`]: `Flagship. Thinking cannot be turned off and defaults to max; text only. ${FLAT_TAIL_EN}`,
45
+ [`原生多模态。思考不能关闭,默认 max;支持图片、视频。${FLAT_TAIL}`]: `Natively multimodal. Thinking cannot be turned off and defaults to max; supports images and video. ${FLAT_TAIL_EN}`,
46
+ "旗舰。思考不能关闭,默认 max;支持看图。1M 内同一价格;输出和输入共用窗口,官方默认输出 128K。":
47
+ "Flagship. Thinking cannot be turned off and defaults to max; supports images. One price within 1M; output and input share the window, with a vendor default output of 128K.",
48
+ "通用模型。思考默认开启,可关闭;支持看图。输出和输入共用 256K 窗口,官方默认输出 32K。":
49
+ "General-purpose. Thinking is on by default and can be turned off; supports images. Output and input share a 256K window, with a vendor default output of 32K.",
50
+ [`最强旗舰。思考不能关闭,官方未写默认档,预填 medium;支持看图。${STANDARD_TAIL}`]: `The strongest flagship. Thinking cannot be turned off; the vendor states no default level, so medium is prefilled; supports images. ${STANDARD_TAIL_EN}`,
51
+ [`复杂编码与智能体。思考默认 medium,可关闭;支持看图。${STANDARD_TAIL}`]: `Complex coding and agents. Thinking defaults to medium and can be turned off; supports images. ${STANDARD_TAIL_EN}`,
52
+ [`高频轻量。思考默认 medium,可关闭;支持看图。${STANDARD_TAIL}`]: `Lightweight for frequent calls. Thinking defaults to medium and can be turned off; supports images. ${STANDARD_TAIL_EN}`,
53
+ "OpenRouter 路由 · openai/gpt-6-astra。1.05M 上下文、128K 最大输出;支持图片、结构化输出和工具调用。":
54
+ "OpenRouter route · openai/gpt-6-astra. 1.05M context, 128K max output; supports images, structured output and tool calls.",
55
+ "OpenRouter 路由 · openai/gpt-6-sol。1.05M 上下文、128K 最大输出;支持图片、结构化输出和工具调用。":
56
+ "OpenRouter route · openai/gpt-6-sol. 1.05M context, 128K max output; supports images, structured output and tool calls.",
57
+ "OpenRouter 路由 · openai/gpt-6-luna。1.05M 上下文、128K 最大输出;支持图片、结构化输出和工具调用。":
58
+ "OpenRouter route · openai/gpt-6-luna. 1.05M context, 128K max output; supports images, structured output and tool calls.",
59
+ "OpenRouter 路由 · z-ai/glm-5.3-flash。1,310,720 上下文、131,072 最大输出;支持图片、结构化输出和工具调用。":
60
+ "OpenRouter route · z-ai/glm-5.3-flash. 1,310,720 context, 131,072 max output; supports images, structured output and tool calls.",
61
+ [`上一代旗舰,别名 gpt-5.6。思考默认 medium,可关闭;支持看图。${STANDARD_TAIL}`]: `Previous-generation flagship, alias gpt-5.6. Thinking defaults to medium and can be turned off; supports images. ${STANDARD_TAIL_EN}`,
62
+ [`上一代均衡款。思考默认 medium,可关闭;支持看图。${STANDARD_TAIL}`]: `Previous-generation balanced model. Thinking defaults to medium and can be turned off; supports images. ${STANDARD_TAIL_EN}`,
63
+ [`上一代高性价比。思考默认 medium,可关闭;支持看图。${STANDARD_TAIL}`]: `Previous-generation value model. Thinking defaults to medium and can be turned off; supports images. ${STANDARD_TAIL_EN}`,
64
+ [`旗舰,快照 qwen3.8-max-0902。思考默认开启(xhigh),可关闭;支持图片、视频。${FLAT_TAIL}`]: `Flagship, snapshot qwen3.8-max-0902. Thinking is on by default (xhigh) and can be turned off; supports images and video. ${FLAT_TAIL_EN}`,
65
+ [`轻量。思考默认开启(xhigh),可关闭;支持图片、视频。${FLAT_TAIL}`]: `Lightweight. Thinking is on by default (xhigh) and can be turned off; supports images and video. ${FLAT_TAIL_EN}`,
66
+ [`美国跨区推理。思考不能关闭,预填 medium;支持看图。runtime 不支持结构化输出,已关闭 JSON 输出。${STANDARD_TAIL}`]: `US cross-region inference. Thinking cannot be turned off and medium is prefilled; supports images. The runtime has no structured output, so JSON output is turned off. ${STANDARD_TAIL_EN}`,
67
+ [`AWS 模型卡尚未发布,模型 ID 取自 OpenAI 的 Bedrock 指南,JSON 输出先关闭。思考默认 medium,可关闭;支持看图。${STANDARD_TAIL}`]: `The AWS model card is not published yet; the model ID comes from OpenAI's Bedrock guide, and JSON output is off for now. Thinking defaults to medium and can be turned off; supports images. ${STANDARD_TAIL_EN}`,
68
+ "OpenCode Zen · GPT-6 系列旗舰 · Responses 接口。":
69
+ "OpenCode Zen · GPT-6 series flagship · Responses API.",
70
+ "OpenCode Zen · GPT-6 均衡款 · Responses 接口。":
71
+ "OpenCode Zen · GPT-6 balanced · Responses API.",
72
+ "OpenCode Zen · GPT-6 轻量款 · Responses 接口。":
73
+ "OpenCode Zen · GPT-6 lightweight · Responses API.",
74
+ "OpenCode Zen · 快速推理 · Chat Completions 接口。":
75
+ "OpenCode Zen · fast inference · Chat Completions API.",
76
+ "OpenCode Zen · DeepSeek V4 旗舰 · Chat Completions 接口。":
77
+ "OpenCode Zen · DeepSeek V4 flagship · Chat Completions API.",
78
+ "OpenCode Zen · 轻量高速 · Chat Completions 接口。":
79
+ "OpenCode Zen · lightweight and fast · Chat Completions API.",
80
+ "OpenCode Zen · 智谱轻量多模态 · Chat Completions 接口。":
81
+ "OpenCode Zen · Zhipu lightweight multimodal · Chat Completions API.",
82
+ "OpenCode Zen · 智谱旗舰 · Chat Completions 接口。":
83
+ "OpenCode Zen · Zhipu flagship · Chat Completions API.",
84
+ "OpenCode Zen · Kimi 旗舰 · Chat Completions 接口。":
85
+ "OpenCode Zen · Kimi flagship · Chat Completions API.",
86
+ "OpenCode Zen · 通义千问轻量多模态 · Anthropic Messages 接口。":
87
+ "OpenCode Zen · Qwen lightweight multimodal · Anthropic Messages API.",
88
+ "OpenCode Zen · MiniMax 主力模型 · Chat Completions 接口。":
89
+ "OpenCode Zen · MiniMax main model · Chat Completions API.",
90
+ "OpenCode Zen · 当前限时免费 · Chat Completions 接口。参考 OpenRouter Space Bunny Alpha 规格:1M 上下文、最高 524K 输出,支持图像/视频、推理、工具和 JSON;其匿名第三方提供方可能保留提示和回答。LuckyTri 默认输入 128K、输出 8K、低推理;当前图片链路可用,视频链路未支持。Zen 路由能力与数据政策可能不同。":
91
+ "OpenCode Zen · free for a limited time · Chat Completions API. Modeled on the OpenRouter Space Bunny Alpha spec: 1M context, up to 524K output, image/video, reasoning, tools and JSON; its anonymous third-party providers may keep prompts and replies. LuckyTri defaults to 128K input, 8K output and low reasoning; images work today, video is not supported. Zen routes may differ in ability and data policy.",
92
+ "OpenAI 兼容接口。上下文先按 128K 填,思考档可按供应商再改。":
93
+ "OpenAI-compatible API. Context is prefilled at 128K; the thinking level can be changed per provider.",
94
+ "已填好 OpenRouter API 地址。请自行填写模型 ID、API Key,并按所选模型设置上下文、输出和能力参数。":
95
+ "The OpenRouter API URL is filled in. Enter the model ID and API key yourself, and set the context, output and ability parameters for the chosen model.",
96
+ };
97
+
98
+ export const MODEL_PATTERNS = [
99
+ [
100
+ "OpenCode Go · {0} · {1} 接口。默认上下文和输出预算为保守起始值,可按账户实际模型上限调整。",
101
+ "OpenCode Go · {0} · {1} API. Default context and output budgets are conservative starting values; adjust them to your account's real model limits.",
102
+ ],
103
+ [
104
+ "Coding Plan 专属 Responses 接口 · 上下文 {0} · 官方最大输出 {1} · 支持图片理解。默认中等推理;Kimi K2.8 Preview 在 LuckyTri 中预留 64K 输出预算以保留长上下文。",
105
+ "Coding Plan–only Responses API · context {0} · vendor max output {1} · supports image understanding. Medium reasoning by default; Kimi K2.8 Preview reserves a 64K output budget in LuckyTri to keep the long context.",
106
+ ],
107
+ [
108
+ "Coding Plan 专属 Responses 接口 · 上下文 {0} · 官方最大输出 {1} · 文本模型。默认中等推理;Kimi K2.8 Preview 在 LuckyTri 中预留 64K 输出预算以保留长上下文。",
109
+ "Coding Plan–only Responses API · context {0} · vendor max output {1} · text model. Medium reasoning by default; Kimi K2.8 Preview reserves a 64K output budget in LuckyTri to keep the long context.",
110
+ ],
111
+ ];