mcp-probe-kit 3.0.5 → 3.0.7

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 (69) hide show
  1. package/README.md +458 -431
  2. package/build/index.js +875 -141
  3. package/build/lib/gitnexus-bridge.d.ts +58 -0
  4. package/build/lib/gitnexus-bridge.js +379 -0
  5. package/build/lib/template-loader.js +317 -317
  6. package/build/lib/tool-execution-context.d.ts +8 -0
  7. package/build/lib/tool-execution-context.js +20 -0
  8. package/build/lib/toolset-manager.d.ts +1 -1
  9. package/build/lib/toolset-manager.js +7 -5
  10. package/build/schemas/code-analysis-tools.d.ts +46 -0
  11. package/build/schemas/code-analysis-tools.js +47 -0
  12. package/build/schemas/git-tools.js +16 -16
  13. package/build/schemas/index.d.ts +46 -0
  14. package/build/tools/__tests__/code_insight.unit.test.d.ts +1 -0
  15. package/build/tools/__tests__/code_insight.unit.test.js +35 -0
  16. package/build/tools/__tests__/start_bugfix.unit.test.js +14 -14
  17. package/build/tools/__tests__/start_ui.unit.test.js +11 -11
  18. package/build/tools/add_feature.js +79 -79
  19. package/build/tools/ask_user.js +5 -5
  20. package/build/tools/code_insight.d.ts +8 -0
  21. package/build/tools/code_insight.js +129 -0
  22. package/build/tools/index.d.ts +1 -0
  23. package/build/tools/index.js +1 -0
  24. package/build/tools/interview.js +9 -9
  25. package/build/tools/start_bugfix.d.ts +2 -1
  26. package/build/tools/start_bugfix.js +170 -126
  27. package/build/tools/start_feature.d.ts +2 -1
  28. package/build/tools/start_feature.js +156 -112
  29. package/build/tools/start_onboard.d.ts +2 -1
  30. package/build/tools/start_onboard.js +57 -51
  31. package/build/tools/start_product.d.ts +2 -1
  32. package/build/tools/start_product.js +9 -1
  33. package/build/tools/start_ralph.d.ts +2 -1
  34. package/build/tools/start_ralph.js +9 -3
  35. package/build/tools/start_ui.d.ts +2 -1
  36. package/build/tools/start_ui.js +102 -88
  37. package/build/tools/ui-ux-tools.d.ts +2 -1
  38. package/build/tools/ui-ux-tools.js +19 -3
  39. package/build/utils/ui-sync.d.ts +6 -2
  40. package/build/utils/ui-sync.js +125 -29
  41. package/docs/assets/font/MaterialSymbolsOutlined.codepoints +4102 -0
  42. package/docs/assets/font/MaterialSymbolsOutlined.ttf +0 -0
  43. package/docs/assets/font/noto-sans-sc-400.ttf +0 -0
  44. package/docs/assets/font/noto-sans-sc-700.ttf +0 -0
  45. package/docs/assets/font/noto-sans-sc-900.ttf +0 -0
  46. package/docs/assets/js/i18n.js +122 -21
  47. package/docs/assets/js/tailwind.js +83 -83
  48. package/docs/data/tools.js +419 -399
  49. package/docs/debug-i18n.html +163 -0
  50. package/docs/i18n/all-tools/en.json +157 -0
  51. package/docs/i18n/all-tools/ja.json +157 -0
  52. package/docs/i18n/all-tools/ko.json +157 -0
  53. package/docs/i18n/all-tools/zh-CN.json +157 -0
  54. package/docs/pages/all-tools.html +514 -352
  55. package/docs/pages/examples.html +689 -689
  56. package/docs/pages/getting-started.html +589 -589
  57. package/docs/pages/migration.html +298 -298
  58. package/docs/specs/user-auth/design.md +82 -0
  59. package/docs/specs/user-auth/requirements.md +52 -0
  60. package/docs/specs/user-auth/tasks.md +55 -0
  61. package/package.json +5 -5
  62. package/docs/project-context/architecture.md +0 -0
  63. package/docs/project-context/how-to-develop.md +0 -313
  64. package/docs/project-context/how-to-test.md +0 -457
  65. package/docs/project-context/tech-stack.md +0 -96
  66. package/docs/project-context.md +0 -53
  67. package/docs/specs/git-work-report/design.md +0 -568
  68. package/docs/specs/git-work-report/requirements.md +0 -131
  69. package/docs/specs/git-work-report/tasks.md +0 -197
