front-cpu 0.1.1 → 0.1.3

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.
@@ -9,15 +9,29 @@
9
9
  */
10
10
  import type { QueuedInstruction } from '../types';
11
11
  import { ConsoleLevel } from './types';
12
+ import { type CPUConsoleLocale, type CPUConsoleTranslate } from './console-i18n';
12
13
  export declare class CPUConsole {
13
14
  private enabled;
14
15
  private level;
15
16
  private filter;
17
+ private locale;
18
+ private translator;
16
19
  constructor();
20
+ /**
21
+ * 设置语言(en / zh-CN)
22
+ */
23
+ setLocale(locale: CPUConsoleLocale): void;
24
+ /**
25
+ * 自定义翻译函数(不依赖任何 i18n 框架)
26
+ */
27
+ setI18nTranslator(t: CPUConsoleTranslate): void;
28
+ getLocale(): CPUConsoleLocale;
17
29
  /**
18
30
  * 加载设置
19
31
  */
20
32
  private loadSettings;
33
+ private t;
34
+ private getDefaultLocale;
21
35
  /**
22
36
  * 配置方法
23
37
  */
@@ -1 +1 @@
1
- {"version":3,"file":"CPUConsole.d.ts","sourceRoot":"","sources":["../../src/logging/CPUConsole.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGtC,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,MAAM,CAAyB;;IAMvC;;OAEG;IACH,OAAO,CAAC,YAAY;IAiBpB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKnC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAKhC,MAAM,IAAI,IAAI;IAId,OAAO,IAAI,IAAI;IAIf,QAAQ,IAAI,YAAY;IAMxB;;OAEG;IACH,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI;IAqD1D;;OAEG;IACH,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IA8E5E;;OAEG;IACH,sBAAsB,CAAC,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IA+C9E;;OAEG;IACH,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAkD1F;;OAEG;IACH,mBAAmB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI;IAiCzD;;OAEG;IACH,sBAAsB,CAAC,WAAW,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAoC5E;;OAEG;IACH,mBAAmB,CACjB,WAAW,EAAE,iBAAiB,EAC9B,eAAe,EAAE,MAAM,EAAE,EACzB,QAAQ,EAAE,MAAM,GACf,IAAI;IAWP;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAWnF;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAiBxF;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA4C3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAqB/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkCxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;OAEG;IACH,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAapC;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAuBhG;AAGD,eAAO,MAAM,UAAU,YAAmB,CAAA;AAG1C,OAAO,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"CPUConsole.d.ts","sourceRoot":"","sources":["../../src/logging/CPUConsole.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACzB,MAAM,gBAAgB,CAAA;AAEvB,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,UAAU,CAA+D;;IAMjF;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAMzC;;OAEG;IACH,iBAAiB,CAAC,CAAC,EAAE,mBAAmB,GAAG,IAAI;IAI/C,SAAS,IAAI,gBAAgB;IAI7B;;OAEG;IACH,OAAO,CAAC,YAAY;IA2BpB,OAAO,CAAC,CAAC;IAIT,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKnC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAKhC,MAAM,IAAI,IAAI;IAId,OAAO,IAAI,IAAI;IAIf,QAAQ,IAAI,YAAY;IAMxB;;OAEG;IACH,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI;IAqD1D;;OAEG;IACH,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IA8E5E;;OAEG;IACH,sBAAsB,CAAC,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IA+C9E;;OAEG;IACH,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAkD1F;;OAEG;IACH,mBAAmB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI;IAiCzD;;OAEG;IACH,sBAAsB,CAAC,WAAW,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAoC5E;;OAEG;IACH,mBAAmB,CACjB,WAAW,EAAE,iBAAiB,EAC9B,eAAe,EAAE,MAAM,EAAE,EACzB,QAAQ,EAAE,MAAM,GACf,IAAI;IAWP;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAWnF;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAiBxF;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA4C3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAqB/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkCxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,OAAO,CAAC,UAAU;IAmBlB;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;OAEG;IACH,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAapC;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CA0BhG;AAGD,eAAO,MAAM,UAAU,YAAmB,CAAA;AAG1C,OAAO,EAAE,YAAY,EAAE,CAAA"}
@@ -9,13 +9,33 @@
9
9
  */
10
10
  import { ConsoleLevel } from './types';
11
11
  import { formatCallSourceShort } from './stack-parser';
12
+ import { createCPUConsoleTranslator, } from './console-i18n';
12
13
  export class CPUConsole {
13
14
  constructor() {
14
15
  this.enabled = true;
15
16
  this.level = ConsoleLevel.NORMAL;
16
17
  this.filter = new Set(); // 指令类型过滤
18
+ this.locale = this.getDefaultLocale();
19
+ this.translator = createCPUConsoleTranslator(this.locale);
17
20
  this.loadSettings();
18
21
  }
22
+ /**
23
+ * 设置语言(en / zh-CN)
24
+ */
25
+ setLocale(locale) {
26
+ this.locale = locale;
27
+ this.translator = createCPUConsoleTranslator(locale);
28
+ localStorage.setItem('cpu-console-locale', locale);
29
+ }
30
+ /**
31
+ * 自定义翻译函数(不依赖任何 i18n 框架)
32
+ */
33
+ setI18nTranslator(t) {
34
+ this.translator = t;
35
+ }
36
+ getLocale() {
37
+ return this.locale;
38
+ }
19
39
  /**
20
40
  * 加载设置
21
41
  */
@@ -34,6 +54,28 @@ export class CPUConsole {
34
54
  // 忽略解析错误
35
55
  }
36
56
  }
57
+ const savedLocale = localStorage.getItem('cpu-console-locale');
58
+ // 兼容旧值:bilingual 直接回落到 zh-CN
59
+ if (savedLocale === 'en' || savedLocale === 'zh-CN') {
60
+ this.locale = savedLocale;
61
+ this.translator = createCPUConsoleTranslator(savedLocale);
62
+ }
63
+ else if (savedLocale === 'bilingual') {
64
+ this.locale = 'zh-CN';
65
+ this.translator = createCPUConsoleTranslator('zh-CN');
66
+ }
67
+ }
68
+ t(key, params) {
69
+ return this.translator(key, params);
70
+ }
71
+ getDefaultLocale() {
72
+ // 默认策略:中文环境输出中文,否则英文
73
+ if (typeof navigator !== 'undefined') {
74
+ const lang = navigator.language || '';
75
+ if (lang.toLowerCase().startsWith('zh'))
76
+ return 'zh-CN';
77
+ }
78
+ return 'en';
37
79
  }
38
80
  /**
39
81
  * 配置方法
@@ -68,9 +110,9 @@ export class CPUConsole {
68
110
  ? ` %c📍 ${formatCallSourceShort(instruction.context.callSource)}`
69
111
  : '';
70
112
  // 🎯 使用与指令成功一致的分组格式
71
- console.groupCollapsed(`%c[指令创建] %c${this.formatTime()} %c${instruction.type}%c${callSourceInfo}`, 'color: #3b82f6; font-weight: bold', 'color: #666; font-size: 11px', 'color: #3b82f6; font-weight: bold; background: #3b82f615; padding: 2px 6px; border-radius: 3px', 'color: #3b82f6', ...(callSourceInfo ? ['color: #8b5cf6; font-weight: bold'] : []));
113
+ console.groupCollapsed(`%c[${this.t('instruction.created')}] %c${this.formatTime()} %c${instruction.type}%c${callSourceInfo}`, 'color: #3b82f6; font-weight: bold', 'color: #666; font-size: 11px', 'color: #3b82f6; font-weight: bold; background: #3b82f615; padding: 2px 6px; border-radius: 3px', 'color: #3b82f6', ...(callSourceInfo ? ['color: #8b5cf6; font-weight: bold'] : []));
72
114
  // 🔥 显示指令基本信息
73
- console.log('%c📋 指令信息:', 'color: #3b82f6; font-weight: bold');
115
+ console.log(`%c📋 ${this.t('label.instructionInfo')}`, 'color: #3b82f6; font-weight: bold');
74
116
  console.table({
75
117
  'Instruction ID': instruction.id,
76
118
  'Correlation ID': instruction.context.correlationId,
@@ -81,15 +123,15 @@ export class CPUConsole {
81
123
  });
82
124
  // 🔥 显示指令参数
83
125
  if (this.level >= ConsoleLevel.DEBUG) {
84
- console.log('%c📝 指令参数 (Payload):', 'color: #3b82f6; font-weight: bold');
126
+ console.log(`%c📝 ${this.t('label.payload')}`, 'color: #3b82f6; font-weight: bold');
85
127
  console.log(instruction.payload);
86
128
  }
87
129
  else {
88
- console.log('%c📝 指令参数: (use level=DEBUG to see payload)', 'color: #666; font-style: italic');
130
+ console.log(`%c📝 ${this.t('label.payloadDebugOnly')}`, 'color: #666; font-style: italic');
89
131
  }
90
132
  // 🔥 显示调用源详情
91
133
  if (instruction.context.callSource && this.level >= ConsoleLevel.VERBOSE) {
92
- console.log('%c📍 调用源详情:', 'color: #8b5cf6; font-weight: bold');
134
+ console.log(`%c📍 ${this.t('label.callSourceDetails')}`, 'color: #8b5cf6; font-weight: bold');
93
135
  console.table({
94
136
  'File': instruction.context.callSource.file,
95
137
  'Line': instruction.context.callSource.line,
@@ -111,48 +153,48 @@ export class CPUConsole {
111
153
  ? ` %c📍 ${formatCallSourceShort(instruction.context.callSource)}`
112
154
  : '';
113
155
  // 🎯 核心:折叠分组,方便查看
114
- console.groupCollapsed(`%c[指令成功] %c${this.formatTime()} %c${instruction.type}%c %c${duration}ms${callSourceInfo}`, 'color: #10b981; font-weight: bold', 'color: #666; font-size: 11px', 'color: #10b981; font-weight: bold; background: #10b98115; padding: 2px 6px; border-radius: 3px', 'color: #10b981', 'color: #10b981; font-weight: bold', ...(callSourceInfo ? ['color: #8b5cf6; font-weight: bold'] : []));
156
+ console.groupCollapsed(`%c[${this.t('instruction.success')}] %c${this.formatTime()} %c${instruction.type}%c %c${duration}ms${callSourceInfo}`, 'color: #10b981; font-weight: bold', 'color: #666; font-size: 11px', 'color: #10b981; font-weight: bold; background: #10b98115; padding: 2px 6px; border-radius: 3px', 'color: #10b981', 'color: #10b981; font-weight: bold', ...(callSourceInfo ? ['color: #8b5cf6; font-weight: bold'] : []));
115
157
  // 🔥 显示指令输入参数
116
158
  if (this.level >= ConsoleLevel.NORMAL) {
117
- console.log('%c📝 指令参数 (Payload):', 'color: #3b82f6; font-weight: bold');
159
+ console.log(`%c📝 ${this.t('label.payload')}`, 'color: #3b82f6; font-weight: bold');
118
160
  console.log(instruction.payload);
119
161
  }
120
162
  // 🔥 显示后端返回结果
121
163
  if (instruction.result && this.level >= ConsoleLevel.NORMAL) {
122
- console.log('%c📥 后端返回 (Result):', 'color: #10b981; font-weight: bold');
164
+ console.log(`%c📥 ${this.t('label.backendResult')}`, 'color: #10b981; font-weight: bold');
123
165
  console.log(instruction.result);
124
166
  }
125
167
  // 🔥 显示WB阶段真实执行内容
126
168
  if (this.level >= ConsoleLevel.VERBOSE && instruction.writeBackExecution) {
127
169
  const wbExec = instruction.writeBackExecution;
128
- console.log('%c💾 WB阶段执行记录:', 'color: #8b5cf6; font-weight: bold');
170
+ console.log(`%c💾 ${this.t('label.wbExecution')}`, 'color: #8b5cf6; font-weight: bold');
129
171
  if (wbExec.hasCommit) {
130
172
  if (wbExec.commitSuccess === true) {
131
- console.log(' ✅ commit() 函数执行成功');
132
- console.log(' 📝 commit 调用参数:', wbExec.commitArgs);
173
+ console.log(` ${this.t('wb.commitOk')}`);
174
+ console.log(` ${this.t('wb.commitArgs')}`, wbExec.commitArgs);
133
175
  }
134
176
  else if (wbExec.commitSuccess === false) {
135
- console.log(' ❌ commit() 函数执行失败');
136
- console.log(' 📝 commit 调用参数:', wbExec.commitArgs);
137
- console.log(' 🚨 commit 错误:', wbExec.commitError);
177
+ console.log(` ${this.t('wb.commitFail')}`);
178
+ console.log(` ${this.t('wb.commitArgs')}`, wbExec.commitArgs);
179
+ console.log(` ${this.t('wb.commitError')}`, wbExec.commitError);
138
180
  }
139
181
  else {
140
- console.log(' ⚠️ commit() 状态未知');
182
+ console.log(` ${this.t('wb.commitUnknown')}`);
141
183
  }
142
184
  }
143
185
  else {
144
- console.log(' ⏭️ 无 commit() 函数');
186
+ console.log(` ${this.t('wb.noCommit')}`);
145
187
  }
146
188
  if (wbExec.rollbackExecuted) {
147
- console.log(' 🔄 执行了乐观更新回滚');
148
- console.log(' 📋 回滚快照:', wbExec.rollbackSnapshot);
189
+ console.log(` ${this.t('wb.rollbackExecuted')}`);
190
+ console.log(` ${this.t('wb.rollbackSnapshot')}`, wbExec.rollbackSnapshot);
149
191
  if (wbExec.rollbackError) {
150
- console.log(' 🚨 回滚错误:', wbExec.rollbackError);
192
+ console.log(` ${this.t('wb.rollbackError')}`, wbExec.rollbackError);
151
193
  }
152
194
  }
153
195
  // 显示中断处理器注册(成功时)
154
196
  if (instruction.status === 'committed') {
155
- console.log(' 🎯 已注册到中断处理器 (SSE去重)');
197
+ console.log(` ${this.t('wb.interruptRegistered')}`);
156
198
  }
157
199
  }
158
200
  // 显示流水线阶段
@@ -176,16 +218,16 @@ export class CPUConsole {
176
218
  ? ` %c📍 ${formatCallSourceShort(instruction.context.callSource)}`
177
219
  : '';
178
220
  // 使用橙色表示取消(不同于红色的失败)
179
- console.groupCollapsed(`%c[指令取消] %c${this.formatTime()} %c${instruction.type}%c %c${duration}ms${callSourceInfo}`, 'color: #f59e0b; font-weight: bold', 'color: #666; font-size: 11px', 'color: #f59e0b; font-weight: bold; background: #f59e0b15; padding: 2px 6px; border-radius: 3px', 'color: #f59e0b', 'color: #f59e0b; font-weight: bold', ...(callSourceInfo ? ['color: #8b5cf6; font-weight: bold'] : []));
221
+ console.groupCollapsed(`%c[${this.t('instruction.cancelled')}] %c${this.formatTime()} %c${instruction.type}%c %c${duration}ms${callSourceInfo}`, 'color: #f59e0b; font-weight: bold', 'color: #666; font-size: 11px', 'color: #f59e0b; font-weight: bold; background: #f59e0b15; padding: 2px 6px; border-radius: 3px', 'color: #f59e0b', 'color: #f59e0b; font-weight: bold', ...(callSourceInfo ? ['color: #8b5cf6; font-weight: bold'] : []));
180
222
  // 显示取消原因
181
- console.warn(`%c原因: ${instruction.cancelReason || '未知原因'}`, 'color: #f59e0b; font-weight: bold');
223
+ console.warn(`%c${this.t('label.reason')} ${instruction.cancelReason || this.t('common.unknownReason')}`, 'color: #f59e0b; font-weight: bold');
182
224
  // 显示取消阶段
183
225
  if (instruction.cancelledAt) {
184
- console.log(`%c🔸 取消阶段: ${instruction.cancelledAt}`, 'color: #f59e0b');
226
+ console.log(`%c🔸 ${this.t('label.cancelStage')} ${instruction.cancelledAt}`, 'color: #f59e0b');
185
227
  }
186
228
  // 🔥 显示指令输入参数
187
229
  if (this.level >= ConsoleLevel.NORMAL) {
188
- console.log('%c📝 指令参数 (Payload):', 'color: #3b82f6; font-weight: bold');
230
+ console.log(`%c📝 ${this.t('label.payload')}`, 'color: #3b82f6; font-weight: bold');
189
231
  console.log(instruction.payload);
190
232
  }
191
233
  // 显示流水线阶段
@@ -205,17 +247,17 @@ export class CPUConsole {
205
247
  ? ` %c📍 ${formatCallSourceShort(instruction.context.callSource)}`
206
248
  : '';
207
249
  // 🔥 失败时自动展开,方便排查
208
- console.group(`%c[指令失败] %c${this.formatTime()} %c${instruction.type}%c %c${duration}ms${callSourceInfo}`, 'color: #ef4444; font-weight: bold', 'color: #666; font-size: 11px', 'color: #ef4444; font-weight: bold; background: #ef444415; padding: 2px 6px; border-radius: 3px', 'color: #ef4444', 'color: #ef4444; font-weight: bold', ...(callSourceInfo ? ['color: #8b5cf6; font-weight: bold'] : []));
250
+ console.group(`%c[${this.t('instruction.failed')}] %c${this.formatTime()} %c${instruction.type}%c %c${duration}ms${callSourceInfo}`, 'color: #ef4444; font-weight: bold', 'color: #666; font-size: 11px', 'color: #ef4444; font-weight: bold; background: #ef444415; padding: 2px 6px; border-radius: 3px', 'color: #ef4444', 'color: #ef4444; font-weight: bold', ...(callSourceInfo ? ['color: #8b5cf6; font-weight: bold'] : []));
209
251
  // 显示错误信息
210
- console.error(`%c原因: ${error.message}`, 'color: #ef4444; font-weight: bold');
252
+ console.error(`%c${this.t('label.reason')} ${error.message}`, 'color: #ef4444; font-weight: bold');
211
253
  // 🔥 显示指令输入参数
212
254
  if (this.level >= ConsoleLevel.NORMAL) {
213
- console.log('%c📝 指令参数 (Payload):', 'color: #3b82f6; font-weight: bold');
255
+ console.log(`%c📝 ${this.t('label.payload')}`, 'color: #3b82f6; font-weight: bold');
214
256
  console.log(instruction.payload);
215
257
  }
216
258
  // 显示是否回滚
217
259
  if (instruction.optimisticSnapshot) {
218
- console.log('%c🔄 已回滚乐观更新', 'color: #f59e0b; font-weight: bold');
260
+ console.log(`%c🔄 ${this.t('optimistic.rolledBack')}`, 'color: #f59e0b; font-weight: bold');
219
261
  }
220
262
  // 显示流水线阶段
221
263
  if (this.level >= ConsoleLevel.VERBOSE) {
@@ -241,15 +283,15 @@ export class CPUConsole {
241
283
  const callSourceInfo = instruction.context.callSource
242
284
  ? ` %c📍 ${formatCallSourceShort(instruction.context.callSource)}`
243
285
  : '';
244
- console.groupCollapsed(`%c[乐观更新] %c${this.formatTime()} %c${instruction.type}%c${callSourceInfo}`, 'color: #8b5cf6; font-weight: bold', 'color: #666; font-size: 11px', 'color: #8b5cf6; font-weight: bold; background: #8b5cf615; padding: 2px 6px; border-radius: 3px', 'color: #8b5cf6', ...(callSourceInfo ? ['color: #8b5cf6; font-weight: bold'] : []));
286
+ console.groupCollapsed(`%c[${this.t('optimistic.applied')}] %c${this.formatTime()} %c${instruction.type}%c${callSourceInfo}`, 'color: #8b5cf6; font-weight: bold', 'color: #666; font-size: 11px', 'color: #8b5cf6; font-weight: bold; background: #8b5cf615; padding: 2px 6px; border-radius: 3px', 'color: #8b5cf6', ...(callSourceInfo ? ['color: #8b5cf6; font-weight: bold'] : []));
245
287
  // 显示乐观更新的 payload
246
288
  if (this.level >= ConsoleLevel.DEBUG) {
247
- console.log('%c📝 更新内容:', 'color: #8b5cf6; font-weight: bold');
289
+ console.log(`%c📝 ${this.t('label.payload')}`, 'color: #8b5cf6; font-weight: bold');
248
290
  console.log(instruction.payload);
249
291
  }
250
292
  // 显示快照信息
251
293
  if (instruction.optimisticSnapshot) {
252
- console.log('%c💾 已保存快照(用于回滚)', 'color: #10b981; font-size: 11px');
294
+ console.log(`%c💾 ${this.t('label.snapshotSaved')}`, 'color: #10b981; font-size: 11px');
253
295
  }
254
296
  console.groupEnd();
255
297
  }
@@ -267,12 +309,12 @@ export class CPUConsole {
267
309
  ? ` %c📍 ${formatCallSourceShort(instruction.context.callSource)}`
268
310
  : '';
269
311
  // 🔥 回滚重要,使用展开分组便于立即查看
270
- console.group(`%c[乐观回滚] %c${this.formatTime()} %c${instruction.type}%c${callSourceInfo}`, 'color: #f59e0b; font-weight: bold', 'color: #666; font-size: 11px', 'color: #f59e0b; font-weight: bold; background: #f59e0b15; padding: 2px 6px; border-radius: 3px', 'color: #f59e0b', ...(callSourceInfo ? ['color: #8b5cf6; font-weight: bold'] : []));
312
+ console.group(`%c[${this.t('optimistic.rolledBack')}] %c${this.formatTime()} %c${instruction.type}%c${callSourceInfo}`, 'color: #f59e0b; font-weight: bold', 'color: #666; font-size: 11px', 'color: #f59e0b; font-weight: bold; background: #f59e0b15; padding: 2px 6px; border-radius: 3px', 'color: #f59e0b', ...(callSourceInfo ? ['color: #8b5cf6; font-weight: bold'] : []));
271
313
  // 显示回滚原因
272
- console.log('%c⚠️ 回滚原因:', 'color: #f59e0b; font-weight: bold');
314
+ console.log(`%c⚠️ ${this.t('label.rollbackReason')}`, 'color: #f59e0b; font-weight: bold');
273
315
  console.log(reason);
274
316
  // 显示指令信息
275
- console.log('%c📋 指令信息:', 'color: #f59e0b; font-weight: bold');
317
+ console.log(`%c📋 ${this.t('label.instructionInfo')}`, 'color: #f59e0b; font-weight: bold');
276
318
  console.table({
277
319
  'Instruction ID': instruction.id,
278
320
  'Correlation ID': instruction.context.correlationId,
@@ -288,7 +330,7 @@ export class CPUConsole {
288
330
  if (!this.shouldPrint(instruction.type))
289
331
  return;
290
332
  if (this.level >= ConsoleLevel.VERBOSE) {
291
- console.log(`%c ⏳ ${this.formatTime()} 资源冲突,等待 ${waitTime}ms`, 'color: #f59e0b', {
333
+ console.log(`%c ⏳ ${this.formatTime()} ${this.t('scheduler.conflictWait', { waitTime })}`, 'color: #f59e0b', {
292
334
  instructionId: instruction.id,
293
335
  conflictingWith,
294
336
  });
@@ -326,7 +368,7 @@ export class CPUConsole {
326
368
  */
327
369
  printPipelineStages(instruction) {
328
370
  const timestamps = instruction.timestamps;
329
- console.log('%c流水线阶段:', 'color: #666; font-weight: bold');
371
+ console.log(`%c${this.t('label.pipelineStages')}`, 'color: #666; font-weight: bold');
330
372
  // 打印各阶段之间的耗时
331
373
  const transitions = [];
332
374
  if (timestamps.IF && timestamps.SCH) {
@@ -345,18 +387,18 @@ export class CPUConsole {
345
387
  // 打印总耗时
346
388
  if (timestamps.IF && timestamps.WB) {
347
389
  const total = timestamps.WB - timestamps.IF;
348
- console.log(` %c总耗时: %c${total}ms`, 'color: #666; font-weight: bold', 'color: #10b981; font-weight: bold; font-size: 14px');
390
+ console.log(` %c${this.t('label.totalDuration')} %c${total}ms`, 'color: #666; font-weight: bold', 'color: #10b981; font-weight: bold; font-size: 14px');
349
391
  }
350
392
  // 特殊标记
351
393
  if (instruction.optimisticSnapshot) {
352
- console.log(' %c✓ 乐观更新', 'color: #8b5cf6');
394
+ console.log(` %c✓ ${this.t('label.optimisticUpdate')}`, 'color: #8b5cf6');
353
395
  }
354
396
  }
355
397
  /**
356
398
  * 打印指令详情
357
399
  */
358
400
  printInstructionDetails(instruction) {
359
- console.log('%c详细信息:', 'color: #666; font-weight: bold');
401
+ console.log(`%c${this.t('label.details')}`, 'color: #666; font-weight: bold');
360
402
  console.table({
361
403
  'Instruction ID': instruction.id,
362
404
  'Correlation ID': instruction.context.correlationId,
@@ -367,9 +409,9 @@ export class CPUConsole {
367
409
  : 'N/A',
368
410
  });
369
411
  if (this.level >= ConsoleLevel.DEBUG) {
370
- console.log('%cPayload:', 'color: #666; font-weight: bold', instruction.payload);
412
+ console.log(`%c${this.t('label.payload')}`, 'color: #666; font-weight: bold', instruction.payload);
371
413
  if (instruction.result) {
372
- console.log('%cResult:', 'color: #666; font-weight: bold', instruction.result);
414
+ console.log(`%c${this.t('label.backendResult')}`, 'color: #666; font-weight: bold', instruction.result);
373
415
  }
374
416
  }
375
417
  }
@@ -380,23 +422,23 @@ export class CPUConsole {
380
422
  const suggestions = [];
381
423
  // 根据错误类型给出建议
382
424
  if (error.message.includes('database is locked')) {
383
- suggestions.push('后端数据库锁定,检查写入许可是否正确获取');
425
+ suggestions.push(this.t('suggest.dbLocked'));
384
426
  }
385
427
  if (error.message.includes('Network')) {
386
- suggestions.push('网络错误,检查后端服务是否运行');
428
+ suggestions.push(this.t('suggest.network'));
387
429
  }
388
430
  if (error.message.includes('timeout')) {
389
- suggestions.push('请求超时,考虑增加超时时间或优化后端性能');
431
+ suggestions.push(this.t('suggest.timeout'));
390
432
  }
391
433
  // 根据指令类型给出建议
392
434
  const duration = instruction.timestamps.WB && instruction.timestamps.IF
393
435
  ? instruction.timestamps.WB - instruction.timestamps.IF
394
436
  : 0;
395
437
  if (duration > 1000) {
396
- suggestions.push(`执行耗时 ${duration}ms,超过 1 秒,检查是否存在性能问题`);
438
+ suggestions.push(this.t('suggest.slowInstruction', { duration }));
397
439
  }
398
440
  if (suggestions.length > 0) {
399
- console.log('%c💡 建议:', 'color: #f59e0b; font-weight: bold');
441
+ console.log(`%c💡 ${this.t('label.suggestions')}`, 'color: #f59e0b; font-weight: bold');
400
442
  suggestions.forEach((s) => {
401
443
  console.log(` • ${s}`);
402
444
  });
@@ -416,7 +458,14 @@ export class CPUConsole {
416
458
  */
417
459
  formatTime() {
418
460
  const now = new Date();
419
- return now.toLocaleTimeString('zh-CN', {
461
+ const timeLocale = this.locale === 'zh-CN'
462
+ ? 'zh-CN'
463
+ : this.locale === 'en'
464
+ ? 'en-GB'
465
+ : typeof navigator !== 'undefined' && (navigator.language || '').toLowerCase().startsWith('zh')
466
+ ? 'zh-CN'
467
+ : 'en-GB';
468
+ return now.toLocaleTimeString(timeLocale, {
420
469
  hour12: false,
421
470
  hour: '2-digit',
422
471
  minute: '2-digit',
@@ -456,11 +505,11 @@ export class CPUConsole {
456
505
  printStats(stats) {
457
506
  if (!this.enabled)
458
507
  return;
459
- console.group('%c📊 流水线统计', 'color: #3b82f6; font-weight: bold; font-size: 14px');
460
- console.log(` 总指令数: %c${stats.total}`, 'color: #3b82f6; font-weight: bold');
461
- console.log(` 成功: %c${stats.success} %c(${((stats.success / stats.total) * 100).toFixed(1)}%)`, 'color: #10b981; font-weight: bold', 'color: #666');
462
- console.log(` 失败: %c${stats.failed} %c(${((stats.failed / stats.total) * 100).toFixed(1)}%)`, 'color: #ef4444; font-weight: bold', 'color: #666');
463
- console.log(` 平均延迟: %c${stats.avgLatency.toFixed(0)}ms`, 'color: #666; font-weight: bold');
508
+ console.group(`%c📊 ${this.t('label.stats')}`, 'color: #3b82f6; font-weight: bold; font-size: 14px');
509
+ console.log(` ${this.t('stats.total')} %c${stats.total}`, 'color: #3b82f6; font-weight: bold');
510
+ console.log(` ${this.t('stats.success')} %c${stats.success} %c(${((stats.success / stats.total) * 100).toFixed(1)}%)`, 'color: #10b981; font-weight: bold', 'color: #666');
511
+ console.log(` ${this.t('stats.failed')} %c${stats.failed} %c(${((stats.failed / stats.total) * 100).toFixed(1)}%)`, 'color: #ef4444; font-weight: bold', 'color: #666');
512
+ console.log(` ${this.t('stats.avgLatency')} %c${stats.avgLatency.toFixed(0)}ms`, 'color: #666; font-weight: bold');
464
513
  console.groupEnd();
465
514
  }
466
515
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CPUConsole.js","sourceRoot":"","sources":["../../src/logging/CPUConsole.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CPUConsole.js","sourceRoot":"","sources":["../../src/logging/CPUConsole.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export type CPUConsoleLocale = 'en' | 'zh-CN';
2
+ export type CPUConsoleI18nKey = 'instruction.created' | 'instruction.success' | 'instruction.cancelled' | 'instruction.failed' | 'optimistic.applied' | 'optimistic.rolledBack' | 'scheduler.conflictWait' | 'network.request' | 'network.response' | 'label.instructionInfo' | 'label.payload' | 'label.payloadDebugOnly' | 'label.callSourceDetails' | 'label.backendResult' | 'label.wbExecution' | 'label.rollbackReason' | 'label.pipelineStages' | 'label.details' | 'label.suggestions' | 'label.stats' | 'label.reason' | 'label.cancelStage' | 'label.totalDuration' | 'label.optimisticUpdate' | 'label.snapshotSaved' | 'stats.total' | 'stats.success' | 'stats.failed' | 'stats.avgLatency' | 'wb.commitOk' | 'wb.commitFail' | 'wb.commitArgs' | 'wb.commitError' | 'wb.commitUnknown' | 'wb.noCommit' | 'wb.rollbackExecuted' | 'wb.rollbackSnapshot' | 'wb.rollbackError' | 'wb.interruptRegistered' | 'common.unknownReason' | 'suggest.dbLocked' | 'suggest.network' | 'suggest.timeout' | 'suggest.slowInstruction';
3
+ export type CPUConsoleTranslate = (key: CPUConsoleI18nKey, params?: Record<string, any>) => string;
4
+ export declare function createCPUConsoleTranslator(locale: CPUConsoleLocale): CPUConsoleTranslate;
5
+ //# sourceMappingURL=console-i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-i18n.d.ts","sourceRoot":"","sources":["../../src/logging/console-i18n.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAA;AAE7C,MAAM,MAAM,iBAAiB,GACzB,qBAAqB,GACrB,qBAAqB,GACrB,uBAAuB,GACvB,oBAAoB,GACpB,oBAAoB,GACpB,uBAAuB,GACvB,wBAAwB,GACxB,iBAAiB,GACjB,kBAAkB,GAClB,uBAAuB,GACvB,eAAe,GACf,wBAAwB,GACxB,yBAAyB,GACzB,qBAAqB,GACrB,mBAAmB,GACnB,sBAAsB,GACtB,sBAAsB,GACtB,eAAe,GACf,mBAAmB,GACnB,aAAa,GACb,cAAc,GACd,mBAAmB,GACnB,qBAAqB,GACrB,wBAAwB,GACxB,qBAAqB,GACrB,aAAa,GACb,eAAe,GACf,cAAc,GACd,kBAAkB,GAClB,aAAa,GACb,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,kBAAkB,GAClB,aAAa,GACb,qBAAqB,GACrB,qBAAqB,GACrB,kBAAkB,GAClB,wBAAwB,GACxB,sBAAsB,GACtB,kBAAkB,GAClB,iBAAiB,GACjB,iBAAiB,GACjB,yBAAyB,CAAA;AAE7B,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAA;AAuGlG,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,gBAAgB,GAAG,mBAAmB,CAGxF"}
@@ -0,0 +1,102 @@
1
+ const EN = {
2
+ 'instruction.created': 'Instruction Created',
3
+ 'instruction.success': 'Instruction Success',
4
+ 'instruction.cancelled': 'Instruction Cancelled',
5
+ 'instruction.failed': 'Instruction Failed',
6
+ 'optimistic.applied': 'Optimistic Update',
7
+ 'optimistic.rolledBack': 'Optimistic Rollback',
8
+ 'scheduler.conflictWait': 'Resource conflict, waiting {waitTime}ms',
9
+ 'network.request': 'HTTP Request',
10
+ 'network.response': 'HTTP Response',
11
+ 'label.instructionInfo': 'Instruction Info:',
12
+ 'label.payload': 'Payload:',
13
+ 'label.payloadDebugOnly': 'Payload: (use level=DEBUG to see payload)',
14
+ 'label.callSourceDetails': 'Call Source Details:',
15
+ 'label.backendResult': 'Backend Result:',
16
+ 'label.wbExecution': 'WB Execution:',
17
+ 'label.rollbackReason': 'Rollback Reason:',
18
+ 'label.pipelineStages': 'Pipeline Stages:',
19
+ 'label.details': 'Details:',
20
+ 'label.suggestions': 'Suggestions:',
21
+ 'label.stats': 'Pipeline Stats',
22
+ 'label.reason': 'Reason:',
23
+ 'label.cancelStage': 'Cancelled At:',
24
+ 'label.totalDuration': 'Total:',
25
+ 'label.optimisticUpdate': 'Optimistic Update',
26
+ 'label.snapshotSaved': 'snapshot saved (for rollback)',
27
+ 'stats.total': 'Total:',
28
+ 'stats.success': 'Success:',
29
+ 'stats.failed': 'Failed:',
30
+ 'stats.avgLatency': 'Avg latency:',
31
+ 'wb.commitOk': '✅ commit() succeeded',
32
+ 'wb.commitFail': '❌ commit() failed',
33
+ 'wb.commitArgs': '📝 commit args:',
34
+ 'wb.commitError': '🚨 commit error:',
35
+ 'wb.commitUnknown': '⚠️ commit() status unknown',
36
+ 'wb.noCommit': '⏭️ no commit()',
37
+ 'wb.rollbackExecuted': '🔄 optimistic rollback executed',
38
+ 'wb.rollbackSnapshot': '📋 rollback snapshot:',
39
+ 'wb.rollbackError': '🚨 rollback error:',
40
+ 'wb.interruptRegistered': '🎯 registered to interrupt handler (SSE dedup)',
41
+ 'common.unknownReason': 'Unknown',
42
+ 'suggest.dbLocked': 'Backend database is locked; check write lock/transaction handling.',
43
+ 'suggest.network': 'Network error; check whether backend service is running.',
44
+ 'suggest.timeout': 'Request timeout; consider increasing timeout or optimizing backend.',
45
+ 'suggest.slowInstruction': 'Execution took {duration}ms (> 1000ms); investigate performance.',
46
+ };
47
+ const ZH_CN = {
48
+ 'instruction.created': '指令创建',
49
+ 'instruction.success': '指令成功',
50
+ 'instruction.cancelled': '指令取消',
51
+ 'instruction.failed': '指令失败',
52
+ 'optimistic.applied': '乐观更新',
53
+ 'optimistic.rolledBack': '乐观回滚',
54
+ 'scheduler.conflictWait': '资源冲突,等待 {waitTime}ms',
55
+ 'network.request': '网络请求',
56
+ 'network.response': '网络响应',
57
+ 'label.instructionInfo': '指令信息:',
58
+ 'label.payload': '指令参数 (Payload):',
59
+ 'label.payloadDebugOnly': '指令参数: (use level=DEBUG to see payload)',
60
+ 'label.callSourceDetails': '调用源详情:',
61
+ 'label.backendResult': '后端返回 (Result):',
62
+ 'label.wbExecution': 'WB阶段执行记录:',
63
+ 'label.rollbackReason': '回滚原因:',
64
+ 'label.pipelineStages': '流水线阶段:',
65
+ 'label.details': '详细信息:',
66
+ 'label.suggestions': '建议:',
67
+ 'label.stats': '流水线统计',
68
+ 'label.reason': '原因:',
69
+ 'label.cancelStage': '取消阶段:',
70
+ 'label.totalDuration': '总耗时:',
71
+ 'label.optimisticUpdate': '乐观更新',
72
+ 'label.snapshotSaved': '已保存快照(用于回滚)',
73
+ 'stats.total': '总指令数:',
74
+ 'stats.success': '成功:',
75
+ 'stats.failed': '失败:',
76
+ 'stats.avgLatency': '平均延迟:',
77
+ 'wb.commitOk': '✅ commit() 函数执行成功',
78
+ 'wb.commitFail': '❌ commit() 函数执行失败',
79
+ 'wb.commitArgs': '📝 commit 调用参数:',
80
+ 'wb.commitError': '🚨 commit 错误:',
81
+ 'wb.commitUnknown': '⚠️ commit() 状态未知',
82
+ 'wb.noCommit': '⏭️ 无 commit() 函数',
83
+ 'wb.rollbackExecuted': '🔄 执行了乐观更新回滚',
84
+ 'wb.rollbackSnapshot': '📋 回滚快照:',
85
+ 'wb.rollbackError': '🚨 回滚错误:',
86
+ 'wb.interruptRegistered': '🎯 已注册到中断处理器 (SSE去重)',
87
+ 'common.unknownReason': '未知原因',
88
+ 'suggest.dbLocked': '后端数据库锁定,检查写入许可/事务锁是否正确获取',
89
+ 'suggest.network': '网络错误,检查后端服务是否运行',
90
+ 'suggest.timeout': '请求超时,考虑增加超时时间或优化后端性能',
91
+ 'suggest.slowInstruction': '执行耗时 {duration}ms,超过 1 秒,检查是否存在性能问题',
92
+ };
93
+ function format(template, params) {
94
+ if (!params)
95
+ return template;
96
+ return template.replace(/\{(\w+)\}/g, (_, key) => String(params[key] ?? `{${key}}`));
97
+ }
98
+ export function createCPUConsoleTranslator(locale) {
99
+ const dict = locale === 'zh-CN' ? ZH_CN : EN;
100
+ return (key, params) => format(dict[key], params);
101
+ }
102
+ //# sourceMappingURL=console-i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-i18n.js","sourceRoot":"","sources":["../../src/logging/console-i18n.ts"],"names":[],"mappings":"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"}
@@ -6,5 +6,7 @@ export { cpuEventCollector, CPUEventCollector } from './CPUEventCollector';
6
6
  export { cpuLogger, CPULogger } from './CPULogger';
7
7
  export { cpuDebugger, CPUDebugger } from './CPUDebugger';
8
8
  export { cpuConsole, CPUConsole } from './CPUConsole';
9
+ export type { CPUConsoleLocale, CPUConsoleTranslate, CPUConsoleI18nKey } from './console-i18n';
10
+ export { createCPUConsoleTranslator } from './console-i18n';
9
11
  export { captureCallSource, formatCallSource, formatCallSourceShort } from './stack-parser';
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AAGpF,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAG1E,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGlD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGxD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGrD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AAGpF,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAG1E,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGlD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGxD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACrD,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAC9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAG3D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA"}
@@ -11,6 +11,7 @@ export { cpuLogger, CPULogger } from './CPULogger';
11
11
  export { cpuDebugger, CPUDebugger } from './CPUDebugger';
12
12
  // 控制台
13
13
  export { cpuConsole, CPUConsole } from './CPUConsole';
14
+ export { createCPUConsoleTranslator } from './console-i18n';
14
15
  // 调用栈解析工具
15
16
  export { captureCallSource, formatCallSource, formatCallSourceShort } from './stack-parser';
16
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,KAAK;AACL,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkC,MAAM,SAAS,CAAA;AAEpF,QAAQ;AACR,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE1E,QAAQ;AACR,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAElD,MAAM;AACN,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAExD,MAAM;AACN,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAErD,UAAU;AACV,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,KAAK;AACL,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkC,MAAM,SAAS,CAAA;AAEpF,QAAQ;AACR,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE1E,QAAQ;AACR,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAElD,MAAM;AACN,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAExD,MAAM;AACN,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAErD,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAE3D,UAAU;AACV,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "front-cpu",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "FrontCPU - Frontend instruction execution system with out-of-order execution",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -11,16 +11,43 @@
11
11
  import type { QueuedInstruction } from '../types'
12
12
  import { ConsoleLevel } from './types'
13
13
  import { formatCallSourceShort } from './stack-parser'
14
+ import {
15
+ createCPUConsoleTranslator,
16
+ type CPUConsoleLocale,
17
+ type CPUConsoleTranslate,
18
+ } from './console-i18n'
14
19
 
15
20
  export class CPUConsole {
16
21
  private enabled: boolean = true
17
22
  private level: ConsoleLevel = ConsoleLevel.NORMAL
18
23
  private filter: Set<string> = new Set() // 指令类型过滤
24
+ private locale: CPUConsoleLocale = this.getDefaultLocale()
25
+ private translator: CPUConsoleTranslate = createCPUConsoleTranslator(this.locale)
19
26
 
20
27
  constructor() {
21
28
  this.loadSettings()
22
29
  }
23
30
 
31
+ /**
32
+ * 设置语言(en / zh-CN)
33
+ */
34
+ setLocale(locale: CPUConsoleLocale): void {
35
+ this.locale = locale
36
+ this.translator = createCPUConsoleTranslator(locale)
37
+ localStorage.setItem('cpu-console-locale', locale)
38
+ }
39
+
40
+ /**
41
+ * 自定义翻译函数(不依赖任何 i18n 框架)
42
+ */
43
+ setI18nTranslator(t: CPUConsoleTranslate): void {
44
+ this.translator = t
45
+ }
46
+
47
+ getLocale(): CPUConsoleLocale {
48
+ return this.locale
49
+ }
50
+
24
51
  /**
25
52
  * 加载设置
26
53
  */
@@ -39,6 +66,29 @@ export class CPUConsole {
39
66
  // 忽略解析错误
40
67
  }
41
68
  }
69
+
70
+ const savedLocale = localStorage.getItem('cpu-console-locale') as CPUConsoleLocale | null
71
+ // 兼容旧值:bilingual 直接回落到 zh-CN
72
+ if (savedLocale === 'en' || savedLocale === 'zh-CN') {
73
+ this.locale = savedLocale
74
+ this.translator = createCPUConsoleTranslator(savedLocale)
75
+ } else if ((savedLocale as any) === 'bilingual') {
76
+ this.locale = 'zh-CN'
77
+ this.translator = createCPUConsoleTranslator('zh-CN')
78
+ }
79
+ }
80
+
81
+ private t(key: Parameters<CPUConsoleTranslate>[0], params?: Parameters<CPUConsoleTranslate>[1]): string {
82
+ return this.translator(key as any, params)
83
+ }
84
+
85
+ private getDefaultLocale(): CPUConsoleLocale {
86
+ // 默认策略:中文环境输出中文,否则英文
87
+ if (typeof navigator !== 'undefined') {
88
+ const lang = navigator.language || ''
89
+ if (lang.toLowerCase().startsWith('zh')) return 'zh-CN'
90
+ }
91
+ return 'en'
42
92
  }
43
93
 
44
94
  /**
@@ -82,7 +132,7 @@ export class CPUConsole {
82
132
 
83
133
  // 🎯 使用与指令成功一致的分组格式
84
134
  console.groupCollapsed(
85
- `%c[指令创建] %c${this.formatTime()} %c${instruction.type}%c${callSourceInfo}`,
135
+ `%c[${this.t('instruction.created')}] %c${this.formatTime()} %c${instruction.type}%c${callSourceInfo}`,
86
136
  'color: #3b82f6; font-weight: bold',
87
137
  'color: #666; font-size: 11px',
88
138
  'color: #3b82f6; font-weight: bold; background: #3b82f615; padding: 2px 6px; border-radius: 3px',
@@ -91,7 +141,7 @@ export class CPUConsole {
91
141
  )
92
142
 
93
143
  // 🔥 显示指令基本信息
94
- console.log('%c📋 指令信息:', 'color: #3b82f6; font-weight: bold')
144
+ console.log(`%c📋 ${this.t('label.instructionInfo')}`, 'color: #3b82f6; font-weight: bold')
95
145
  console.table({
96
146
  'Instruction ID': instruction.id,
97
147
  'Correlation ID': instruction.context.correlationId,
@@ -103,15 +153,15 @@ export class CPUConsole {
103
153
 
104
154
  // 🔥 显示指令参数
105
155
  if (this.level >= ConsoleLevel.DEBUG) {
106
- console.log('%c📝 指令参数 (Payload):', 'color: #3b82f6; font-weight: bold')
156
+ console.log(`%c📝 ${this.t('label.payload')}`, 'color: #3b82f6; font-weight: bold')
107
157
  console.log(instruction.payload)
108
158
  } else {
109
- console.log('%c📝 指令参数: (use level=DEBUG to see payload)', 'color: #666; font-style: italic')
159
+ console.log(`%c📝 ${this.t('label.payloadDebugOnly')}`, 'color: #666; font-style: italic')
110
160
  }
111
161
 
112
162
  // 🔥 显示调用源详情
113
163
  if (instruction.context.callSource && this.level >= ConsoleLevel.VERBOSE) {
114
- console.log('%c📍 调用源详情:', 'color: #8b5cf6; font-weight: bold')
164
+ console.log(`%c📍 ${this.t('label.callSourceDetails')}`, 'color: #8b5cf6; font-weight: bold')
115
165
  console.table({
116
166
  'File': instruction.context.callSource.file,
117
167
  'Line': instruction.context.callSource.line,
@@ -137,7 +187,7 @@ export class CPUConsole {
137
187
 
138
188
  // 🎯 核心:折叠分组,方便查看
139
189
  console.groupCollapsed(
140
- `%c[指令成功] %c${this.formatTime()} %c${instruction.type}%c %c${duration}ms${callSourceInfo}`,
190
+ `%c[${this.t('instruction.success')}] %c${this.formatTime()} %c${instruction.type}%c %c${duration}ms${callSourceInfo}`,
141
191
  'color: #10b981; font-weight: bold',
142
192
  'color: #666; font-size: 11px',
143
193
  'color: #10b981; font-weight: bold; background: #10b98115; padding: 2px 6px; border-radius: 3px',
@@ -148,47 +198,47 @@ export class CPUConsole {
148
198
 
149
199
  // 🔥 显示指令输入参数
150
200
  if (this.level >= ConsoleLevel.NORMAL) {
151
- console.log('%c📝 指令参数 (Payload):', 'color: #3b82f6; font-weight: bold')
201
+ console.log(`%c📝 ${this.t('label.payload')}`, 'color: #3b82f6; font-weight: bold')
152
202
  console.log(instruction.payload)
153
203
  }
154
204
 
155
205
  // 🔥 显示后端返回结果
156
206
  if (instruction.result && this.level >= ConsoleLevel.NORMAL) {
157
- console.log('%c📥 后端返回 (Result):', 'color: #10b981; font-weight: bold')
207
+ console.log(`%c📥 ${this.t('label.backendResult')}`, 'color: #10b981; font-weight: bold')
158
208
  console.log(instruction.result)
159
209
  }
160
210
 
161
211
  // 🔥 显示WB阶段真实执行内容
162
212
  if (this.level >= ConsoleLevel.VERBOSE && instruction.writeBackExecution) {
163
213
  const wbExec = instruction.writeBackExecution
164
- console.log('%c💾 WB阶段执行记录:', 'color: #8b5cf6; font-weight: bold')
214
+ console.log(`%c💾 ${this.t('label.wbExecution')}`, 'color: #8b5cf6; font-weight: bold')
165
215
 
166
216
  if (wbExec.hasCommit) {
167
217
  if (wbExec.commitSuccess === true) {
168
- console.log(' ✅ commit() 函数执行成功')
169
- console.log(' 📝 commit 调用参数:', wbExec.commitArgs)
218
+ console.log(` ${this.t('wb.commitOk')}`)
219
+ console.log(` ${this.t('wb.commitArgs')}`, wbExec.commitArgs)
170
220
  } else if (wbExec.commitSuccess === false) {
171
- console.log(' ❌ commit() 函数执行失败')
172
- console.log(' 📝 commit 调用参数:', wbExec.commitArgs)
173
- console.log(' 🚨 commit 错误:', wbExec.commitError)
221
+ console.log(` ${this.t('wb.commitFail')}`)
222
+ console.log(` ${this.t('wb.commitArgs')}`, wbExec.commitArgs)
223
+ console.log(` ${this.t('wb.commitError')}`, wbExec.commitError)
174
224
  } else {
175
- console.log(' ⚠️ commit() 状态未知')
225
+ console.log(` ${this.t('wb.commitUnknown')}`)
176
226
  }
177
227
  } else {
178
- console.log(' ⏭️ 无 commit() 函数')
228
+ console.log(` ${this.t('wb.noCommit')}`)
179
229
  }
180
230
 
181
231
  if (wbExec.rollbackExecuted) {
182
- console.log(' 🔄 执行了乐观更新回滚')
183
- console.log(' 📋 回滚快照:', wbExec.rollbackSnapshot)
232
+ console.log(` ${this.t('wb.rollbackExecuted')}`)
233
+ console.log(` ${this.t('wb.rollbackSnapshot')}`, wbExec.rollbackSnapshot)
184
234
  if (wbExec.rollbackError) {
185
- console.log(' 🚨 回滚错误:', wbExec.rollbackError)
235
+ console.log(` ${this.t('wb.rollbackError')}`, wbExec.rollbackError)
186
236
  }
187
237
  }
188
238
 
189
239
  // 显示中断处理器注册(成功时)
190
240
  if (instruction.status === 'committed') {
191
- console.log(' 🎯 已注册到中断处理器 (SSE去重)')
241
+ console.log(` ${this.t('wb.interruptRegistered')}`)
192
242
  }
193
243
  }
194
244
 
@@ -218,7 +268,7 @@ export class CPUConsole {
218
268
 
219
269
  // 使用橙色表示取消(不同于红色的失败)
220
270
  console.groupCollapsed(
221
- `%c[指令取消] %c${this.formatTime()} %c${instruction.type}%c %c${duration}ms${callSourceInfo}`,
271
+ `%c[${this.t('instruction.cancelled')}] %c${this.formatTime()} %c${instruction.type}%c %c${duration}ms${callSourceInfo}`,
222
272
  'color: #f59e0b; font-weight: bold',
223
273
  'color: #666; font-size: 11px',
224
274
  'color: #f59e0b; font-weight: bold; background: #f59e0b15; padding: 2px 6px; border-radius: 3px',
@@ -229,21 +279,21 @@ export class CPUConsole {
229
279
 
230
280
  // 显示取消原因
231
281
  console.warn(
232
- `%c原因: ${instruction.cancelReason || '未知原因'}`,
282
+ `%c${this.t('label.reason')} ${instruction.cancelReason || this.t('common.unknownReason')}`,
233
283
  'color: #f59e0b; font-weight: bold'
234
284
  )
235
285
 
236
286
  // 显示取消阶段
237
287
  if (instruction.cancelledAt) {
238
288
  console.log(
239
- `%c🔸 取消阶段: ${instruction.cancelledAt}`,
289
+ `%c🔸 ${this.t('label.cancelStage')} ${instruction.cancelledAt}`,
240
290
  'color: #f59e0b'
241
291
  )
242
292
  }
243
293
 
244
294
  // 🔥 显示指令输入参数
245
295
  if (this.level >= ConsoleLevel.NORMAL) {
246
- console.log('%c📝 指令参数 (Payload):', 'color: #3b82f6; font-weight: bold')
296
+ console.log(`%c📝 ${this.t('label.payload')}`, 'color: #3b82f6; font-weight: bold')
247
297
  console.log(instruction.payload)
248
298
  }
249
299
 
@@ -268,7 +318,7 @@ export class CPUConsole {
268
318
 
269
319
  // 🔥 失败时自动展开,方便排查
270
320
  console.group(
271
- `%c[指令失败] %c${this.formatTime()} %c${instruction.type}%c %c${duration}ms${callSourceInfo}`,
321
+ `%c[${this.t('instruction.failed')}] %c${this.formatTime()} %c${instruction.type}%c %c${duration}ms${callSourceInfo}`,
272
322
  'color: #ef4444; font-weight: bold',
273
323
  'color: #666; font-size: 11px',
274
324
  'color: #ef4444; font-weight: bold; background: #ef444415; padding: 2px 6px; border-radius: 3px',
@@ -278,17 +328,17 @@ export class CPUConsole {
278
328
  )
279
329
 
280
330
  // 显示错误信息
281
- console.error(`%c原因: ${error.message}`, 'color: #ef4444; font-weight: bold')
331
+ console.error(`%c${this.t('label.reason')} ${error.message}`, 'color: #ef4444; font-weight: bold')
282
332
 
283
333
  // 🔥 显示指令输入参数
284
334
  if (this.level >= ConsoleLevel.NORMAL) {
285
- console.log('%c📝 指令参数 (Payload):', 'color: #3b82f6; font-weight: bold')
335
+ console.log(`%c📝 ${this.t('label.payload')}`, 'color: #3b82f6; font-weight: bold')
286
336
  console.log(instruction.payload)
287
337
  }
288
338
 
289
339
  // 显示是否回滚
290
340
  if (instruction.optimisticSnapshot) {
291
- console.log('%c🔄 已回滚乐观更新', 'color: #f59e0b; font-weight: bold')
341
+ console.log(`%c🔄 ${this.t('optimistic.rolledBack')}`, 'color: #f59e0b; font-weight: bold')
292
342
  }
293
343
 
294
344
  // 显示流水线阶段
@@ -321,7 +371,7 @@ export class CPUConsole {
321
371
  : ''
322
372
 
323
373
  console.groupCollapsed(
324
- `%c[乐观更新] %c${this.formatTime()} %c${instruction.type}%c${callSourceInfo}`,
374
+ `%c[${this.t('optimistic.applied')}] %c${this.formatTime()} %c${instruction.type}%c${callSourceInfo}`,
325
375
  'color: #8b5cf6; font-weight: bold',
326
376
  'color: #666; font-size: 11px',
327
377
  'color: #8b5cf6; font-weight: bold; background: #8b5cf615; padding: 2px 6px; border-radius: 3px',
@@ -331,13 +381,13 @@ export class CPUConsole {
331
381
 
332
382
  // 显示乐观更新的 payload
333
383
  if (this.level >= ConsoleLevel.DEBUG) {
334
- console.log('%c📝 更新内容:', 'color: #8b5cf6; font-weight: bold')
384
+ console.log(`%c📝 ${this.t('label.payload')}`, 'color: #8b5cf6; font-weight: bold')
335
385
  console.log(instruction.payload)
336
386
  }
337
387
 
338
388
  // 显示快照信息
339
389
  if (instruction.optimisticSnapshot) {
340
- console.log('%c💾 已保存快照(用于回滚)', 'color: #10b981; font-size: 11px')
390
+ console.log(`%c💾 ${this.t('label.snapshotSaved')}`, 'color: #10b981; font-size: 11px')
341
391
  }
342
392
 
343
393
  console.groupEnd()
@@ -359,7 +409,7 @@ export class CPUConsole {
359
409
 
360
410
  // 🔥 回滚重要,使用展开分组便于立即查看
361
411
  console.group(
362
- `%c[乐观回滚] %c${this.formatTime()} %c${instruction.type}%c${callSourceInfo}`,
412
+ `%c[${this.t('optimistic.rolledBack')}] %c${this.formatTime()} %c${instruction.type}%c${callSourceInfo}`,
363
413
  'color: #f59e0b; font-weight: bold',
364
414
  'color: #666; font-size: 11px',
365
415
  'color: #f59e0b; font-weight: bold; background: #f59e0b15; padding: 2px 6px; border-radius: 3px',
@@ -368,11 +418,11 @@ export class CPUConsole {
368
418
  )
369
419
 
370
420
  // 显示回滚原因
371
- console.log('%c⚠️ 回滚原因:', 'color: #f59e0b; font-weight: bold')
421
+ console.log(`%c⚠️ ${this.t('label.rollbackReason')}`, 'color: #f59e0b; font-weight: bold')
372
422
  console.log(reason)
373
423
 
374
424
  // 显示指令信息
375
- console.log('%c📋 指令信息:', 'color: #f59e0b; font-weight: bold')
425
+ console.log(`%c📋 ${this.t('label.instructionInfo')}`, 'color: #f59e0b; font-weight: bold')
376
426
  console.table({
377
427
  'Instruction ID': instruction.id,
378
428
  'Correlation ID': instruction.context.correlationId,
@@ -394,7 +444,7 @@ export class CPUConsole {
394
444
  if (!this.shouldPrint(instruction.type)) return
395
445
 
396
446
  if (this.level >= ConsoleLevel.VERBOSE) {
397
- console.log(`%c ⏳ ${this.formatTime()} 资源冲突,等待 ${waitTime}ms`, 'color: #f59e0b', {
447
+ console.log(`%c ⏳ ${this.formatTime()} ${this.t('scheduler.conflictWait', { waitTime })}`, 'color: #f59e0b', {
398
448
  instructionId: instruction.id,
399
449
  conflictingWith,
400
450
  })
@@ -441,7 +491,7 @@ export class CPUConsole {
441
491
  private printPipelineStages(instruction: QueuedInstruction): void {
442
492
  const timestamps = instruction.timestamps
443
493
 
444
- console.log('%c流水线阶段:', 'color: #666; font-weight: bold')
494
+ console.log(`%c${this.t('label.pipelineStages')}`, 'color: #666; font-weight: bold')
445
495
 
446
496
  // 打印各阶段之间的耗时
447
497
  const transitions = []
@@ -470,7 +520,7 @@ export class CPUConsole {
470
520
  if (timestamps.IF && timestamps.WB) {
471
521
  const total = timestamps.WB - timestamps.IF
472
522
  console.log(
473
- ` %c总耗时: %c${total}ms`,
523
+ ` %c${this.t('label.totalDuration')} %c${total}ms`,
474
524
  'color: #666; font-weight: bold',
475
525
  'color: #10b981; font-weight: bold; font-size: 14px'
476
526
  )
@@ -478,7 +528,7 @@ export class CPUConsole {
478
528
 
479
529
  // 特殊标记
480
530
  if (instruction.optimisticSnapshot) {
481
- console.log(' %c✓ 乐观更新', 'color: #8b5cf6')
531
+ console.log(` %c✓ ${this.t('label.optimisticUpdate')}`, 'color: #8b5cf6')
482
532
  }
483
533
  }
484
534
 
@@ -486,7 +536,7 @@ export class CPUConsole {
486
536
  * 打印指令详情
487
537
  */
488
538
  private printInstructionDetails(instruction: QueuedInstruction): void {
489
- console.log('%c详细信息:', 'color: #666; font-weight: bold')
539
+ console.log(`%c${this.t('label.details')}`, 'color: #666; font-weight: bold')
490
540
  console.table({
491
541
  'Instruction ID': instruction.id,
492
542
  'Correlation ID': instruction.context.correlationId,
@@ -498,10 +548,10 @@ export class CPUConsole {
498
548
  })
499
549
 
500
550
  if (this.level >= ConsoleLevel.DEBUG) {
501
- console.log('%cPayload:', 'color: #666; font-weight: bold', instruction.payload)
551
+ console.log(`%c${this.t('label.payload')}`, 'color: #666; font-weight: bold', instruction.payload)
502
552
 
503
553
  if (instruction.result) {
504
- console.log('%cResult:', 'color: #666; font-weight: bold', instruction.result)
554
+ console.log(`%c${this.t('label.backendResult')}`, 'color: #666; font-weight: bold', instruction.result)
505
555
  }
506
556
  }
507
557
  }
@@ -514,15 +564,15 @@ export class CPUConsole {
514
564
 
515
565
  // 根据错误类型给出建议
516
566
  if (error.message.includes('database is locked')) {
517
- suggestions.push('后端数据库锁定,检查写入许可是否正确获取')
567
+ suggestions.push(this.t('suggest.dbLocked'))
518
568
  }
519
569
 
520
570
  if (error.message.includes('Network')) {
521
- suggestions.push('网络错误,检查后端服务是否运行')
571
+ suggestions.push(this.t('suggest.network'))
522
572
  }
523
573
 
524
574
  if (error.message.includes('timeout')) {
525
- suggestions.push('请求超时,考虑增加超时时间或优化后端性能')
575
+ suggestions.push(this.t('suggest.timeout'))
526
576
  }
527
577
 
528
578
  // 根据指令类型给出建议
@@ -532,11 +582,11 @@ export class CPUConsole {
532
582
  : 0
533
583
 
534
584
  if (duration > 1000) {
535
- suggestions.push(`执行耗时 ${duration}ms,超过 1 秒,检查是否存在性能问题`)
585
+ suggestions.push(this.t('suggest.slowInstruction', { duration }))
536
586
  }
537
587
 
538
588
  if (suggestions.length > 0) {
539
- console.log('%c💡 建议:', 'color: #f59e0b; font-weight: bold')
589
+ console.log(`%c💡 ${this.t('label.suggestions')}`, 'color: #f59e0b; font-weight: bold')
540
590
  suggestions.forEach((s) => {
541
591
  console.log(` • ${s}`)
542
592
  })
@@ -559,7 +609,15 @@ export class CPUConsole {
559
609
  */
560
610
  private formatTime(): string {
561
611
  const now = new Date()
562
- return now.toLocaleTimeString('zh-CN', {
612
+ const timeLocale =
613
+ this.locale === 'zh-CN'
614
+ ? 'zh-CN'
615
+ : this.locale === 'en'
616
+ ? 'en-GB'
617
+ : typeof navigator !== 'undefined' && (navigator.language || '').toLowerCase().startsWith('zh')
618
+ ? 'zh-CN'
619
+ : 'en-GB'
620
+ return now.toLocaleTimeString(timeLocale, {
563
621
  hour12: false,
564
622
  hour: '2-digit',
565
623
  minute: '2-digit',
@@ -602,23 +660,26 @@ export class CPUConsole {
602
660
  printStats(stats: { total: number; success: number; failed: number; avgLatency: number }): void {
603
661
  if (!this.enabled) return
604
662
 
605
- console.group('%c📊 流水线统计', 'color: #3b82f6; font-weight: bold; font-size: 14px')
663
+ console.group(`%c📊 ${this.t('label.stats')}`, 'color: #3b82f6; font-weight: bold; font-size: 14px')
606
664
 
607
- console.log(` 总指令数: %c${stats.total}`, 'color: #3b82f6; font-weight: bold')
665
+ console.log(` ${this.t('stats.total')} %c${stats.total}`, 'color: #3b82f6; font-weight: bold')
608
666
 
609
667
  console.log(
610
- ` 成功: %c${stats.success} %c(${((stats.success / stats.total) * 100).toFixed(1)}%)`,
668
+ ` ${this.t('stats.success')} %c${stats.success} %c(${((stats.success / stats.total) * 100).toFixed(1)}%)`,
611
669
  'color: #10b981; font-weight: bold',
612
670
  'color: #666'
613
671
  )
614
672
 
615
673
  console.log(
616
- ` 失败: %c${stats.failed} %c(${((stats.failed / stats.total) * 100).toFixed(1)}%)`,
674
+ ` ${this.t('stats.failed')} %c${stats.failed} %c(${((stats.failed / stats.total) * 100).toFixed(1)}%)`,
617
675
  'color: #ef4444; font-weight: bold',
618
676
  'color: #666'
619
677
  )
620
678
 
621
- console.log(` 平均延迟: %c${stats.avgLatency.toFixed(0)}ms`, 'color: #666; font-weight: bold')
679
+ console.log(
680
+ ` ${this.t('stats.avgLatency')} %c${stats.avgLatency.toFixed(0)}ms`,
681
+ 'color: #666; font-weight: bold'
682
+ )
622
683
 
623
684
  console.groupEnd()
624
685
  }
@@ -0,0 +1,157 @@
1
+ export type CPUConsoleLocale = 'en' | 'zh-CN'
2
+
3
+ export type CPUConsoleI18nKey =
4
+ | 'instruction.created'
5
+ | 'instruction.success'
6
+ | 'instruction.cancelled'
7
+ | 'instruction.failed'
8
+ | 'optimistic.applied'
9
+ | 'optimistic.rolledBack'
10
+ | 'scheduler.conflictWait'
11
+ | 'network.request'
12
+ | 'network.response'
13
+ | 'label.instructionInfo'
14
+ | 'label.payload'
15
+ | 'label.payloadDebugOnly'
16
+ | 'label.callSourceDetails'
17
+ | 'label.backendResult'
18
+ | 'label.wbExecution'
19
+ | 'label.rollbackReason'
20
+ | 'label.pipelineStages'
21
+ | 'label.details'
22
+ | 'label.suggestions'
23
+ | 'label.stats'
24
+ | 'label.reason'
25
+ | 'label.cancelStage'
26
+ | 'label.totalDuration'
27
+ | 'label.optimisticUpdate'
28
+ | 'label.snapshotSaved'
29
+ | 'stats.total'
30
+ | 'stats.success'
31
+ | 'stats.failed'
32
+ | 'stats.avgLatency'
33
+ | 'wb.commitOk'
34
+ | 'wb.commitFail'
35
+ | 'wb.commitArgs'
36
+ | 'wb.commitError'
37
+ | 'wb.commitUnknown'
38
+ | 'wb.noCommit'
39
+ | 'wb.rollbackExecuted'
40
+ | 'wb.rollbackSnapshot'
41
+ | 'wb.rollbackError'
42
+ | 'wb.interruptRegistered'
43
+ | 'common.unknownReason'
44
+ | 'suggest.dbLocked'
45
+ | 'suggest.network'
46
+ | 'suggest.timeout'
47
+ | 'suggest.slowInstruction'
48
+
49
+ export type CPUConsoleTranslate = (key: CPUConsoleI18nKey, params?: Record<string, any>) => string
50
+
51
+ type Dict = Record<CPUConsoleI18nKey, string>
52
+
53
+ const EN: Dict = {
54
+ 'instruction.created': 'Instruction Created',
55
+ 'instruction.success': 'Instruction Success',
56
+ 'instruction.cancelled': 'Instruction Cancelled',
57
+ 'instruction.failed': 'Instruction Failed',
58
+ 'optimistic.applied': 'Optimistic Update',
59
+ 'optimistic.rolledBack': 'Optimistic Rollback',
60
+ 'scheduler.conflictWait': 'Resource conflict, waiting {waitTime}ms',
61
+ 'network.request': 'HTTP Request',
62
+ 'network.response': 'HTTP Response',
63
+ 'label.instructionInfo': 'Instruction Info:',
64
+ 'label.payload': 'Payload:',
65
+ 'label.payloadDebugOnly': 'Payload: (use level=DEBUG to see payload)',
66
+ 'label.callSourceDetails': 'Call Source Details:',
67
+ 'label.backendResult': 'Backend Result:',
68
+ 'label.wbExecution': 'WB Execution:',
69
+ 'label.rollbackReason': 'Rollback Reason:',
70
+ 'label.pipelineStages': 'Pipeline Stages:',
71
+ 'label.details': 'Details:',
72
+ 'label.suggestions': 'Suggestions:',
73
+ 'label.stats': 'Pipeline Stats',
74
+ 'label.reason': 'Reason:',
75
+ 'label.cancelStage': 'Cancelled At:',
76
+ 'label.totalDuration': 'Total:',
77
+ 'label.optimisticUpdate': 'Optimistic Update',
78
+ 'label.snapshotSaved': 'snapshot saved (for rollback)',
79
+ 'stats.total': 'Total:',
80
+ 'stats.success': 'Success:',
81
+ 'stats.failed': 'Failed:',
82
+ 'stats.avgLatency': 'Avg latency:',
83
+ 'wb.commitOk': '✅ commit() succeeded',
84
+ 'wb.commitFail': '❌ commit() failed',
85
+ 'wb.commitArgs': '📝 commit args:',
86
+ 'wb.commitError': '🚨 commit error:',
87
+ 'wb.commitUnknown': '⚠️ commit() status unknown',
88
+ 'wb.noCommit': '⏭️ no commit()',
89
+ 'wb.rollbackExecuted': '🔄 optimistic rollback executed',
90
+ 'wb.rollbackSnapshot': '📋 rollback snapshot:',
91
+ 'wb.rollbackError': '🚨 rollback error:',
92
+ 'wb.interruptRegistered': '🎯 registered to interrupt handler (SSE dedup)',
93
+ 'common.unknownReason': 'Unknown',
94
+ 'suggest.dbLocked': 'Backend database is locked; check write lock/transaction handling.',
95
+ 'suggest.network': 'Network error; check whether backend service is running.',
96
+ 'suggest.timeout': 'Request timeout; consider increasing timeout or optimizing backend.',
97
+ 'suggest.slowInstruction': 'Execution took {duration}ms (> 1000ms); investigate performance.',
98
+ }
99
+
100
+ const ZH_CN: Dict = {
101
+ 'instruction.created': '指令创建',
102
+ 'instruction.success': '指令成功',
103
+ 'instruction.cancelled': '指令取消',
104
+ 'instruction.failed': '指令失败',
105
+ 'optimistic.applied': '乐观更新',
106
+ 'optimistic.rolledBack': '乐观回滚',
107
+ 'scheduler.conflictWait': '资源冲突,等待 {waitTime}ms',
108
+ 'network.request': '网络请求',
109
+ 'network.response': '网络响应',
110
+ 'label.instructionInfo': '指令信息:',
111
+ 'label.payload': '指令参数 (Payload):',
112
+ 'label.payloadDebugOnly': '指令参数: (use level=DEBUG to see payload)',
113
+ 'label.callSourceDetails': '调用源详情:',
114
+ 'label.backendResult': '后端返回 (Result):',
115
+ 'label.wbExecution': 'WB阶段执行记录:',
116
+ 'label.rollbackReason': '回滚原因:',
117
+ 'label.pipelineStages': '流水线阶段:',
118
+ 'label.details': '详细信息:',
119
+ 'label.suggestions': '建议:',
120
+ 'label.stats': '流水线统计',
121
+ 'label.reason': '原因:',
122
+ 'label.cancelStage': '取消阶段:',
123
+ 'label.totalDuration': '总耗时:',
124
+ 'label.optimisticUpdate': '乐观更新',
125
+ 'label.snapshotSaved': '已保存快照(用于回滚)',
126
+ 'stats.total': '总指令数:',
127
+ 'stats.success': '成功:',
128
+ 'stats.failed': '失败:',
129
+ 'stats.avgLatency': '平均延迟:',
130
+ 'wb.commitOk': '✅ commit() 函数执行成功',
131
+ 'wb.commitFail': '❌ commit() 函数执行失败',
132
+ 'wb.commitArgs': '📝 commit 调用参数:',
133
+ 'wb.commitError': '🚨 commit 错误:',
134
+ 'wb.commitUnknown': '⚠️ commit() 状态未知',
135
+ 'wb.noCommit': '⏭️ 无 commit() 函数',
136
+ 'wb.rollbackExecuted': '🔄 执行了乐观更新回滚',
137
+ 'wb.rollbackSnapshot': '📋 回滚快照:',
138
+ 'wb.rollbackError': '🚨 回滚错误:',
139
+ 'wb.interruptRegistered': '🎯 已注册到中断处理器 (SSE去重)',
140
+ 'common.unknownReason': '未知原因',
141
+ 'suggest.dbLocked': '后端数据库锁定,检查写入许可/事务锁是否正确获取',
142
+ 'suggest.network': '网络错误,检查后端服务是否运行',
143
+ 'suggest.timeout': '请求超时,考虑增加超时时间或优化后端性能',
144
+ 'suggest.slowInstruction': '执行耗时 {duration}ms,超过 1 秒,检查是否存在性能问题',
145
+ }
146
+
147
+ function format(template: string, params: Record<string, any> | undefined): string {
148
+ if (!params) return template
149
+ return template.replace(/\{(\w+)\}/g, (_, key: string) => String(params[key] ?? `{${key}}`))
150
+ }
151
+
152
+ export function createCPUConsoleTranslator(locale: CPUConsoleLocale): CPUConsoleTranslate {
153
+ const dict = locale === 'zh-CN' ? ZH_CN : EN
154
+ return (key, params) => format(dict[key], params)
155
+ }
156
+
157
+
@@ -16,6 +16,8 @@ export { cpuDebugger, CPUDebugger } from './CPUDebugger'
16
16
 
17
17
  // 控制台
18
18
  export { cpuConsole, CPUConsole } from './CPUConsole'
19
+ export type { CPUConsoleLocale, CPUConsoleTranslate, CPUConsoleI18nKey } from './console-i18n'
20
+ export { createCPUConsoleTranslator } from './console-i18n'
19
21
 
20
22
  // 调用栈解析工具
21
23
  export { captureCallSource, formatCallSource, formatCallSourceShort } from './stack-parser'