koishi-plugin-image-prompt 2.0.3 → 2.1.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.
Files changed (5) hide show
  1. package/lib/index.d.ts +45 -46
  2. package/lib/index.js +262 -236
  3. package/package.json +1 -1
  4. package/readme.md +556 -544
  5. package/src/index.ts +3503 -3492
package/lib/index.d.ts CHANGED
@@ -2,14 +2,13 @@ import { Context, Schema } from 'koishi';
2
2
  export declare const name = "image-prompt";
3
3
  /**
4
4
  * 依赖声明:http / logger / i18n 是必需的;
5
- * puppeteer 是**可选**的——只有开启「文字渲染参考图」时才需要浏览器服务,
6
- * 没装也能正常绘图(Koishi 会在它可用时把它注入进来,并等它就绪后再启动本插件)。
5
+ * assets 是**可选**的(结果图先上传再发,外链在手机端 QQ 常常拉不到)。
7
6
  */
8
7
  export declare const inject: {
9
8
  required: string[];
10
9
  optional: string[];
11
10
  };
12
- export declare const usage = "\n---\n\n\u6B64\u63D2\u4EF6\u76F4\u63A5\u8C03\u7528 OpenAI \u517C\u5BB9\u7684 Chat Completions \u63A5\u53E3\u751F\u6210\u56FE\u7247\n\n\u8BF7\u5728\u63D2\u4EF6\u8BBE\u7F6E\u4E2D\u586B\u5199\uFF1A\n\n- API \u670D\u52A1\u5668\u5730\u5740\uFF08baseUrl\uFF09\n- \u4F7F\u7528\u7684\u6A21\u578B\uFF08model\uFF09\n- API \u5BC6\u94A5\uFF08apiKey\uFF09\n\n\u3010Agent \u6A21\u5F0F\uFF08\u9ED8\u8BA4\uFF0C\u63A8\u8350\uFF09\u3011\n\n\u6307\u4EE4\u4E00\u89E6\u53D1\uFF0C\u63D2\u4EF6\u5C31\u628A\u300C\u7528\u6237\u8BF4\u4E86\u4EC0\u4E48 + \u6307\u4EE4\u63D0\u793A\u8BCD + \u53EF\u7528\u7684\u53C2\u8003\u56FE\u300D\u5168\u90E8\u4EA4\u7ED9**\u5BF9\u8BDD\u6A21\u578B**\uFF0C\n\u7531\u6A21\u578B\u81EA\u5DF1\u51B3\u5B9A\u4E0B\u4E00\u6B65 \u2014\u2014 \u8DDF NeoBot \u4E00\u4E2A\u5957\u8DEF\uFF1A\n\n- **gallery_search**\uFF1A\u6A21\u578B\u81EA\u5DF1\u6309\u5173\u952E\u8BCD\u641C\u53C2\u8003\u56FE\u5E93\uFF08\u5173\u952E\u8BCD\u7531\u5B83\u81EA\u5DF1\u62DF\uFF0C\u4E0D\u7528\u4F60\u5728\u914D\u7F6E\u91CC\u5199\u89C4\u5219\uFF09\n- **ask_user**\uFF1A\u95EE\u9898\u4E0D\u6E05\u695A\u3001\u7F3A\u53C2\u8003\u56FE\u3001\u5F00\u753B\u524D\u8981\u786E\u8BA4\uFF0C\u6A21\u578B\u81EA\u5DF1\u5F00\u53E3\u95EE\uFF0C\u5E76\u7B49\u7528\u6237\u56DE\u8BDD\n- **draw**\uFF1A\u628A prompt \u548C\u5B83\u6311\u4E2D\u7684\u53C2\u8003\u56FE\u7F16\u53F7\u4EA4\u51FA\u53BB\uFF0C\u771F\u6B63\u5F00\u59CB\u753B\n\n\u4E5F\u5C31\u662F\u8BF4\uFF1A**\u53C2\u8003\u56FE\u9009\u8C01\u3001\u8981\u4E0D\u8981\u8FFD\u95EE\u3001\u4EC0\u4E48\u65F6\u5019\u5F00\u753B\uFF0C\u5168\u90E8\u662F\u6A21\u578B\u81EA\u5DF1\u51B3\u5B9A\u7684**\uFF0C\n\u63D2\u4EF6\u4E0D\u518D\u5199\u6B7B\u300C\u6253\u5206 \u2192 \u9608\u503C \u2192 \u4E0D\u591F\u5C31\u95EE\u7528\u6237\u300D\u8FD9\u5957\u6D41\u7A0B\u3002\n\u6A21\u578B\u60F3\u641C\u51E0\u6B21\u56FE\u5E93\u3001\u60F3\u548C\u7528\u6237\u6765\u56DE\u51E0\u8F6E\u90FD\u884C\uFF0C\u76F4\u5230\u5B83\u8BA4\u4E3A\u53EF\u4EE5\u753B\u4E86\u3002\n\n\u8981\u6C42\uFF1A\u586B\u5199\u7684\u5BF9\u8BDD\u6A21\u578B\u5FC5\u987B**\u652F\u6301 function calling\uFF08\u5DE5\u5177\u8C03\u7528\uFF09**\u3002\n\u4E0D\u652F\u6301\u4E5F\u6CA1\u5173\u7CFB \u2014\u2014 \u63D2\u4EF6\u5185\u7F6E\u4E86\u300C\u53EA\u7528\u4E00\u884C JSON \u8C03\u7528\u5DE5\u5177\u300D\u7684\u515C\u5E95\u534F\u8BAE\uFF0C\u6A21\u578B\u7167\u6837\u80FD\u8DD1\u6D41\u7A0B\u3002\n\n\u76F8\u5173\u5F00\u5173\uFF1A\n- \u300C\u542F\u7528 Agent \u6A21\u5F0F\u300D\u9ED8\u8BA4\u5F00\u3002\u5173\u6389\u5C31\u9000\u5316\u6210\u300C\u6307\u4EE4\u63D0\u793A\u8BCD + \u7528\u6237\u9644\u52A0\u9700\u6C42\u76F4\u63A5\u753B\u300D\uFF0C\u4E0D\u67E5\u56FE\u5E93\u4E5F\u4E0D\u8FFD\u95EE\u3002\n- \u300C\u5F00\u753B\u524D\u5148\u95EE\u4E00\u53E5\u300D\u9ED8\u8BA4\u5F00\uFF1A\u6A21\u578B\u753B\u4E4B\u524D\u4F1A\u5148\u7528 ask_user \u628A\u300C\u672C\u6B21\u53C2\u8003\u54EA\u51E0\u5F20\u56FE + \u5927\u81F4\u753B\u9762\u300D\u544A\u8BC9\u4F60\uFF0C\u4F60\u70B9\u5934\u5B83\u624D\u753B\u3002\n- \u300C\u6700\u591A\u53C2\u8003\u56FE\u6570\u91CF\u300D\u300C\u5355\u6B21\u641C\u7D22\u8FD4\u56DE\u6761\u6570\u300D\u300C\u8BE2\u95EE\u7B49\u5F85\u65F6\u95F4\u300D\u300C\u6700\u591A\u6765\u56DE\u8F6E\u6570\u300D\u90FD\u5728 agent \u914D\u7F6E\u91CC\u8C03\u3002\n\n\u3010\u53C2\u8003\u56FE\u7247\u7EC4 / \u56FE\u5E93\u3011\n\n1. \u5728\u300C\u53C2\u8003\u56FE\u7247\u7EC4\u300D\u91CC\u6CE8\u518C\u5206\u7EC4\uFF1A\u6BCF\u7EC4\u586B\u300C\u56FE\u7247\u94FE\u63A5 + \u63CF\u8FF0\u300D\u3002**\u63CF\u8FF0\u8981\u5199\u5177\u4F53**\uFF08\u53D1\u8272\u53D1\u578B\u3001\u670D\u88C5\u3001\u52A8\u4F5C\u3001\u753B\u98CE\uFF09\uFF0C\n \u6A21\u578B\u5C31\u662F\u9760\u8FD9\u53E5\u63CF\u8FF0\u641C\u5230\u5B83\u7684\u3002\n2. \u5728\u6307\u4EE4\u914D\u7F6E\u7684\u300C\u5F15\u7528\u7684\u53C2\u8003\u56FE\u7247\u7EC4\u540D\u79F0\u300D\u91CC\u586B\u7EC4\u540D\uFF08\u53EF\u591A\u4E2A\uFF09\uFF1B\u6A21\u578B\u53EA\u4F1A\u5728\u8FD9\u4E2A\u8303\u56F4\u5185\u641C\u3002\n \u7559\u7A7A\u4E14\u5F00\u542F\u300C\u5141\u8BB8\u641C\u7D22\u5168\u90E8\u7EC4\u300D\u65F6\uFF0C\u6240\u6709\u7EC4\u90FD\u80FD\u641C\u5230\u3002\n3. \u300C\u751F\u6210\u63CF\u8FF0\u300D\u6307\u4EE4\u53EF\u4EE5\u8BA9\u6A21\u578B\u770B\u56FE\u81EA\u52A8\u5199\u63CF\u8FF0\u5E76\u5199\u56DE\u914D\u7F6E\uFF08\u9700\u8981\u652F\u6301\u56FE\u7247\u8F93\u5165\u7684\u6A21\u578B\uFF09\u3002\n4. \u751F\u6210\u7ED3\u679C\u53EF\u81EA\u52A8\u5165\u5E93\uFF08\u9ED8\u8BA4\u5173\u95ED\uFF09\uFF0C\u4E0B\u6B21\u80FD\u88AB\u81EA\u5DF1\u641C\u5230\u5E76\u590D\u7528\uFF0C\u5F62\u6210\u95ED\u73AF\u3002\n\n\u3010\u5176\u5B83\u3011\n\n- \u300C\u6536\u5230\u63D0\u793A\u300D\u9ED8\u8BA4\u5F00\uFF1A\u6307\u4EE4\u89E6\u53D1\u7ACB\u523B\u56DE\u4E00\u6761\u300C\u6536\u5230\uFF0C\u6B63\u5728\u51C6\u5907...\u300D\uFF0C\u4E0D\u8BA9\u7528\u6237\u4EE5\u4E3A\u5361\u4F4F\u3002\n- \u300C\u540E\u53F0\u7ED8\u56FE\u300D\u5F00\u542F\u540E\u51FA\u56FE\u4E0D\u963B\u585E\uFF0C\u5148\u56DE\u300C\u6B63\u5728\u753B\u300D\uFF0C\u753B\u597D\u4E3B\u52A8\u63A8\u9001\u3002\n- \u300C\u6587\u5B57\u6E32\u67D3\u53C2\u8003\u56FE\u300D\u628A\u753B\u9762\u4E0A\u7684\u6587\u5B57\uFF08\u53F0\u8BCD/\u62DB\u724C\uFF09\u5148\u6E32\u67D3\u6210\u56FE\u7247\u4E00\u8D77\u53D1\u7ED9\u7ED8\u56FE\u6A21\u578B\uFF0C\u89E3\u51B3\u4E2D\u6587\u5D29\u5B57\u3002\n- \u56DE\u663E\u63D0\u793A\u8BCD\u3001\u7ED3\u679C\u56FE\u5C3A\u5BF8/\u8D70 assets \u7B49\u90FD\u5728\u300C\u6D88\u606F\u53D1\u9001\u300D\u91CC\u3002\n\nAgent \u6307\u4EE4\u6A21\u677F\u53EF\u7528\u5360\u4F4D\u7B26\uFF1A{command} \u6307\u4EE4\u540D\u3001{prompt} \u6307\u4EE4\u63D0\u793A\u8BCD\u3001{userInput} \u7528\u6237\u9644\u52A0\u9700\u6C42\u3001{imageCount} \u7528\u6237\u968F\u6D88\u606F\u53D1\u7684\u56FE\u6570\u91CF\u3001{refCount} \u53EF\u68C0\u7D22\u7684\u53C2\u8003\u56FE\u6570\u91CF\n\n---\n\u6B64\u9879\u76EE\u6240\u9700\u7684koishi\u670D\u52A1\uFF1A\u5FC5\u9700 'http', 'logger', 'i18n'\uFF1B\u53EF\u9009 'puppeteer'\uFF08\u4EC5\u300C\u6587\u5B57\u6E32\u67D3\u53C2\u8003\u56FE\u300D\u9700\u8981\uFF09\n\n---\n";
11
+ export declare const usage = "\n---\n\n\u6B64\u63D2\u4EF6\u76F4\u63A5\u8C03\u7528 OpenAI \u517C\u5BB9\u7684 Chat Completions \u63A5\u53E3\u751F\u6210\u56FE\u7247\n\n\u8BF7\u5728\u63D2\u4EF6\u8BBE\u7F6E\u4E2D\u586B\u5199\uFF1A\n\n- API \u670D\u52A1\u5668\u5730\u5740\uFF08baseUrl\uFF09\n- \u4F7F\u7528\u7684\u6A21\u578B\uFF08model\uFF09\n- API \u5BC6\u94A5\uFF08apiKey\uFF09\n\n\u3010Agent \u6A21\u5F0F\uFF08\u9ED8\u8BA4\uFF0C\u63A8\u8350\uFF09\u3011\n\n\u6307\u4EE4\u4E00\u89E6\u53D1\uFF0C\u63D2\u4EF6\u5C31\u628A\u300C\u7528\u6237\u8BF4\u4E86\u4EC0\u4E48 + \u6307\u4EE4\u63D0\u793A\u8BCD + \u53EF\u7528\u7684\u53C2\u8003\u56FE\u300D\u5168\u90E8\u4EA4\u7ED9**\u5BF9\u8BDD\u6A21\u578B**\uFF0C\n\u7531\u6A21\u578B\u81EA\u5DF1\u51B3\u5B9A\u4E0B\u4E00\u6B65 \u2014\u2014 \u8DDF NeoBot \u4E00\u4E2A\u5957\u8DEF\uFF1A\n\n- **gallery_search**\uFF1A\u6A21\u578B\u81EA\u5DF1\u6309\u5173\u952E\u8BCD\u641C\u53C2\u8003\u56FE\u5E93\uFF08\u5173\u952E\u8BCD\u7531\u5B83\u81EA\u5DF1\u62DF\uFF0C\u4E0D\u7528\u4F60\u5728\u914D\u7F6E\u91CC\u5199\u89C4\u5219\uFF09\n- **ask_user**\uFF1A\u95EE\u9898\u4E0D\u6E05\u695A\u3001\u7F3A\u53C2\u8003\u56FE\u3001\u5F00\u753B\u524D\u8981\u786E\u8BA4\uFF0C\u6A21\u578B\u81EA\u5DF1\u5F00\u53E3\u95EE\uFF0C\u5E76\u7B49\u7528\u6237\u56DE\u8BDD\n- **draw**\uFF1A\u628A prompt \u548C\u5B83\u6311\u4E2D\u7684\u53C2\u8003\u56FE\u7F16\u53F7\u4EA4\u51FA\u53BB\uFF0C\u771F\u6B63\u5F00\u59CB\u753B\n\n\u4E5F\u5C31\u662F\u8BF4\uFF1A**\u53C2\u8003\u56FE\u9009\u8C01\u3001\u8981\u4E0D\u8981\u8FFD\u95EE\u3001\u4EC0\u4E48\u65F6\u5019\u5F00\u753B\uFF0C\u5168\u90E8\u662F\u6A21\u578B\u81EA\u5DF1\u51B3\u5B9A\u7684**\uFF0C\n\u63D2\u4EF6\u4E0D\u518D\u5199\u6B7B\u300C\u6253\u5206 \u2192 \u9608\u503C \u2192 \u4E0D\u591F\u5C31\u95EE\u7528\u6237\u300D\u8FD9\u5957\u6D41\u7A0B\u3002\n\u6A21\u578B\u60F3\u641C\u51E0\u6B21\u56FE\u5E93\u3001\u60F3\u548C\u7528\u6237\u6765\u56DE\u51E0\u8F6E\u90FD\u884C\uFF0C\u76F4\u5230\u5B83\u8BA4\u4E3A\u53EF\u4EE5\u753B\u4E86\u3002\n\n\u8981\u6C42\uFF1A\u586B\u5199\u7684\u5BF9\u8BDD\u6A21\u578B\u5FC5\u987B**\u652F\u6301 function calling\uFF08\u5DE5\u5177\u8C03\u7528\uFF09**\u3002\n\u4E0D\u652F\u6301\u4E5F\u6CA1\u5173\u7CFB \u2014\u2014 \u63D2\u4EF6\u5185\u7F6E\u4E86\u300C\u53EA\u7528\u4E00\u884C JSON \u8C03\u7528\u5DE5\u5177\u300D\u7684\u515C\u5E95\u534F\u8BAE\uFF0C\u6A21\u578B\u7167\u6837\u80FD\u8DD1\u6D41\u7A0B\u3002\n\n\u76F8\u5173\u5F00\u5173\uFF1A\n- \u300C\u542F\u7528 Agent \u6A21\u5F0F\u300D\u9ED8\u8BA4\u5F00\u3002\u5173\u6389\u5C31\u9000\u5316\u6210\u300C\u6307\u4EE4\u63D0\u793A\u8BCD + \u7528\u6237\u9644\u52A0\u9700\u6C42\u76F4\u63A5\u753B\u300D\uFF0C\u4E0D\u67E5\u56FE\u5E93\u4E5F\u4E0D\u8FFD\u95EE\u3002\n- \u300C\u5F00\u753B\u524D\u5148\u95EE\u4E00\u53E5\u300D\u9ED8\u8BA4\u5F00\uFF1A\u6A21\u578B\u753B\u4E4B\u524D\u4F1A\u5148\u7528 ask_user \u628A\u300C\u672C\u6B21\u53C2\u8003\u54EA\u51E0\u5F20\u56FE + \u5927\u81F4\u753B\u9762\u300D\u544A\u8BC9\u4F60\uFF0C\u4F60\u70B9\u5934\u5B83\u624D\u753B\u3002\n- \u300C\u6700\u591A\u53C2\u8003\u56FE\u6570\u91CF\u300D\u300C\u5355\u6B21\u641C\u7D22\u8FD4\u56DE\u6761\u6570\u300D\u300C\u8BE2\u95EE\u7B49\u5F85\u65F6\u95F4\u300D\u300C\u6700\u591A\u6765\u56DE\u8F6E\u6570\u300D\u90FD\u5728 agent \u914D\u7F6E\u91CC\u8C03\u3002\n\n\u3010\u53C2\u8003\u56FE\u7247\u7EC4 / \u56FE\u5E93\u3011\n\n1. \u5728\u300C\u53C2\u8003\u56FE\u7247\u7EC4\u300D\u91CC\u6CE8\u518C\u5206\u7EC4\uFF1A\u6BCF\u7EC4\u586B\u300C\u56FE\u7247\u94FE\u63A5 + \u63CF\u8FF0\u300D\u3002**\u63CF\u8FF0\u8981\u5199\u5177\u4F53**\uFF08\u53D1\u8272\u53D1\u578B\u3001\u670D\u88C5\u3001\u52A8\u4F5C\u3001\u753B\u98CE\uFF09\uFF0C\n \u6A21\u578B\u5C31\u662F\u9760\u8FD9\u53E5\u63CF\u8FF0\u641C\u5230\u5B83\u7684\u3002\n2. \u5728\u6307\u4EE4\u914D\u7F6E\u7684\u300C\u5F15\u7528\u7684\u53C2\u8003\u56FE\u7247\u7EC4\u540D\u79F0\u300D\u91CC\u586B\u7EC4\u540D\uFF08\u53EF\u591A\u4E2A\uFF09\uFF1B\u6A21\u578B\u53EA\u4F1A\u5728\u8FD9\u4E2A\u8303\u56F4\u5185\u641C\u3002\n \u7559\u7A7A\u4E14\u5F00\u542F\u300C\u5141\u8BB8\u641C\u7D22\u5168\u90E8\u7EC4\u300D\u65F6\uFF0C\u6240\u6709\u7EC4\u90FD\u80FD\u641C\u5230\u3002\n3. \u300C\u751F\u6210\u63CF\u8FF0\u300D\u6307\u4EE4\u53EF\u4EE5\u8BA9\u6A21\u578B\u770B\u56FE\u81EA\u52A8\u5199\u63CF\u8FF0\u5E76\u5199\u56DE\u914D\u7F6E\uFF08\u9700\u8981\u652F\u6301\u56FE\u7247\u8F93\u5165\u7684\u6A21\u578B\uFF09\u3002\n4. \u751F\u6210\u7ED3\u679C\u53EF\u81EA\u52A8\u5165\u5E93\uFF08\u9ED8\u8BA4\u5173\u95ED\uFF09\uFF0C\u4E0B\u6B21\u80FD\u88AB\u81EA\u5DF1\u641C\u5230\u5E76\u590D\u7528\uFF0C\u5F62\u6210\u95ED\u73AF\u3002\n\n\u3010\u5176\u5B83\u3011\n\n- \u300C\u6536\u5230\u63D0\u793A\u300D\u9ED8\u8BA4\u5F00\uFF1A\u6307\u4EE4\u89E6\u53D1\u7ACB\u523B\u56DE\u4E00\u6761\u300C\u6536\u5230\uFF0C\u6B63\u5728\u51C6\u5907...\u300D\uFF0C\u4E0D\u8BA9\u7528\u6237\u4EE5\u4E3A\u5361\u4F4F\u3002\n- \u300C\u540E\u53F0\u7ED8\u56FE\u300D\u5F00\u542F\u540E\u51FA\u56FE\u4E0D\u963B\u585E\uFF0C\u5148\u56DE\u300C\u6B63\u5728\u753B\u300D\uFF0C\u753B\u597D\u4E3B\u52A8\u63A8\u9001\u3002\n- \u56DE\u663E\u63D0\u793A\u8BCD\u3001\u7ED3\u679C\u56FE\u5C3A\u5BF8/\u8D70 assets \u7B49\u90FD\u5728\u300C\u6D88\u606F\u53D1\u9001\u300D\u91CC\u3002\n\nAgent \u6307\u4EE4\u6A21\u677F\u53EF\u7528\u5360\u4F4D\u7B26\uFF1A{command} \u6307\u4EE4\u540D\u3001{prompt} \u6307\u4EE4\u63D0\u793A\u8BCD\u3001{userInput} \u7528\u6237\u9644\u52A0\u9700\u6C42\u3001{imageCount} \u7528\u6237\u968F\u6D88\u606F\u53D1\u7684\u56FE\u6570\u91CF\u3001{refCount} \u53EF\u68C0\u7D22\u7684\u53C2\u8003\u56FE\u6570\u91CF\n\n---\n\u6B64\u9879\u76EE\u6240\u9700\u7684koishi\u670D\u52A1\uFF1A\u5FC5\u9700 'http', 'logger', 'i18n'\uFF1B\u53EF\u9009 'assets'\uFF08\u7ED3\u679C\u56FE\u4E0A\u4F20\uFF09\n\n---\n";
13
12
  /**
14
13
  * 计算重试等待时间(毫秒):限流类错误优先用 Retry-After,否则指数退避
15
14
  * @param status HTTP 状态码
@@ -77,6 +76,30 @@ export declare function renderAgentInstructions(template: string, vars: Record<s
77
76
  * 这里压成一行、去掉 markdown 记号和包裹引号、限长,让它永远是「对用户说的一句话」。
78
77
  */
