alemonjs-aichat 1.0.37 → 1.0.39

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.
@@ -7,6 +7,11 @@ const children = [
7
7
  regular: /(\/|#)(ai)?(指令|帮助|菜单|功能)$/i,
8
8
  handler: lazy(() => import('../response/help/res.js')),
9
9
  },
10
+ // revoke
11
+ {
12
+ regular: /^(\/|#)撤回$/i,
13
+ handler: lazy(() => import('../response/revoke/res.js')),
14
+ },
10
15
  // tools (多条正则合并)
11
16
  {
12
17
  regular: Regular.or(/(\/|#)(ai)?(pt|p图|ps|修图)(.*)$/i, /(\/|#)(ai)?(画图)(.*)$/i, /(\/|#)(ai)?(生成视频)(.*)$/i, /(\/|#)(ai)?(查询)(.*)$/i, /(\/|#)(ai)?(开启|关闭)?画图提示词优化$/i, /^(\/|#)(.+)说([\s\S]*)$/i, /^(\/|#)安装语音(模型)?(.+)$/i, /^(\/|#)看魔法$/i),
@@ -19,7 +24,7 @@ const children = [
19
24
  },
20
25
  // setting (包含大量子命令)
21
26
  {
22
- regular: Regular.or(/(\/|#)添加ai$/i, /(\/|#)添加ai\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/i, /(\/|#)(切换)(ai|配置) ?(.*)/i, /(\/|#)添加提示词$/i, /(\/|#)添加提示词 (\S+) ([\s\S]+)/i, /(\/|#)(删除)(提示词|提示词列表) ?(.*)/i, /(\/|#)(切换|设置)提示词 ?(.*)$/i, /(\/|#)清空提示词$/i, /(\/|#)删除ai\s(\S+)$/i, /(\/|#)(开启|启用|关闭|禁用)好感度$/i, /(\/|#)(开启|关闭)(全部)?聊天$/i, /(\/|#)(开启|关闭)语音回复$/i, /(\/|#)切换图床(.*)$/i, /(\/|#)修改 ?(.+) ?模型 ?(.+)$/i, /(\/|#)(关闭|开启)复杂(输出|回复)$/i, /(\/|#)(关闭|禁止|不可以|不允许|开启|可以|允许)(涩涩|色色)$/i, /(\/|#)切换模型(.*)$/i, /(\/|#)(关闭|开启)主动(搭话|回复)$/i, /(\/|#)(开启|关闭)深度思考$/i, /(\/|#)(设置|修改)(ai)?(.*)rapi模式(开启|关闭)$/i, /(\/|#)(开启|关闭)仅艾特触发$/i, /(\/|#)添加正则规则 (.+)$/i, /(\/|#)(删除|移除)正则规则 (.+)$/i, /(\/|#)正则规则列表$/i, /(\/|#)清空正则规则$/i, /(\/|#)切换群容器$/i, /(\/|#)切换用户容器$/i, /(\/|#)切换系统环境$/i, /(\/|#)工具列表$/i, /(\/|#)(开启|关闭)(MCP)?工具$/i, /(\/|#)(开启|关闭)工具(.*)$/i, /(\/|#)(开启|关闭)工具提示$/i, /(\/|#)(开启|关闭)工具(调用)?提示撤回$/i, /(\/|#)(开启|关闭)工具(调用)?提示详情$/i, /(\/|#)测试$/i, /(\/|#)设置渲染精度\s*(中|高|超高)$/i),
27
+ regular: Regular.or(/(\/|#)添加ai$/i, /(\/|#)添加ai\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/i, /(\/|#)(切换)(ai|配置) ?(.*)/i, /(\/|#)添加提示词$/i, /(\/|#)添加提示词 (\S+) ([\s\S]+)/i, /(\/|#)(删除)(提示词|提示词列表) ?(.*)/i, /(\/|#)(切换|设置)提示词 ?(.*)$/i, /(\/|#)清空提示词$/i, /(\/|#)删除ai\s(\S+)$/i, /(\/|#)(开启|启用|关闭|禁用)好感度$/i, /(\/|#)(开启|关闭)(全部)?聊天$/i, /(\/|#)(开启|关闭)语音回复$/i, /(\/|#)切换图床(.*)$/i, /(\/|#)修改 ?(.+) ?模型 ?(.+)$/i, /(\/|#)(关闭|开启)复杂(输出|回复)$/i, /(\/|#)(关闭|禁止|不可以|不允许|开启|可以|允许)(涩涩|色色)$/i, /(\/|#)切换模型(.*)$/i, /(\/|#)(关闭|开启)主动(搭话|回复)$/i, /(\/|#)(开启|关闭)深度思考$/i, /(#|\/)设置(AI)?上下文(长度)? ?([0-9]+)(k|m)/i, /(\/|#)(设置|修改)(ai)?(.*)rapi模式(开启|关闭)$/i, /(\/|#)(开启|关闭)仅艾特触发$/i, /(\/|#)添加正则规则 (.+)$/i, /(\/|#)(删除|移除)正则规则 (.+)$/i, /(\/|#)正则规则列表$/i, /(\/|#)清空正则规则$/i, /(\/|#)切换群容器$/i, /(\/|#)切换用户容器$/i, /(\/|#)切换系统环境$/i, /(\/|#)工具列表$/i, /(\/|#)(开启|关闭)(MCP)?工具$/i, /(\/|#)(开启|关闭)工具(.*)$/i, /(\/|#)(开启|关闭)工具提示$/i, /(\/|#)(开启|关闭)工具(调用)?提示撤回$/i, /(\/|#)(开启|关闭)工具(调用)?提示详情$/i, /(\/|#)(开启|关闭)工具调用内容$/i, /(\/|#)测试$/i, /(\/|#)设置渲染精度\s*(中|高|超高)$/i),
23
28
  handler: lazy(() => import('../response/setting/res.js')),
24
29
  },
25
30
  // affection
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alemonjs-aichat",
3
- "version": "1.0.37",
3
+ "version": "1.0.39",
4
4
  "description": "alemonjs-aichat",
5
5
  "author": "suancaixianyu",
6
6
  "license": "MIT",
@@ -45,6 +45,7 @@
45
45
  },
46
46
  "dependencies": {
47
47
  "@ai-sdk/xai": "^3.0.60",
48
+ "@alemonjs/scbbs": "file:../scbbs",
48
49
  "@aws-sdk/client-s3": "^3.975.0",
49
50
  "@aws-sdk/s3-request-presigner": "^3.975.0",
50
51
  "ai": "^6.0.105",
@@ -3,30 +3,79 @@ name: add-skill
3
3
  description: 添加新技能, 例如根据用户的需求创建一个新的技能, 或者将现有技能进行组合形成一个新的技能
4
4
  ---
5
5
 
6
- # Add Skill
7
-
8
- 添加新技能的技能。
9
- 技能路径有两个, 一个是内置的技能, 在软件包中的`./skills`目录下, 另一个是用户自定义的技能, 在用户项目中的`./skills`目录下。用户可以在用户项目中的`./skills`目录下创建新的技能, 也可以将内置的技能进行组合形成一个新的技能。
10
- 也可以通过alemon.config.yaml文件中的aichat.skills_dir字段来指定用户自定义技能的目录, 默认为`["./skills"]`。
11
-
12
- 所有新建的技能必须要新建一个目录, 例如`./skills/my-skill`, 在该目录下创建一个`SKILL.md`文件, 并将技能的名称和描述写入文件中, 如果需要使用工具函数, 则在该目录下创建一个`<tool>.js`文件, 并将工具函数写入文件中。
13
- 脚本文件需要能够通过命令行直接执行, 并支持传参, 例如`node <tool>.js <arg1> <arg2>`, 脚本必须是执行后就能得到结果的, 不能是需要用户交互的, 例如`node <tool>.js`后需要用户输入一些内容才能得到结果的脚本是不允许的。
6
+ # Add Skill
7
+
8
+ 添加新技能的技能。
9
+
10
+ 当前运行环境有权限边界: AI 不能假设自己可以写入软件包内置的 `./skills` 目录、宿主机任意绝对路径或进程工作目录外的文件。新增技能时必须优先使用当前可用的 `Agent*` 文件工具, 将文件写入 `public/{guid}/` 工作目录内。
11
+
12
+ 技能路径有两类:
13
+
14
+ - 内置技能目录: 软件包中的 `./skills`。这是只读来源, 除非用户明确说明当前环境有权限直接修改软件包源码, 否则不要把新技能写到这里。
15
+ - 用户自定义技能目录: 由 `alemon.config.yaml` 中的 `aiChat.skills_dir` 指定。默认可配置为 `["./skills"]`, 在受限环境中建议配置为包含某个可写工作区, 例如 `["./skills", "./public/<guid>/skills"]`。
16
+
17
+ 在当前受限权限下, 默认把新技能创建到 `public/{guid}/skills/<skill-name>/SKILL.md`。如果该目录已经被加入 `aiChat.skills_dir`, 新技能即可被技能加载逻辑读取; 如果尚未加入, 需要在输出中提醒用户把 `./public/<guid>/skills` 加入 `aiChat.skills_dir` 后重启或刷新服务。
18
+
19
+ 所有新建的技能必须要新建一个目录, 例如`./skills/my-skill`, 在该目录下创建一个`SKILL.md`文件, 并将技能的名称和描述写入文件中, 如果需要使用工具函数, 则在该目录下创建一个`<tool>.js`文件, 并将工具函数写入文件中。
20
+ 脚本文件需要能够通过命令行直接执行, 并支持传参, 例如`node <tool>.js <arg1> <arg2>`, 脚本必须是执行后就能得到结果的, 不能是需要用户交互的, 例如`node <tool>.js`后需要用户输入一些内容才能得到结果的脚本是不允许的。
14
21
 
15
22
  此外脚本必须写清楚输入输出的格式, 例如输入是一个字符串, 输出是一个字符串, 输入是一个文件路径, 输出是一个文件路径等, 以便AI能够正确地使用工具函数。
16
23
 
17
- 脚本必须为JavaScript文件, 以便AI能够正确地使用工具函数, 其他语言的脚本文件是不允许的。
18
-
19
- ## Workflow
20
-
21
- 1. 接收用户提供的技能需求
22
- 2. 根据用户的需求, 判断是创建一个新的技能还是将现有技能进行组合形成一个新的技能
23
- - 如果是创建一个新的技能, 则在用户项目中的`./skills`目录下创建一个新的技能文件, 并将技能的名称和描述写入文件中
24
- - 如果是将现有技能进行组合形成一个新的技能, 则在用户项目中的`./skills`目录下创建一个新的技能文件, 并将组合后的技能的名称和描述写入文件中
25
- 3. 将新技能的名称和描述返回给用户
26
-
27
- ## Output Format
28
-
29
- ```text
30
- 技能名称: <技能名称>
31
- 技能描述: <技能描述>
32
- ```
24
+ 脚本必须为JavaScript文件, 以便AI能够正确地使用工具函数, 其他语言的脚本文件是不允许的。
25
+
26
+ ## Tools
27
+
28
+ - `AgentListWorkspaces`: 不知道可用 `guid` 时, 先列出 `public/` 下已有工作区。
29
+ - `AgentCreateWorkspace`: 没有可用工作区时创建 `public/{guid}/`。
30
+ - `AgentListFiles`: 查看目标 `skills` 目录和已有技能。
31
+ - `AgentReadFileLines`: 读取已有技能内容, 用于组合、复用或避免覆盖。
32
+ - `AgentCreateFile`: 创建新的 `SKILL.md` 或工具脚本。默认不要覆盖已有文件。
33
+ - `AgentWriteFile`: 只在已经确认需要覆盖或追加时使用。
34
+ - `AgentProjectCommand`: 只用于必要的受限检查, 例如创建目录或运行脚本自检。
35
+
36
+ ## Workflow
37
+
38
+ 1. 接收用户提供的技能需求
39
+ 2. 确认本次使用的 `guid`
40
+ - 如果用户已经给出 `guid`, 直接使用
41
+ - 如果不知道 `guid`, 先调用 `AgentListWorkspaces`
42
+ - 如果没有合适的工作区, 调用 `AgentCreateWorkspace`
43
+ 3. 规范化技能名
44
+ - 使用小写短横线命名, 例如 `my-skill`
45
+ - 只允许字母、数字和短横线
46
+ - 不允许绝对路径、`../`、空格或会逃逸目录的名称
47
+ 4. 判断是创建新技能, 还是将现有技能组合成新技能
48
+ - 需要查看已有技能时, 先用 `getSKILLDetail` 读取内置或已配置技能
49
+ - 需要查看工作区内已有技能时, 用 `AgentListFiles` 和 `AgentReadFileLines`
50
+ 5. 创建目标目录和文件
51
+ - 目标路径固定为 `skills/<skill-name>/SKILL.md`, 该路径是相对 `public/{guid}/` 的路径
52
+ - 目录不存在时, 可用 `AgentProjectCommand` 的 `mkdir` 创建 `skills/<skill-name>`
53
+ - 用 `AgentCreateFile` 创建 `skills/<skill-name>/SKILL.md`
54
+ - 如果必须添加工具脚本, 只创建 JavaScript 文件, 例如 `skills/<skill-name>/<tool>.js`
55
+ 6. 写入 `SKILL.md`
56
+ - 文件必须包含 frontmatter: `name` 和 `description`
57
+ - 正文要写清楚触发场景、工作流、可用工具、输入输出和限制
58
+ - 如果包含脚本, 必须写清脚本命令、参数和输出格式
59
+ 7. 写完后用 `AgentReadFileLines` 读取 `SKILL.md`, 确认内容已经落盘
60
+ 8. 返回新技能的名称、描述、文件路径和是否还需要配置
61
+ - 如果 `./public/<guid>/skills` 未确认在 `aiChat.skills_dir` 中, 明确提示用户添加配置
62
+ - 不要声称技能已经全局生效, 除非已确认目标目录被技能加载逻辑读取
63
+
64
+ ## Output Format
65
+
66
+ ```text
67
+ 技能名称: <技能名称>
68
+ 技能描述: <技能描述>
69
+ 技能路径: public/<guid>/skills/<技能名称>/SKILL.md
70
+ 配置提示: 如未生效, 请将 ./public/<guid>/skills 加入 alemon.config.yaml 的 aiChat.skills_dir
71
+ ```
72
+
73
+ ## Rules
74
+
75
+ - 不要使用 `exec`、终端命令、Docker、容器或任意宿主机文件路径来创建技能文件。
76
+ - 不要写入软件包内置 `./skills` 目录, 除非用户明确说明当前环境允许直接修改源码且可用工具确实能访问该目录。
77
+ - 所有通过 Agent 文件工具创建的路径都必须相对 `public/{guid}/`, 不要传绝对路径。
78
+ - 不要使用 `../` 试图离开工作区。
79
+ - 已有同名技能时, 先读取确认, 再询问用户是否覆盖或改名; 不要静默覆盖。
80
+ - 如果需要组合多个已有技能, 在新 `SKILL.md` 中写明组合顺序和每个被组合技能的职责边界。
81
+ - 如果新技能依赖运行脚本, 脚本必须是非交互式 JavaScript 文件, 并且能够通过 `node <tool>.js <args>` 直接返回结果。