@aalis/plugin-commands 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/help.js CHANGED
@@ -1,73 +1,116 @@
1
1
  // ============================================================
2
2
  // help.ts — 指令帮助的渲染(纯函数,便于单测)
3
3
  //
4
- // 两段式:概览回答「有哪些能用」,详情回答「这条怎么用」。哪些指令看得见由注册表按调用者的等级定。
4
+ // 两段式:概览回答「有哪些能用」,详情回答「这条怎么用」。哪些指令看得见由注册表按调用者的等级定。一条回复要用的说明与
5
+ // 版式文字整份交给 localize 渲染一次(按调用者所在会话的语言),渲染之后再取摘要、拼成整条回复,回复是这种语言的字符串。
5
6
  //
6
- // 输出是各平台通用的纯文本:QQ 与终端原样显示,WebUI 按 Markdown 渲染。所以只用两边读起来都对的写法——
7
- // 一行一条的 `- ` 列表(取值缩进两格成子列表),段落之间空一行;不用加粗、反引号与代码围栏,也不用空格对列
8
- // (比例字体下对不齐)。占位写成 `<名字>`,不带冒号:`<名字:类型>` 在 Markdown 里会被当成自动链接。
7
+ // 输出是各平台通用的纯文本:QQ 与终端原样显示,WebUI 的时间线里只认段落与列表,其余写法照原文显示。所以只用一行一条的
8
+ // `- ` 列表(取值缩进两格成子列表),段落之间空一行;不用加粗、反引号与代码围栏,也不用空格对列(比例字体下对不齐)。
9
+ // 占位写成 `<名字>`,不带类型。
9
10
  // ============================================================
10
- /** 第一句的结束:句号、分号、问号、叹号或换行 */
11
- const SENTENCE_END = /[。;!?\n]/;
12
- /** 摘要的上限(按字计):第一句过长时截断,免得一行撑满 */
13
- const BRIEF_MAX = 24;
14
- /** 摘要:约定描述的第一句就是摘要;第一句过长时截断,省略号紧跟文字 */
11
+ import { t } from './texts.js';
12
+ /** 句子边界按 Unicode 的通用规则,与读者的语言无关 */
13
+ const SENTENCES = new Intl.Segmenter('und', { granularity: 'sentence' });
14
+ const GRAPHEMES = new Intl.Segmenter('und', { granularity: 'grapheme' });
15
+ /** 句子切分不在分号处断句,分号另算句末(换行处它已断句) */
16
+ const CLAUSE_END = /[;;]/;
17
+ /**
18
+ * 占两列的字:中日韩文字(按 Script_Extensions 认,长音符 ー 与中点 ・ 这类各文字共用的符号在内)、中日韩标点、竖排与兼容
19
+ * 形式、全角形式;Script_Extensions 也带上的拉丁区中点 ·、修饰符与组合符,谚文的中声与终声,半角片假名与半角谚文占一列
20
+ */
21
+ const WIDE = /^(?![\u00A0-\u036F\u1160-\u11FF\uFF61-\uFFDC])[\p{scx=Han}\p{scx=Hira}\p{scx=Kana}\p{scx=Hang}\p{scx=Bopo}\u3000-\u303F\uFE30-\uFE4F\uFF01-\uFF60\uFFE0-\uFFE6]/u;
22
+ /** 按 emoji 显示的字素同样占两列:默认按 emoji 显示的,以及带 VS16(U+FE0F)或键帽(U+20E3)的文本字符 */
23
+ const EMOJI = /\p{Emoji_Presentation}|\uFE0F|\u20E3/u;
24
+ /** 摘要的上限(按显示宽度计):第一句过长时截断,免得一行撑满 */
25
+ const BRIEF_COLUMNS = 48;
26
+ /**
27
+ * 摘要:约定描述的第一句就是摘要,句末标点不留;第一句超过 48 列时截断,去掉截断处尾部的标点(闭括号与后引号除外)与空白,
28
+ * 省略号紧跟文字
29
+ */
15
30
  export function brief(description) {
16
- const text = description.trim();
17
- const end = text.search(SENTENCE_END);
18
- const first = [...(end < 0 ? text : text.slice(0, end)).trimEnd()];
19
- if (first.length <= BRIEF_MAX)
20
- return first.join('');
21
- return `${first
22
- .slice(0, BRIEF_MAX)
23
- .join('')
24
- .replace(/[\s,,、::·/\-—((]+$/, '')}…`;
31
+ const [sentence] = SENTENCES.segment(description.trim());
32
+ const first = (sentence?.segment ?? '').split(CLAUSE_END)[0].replace(/[\s\p{Sentence_Terminal}]+$/u, '');
33
+ let width = 0;
34
+ let kept = '';
35
+ for (const { segment } of GRAPHEMES.segment(first)) {
36
+ width += WIDE.test(segment) || EMOJI.test(segment) ? 2 : 1;
37
+ if (width > BRIEF_COLUMNS)
38
+ return `${kept.replace(/(?:(?![\p{Pe}\p{Pf}])[\s\p{P}])+$/u, '')}…`;
39
+ kept += segment;
40
+ }
41
+ return first;
25
42
  }