79
78
  export declare function cleanAskMessage(raw: any, max?: number): string;
79
+ /**
80
+ * 从用户的回答里判断他要不要润色提示词。
81
+ * 默认 false —— 用户的原话原封不动交给绘图模型才是对的默认值。
82
+ */
83
+ export declare function parsePolishIntent(text: string): boolean;
84
+ /** 从消息内容里解析 @ 到的人。type="all"(@全体成员)和 @机器人自己 会被跳过 */
85
+ export declare function extractAtIds(content: string, selfId?: string): {
86
+ id: string;
87
+ name: string;
88
+ }[];
89
+ /**
90
+ * 拼头像地址。优先级:自定义模板 > 适配器直接给的 > 平台内置规则。
91
+ * 拼不出来返回空字符串(调用方再决定是问适配器还是放弃)。
92
+ */
93
+ export declare function buildAvatarUrl(input: {
94
+ userId: string;
95
+ platform?: string;
96
+ selfId?: string;
97
+ appId?: string;
98
+ /** 发送者自己的头像(适配器已经在消息里带过来了) */
99
+ authorAvatar?: string;
100
+ template?: string;
101
+ size?: number;
102
+ }): string;
80
103
  /**
81
104
  * 图库容量裁剪:超出容量时淘汰最旧的(按 time 升序),只保留每个组最近 capacity 条
82
105
  */
