@nbtca/prompt 1.0.25 → 1.0.26

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.
@@ -35,7 +35,6 @@ export const APP_INFO = {
35
35
  name: 'Prompt',
36
36
  version: readPackageVersion(),
37
37
  description: '浙大宁波理工学院计算机协会',
38
- fullDescription: 'NBTCA Prompt - 极简命令行工具',
39
38
  author: 'm1ngsama <contact@m1ng.space>',
40
39
  license: 'MIT',
41
40
  repository: 'https://github.com/nbtca/prompt'
@@ -6,7 +6,6 @@
6
6
  */
7
7
  // Maps single-byte vim keys to terminal escape sequences (ranger-style hjkl)
8
8
  const VIM_TO_SEQ = {
9
- h: Buffer.from('\u0003'), // back/cancel (ranger: go to parent)
10
9
  j: Buffer.from('\u001b[B'), // down arrow
11
10
  k: Buffer.from('\u001b[A'), // up arrow
12
11
  l: Buffer.from('\r'), // enter/confirm (ranger: open/enter)
@@ -31,7 +31,8 @@ function detectTerminalType() {
31
31
  /** Check whether an external command exists on PATH (once at startup). */
32
32
  function commandExists(cmd) {
33
33
  try {
34
- execFileSync('which', [cmd], { stdio: 'ignore' });
34
+ const check = process.platform === 'win32' ? 'where' : 'which';
35
+ execFileSync(check, [cmd], { stdio: 'ignore' });
35
36
  return true;
36
37
  }
37
38
  catch {
@@ -465,7 +466,7 @@ async function viewMarkdownFile(filePath) {
465
466
  while (true) {
466
467
  try {
467
468
  ensureMarkedConfigured();
468
- const s = createSpinner(`${trans.docs.loading.replace('...', '')}: ${filePath}`);
469
+ const s = createSpinner(`${trans.docs.loadingFile}: ${filePath}`);
469
470
  const rawResult = await fetchGitHubRawContent(filePath);
470
471
  if (rawResult.staleFallback) {
471
472
  warning(trans.docs.usingCachedData);
@@ -580,7 +581,9 @@ async function searchDocs() {
580
581
  continue;
581
582
  if (entry.value.toLowerCase().includes(keyword)) {
582
583
  const name = cachedPath.split('/').pop() || cachedPath;
583
- results.push({ name, path: cachedPath, category: trans.docs.searchResults });
584
+ const parentDir = cachedPath.split('/').slice(0, -1).join('/');
585
+ const matchedCat = categories.find(c => parentDir.startsWith(c.path));
586
+ results.push({ name, path: cachedPath, category: matchedCat?.name ?? parentDir });
584
587
  }
585
588
  }
586
589
  s.stop(`${results.length} ${trans.docs.searchResults}`);
@@ -26,7 +26,7 @@ function showAbout() {
26
26
  const content = [
27
27
  row(trans.about.project, APP_INFO.name),
28
28
  row(trans.about.version, `v${APP_INFO.version}`),
29
- row(trans.about.description, APP_INFO.fullDescription),
29
+ row(trans.about.description, trans.about.descriptionText),
30
30
  '',
31
31
  link(trans.about.github, APP_INFO.repository),
32
32
  link(trans.about.website, URLS.homepage),
@@ -28,6 +28,7 @@
28
28
  "project": "Project",
29
29
  "version": "Version",
30
30
  "description": "Description",
31
+ "descriptionText": "NBTCA Prompt - Minimalist CLI Tool",
31
32
  "github": "GitHub",
32
33
  "website": "Website",
33
34
  "email": "Email",
@@ -91,7 +92,8 @@
91
92
  "searchPlaceholder": "Enter keyword...",
92
93
  "searching": "Searching documents...",
93
94
  "searchResults": "results found",
94
- "searchNoResults": "No documents match your search"
95
+ "searchNoResults": "No documents match your search",
96
+ "loadingFile": "Loading"
95
97
  },
96
98
  "links": {
97
99
  "choose": "Open a link:",
@@ -161,5 +163,41 @@
161
163
  "upToDate": "You are on the latest version ({version})",
162
164
  "checkFailed": "Could not check for updates",
163
165
  "command": "Run: npm i -g @nbtca/prompt"
166
+ },
167
+ "cli": {
168
+ "usage": "Usage:",
169
+ "interactive": "Interactive menu",
170
+ "runCommand": "Run a command",
171
+ "commands": "Commands:",
172
+ "flags": "Flags:",
173
+ "cmdWebsite": "Official website URL",
174
+ "cmdGithub": "GitHub organization URL",
175
+ "cmdRoadmap": "Project roadmap URL",
176
+ "cmdRepair": "Repair service URL",
177
+ "cmdTheme": "View or set theme",
178
+ "cmdLang": "Set language",
179
+ "cmdUpdate": "Check for updates",
180
+ "flagVersion": "Show version",
181
+ "flagHelp": "Show help",
182
+ "flagOpen": "Open in browser (URL commands)",
183
+ "flagJson": "JSON output (events, status)",
184
+ "flagToday": "Today only (events)",
185
+ "flagNext": "Limit to next N (events)",
186
+ "flagWatch": "Live refresh (status)",
187
+ "flagInterval": "Refresh interval (status --watch)",
188
+ "flagTimeout": "HTTP timeout (status)",
189
+ "flagRetries": "Retry count (status)",
190
+ "flagPlain": "Disable colors",
191
+ "flagNoLogo": "Skip logo",
192
+ "unknownCommand": "Unknown command: {command}",
193
+ "unknownCommandHint": "Run `nbtca --help` to see available commands.",
194
+ "unknownFlag": "Unknown flag: {flag}",
195
+ "unknownFlagHint": "Run `nbtca --help` to see available flags.",
196
+ "invalidFlag": "Flag {flag} is not valid for this command.",
197
+ "invalidFlagHint": "Run `nbtca --help` to see command usage.",
198
+ "invalidLang": "Invalid language. Use `zh` or `en`.",
199
+ "invalidNext": "Invalid --next value. Use --next=<number> (>= 1).",
200
+ "requiresTty": "Interactive mode requires a TTY terminal.",
201
+ "requiresTtyHint": "Use `nbtca --help` for command mode."
164
202
  }
165
203
  }
@@ -28,6 +28,7 @@
28
28
  "project": "项目",
29
29
  "version": "版本",
30
30
  "description": "描述",
31
+ "descriptionText": "NBTCA Prompt - 极简命令行工具",
31
32
  "github": "GitHub",
32
33
  "website": "网站",
33
34
  "email": "邮箱",
@@ -91,7 +92,8 @@
91
92
  "searchPlaceholder": "输入关键词...",
92
93
  "searching": "正在搜索文档...",
93
94
  "searchResults": "个结果",
94
- "searchNoResults": "未找到匹配的文档"
95
+ "searchNoResults": "未找到匹配的文档",
96
+ "loadingFile": "正在加载"
95
97
  },
96
98
  "links": {
97
99
  "choose": "打开链接:",
@@ -161,5 +163,41 @@
161
163
  "upToDate": "已是最新版本 ({version})",
162
164
  "checkFailed": "无法检查更新",
163
165
  "command": "运行: npm i -g @nbtca/prompt"
166
+ },
167
+ "cli": {
168
+ "usage": "用法:",
169
+ "interactive": "交互式菜单",
170
+ "runCommand": "运行命令",
171
+ "commands": "命令:",
172
+ "flags": "选项:",
173
+ "cmdWebsite": "官方网站 URL",
174
+ "cmdGithub": "GitHub 组织 URL",
175
+ "cmdRoadmap": "项目路线图 URL",
176
+ "cmdRepair": "维修服务 URL",
177
+ "cmdTheme": "查看或设置主题",
178
+ "cmdLang": "设置语言",
179
+ "cmdUpdate": "检查更新",
180
+ "flagVersion": "显示版本号",
181
+ "flagHelp": "显示帮助",
182
+ "flagOpen": "在浏览器中打开(URL 命令)",
183
+ "flagJson": "JSON 输出(events, status)",
184
+ "flagToday": "仅显示今日(events)",
185
+ "flagNext": "限制为前 N 个(events)",
186
+ "flagWatch": "实时刷新(status)",
187
+ "flagInterval": "刷新间隔(status --watch)",
188
+ "flagTimeout": "HTTP 超时时间(status)",
189
+ "flagRetries": "重试次数(status)",
190
+ "flagPlain": "禁用颜色",
191
+ "flagNoLogo": "跳过 Logo",
192
+ "unknownCommand": "未知命令: {command}",
193
+ "unknownCommandHint": "运行 `nbtca --help` 查看可用命令。",
194
+ "unknownFlag": "未知选项: {flag}",
195
+ "unknownFlagHint": "运行 `nbtca --help` 查看可用选项。",
196
+ "invalidFlag": "选项 {flag} 对此命令无效。",
197
+ "invalidFlagHint": "运行 `nbtca --help` 查看命令用法。",
198
+ "invalidLang": "无效语言。请使用 `zh` 或 `en`。",
199
+ "invalidNext": "无效的 --next 值。请使用 --next=<数字>(>= 1)。",
200
+ "requiresTty": "交互模式需要 TTY 终端。",
201
+ "requiresTtyHint": "使用 `nbtca --help` 查看命令模式。"
164
202
  }
165
203
  }
package/dist/index.js CHANGED
@@ -115,8 +115,9 @@ function validateFlags(command, flags) {
115
115
  return !KNOWN_FLAG_PREFIXES.some((prefix) => flag.startsWith(prefix));
116
116
  });
117
117
  if (unknown.length > 0) {
118
- console.error(chalk.red(`Unknown flag: ${unknown[0]}`));
119
- console.error(chalk.dim('Run `nbtca --help` to see available flags.'));
118
+ const trans0 = t();
119
+ console.error(chalk.red(fmt(trans0.cli.unknownFlag, { flag: unknown[0] })));
120
+ console.error(chalk.dim(trans0.cli.unknownFlagHint));
120
121
  process.exit(1);
121
122
  }
122
123
  const allowed = getAllowedFlagsFor(command);
@@ -127,43 +128,46 @@ function validateFlags(command, flags) {
127
128
  return !allowedPrefixes.some((prefix) => flag.startsWith(prefix));
128
129
  });
129
130
  if (disallowed.length > 0) {
130
- console.error(chalk.red(`Flag ${disallowed[0]} is not valid for this command.`));
131
- console.error(chalk.dim('Run `nbtca --help` to see command usage.'));
131
+ const trans1 = t();
132
+ console.error(chalk.red(fmt(trans1.cli.invalidFlag, { flag: disallowed[0] })));
133
+ console.error(chalk.dim(trans1.cli.invalidFlagHint));
132
134
  process.exit(1);
133
135
  }
134
136
  }
135
137
  function printHelp() {
138
+ const trans = t();
139
+ const c = trans.cli;
136
140
  console.log(chalk.bold('NBTCA Prompt'));
137
141
  console.log();
138
- console.log('Usage:');
139
- console.log(' nbtca Interactive menu');
140
- console.log(' nbtca <command> [flags] Run a command');
142
+ console.log(c.usage);
143
+ console.log(` nbtca ${c.interactive}`);
144
+ console.log(` nbtca <command> [flags] ${c.runCommand}`);
141
145
  console.log();
142
- console.log('Commands:');
143
- console.log(' events Upcoming activities');
144
- console.log(' docs Knowledge base');
145
- console.log(' status Service health');
146
- console.log(' website Official website URL');
147
- console.log(' github GitHub organization URL');
148
- console.log(' roadmap Project roadmap URL');
149
- console.log(' repair Repair service URL');
150
- console.log(' theme View or set theme');
151
- console.log(' lang <zh|en> Set language');
152
- console.log(' update Check for updates');
146
+ console.log(c.commands);
147
+ console.log(` events ${trans.menu.eventsDesc}`);
148
+ console.log(` docs ${trans.menu.docsDesc}`);
149
+ console.log(` status ${trans.menu.statusDesc}`);
150
+ console.log(` website ${c.cmdWebsite}`);
151
+ console.log(` github ${c.cmdGithub}`);
152
+ console.log(` roadmap ${c.cmdRoadmap}`);
153
+ console.log(` repair ${c.cmdRepair}`);
154
+ console.log(` theme ${c.cmdTheme}`);
155
+ console.log(` lang <zh|en> ${c.cmdLang}`);
156
+ console.log(` update ${c.cmdUpdate}`);
153
157
  console.log();
154
- console.log('Flags:');
155
- console.log(' --version Show version');
156
- console.log(' --help Show help');
157
- console.log(' --open Open in browser (URL commands)');
158
- console.log(' --json JSON output (events, status)');
159
- console.log(' --today Today only (events)');
160
- console.log(' --next=<n> Limit to next N (events)');
161
- console.log(' --watch Live refresh (status)');
162
- console.log(' --interval=<s> Refresh interval (status --watch)');
163
- console.log(' --timeout=<ms> HTTP timeout (status)');
164
- console.log(' --retries=<n> Retry count (status)');
165
- console.log(' --plain No color');
166
- console.log(' --no-logo Skip logo');
158
+ console.log(c.flags);
159
+ console.log(` --version ${c.flagVersion}`);
160
+ console.log(` --help ${c.flagHelp}`);
161
+ console.log(` --open ${c.flagOpen}`);
162
+ console.log(` --json ${c.flagJson}`);
163
+ console.log(` --today ${c.flagToday}`);
164
+ console.log(` --next=<n> ${c.flagNext}`);
165
+ console.log(` --watch ${c.flagWatch}`);
166
+ console.log(` --interval=<s> ${c.flagInterval}`);
167
+ console.log(` --timeout=<ms> ${c.flagTimeout}`);
168
+ console.log(` --retries=<n> ${c.flagRetries}`);
169
+ console.log(` --plain ${c.flagPlain}`);
170
+ console.log(` --no-logo ${c.flagNoLogo}`);
167
171
  }
168
172
  async function runEventsCommand(flags) {
169
173
  let events = await fetchEvents();
@@ -180,7 +184,7 @@ async function runEventsCommand(flags) {
180
184
  if (nextFlag) {
181
185
  const n = Number.parseInt(nextFlag.split('=')[1] || '', 10);
182
186
  if (!Number.isInteger(n) || n < 1) {
183
- console.error(chalk.red('Invalid --next value. Use --next=<number> (>= 1).'));
187
+ console.error(chalk.red(t().cli.invalidNext));
184
188
  process.exit(1);
185
189
  }
186
190
  events = events.slice(0, n);
@@ -301,8 +305,9 @@ async function runCommandMode(argv) {
301
305
  validateFlags(command, flags);
302
306
  if (!command) {
303
307
  if (!hasInteractiveTerminal()) {
304
- console.error(chalk.red('Interactive mode requires a TTY terminal.'));
305
- console.error(chalk.dim('Use `nbtca --help` for command mode.'));
308
+ const cliTrans = t().cli;
309
+ console.error(chalk.red(cliTrans.requiresTty));
310
+ console.error(chalk.dim(cliTrans.requiresTtyHint));
306
311
  process.exit(1);
307
312
  }
308
313
  await main({ skipLogo: flags.has('--no-logo') });
@@ -311,7 +316,7 @@ async function runCommandMode(argv) {
311
316
  if (command === 'lang' || command === 'language') {
312
317
  const language = (args[0] || '').toLowerCase();
313
318
  if (language !== 'zh' && language !== 'en') {
314
- console.error(chalk.red('Invalid language. Use `zh` or `en`.'));
319
+ console.error(chalk.red(t().cli.invalidLang));
315
320
  process.exit(1);
316
321
  }
317
322
  const persisted = setLanguage(language);
@@ -340,8 +345,9 @@ async function runCommandMode(argv) {
340
345
  }
341
346
  const action = ACTION_ALIASES[command];
342
347
  if (!action) {
343
- console.error(chalk.red(`Unknown command: ${command}`));
344
- console.error(chalk.dim('Run `nbtca --help` to see available commands.'));
348
+ const cliT = t().cli;
349
+ console.error(chalk.red(fmt(cliT.unknownCommand, { command })));
350
+ console.error(chalk.dim(cliT.unknownCommandHint));
345
351
  process.exit(1);
346
352
  }
347
353
  if (action === 'events') {
@@ -350,7 +356,7 @@ async function runCommandMode(argv) {
350
356
  }
351
357
  if (action === 'status') {
352
358
  const ok = await runStatusCommand(flags);
353
- if (!ok)
359
+ if (!ok && !flags.has('--json'))
354
360
  process.exit(1);
355
361
  return;
356
362
  }
@@ -379,9 +385,13 @@ async function runCommandMode(argv) {
379
385
  const content = [
380
386
  row(trans.about.project, APP_INFO.name),
381
387
  row(trans.about.version, `v${APP_INFO.version}`),
388
+ row(trans.about.description, trans.about.descriptionText),
382
389
  '',
383
390
  link(trans.about.github, APP_INFO.repository),
384
391
  link(trans.about.website, URLS.homepage),
392
+ link(trans.about.email, URLS.email),
393
+ '',
394
+ row(trans.about.license, `MIT | ${trans.about.author}: m1ngsama`),
385
395
  ].join('\n');
386
396
  note(content, trans.about.title);
387
397
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nbtca/prompt",
3
- "version": "1.0.25",
3
+ "version": "1.0.26",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "exports": {