原子命令
ais-atomix 命令使用说明。
1. 命令体系总览
内置命令共 17 个,按分类如下。
| 分类 | 命令 | 别名 |
|---|---|---|
| READ | ls tree cat summary search skill render download_link | ls 的别名 dir;search 的别名 s;summary 的别名 sum |
| WRITE | write mkdir mv cp rm publish init validate | 无 |
| EDIT | edit | 无 |
2. 执行流程
AtomixCommandExecutor.execute(...) 的处理顺序:
DefaultCommandParser解析原始命令行为CommandInvocation。CommandRegistry按命令名/别名查找CommandDefinition。- 若带
--help或-h,直接返回HelpCommandResponse(不走业务 handler)。 - 按命令分类路由到
ReadCommandExecutor、WriteCommandExecutor、EditCommandExecutor。 - 对应
*CommandParser解析参数,生成*CommandRequest。 BaseCategoryCommandExecutor补充通用字段:request.commandrequest.rawCommand
- 从
CommandHandlerRegistry获取命令 handler 并执行。 - 若成功响应且
outputContent为空,使用OutputRenderer渲染。
3. 通用命令行规则
由 DefaultCommandParser + CommandLineTokenizer 决定:
kb前缀可省略,kb ls和ls都可解析。- 支持长参数
--key value与--key=value。 - 支持短参数 flag(如
-l、-n)。 - 同一选项可重复出现,
getOptionValues可取多值(如--must)。 - 支持单引号、双引号、反斜杠转义。
4. 命令用法
4.1 READ 类命令
READ 类命令均为只读操作,不修改任何数据。
ls — 列出目录/仓库内容
- 用法:
kb ls [path] [-l] [--sort name|updated|size] [--limit N] - 别名:
dir - 要点:最多 1 个位置参数。
- 参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
path | 位置参数 | 否 | 目标路径(repo 或目录) |
-l | flag | 否 | 是否启用详细格式 |
--sort | string | 否 | 排序字段:name / updated / size |
--limit | int | 否 | 返回数量上限 |
- Request:
LsCommandRequest(path, longFormat, sortBy, limit) - Response:
LsCommandResponse(entries: List<Entry>)
每个 Entry 包含:
| 字段 | 类型 | 说明 |
|---|---|---|
code | String | 业务编码 |
path | String | 路径(含名称后缀) |
type | String | 类型:仓库/文件夹/文件 |
createTime | Instant | 创建时间 |
modifiedTime | Instant | 修改时间 |
author | String | 作者 |
permissions | String | 权限描述 |
示例:
# 列出根目录
kb ls
# 列出指定仓库的详细内容,按修改时间排序,限制 20 条
kb ls my-repo/docs -l --sort updated --limit 20
tree — 树形展示目录结构
- 用法:
kb tree <repo/path/> [--depth N] [--limit N] - 要点:必须且只能有 1 个路径参数。
- 参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
path | 位置参数 | 是 | 目标路径 |
--depth | int | 否 | 展开深度 |
--limit | int | 否 | 每层条目上限 |
- Request:
TreeCommandRequest(path, depth, limit) - Response:
TreeCommandResponse(root: TreeNode, renderedTree: String)
TreeNode 结构:
| 字段 | 类型 | 说明 |
|---|---|---|
name | String | 名称 |
path | String | 路径 |
type | String | 类型 |
truncated | boolean | 是否被截断 |
truncatedHint | String | 截断提示 |
children | List\<TreeNode> | 子节点 |
示例:
# 展示仓库目录树,深度限制为 3
kb tree my-repo --depth 3 --limit 50
cat — 读取文件内容
- 用法:
kb cat --name <repo/path.md> | --code <doc_code> [--range A:B | --head N | --tail N] [-n] - 要点:
--name与--code二选一;--range/--head/--tail互斥。 - 参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
--name | string | 二选一 | 通过路径读取 |
--code | string | 二选一 | 通过文档 code 读取 |
--range | string | 否 | 行范围 A:B,仅此一项有效 |
--head | int | 否 | 读取前 N 行,与 --range/--tail 互斥 |
--tail | int | 否 | 读取后 N 行,与 --range/--head 互斥 |
-n | flag | 否 | 显示行号 |
- Request:
CatCommandRequest(name, code, lineNumbers, head, tail, range) - Response:
CatCommandResponse(code, name, path, type, createTime, modifiedTime, author, content: List<String>)
示例:
# 读取文件并显示行号
kb cat --name my-repo/docs/readme.md -n
# 读取文件的第 100 到 200 行
kb cat --name my-repo/docs/readme.md --range 100:200
# 通过 code 读取文件的前 50 行
kb cat --code abc123 --head 50
summary — 读取文件摘要
- 用法:
kb summary --name <path> | --code <doc_code> - 别名:
sum - 要点:
--name与--code二选一。 - 参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
--name | string | 二选一 | 通过路径读取摘要 |
--code | string | 二选一 | 通过文档 code 读取摘要 |
- Request:
SummaryCommandRequest(name, code) - Response:
SummaryCommandResponse(code, name, type, createTime, modifiedTime, author, content: List<String>)
示例:
# 通过路径获取文件摘要
kb summary --name my-repo/docs/readme.md
# 通过 code 获取摘要(使用别名 sum)
kb sum --code abc123
search — 搜索文档内容
- 用法:
kb search "query" [scope] [--topk N] [--repo ...] [--path ...] [--mode lex|sem|hybrid] ... - 别名:
s - 搜索模式:
--lex/--sem/--hybrid或--mode lex|sem|hybrid,默认LEX。 - 参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
query | 位置参数 | 是 | 查询内容 |
--topk | int | 否 | 返回 TopK 结果数 |
--offset | int | 否 | 分页偏移量 |
--page | int | 否 | 页码 |
--page-size | int | 否 | 每页大小 |
--repo | string | 否 | repo 名称 |
--path | string | 否 | path 前缀过滤 |
--file | string | 否 | 文件 glob 过滤 |
--doc-code | string | 否 | 单文档 code |
--codes | string | 否 | 多文档 codes |
--repo-code | string | 否 | repo code |
--must | string | 否 | must 条件(可重复) |
--must-not | string | 否 | must-not 条件(可重复) |
--mode | string | 否 | 搜索模式:lex/sem/hybrid |
--summary-only | flag | 否 | 仅搜摘要 |
--title-only | flag | 否 | 仅搜标题 |
--heading-only | flag | 否 | 仅搜小标题 |
- Request:
SearchCommandRequest(query, topk, offset, page, pageSize, repo, path, file, docCode, codes, repoCode, must, mustNot, mode, summaryOnly, titleOnly, headingOnly) - Response:
SearchCommandResponse(hits: List<SearchHit>)
每个 SearchHit 包含:
| 字段 | 类型 | 说明 |
|---|---|---|
code | String | 文档 code |
name | String | 文件名 |
type | String | 类型 |
content | String | 命中文本片段 |
fullPath | String | 全路径 |
page | String | page/summary 标识 |
示例:
# 语义搜索,返回 Top 5
kb search "agent memory" --mode sem --topk 5
# 在指定 repo 中搜索,带 must 条件
kb search "部署指南" --repo my-repo --must "标签:重要"
# 搜索标题
kb search "API 文档" --title-only
skill — 查看 Skill 知识库信息
- 用法:
kb skill <skill_code>或kb skill -g <sub_doc_code> - 要点:普通模式与
-g子文档模式二选一。 - 参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
skillCode | 位置参数 | 是 | 技能 code |
-g / --get | string | 否 | 子文档 code(进入子文档读取模式) |
- Request:
SkillCommandRequest(skillCode, subDocCode) - Response:
SkillCommandResponse(skillCode, skillName, skillContent, root, renderedTree, subDoc)
| 字段 | 类型 | 说明 |
|---|---|---|
skillCode | String | 技能 code |
skillName | String | 技能名称 |
skillContent | List\<String> | SKILL.md 内容行 |
root | SkillTreeNode | 目录树根节点 |
renderedTree | String | 终端风格渲染文本(可选) |
subDoc | SubDoc | 子文档内容(-g 模式) |
SkillTreeNode 结构:
| 字段 | 类型 | 说明 |
|---|---|---|
name | String | 名称 |
path | String | 路径 |
type | String | 类型 |
code | String | 文档/目录 code |
truncated | boolean | 是否被截断 |
truncatedHint | String | 截断提示 |
children | List\<SkillTreeNode> | 子节点 |
示例:
# 查看知识库概览
kb skill my-skill-code
# 获取某个子文档内容
kb skill my-skill-code -g sub-doc-code
render — 渲染文档
- 用法:
kb render <doc_code,doc_code,...>或kb render --codes <c1,c2,...> - 要点:位置参数与
--codes不能同时使用。 - 参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| codes | 位置参数 | 二选一 | 逗号分隔的文档编码 |
--codes | string | 二选一 | 逗号分隔的文档编码 |
- Request:
RenderCommandRequest(codes: List<String>) - Response:
RenderCommandResponse(items, failCount, failCodes)
| 字段 | 类型 | 说明 |
|---|---|---|
items | List\<Item> | 渲染成功的文档列表 |
failCount | Integer | 失败数量 |
failCodes | List\<String> | 失败文档编码 |
每个 Item 包含:
| 字段 | 类型 | 说明 |
|---|---|---|
code | String | 文档编码 |
spaceCode | String | 所属空间编码 |
title | String | 文档标题 |
url | String | 文档访问链接 |
示例:
# 渲染单个文档
kb render doc-code-1
# 渲染多个文档
kb render code1,code2,code3
# 使用 --codes 选项
kb render --codes code1,code2
download_link — 获取文件下载链接
- 用法:
kb download_link --code <file_code> [--extract-is true|false] - 要点:
--code必填。 - 参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
--code | string | 是 | 文件编码 |
--extract-is | boolean | 否 | 是否下载解析后的内容 |
- Request:
DownloadLinkCommandRequest(code, extractIs) - Response:
DownloadLinkCommandResponse
| 字段 | 类型 | 说明 |
|---|---|---|
code | String | 文件编码 |
downloadUrl | String | 下载链接 |
fileName | String | 文件名 |
extractIs | Boolean | 是否提取解析后内容 |
expireAt | Long | 过期时间毫秒时间戳 |
ttlSeconds | Long | TTL 秒数 |
示例:
# 获取原始文件下载链接
kb download_link --code file-code-123
# 获取解析后的内容下载链接
kb download_link --code file-code-123 --extract-is true
4.2 WRITE 类命令
WRITE 类命令为写操作,会修改数据。
write — 写入/创建文件
- 用法:
kb write --name <path> | --repo-code <code> --path <path> --content <text> | --content-url <url> [--status draft|publish] [--if-match <etag>] - 要点:
--name与--repo-code/--path二选一。--content与--content-url二选一。
- 参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
--name | string | 二选一 | 文件路径 |
--repo-code | string | 二选一 | repo code(需搭配 --path) |
--path | string | 搭配使用 | repo 内路径 |
--content | string | 二选一 | 写入内容 |
--content-url | string | 二选一 | 写入内容 URL |
--status | string | 否 | draft / publish |
--message | string | 否 | 备注信息 |
--if-match | string | 否 | 条件匹配 etag |
- Request:
WriteCommandRequest(name, repoCode, path, content, contentUrl, status, message, ifMatch) - Response:
WriteCommandResponse(docCode, path, status, linesWritten, repoCode)
示例:
# 通过路径写入文件
kb write --name my-repo/docs/readme.md --content "# Hello World"
# 通过 repo-code + path 写入,并指定状态
kb write --repo-code repo-123 --path docs/readme.md --content-url https://example.com/content.md --status publish
# 带版本检查的写入
kb write --name my-repo/docs/readme.md --content "updated" --if-match "etag-abc"
mkdir — 创建目录
- 用法:
kb mkdir <repo/dir/>或kb mkdir --repo-code <code> --path <dir/> [-p|--parents] [--exist-ok true|false] - 要点:
- 路径参数模式与
--repo-code/--path模式二选一。 parents默认true。existOk默认true。
- 路径参数模式与
- 参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | 位置参数 | 二选一 | 目录路径 |
--repo-code | string | 二选一 | repo code |
--path | string | 搭配使用 | repo 内路径 |
-p / --parents | flag | 否 | 是否递归创建父目录(默认 true) |
--exist-ok | boolean | 否 | 已存在是否忽略(默认 true) |
--message | string | 否 | 备注信息 |
- Request:
MkdirCommandRequest(name, repoCode, path, parents, existOk, message) - Response:
MkdirCommandResponse(repoCode, path, code, created)
示例:
# 创建目录
kb mkdir my-repo/docs/new-folder/
# 递归创建(默认行为)
kb mkdir --repo-code repo-123 --path docs/a/b/c/
# 已存在时报错
kb mkdir my-repo/docs/ --exist-ok false
mv — 移动/重命名文件
- 用法:
kb mv <src> <dst>或kb mv --from <src> --to <dst>或kb mv --doc-code <code> --to <dst> - 要点:
--doc-code模式下不能再给源路径;支持--if-match。 - 参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
from | 位置参数 | 三选一 | 源路径(与 --doc-code 互斥) |
--from | string | 三选一 | 源路径 |
--doc-code | string | 三选一 | 文档 code |
--to | string | 是 | 目标路径 |
--if-match | string | 否 | 条件匹配 etag |
--message | string | 否 | 备注信息 |
- Request:
MvCommandRequest(from, to, docCode, ifMatch, message) - Response:
MvCommandResponse(docCode, oldPath, newPath, moved)
示例:
# 使用位置参数移动
kb mv my-repo/docs/old.md my-repo/docs/new.md
# 通过 doc-code 移动
kb mv --doc-code doc-123 --to my-repo/docs/new.md
# 带版本检查的移动
kb mv --from old.md --to new.md --if-match "etag-abc"
cp — 复制文件
- 用法:
kb cp --from <src> --to <dst> [--recursive] [--exist-ok true|false] [--publish true|false]或kb cp --doc-code <code> --to <dst> ... - 要点:
--from与--doc-code二选一,--to必填。 - 参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
--from | string | 二选一 | 源路径(与 --doc-code 互斥) |
--doc-code | string | 二选一 | 源文档 code |
--to | string | 是 | 目标路径 |
--recursive | flag | 否 | 目录复制是否递归 |
--exist-ok | boolean | 否 | 目标存在是否允许 |
--publish | boolean | 否 | 复制后是否发布 |
- Request:
CpCommandRequest(from, docCode, to, recursive, existOk, publish) - Response:
CpCommandResponse(payload: Map<String, Object>)
示例:
# 复制文件
kb cp --from my-repo/docs/a.md --to my-repo/docs/b.md
# 通过 doc-code 复制并发布
kb cp --doc-code doc-123 --to my-repo/docs/copy.md --publish true
rm — 删除文件
- 用法:
kb rm <repo/path.md>或kb rm --doc-code <code> [--if-match <etag>] - 要点:至少给一个目标(路径或 doc-code)。
- 参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | 位置参数 | 二选一 | 文件路径 |
--doc-code | string | 二选一 | 文档 code |
--if-match | string | 否 | 条件匹配 etag |
- Request:
RmCommandRequest(name, docCode, ifMatch) - Response:
RmCommandResponse(docCode, path, oldStatus, newStatus)
示例:
# 通过路径删除
kb rm my-repo/docs/old-file.md
# 通过 doc-code 删除,带版本检查
kb rm --doc-code doc-123 --if-match "etag-abc"
publish — 发布文件
- 用法:
kb publish --doc-code <code> | --name <path> [--if-match <etag>] - 要点:
--doc-code与--name二选一。 - 参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
--doc-code | string | 二选一 | 文档 code |
--name | string | 二选一 | 文件路径 |
--if-match | string | 否 | 条件匹配 etag |
- Request:
PublishCommandRequest(docCode, name, ifMatch) - Response:
PublishCommandResponse(docCode, path, published, publishedAt)
示例:
# 通过 doc-code 发布
kb publish --doc-code doc-123
# 通过路径发布
kb publish --name my-repo/docs/draft.md
# 带版本检查
kb publish --doc-code doc-123 --if-match "etag-abc"
init — 初始化 Skill 知识库
- 用法:
kb init <skill_name> - 要点:
skill_name为必填位置参数。 - 参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
skillName | 位置参数 | 是 | skill 名称 |
- Request:
InitCommandRequest(skillName) - Response:
InitCommandResponse
| 字段 | 类型 | 说明 |
|---|---|---|
skillCode | String | 知识库 code |
skillName | String | skill 名称 |
initialized | boolean | 是否初始化成功 |
createdAt | Instant | 创建时间 |
示例:
# 初始化一个新知识库
kb init my-new-skill
validate — 校验 Skill 知识库
- 用法:
kb validate <skill_code> - 要点:
skill_code为必填位置参数。 - 参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
skillCode | 位置参数 | 是 | skill 知识库 code |
- Request:
ValidateCommandRequest(skillCode) - Response:
ValidateCommandResponse
| 字段 | 类型 | 说明 |
|---|---|---|
skillCode | String | 被验证的 code |
valid | boolean | 是否通过验证 |
errors | List\<String> | 错误列表 |
warnings | List\<String> | 警告列表 |
validatedAt | Instant | 验证时间 |
示例:
# 校验知识库结构
kb validate skill-code-123
4.3 EDIT 类命令
edit — 编辑文件(Patch 模式)
- 用法:
kb edit --patch <patch-body> [--help] - 要点:
- patch 必须包含
*** Begin Patch与*** End Patch。 - patch 头必须显式声明
--name或--code(例如*** Update File --name: ...)。 - 也可通过
CommandExecutionContext.body传 patch。
- patch 必须包含
- 参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
--patch | string | 是 | patch body 文本 |
--help | flag | 否 | 查看用法 |
- Request:
EditCommandRequest(patchBody, patchMeta: EditPatchMeta) - Response:
EditCommandResponse
| 字段 | 类型 | 说明 |
|---|---|---|
path | String | 目标路径 |
code | String | 目标 doc code |
oldEtag | String | 修改前版本标识 |
newEtag | String | 修改后版本标识 |
appliedHunks | int | 已应用 hunk 数 |
Patch 格式:
*** Begin Patch
*** Update File --name: src/demo.txt
@@ -1,1 +1,2 @@
-line1
+line1 updated
+line2
*** End Patch
示例:
# 更新已有文件
kb edit --patch "*** Begin Patch
*** Update File --name: my-repo/docs/readme.md
@@ -1,1 +1,1 @@
-old content
+new content
*** End Patch"
# 新增文件
kb edit --patch "*** Begin Patch
*** Add File --name: my-repo/docs/new-file.md
+# New File
+Some content here
*** End Patch"
5. API 接口
执行Atomix命令
接口地址:POST /kb/atomix/execute
权限要求:atomix_command READ
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| command | String | 是 | 命令文本,例如:kb ls demo-repo/docs |
请求示例:
{
"command": "kb ls demo-repo/docs -l --sort updated --limit 20"
}
响应示例:
{
"code": 8200,
"message": "操作成功",
"data": {
"success": true,
"command": "ls",
"data": {
"outputContent": "..."
},
"errorCode": null,
"errorMessage": null,
"errorDetails": {},
"operation_source": "demo-repo/docs",
"operation_target": null
}
}
curl 示例:
curl -X POST "${domain}/kb/atomix/execute" \
-H "Authorization: Bearer tk_xxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"command": "kb cat --name demo-repo/docs/intro.md --head 20 -n"
}'
6. 错误码
框架级错误码:
| 错误码 | 说明 |
|---|---|
invalid_args | 参数解析失败 |
unknown_command | 命令不存在 |
not_implemented | 未注册该命令 handler |
7. 命令速查表
| 命令 | 分类 | 用途 | 必填参数 |
|---|---|---|---|
ls | READ | 列出目录/仓库内容 | 无(可选 path) |
tree | READ | 树形展示目录结构 | path |
cat | READ | 读取文件内容 | --name 或 --code |
summary | READ | 读取文件摘要 | --name 或 --code |
search | READ | 搜索文档内容 | query |
skill | READ | 查看 Skill 知识库信息 | skillCode |
render | READ | 渲染文档 | codes |
download_link | READ | 获取文件下载链接 | --code |
write | WRITE | 写入/创建文件 | --name + --content 或 --repo-code + --path + --content |
mkdir | WRITE | 创建目录 | path 或 --repo-code + --path |
mv | WRITE | 移动/重命名文件 | src + dst 或 --doc-code + --to |
cp | WRITE | 复制文件 | --from 或 --doc-code + --to |
rm | WRITE | 删除文件 | path 或 --doc-code |
publish | WRITE | 发布文件 | --doc-code 或 --name |
init | WRITE | 初始化 Skill 知识库 | skillName |
validate | WRITE | 校验 Skill 知识库 | skillCode |
edit | EDIT | 编辑文件(Patch 模式) | --patch |
- 1. 命令体系总览
- 2. 执行流程
- 3. 通用命令行规则
- 4. 命令用法
- 4.1 READ 类命令
ls— 列出目录/仓库内容tree— 树形展示目录结构cat— 读取文件内容summary— 读取文件摘要search— 搜索文档内容skill— 查看 Skill 知识库信息render— 渲染文档download_link— 获取文件下载链接- 4.2 WRITE 类命令
write— 写入/创建文件mkdir— 创建目录mv— 移动/重命名文件cp— 复制文件rm— 删除文件publish— 发布文件init— 初始化 Skill 知识库validate— 校验 Skill 知识库- 4.3 EDIT 类命令
edit— 编辑文件(Patch 模式)- 5. API 接口
- 执行Atomix命令
- 6. 错误码
- 7. 命令速查表