@@ -181,18 +204,6 @@ export declare function isPassiveReplyError(error: any): boolean;
181
204
  export declare function resolveTokenParam(model: string, mode?: string): string;
182
205
  /** 用指定参数名重建请求体(避免同时存在两个长度参数被接口拒绝) */
183
206
  export declare function withTokenParam(body: any, param: string): any;
184
- /** HTML 转义,避免渲染时把文字当标签吃掉 */
185
- export declare function escapeHtml(text: string): string;
186
- /** 把要渲染的文字拼成一份 HTML(供无头浏览器截图) */
187
- export declare function buildTextHtml(lines: string[], cfg?: Partial<TextRenderConfig>): string;
188
- /**
189
- * 从提示词/用户输入里提取「需要在画面上真实出现的文字」
190
- * 只提取含中日韩文字的片段——纯英文/数字一般不会因为渲染而崩字
191
- */
192
- export declare function extractTextToRender(text: string, options?: {
193
- loose?: boolean;
194
- maxChars?: number;
195
- }): string[];
196
207
  interface CommandConfig {
197
208
  basename: string;
198
209
  nested: {
@@ -219,6 +230,7 @@ interface CommandConfig {
219
230
  referenceGroups?: ReferenceGroup[];
220
231
  aiSelector?: AISelectorConfig;
221
232
  agent?: AgentConfig;
233
+ avatar?: AvatarConfig;
222
234
  showPrompt?: boolean;
223
235
  promptMaxLength?: number;
224
236
  appendUserInput?: boolean;
@@ -226,7 +238,6 @@ interface CommandConfig {
226
238
  optimizePrompt?: string;
227
239
  resultGallery?: ResultGalleryConfig;
228
240
  backgroundDrawing?: BackgroundDrawingConfig;
229
- textRender?: TextRenderConfig;
230
241
  /** 指令一触发就立刻回一条「收到」,避免用户以为卡住 */
231
242
  ackOnStart?: boolean;
232
243
  /** 结果图用 markdown 的 ![](url) 单独发一条(支持的平台) */
@@ -241,35 +252,6 @@ interface CommandConfig {
241
252
  imageWidth?: number;
242
253
  imageHeight?: number;
243
254
  }
244
- /** 文字渲染参考图配置(把要在画面上出现的文字先渲染成图片,避免中文崩字) */
245
- interface TextRenderConfig {
246
- enabled: boolean;
247
- /** 自动从提示词里识别需要出现在画面上的文字并渲染 */
248
- autoDetect: boolean;
249
- /** 引号内没有其它线索时,也允许直接提取中文片段 */
250
- loose: boolean;
251
- /** 手动渲染指令名 */
252
- commandName: string;
253
- /** 手动渲染后,多少秒内的绘图指令自动带上它 */
254
- pendingTTL: number;
255
- /** 渲染后先把参考图发出来给用户看 */
256
- sendPreview: boolean;
257
- /** 渲染结果并入绘图参考图 */
258
- attachToDraw: boolean;
259
- width: number;
260
- fontSize: number;
261
- lineHeight: number;
262
- padding: number;
263
- background: string;
264
- color: string;
265
- fontFamily: string;
266
- align: 'center' | 'left';
267
- bold: boolean;
268
- strokeWidth: number;
269
- strokeColor: string;
270
- maxChars: number;
271
- scale: number;
272
- }
273
255
  /** 生成结果入库(图库)配置 */
274
256
  interface ResultGalleryConfig {
275
257
  enabled: boolean;
@@ -360,6 +342,23 @@ interface AgentConfig {
360
342
  historyTurns: number;
361
343
  /** 把每一轮的工具调用打到日志里,方便排查 */
362
344
  debugLog: boolean;
345
+ /** 用户没给任何参考图时,开画前先问一句「要不要参考图」 */
346
+ askIfNoReference: boolean;
347
+ /** 开画前先问一句「要不要润色提示词」(默认不润色,原话直出) */
348
+ askBeforePolish: boolean;
349
+ }
350
+ /** 头像参考图配置 */
351
+ interface AvatarConfig {
352
+ /** 总开关:能不能拿用户头像当参考图 */
353
+ enabled: boolean;
354
+ /** 用户 @ 了谁,就自动把那个人的头像作为参考图(@ 本身就是明确指定) */
355
+ autoAt: boolean;
356
+ /** 用户没发图也没 @ 人时,自动拿他自己的头像当参考图 */
357
+ autoSelf: boolean;
358
+ /** 头像尺寸(边长像素) */
359
+ size: number;
360
+ /** 自定义头像地址模板,留空用内置规则。占位符:{userId} {platform} {selfId} {appId} {size} */
361
+ urlTemplate: string;
363
362
  }
364
363
  /** agent 参考图登记表里的一条 */
365
364
  export interface RefEntry {
@@ -367,7 +366,7 @@ export interface RefEntry {
367
366
  url: string;
368
367
  description: string;
369
368
  group: string;
370
- source: 'gallery' | 'user' | 'cmd';
369
+ source: 'gallery' | 'user' | 'cmd' | 'avatar';
371
370
  }
372
371
  /** 交给 AI 挑选的候选图片 */
373
372
  interface CandidateImage {