26
43
  const spelled = (name, prefix) => `${prefix}${name.replace(/\./g, ' ')}`;
27
- /** `- /指令 — 摘要 · n 个子指令`;自动分组没有描述,只报子指令数 */
28
- function entryLine({ cmd, children }, prefix) {
29
- const notes = [cmd.isGroup ? '' : brief(cmd.description), children > 0 ? `${children} 个子指令` : ''].filter(Boolean);
30
- return `- ${spelled(cmd.name, prefix)}${notes.length > 0 ? ` — ${notes.join(' · ')}` : ''}`;
44
+ /** 列表里的一条指令要渲染的文字:说明(自动分组没有)与子指令数 */
45
+ const entryTexts = ({ cmd, children }) => ({
46
+ description: cmd.isGroup ? '' : cmd.description,
47
+ children: children > 0 ? t('children', { count: children }) : '',
48
+ });
49
+ /** `- /指令 — 摘要 · n 个子指令`:说明渲染之后取摘要 */
50
+ function entryLine(name, texts, prefix) {
51
+ const notes = [brief(texts.description), texts.children].filter(Boolean);
52
+ return `- ${spelled(name, prefix)}${notes.length > 0 ? ` — ${notes.join(' · ')}` : ''}`;
31
53
  }
32
54
  const argText = (arg) => (arg.required ? `<${arg.name}>` : `[${arg.name}]`);
55
+ /** 带说明的一项写成「项:说明」 */
56
+ const described = (item, description) => description ? t('described', { item, description }) : item;
33
57
  /** 一个选项一行,取值各占一行缩在下面 */
34
58
  function optionLines(option) {
35
59
  const flags = new Set([`--${option.name}`, ...option.aliases.map(a => (a.length === 1 ? `-${a}` : `--${a}`))]);
36
60
  const placeholder = option.valueName ?? option.name;
37
61
  const value = option.type === 'boolean' ? '' : option.valueOptional ? ` [${placeholder}]` : ` <${placeholder}>`;
38
62
  return [
39
- `- ${[...flags].join(', ')}${value}${option.description ? `:${option.description}` : ''}`,
40
- ...(option.choices ?? []).map(c => ` - ${c.value}${c.description ? `:${c.description}` : ''}`),
63
+ described(`- ${[...flags].join(', ')}${value}`, option.description),
64
+ ...(option.choices?.() ?? []).map(c => described(` - ${c.value}`, c.description)),
41
65
  ];
42
66
  }
67
+ /** 用法里以空格相连的一串:占位词(<子指令>、[选项])是文字对象,嵌套着交出,与整条回复同一次渲染 */
68
+ const spaced = (words) => words.reduce((head, tail) => t('spaced', { head, tail }));
43
69
  /** 一段:标题加一行一条;没有条目时整段不出 */
44
70
  const section = (title, lines) => (lines.length > 0 ? [title, ...lines].join('\n') : '');
45
- export function renderOverview(entries, prefix) {
46
- return [
47
- `可用指令(${entries.length} 条):`,
48
- ...entries.map(e => entryLine(e, prefix)),
49
- '',
50
- `详情:${prefix}help 指令名,或在指令后加 -h`,
51
- ].join('\n');
71
+ export function renderOverview(entries, prefix, localize) {
72
+ const texts = localize({
73
+ title: t('overview', { count: entries.length }),
74
+ entries: entries.map(entryTexts),
75
+ hint: t('overviewHint', { prefix }),
76
+ });
77
+ const lines = texts.entries.map((e, i) => entryLine(entries[i].cmd.name, e, prefix));
78
+ return [texts.title, ...lines, '', texts.hint].join('\n');
52
79
  }
53
- /** 详情:标题(带完整描述)、用法、示例、参数、选项、子指令、别名,各段之间空一行 */
54
- export function renderDetail(cmd, children, prefix) {
80
+ /**
81
+ * 详情:标题(带完整描述)、用法、示例、参数、选项、子指令、别名,各段之间空一行。给了 error 时(选项写错附上用法)报错在
82
+ * 最前面
83
+ */
84
+ export function renderDetail(cmd, children, prefix, localize, error) {
55
85
  const head = spelled(cmd.name, prefix);
56
- const usage = [
86
+ const usage = spaced([
57
87
  head,
58
- children.length > 0 && !cmd.handler ? '<子指令>' : '',
88
+ ...(children.length > 0 && !cmd.handler ? [t('subcommandSlot')] : []),
59
89
  ...cmd.positionalArgs.map(argText),
60
- cmd.options.length > 0 ? '[选项]' : '',
61
- ];
62
- const described = cmd.positionalArgs.filter(a => a.description);
90
+ ...(cmd.options.length > 0 ? [t('optionsSlot')] : []),
91
+ ]);
92
+ const texts = localize({
93
+ error: error ?? '',
94
+ description: cmd.isGroup ? '' : cmd.description,
95
+ usage: t('usage', { usage }),
96
+ examples: t('examples'),
97
+ arguments: t('arguments'),
98
+ argumentLines: cmd.positionalArgs.filter(a => a.description).map(a => described(`- ${argText(a)}`, a.description)),
99
+ options: t('options'),
100
+ optionLines: cmd.options.flatMap(optionLines),
101
+ subcommands: t('subcommands'),
102
+ children: children.map(entryTexts),
103
+ aliases: cmd.aliases.length > 0 ? t('aliases', { names: cmd.aliases.map(a => spelled(a, prefix)) }) : '',
104
+ });
63
105
  return [
64
- cmd.isGroup || !cmd.description ? head : `${head} — ${cmd.description}`,
65
- `用法:${usage.filter(Boolean).join(' ')}`,
66
- section('示例:', (cmd.examples ?? []).map(e => `- ${e}`)),
67
- section('参数:', described.map(a => `- ${argText(a)}:${a.description}`)),
68
- section('选项:', cmd.options.flatMap(optionLines)),
69
- section('子指令:', children.map(e => entryLine(e, prefix))),
70
- cmd.aliases.length > 0 ? `别名:${cmd.aliases.map(a => spelled(a, prefix)).join('、')}` : '',
106
+ texts.error,
107
+ texts.description ? `${head} — ${texts.description}` : head,
108
+ texts.usage,
109
+ section(texts.examples, (cmd.examples ?? []).map(e => `- ${e}`)),
110
+ section(texts.arguments, texts.argumentLines),
111
+ section(texts.options, texts.optionLines),
112
+ section(texts.subcommands, texts.children.map((e, i) => entryLine(children[i].cmd.name, e, prefix))),
113
+ texts.aliases,
71
114
  ]
72
115
  .filter(Boolean)
73
116
  .join('\n\n');
package/dist/help.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,33 +1,3 @@
1
- import { type StorageService } from '@aalis/api-storage';
2
- /** 可清理类型。globalOnly:跨会话数据,只在 /clear all 时清理 */
3
- export declare const CLEAR_TYPES: ReadonlyArray<{
4
- id: string;
5
- label: string;
6
- globalOnly?: boolean;
7
- }>;
8
- /**
9
- * 附件缓存种类 → `data:/` 目录 + 中文标签。
10
- * 目录名与 @aalis/plugin-adapter-onebot 的 attachment-cache `KIND_DIR` 对齐
11
- * (image→images / video→videos / audio→audios / file→files),落盘路径为
12
- * `data:/{dir}/{safeSessionId}/{hash}.{ext}`。改这里即同步 /clear 覆盖面。
13
- */
14
- export declare const ATTACHMENT_KINDS: readonly [{
15
- readonly type: "image";
16
- readonly dir: "images";
17
- readonly label: "图片";
18
- }, {
19
- readonly type: "video";
20
- readonly dir: "videos";
21
- readonly label: "视频";
22
- }, {
23
- readonly type: "audio";
24
- readonly dir: "audios";
25
- readonly label: "语音";
26
- }, {
27
- readonly type: "file";
28
- readonly dir: "files";
29
- readonly label: "文件";
30
- }];
31
1
  declare const _default: import("@aalis/core").PluginDefinition<{
32
2
  /**
33
3
  * commands 由本插件自己提供,只能声明成 optional:写 required 会把激活闸架在自己的
@@ -36,11 +6,18 @@ declare const _default: import("@aalis/core").PluginDefinition<{
36
6
  */
37
7
  commands: import("@aalis/core").OptionalUse<import("@aalis/api-commands").CommandService, import("@aalis/api-commands").BoundCommands>;
38
8
  gateway: import("@aalis/core").ServiceDescriptor<import("@aalis/api-gateway").GatewayService, import("@aalis/api-gateway").GatewayService>;
39
- storage: import("@aalis/core").OptionalUse<StorageService, import("@aalis/api-storage").BoundStorage>;
40
9
  memory: import("@aalis/core").OptionalUse<import("@aalis/api-memory").MemoryService, import("@aalis/api-memory").MemoryService>;
10
+ /** /clear 清消息历史时经它先停下并按住这些会话;缺席时没有在跑的回合要停 */
11
+ agent: import("@aalis/core").OptionalUse<import("@aalis/api-agent").AgentService, import("@aalis/api-agent").BoundAgent>;
41
12
  authority: import("@aalis/core").OptionalUse<import("@aalis/api-authority").AuthorityService, import("@aalis/api-authority").AuthorityService>;
42
- /** /status 列已登记的工具数 */
13
+ /** /status 写已登记的工具数 */
43
14
  tools: import("@aalis/core").OptionalUse<import("@aalis/api-tools").ToolService, import("@aalis/api-tools").BoundTools>;
15
+ /** /status 写插件在跑与出错的个数;缺席时不写这一行 */
16
+ plugins: import("@aalis/core").OptionalUse<import("@aalis/core").PluginManagerService, import("@aalis/core").PluginManagerService>;
17
+ /** /clear 的类型按 memory:clear-type 的登记表取;缺席时只认 all */
18
+ contributions: import("@aalis/core").OptionalUse<import("@aalis/api-contributions").ContributionRegistry, import("@aalis/api-contributions").Contributions>;
19
+ /** 回复与帮助按这条指令所在会话的语言渲染;缺席时按原文 */
20
+ i18n: import("@aalis/core").OptionalUse<import("@aalis/api-i18n").I18nService, import("@aalis/api-i18n").I18nService>;
44
21
  app: import("@aalis/core").ServiceDescriptor<import("@aalis/core").AppService, import("@aalis/core").AppService>;
45
22
  events: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Events, import("@aalis/core").Events>;
46
23
  hooks: import("@aalis/core").ServiceDescriptor<import("@aalis/api-hooks").HookRegistry, import("@aalis/api-hooks").Hooks>;
@@ -49,7 +26,6 @@ declare const _default: import("@aalis/core").PluginDefinition<{
49
26
  logger: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Logger, import("@aalis/core").Logger>;
50
27
  config: import("@aalis/core").ServiceDescriptor<(identity: symbol) => Readonly<Record<string, unknown>>, Readonly<Record<string, unknown>>>;
51
28
  provide: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Provide, import("@aalis/core").Provide>;
52
- services: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Services, import("@aalis/core").Services>;
53
29
  }>;
54
30
  export default _default;
55
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAqB,KAAK,cAAc,EAAW,MAAM,oBAAoB,CAAC;AA8CrF,+CAA+C;AAC/C,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,CAY1F,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;EAKnB,CAAC;;IA8BT;;;;OAIG;;;;;;IAMH,uBAAuB;;;;;IAKvB,oBAAoB;;;;;;;AAStB,wBAQG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";IA8DE;;;;OAIG;;;;IAIH,6CAA6C;;;IAG7C,uBAAuB;;IAEvB,mCAAmC;;IAEnC,oDAAoD;;IAEpD,iCAAiC;;;;;IAKjC,oBAAoB;;;;;;AAQtB,wBAQG"}