@@ -28,18 +28,96 @@ async function loadTranslations(lang) {
28
28
  try {
29
29
  // 根据当前页面路径确定翻译文件路径
30
30
  const isInPages = window.location.pathname.includes('/pages/');
31
- const basePath = isInPages ? '../i18n' : './i18n';
31
+ const isAllToolsPage = window.location.pathname.includes('all-tools.html');
32
32
 
33
- console.log(`[i18n] Loading translation: ${lang}, basePath: ${basePath}`);
33
+ let basePath = isInPages ? '../i18n' : './i18n';
34
34
 
35
- const response = await fetch(`${basePath}/${lang}.json`);
36
- if (!response.ok) {
37
- console.warn(`翻译文件不存在: ${lang}.json`);
38
- return null;
35
+ // 如果是 all-tools 页面,需要加载两个翻译文件
36
+ if (isAllToolsPage) {
37
+ // 1. 先加载通用翻译(侧边栏等)
38
+ const commonPath = `${basePath}/${lang}.json`;
39
+ console.log(`[i18n] Loading common translation: ${lang}, path: ${commonPath}`);
40
+
41
+ let commonTranslations = {};
42
+ try {
43
+ const commonResponse = await fetch(commonPath);
44
+ if (commonResponse.ok) {
45
+ commonTranslations = await commonResponse.json();
46
+ console.log(`[i18n] Common translation loaded successfully:`, lang);
47
+ }
48
+ } catch (error) {
49
+ console.warn(`通用翻译文件加载失败: ${commonPath}`, error);
50
+ }
51
+
52
+ // 2. 再加载页面特定翻译(工具数据)
53
+ const toolsPath = `${basePath}/all-tools/${lang}.json`;
54
+ console.log(`[i18n] Loading all-tools translation: ${lang}, path: ${toolsPath}`);
55
+
56
+ const toolsResponse = await fetch(toolsPath);
57
+ if (!toolsResponse.ok) {
58
+ console.warn(`工具翻译文件不存在: ${toolsPath},回退到中文`);
59
+ // 回退到中文
60
+ if (lang !== 'zh-CN') {
61
+ const fallbackCommonPath = `${basePath}/zh-CN.json`;
62
+ const fallbackToolsPath = `${basePath}/all-tools/zh-CN.json`;
63
+
64
+ const [fallbackCommonRes, fallbackToolsRes] = await Promise.all([
65
+ fetch(fallbackCommonPath),
66
+ fetch(fallbackToolsPath)
67
+ ]);
68
+
69
+ if (fallbackCommonRes.ok && fallbackToolsRes.ok) {
70
+ const fallbackCommon = await fallbackCommonRes.json();
71
+ const fallbackTools = await fallbackToolsRes.json();
72
+ translations[lang] = { ...fallbackCommon, ...fallbackTools };
73
+ return translations[lang];
74
+ }
75
+ }
76
+ return null;
77
+ }
78
+
79
+ const toolsTranslations = await toolsResponse.json();
80
+
81
+ console.log(`[i18n] Tools translations loaded, checking toolShortDesc...`);
82
+ console.log(`[i18n] toolsTranslations keys:`, Object.keys(toolsTranslations));
83
+ console.log(`[i18n] toolsTranslations full content:`, JSON.stringify(toolsTranslations, null, 2).substring(0, 500));
84
+ console.log(`[i18n] toolsTranslations.toolShortDesc exists:`, !!toolsTranslations.toolShortDesc);
85
+ console.log(`[i18n] toolsTranslations.toolShortDesc content:`, toolsTranslations.toolShortDesc);
86
+
87
+ // 3. 合并两个翻译对象
88
+ // 使用深度合并:commonTranslations 作为基础,toolsTranslations 覆盖同名键
89
+ // 但保留 toolsTranslations 中独有的键(如 toolShortDesc)
90
+ translations[lang] = {
91
+ ...commonTranslations,
92
+ ...toolsTranslations,
93
+ // 确保 toolShortDesc 不会被覆盖
94
+ toolShortDesc: toolsTranslations.toolShortDesc || {}
95
+ };
96
+
97
+ console.log(`[i18n] All-tools translation loaded and merged successfully:`, lang);
98
+ console.log(`[i18n] Common translations keys:`, Object.keys(commonTranslations));
99
+ console.log(`[i18n] Tools translations keys:`, Object.keys(toolsTranslations));
100
+ console.log(`[i18n] Merged translations keys:`, Object.keys(translations[lang]));
101
+ console.log(`[i18n] toolShortDesc in tools:`, !!toolsTranslations.toolShortDesc);
102
+ console.log(`[i18n] toolShortDesc in merged:`, !!translations[lang].toolShortDesc);
103
+ if (translations[lang].toolShortDesc) {
104
+ console.log(`[i18n] toolShortDesc content:`, translations[lang].toolShortDesc);
105
+ }
106
+ return translations[lang];
107
+ } else {
108
+ // 其他页面使用通用翻译文件
109
+ const translationPath = `${basePath}/${lang}.json`;
110
+ console.log(`[i18n] Loading translation: ${lang}, path: ${translationPath}`);
111
+
112
+ const response = await fetch(translationPath);
113
+ if (!response.ok) {
114
+ console.warn(`翻译文件不存在: ${translationPath}`);
115
+ return null;
116
+ }
117
+ translations[lang] = await response.json();
118
+ console.log(`[i18n] Translation loaded successfully:`, lang);
119
+ return translations[lang];
39
120
  }
40
- translations[lang] = await response.json();
41
- console.log(`[i18n] Translation loaded successfully:`, lang, translations[lang]);
42
- return translations[lang];
43
121
  } catch (error) {
44
122
  console.error(`加载翻译失败: ${lang}`, error);
45
123
  return null;
@@ -124,6 +202,7 @@ async function switchLanguage(lang) {
124
202
  }
125
203
 
126
204
  currentLang = lang;
205
+ window.currentLang = lang; // 同步更新全局变量
127
206
  localStorage.setItem('lang', lang);
128
207
 
129
208
  // 加载翻译
@@ -145,6 +224,7 @@ async function switchLanguage(lang) {
145
224
 
146
225
  // 触发自定义事件
147
226
  window.dispatchEvent(new CustomEvent('languageChanged', { detail: { lang } }));
227
+ document.dispatchEvent(new CustomEvent('languageChanged', { detail: { lang } }));
148
228
  }
149
229
 
150
230
  /**
@@ -240,8 +320,15 @@ document.addEventListener('click', (e) => {
240
320
  * 初始化
241
321
  */
242
322
  async function initI18n() {
243
- // 检测浏览器语言(仅首次访问)
244
- if (!localStorage.getItem('lang')) {
323
+ // 从 localStorage 读取保存的语言,如果没有则检测浏览器语言
324
+ const savedLang = localStorage.getItem('lang');
325
+
326
+ if (savedLang && LANGUAGES[savedLang]) {
327
+ // 使用保存的语言
328
+ currentLang = savedLang;
329
+ console.log('[i18n] Using saved language:', currentLang);
330
+ } else {
331
+ // 检测浏览器语言(仅首次访问)
245
332
  const browserLang = navigator.language.toLowerCase();
246
333
  if (browserLang.startsWith('zh')) currentLang = 'zh-CN';
247
334
  else if (browserLang.startsWith('ja')) currentLang = 'ja';
@@ -249,8 +336,12 @@ async function initI18n() {
249
336
  else currentLang = 'en'; // 默认英文
250
337
 
251
338
  localStorage.setItem('lang', currentLang);
339
+ console.log('[i18n] Detected browser language:', currentLang);
252
340
  }
253
341
 
342
+ // 同步到全局变量
343
+ window.currentLang = currentLang;
344
+
254
345
  // 加载当前语言的翻译
255
346
  await loadTranslations(currentLang);
256
347
 
@@ -259,16 +350,26 @@ async function initI18n() {
259
350
 
260
351
  // 应用翻译
261
352
  applyTranslations();
353
+
354
+ // 触发 i18n 准备完成事件
355
+ console.log('[i18n] i18n initialization completed, dispatching i18nReady event');
356
+ window.dispatchEvent(new CustomEvent('i18nReady', { detail: { lang: currentLang } }));
262
357
  }
263
358
 
264
- // 页面加载完成后初始化
265
- if (document.readyState === 'loading') {
266
- document.addEventListener('DOMContentLoaded', initI18n);
267
- } else {
268
- initI18n();
269
- }
359
+ // 页面加载完成后初始化
360
+ if (document.readyState === 'loading') {
361
+ document.addEventListener('DOMContentLoaded', initI18n);
362
+ } else {
363
+ initI18n();
364
+ }
365
+
366
+ // 导出到全局
367
+ window.switchLanguage = switchLanguage;
368
+ window.toggleLangMenu = toggleLangMenu;
369
+ window.t = t;
370
+ window.currentLang = currentLang;
371
+ window.translations = translations;
372
+ window.LANGUAGES = LANGUAGES;
373
+ window.applyTranslations = applyTranslations;
374
+
270
375
 
271
- // 导出到全局
272
- window.switchLanguage = switchLanguage;
273
- window.toggleLangMenu = toggleLangMenu;
274
- window.t = t;