@bintel/dimens-cli
v1.0.16
Published
Dimens CLI 与 Node.js SDK,提供维表智联认证、项目、表格、行数据、文件上传与 AI 多能力模型代理调用能力
Maintainers
Readme
Dimens CLI
dimens-cli 是多维项目的本地命令行与 Node.js SDK 封装,当前已经落地可直接执行的本地 CLI 主链。
当前实现重点收口为两条主链:
- 认证侧:
API Key + API Secret换取系统token - AI 侧:通过维表后端代理调用 new-api 多能力接口,覆盖聊天、Responses、Messages、模型列表、图片生成/编辑/变体、视频任务、音频、Embedding、Rerank
默认 baseUrl 固定为:
https://dimens.bintelai.com/api只有当用户显式传入 --base-url、profile 配置或环境变量时,才会覆盖默认地址。
当前已实现能力
当前仓库里已经实现并验证的命令组有:
authprojectdocviewreportuploadrolepermissionsheetcolumnrowrow-policyrow-aclaiworkflow-publicplugin-publicskillsystem
对应 SDK 业务域有:
sdk.authsdk.projectsdk.documentsdk.viewsdk.reportsdk.uploadsdk.rolesdk.permissionsdk.sheetsdk.columnsdk.rowsdk.rowPolicysdk.rowAclsdk.aisdk.workflowPublicsdk.pluginPublic
安装
作为 npm 包安装:
npm install @bintel/dimens-cli或:
pnpm add @bintel/dimens-cli如果你本地执行 dimens-cli 提示“command not found”,说明当前环境还没有这个命令。先安装 @bintel/dimens-cli,安装完成后再继续看 skills/ 文档、CLI 案例和 Skill 路由说明。
如果本地已经有全局命令,先查看当前版本,不要每次无条件重装:
dimens-cli --version只有命令不存在、版本不满足当前任务、help 与文档不一致,或你确认需要升级时,再执行:
npm install -g @bintel/dimens-cli@latest
dimens-cli --version如果你是在当前仓库里开发 dimens-cli,再看下面的“本地开发使用”。
本地开发使用
进入目录:
cd /Users/lixiang/data/代码库管理/binterAi/多维项目开发/dimens-cli安装依赖:
pnpm install构建:
pnpm build本地直接执行 CLI:
node ./bin/dimens-cli.js --version
node ./bin/dimens-cli.js help如果你希望像全局命令一样使用:
npm link
dimens-cli helpCLI 快速开始
查看帮助:
node ./bin/dimens-cli.js --version
node ./bin/dimens-cli.js help
node ./bin/dimens-cli.js help auth
node ./bin/dimens-cli.js help doc
node ./bin/dimens-cli.js help upload
node ./bin/dimens-cli.js help report
node ./bin/dimens-cli.js help view
node ./bin/dimens-cli.js help role
node ./bin/dimens-cli.js help permission
node ./bin/dimens-cli.js help row-policy
node ./bin/dimens-cli.js help row-acl
node ./bin/dimens-cli.js help ai
node ./bin/dimens-cli.js help workflow-public
node ./bin/dimens-cli.js help plugin-public
node ./bin/dimens-cli.js help skill查看技能列表:
node ./bin/dimens-cli.js skill list
node ./bin/dimens-cli.js skill list --output json查看技能详情:
node ./bin/dimens-cli.js skill info dimens-manager
node ./bin/dimens-cli.js skill info dimens-system-orchestrator
node ./bin/dimens-cli.js skill show dimens-manager --references
node ./bin/dimens-cli.js skill show dimens-manager --mapping-only说明:
skill info <name>现在除了主文件、命令映射、references 外,还会显示“推荐关键词示例”- 这个区块用于反向说明:什么样的输入更容易命中当前 Skill
--output json下会返回recommendExamples字段
根据关键词推荐技能:
node ./bin/dimens-cli.js skill recommend 工作流 默认模型 AI 分析
node ./bin/dimens-cli.js skill recommend 'AI 一键生成业务工作流画布'
node ./bin/dimens-cli.js skill recommend api-key token --output json
node ./bin/dimens-cli.js skill recommend 生成一个客户管理系统
node ./bin/dimens-cli.js skill recommend '帮我做一个项目管理平台'
node ./bin/dimens-cli.js skill recommend '生成一个审批系统' --output json系统命令:
node ./bin/dimens-cli.js help system
node ./bin/dimens-cli.js system print
node ./bin/dimens-cli.js system print --base-url https://dimens.bintelai.com/api --team-id TEAM1 --project-id PROJ1说明:
skill recommend支持关键词输入,也支持自然语言整句输入- 如果输入是“生成一个 XX 系统 / 平台 / 管理系统 / 业务系统”这类系统建设需求,当前会优先推荐
dimens-system-orchestrator - 如果输入是“AI 一键生成画布 / 流程图 / 思维导图 / 工作流画布”这类可视化生成需求,当前会优先推荐
dimens-manager --output json不会再污染推荐文本,参数值不会被拼进 query--output json下的推荐结果除了score,还会额外返回matchedBy和reason,用于解释“为什么命中这个 Skill”- 文档链接里常见的
sh_xxx是菜单资源sheetId,不是文档内容documentId;如果用户给的是文档页面链接,优先用doc info --sheet-id sh_xxx或doc info sh_xxx,拿到真实documentId后再继续doc update
JSON 输出示例:
{
"success": true,
"message": "技能推荐完成",
"data": [
{
"score": 22,
"matchedBy": ["system-build-intent"],
"reason": "命中系统建设意图",
"skill": {
"name": "dimens-system-orchestrator"
}
}
]
}当前已经支持的高频解释标签包括:
system-build-intent:系统建设意图workflow-intent:工作流意图auth-intent:鉴权接入意图table-intent:多维表格意图permission-intent:权限意图report-intent:报表意图canvas-intent:画布意图
画布资源命令:
node ./bin/dimens-cli.js help canvas
node ./bin/dimens-cli.js canvas create --project-id PROJ1 --name 业务流程画布
node ./bin/dimens-cli.js canvas info canvas_1 --team-id TEAM1 --project-id PROJ1
node ./bin/dimens-cli.js canvas save canvas_1 --team-id TEAM1 --project-id PROJ1 --base-version 1 --file ./workflow-canvas.json --summary AI生成业务工作流
node ./bin/dimens-cli.js canvas versions canvas_1 --team-id TEAM1 --project-id PROJ1
node ./bin/dimens-cli.js canvas resource-market --team-id TEAM1 --keyword 审批例如:
node ./bin/dimens-cli.js skill info dimens-manager --output json返回结果中会包含类似:
{
"recommendExamples": [
"api-key token",
"api secret 登录",
"第三方鉴权接入"
]
}使用 API Key 换 Token:
node ./bin/dimens-cli.js auth api-key-login \
--api-key ak_xxx \
--api-secret sk_xxx写入默认团队:
node ./bin/dimens-cli.js auth use-team TEAM1获取项目列表:
node ./bin/dimens-cli.js project list --team-id TEAM1上传本地文件:
node ./bin/dimens-cli.js upload file --path ./demo.txt
node ./bin/dimens-cli.js upload file --path ./cover.png --key docs/cover.png
node ./bin/dimens-cli.js upload file --path ./project-cover.png --team-id TEAM1 --project-id PROJ1 --scene project-cover
node ./bin/dimens-cli.js upload file --path ./logo.svg --team-id TEAM1 --source material
node ./bin/dimens-cli.js upload mode统一规则:
- 所有文件、图片、封面都统一先走
upload file - 上传接口返回
fileId、key、url - 业务命令只消费上传后的
url,不再各自实现一套独立的存储逻辑 - 典型场景包括:项目封面、文档图片、文档附件
- 所有更新命令统一按“先拿当前数据 -> 修改目标字段 -> 再提交 update”执行,避免只传局部字段造成数据丢失
- 如果上传资源明确归属于某个团队或项目,建议同时传
--team-id、--project-id,必要时补充--scene - 如果希望上传后直接进入素材管理,必须显式传
--source material --team-id <TEAM_ID>;CLI 会自动补name、size、mimeType - 素材库上传会优先读取
upload mode:线上启用七牛 CDN 时先直传 CDN,再调用素材库完成接口入库;CDN 未启用或配置不完整时自动回退本地上传 - 素材库 CDN 上传仅限
source=material;项目封面、文档附件、头像等非素材库场景仍走原有本地上传接口 - 素材库完成接口会按服务端规则返回最终 URL:PNG/JPG 等位图可能返回 WebP 派生地址,SVG 和非图片文件保持原始文件地址
项目初始化与菜单骨架示例:
node ./bin/dimens-cli.js project create --team-id TEAM1 --name 客户管理系统 --description 客户全生命周期管理 --project-type spreadsheet
node ./bin/dimens-cli.js upload file --path ./project-cover.svg --team-id TEAM1 --scene project-cover
node ./bin/dimens-cli.js sheet create --project-id PROJ1 --name 客户中心 --type folder
node ./bin/dimens-cli.js sheet create --project-id PROJ1 --name 项目文档 --type folder
node ./bin/dimens-cli.js sheet create --project-id PROJ1 --name 经营分析 --type folder
node ./bin/dimens-cli.js sheet create --project-id PROJ1 --name 客户表 --folder-id FOLDER_SHEET_ID
node ./bin/dimens-cli.js sheet create --project-id PROJ1 --name 联系人表 --folder-id FOLDER_SHEET_ID
node ./bin/dimens-cli.js doc create --team-id TEAM1 --project-id PROJ1 --title 项目说明文档 --parent-id FOLDER_SHEET_ID --format richtext
node ./bin/dimens-cli.js report create --project-id PROJ1 --name 销售漏斗
node ./bin/dimens-cli.js sheet tree --project-id PROJ1说明:
- 如果项目需要封面表达,建议先用 SVG 工具生成一张符合项目主题、具备动态动画效果的 SVG,再上传拿 URL
- 项目封面更新建议按“先上传,再把返回的 URL 传给
project update --cover-image”执行 - 项目菜单骨架默认至少包含:目录、表格、文档、报表
sheet create --type folder用于创建目录节点sheet create --folder-id <folderSheetId>用于把资源挂到目录下- 文档当前挂目录走
doc create --parent-id <folderSheetId> - 创建完成后用
sheet tree回查目录和资源归位 - 如果要查看命令级帮助,直接执行
node ./bin/dimens-cli.js help sheet、node ./bin/dimens-cli.js help sheet create、node ./bin/dimens-cli.js help sheet tree
自定义页面脚手架初始化:
node ./bin/dimens-cli.js create --dir
node ./bin/dimens-cli.js create --dir ./my-custom-page
node ./bin/dimens-cli.js create --dir=./my-custom-page说明:
create --dir会通过git clone --depth 1 https://gitee.com/bintelai/dimens-web.git <目标目录>克隆dimens-web自定义页面脚手架,并保留.git供后续更新。--dir不带目录值时,CLI 会交互询问目录名,默认推荐dimens-web。- 目标目录不存在时自动创建;目标目录为空时直接克隆。
- 目标目录已存在且非空时,CLI 会询问是否覆盖;确认后不会删除旧文件,而是把旧内容迁移到同级
backupDel/<目录名>-<时间戳>/。 - 使用前需确保本机已安装 Git;克隆失败会直接提示检查 Git 和网络,不使用本地包兜底。
- 创建完成后进入目录执行
pnpm install,如果项目没有热加载进程,再执行pnpm run dev。
文档主链示例:
node ./bin/dimens-cli.js doc create --team-id TEAM1 --project-id PROJ1 --title 在线文档 --content '<p>Hello TipTap</p>' --format richtext
node ./bin/dimens-cli.js doc info --team-id TEAM1 --project-id PROJ1 --document-id DOC_1
node ./bin/dimens-cli.js doc update --team-id TEAM1 --project-id PROJ1 --document-id DOC_1 --content '<p>更新后的内容</p>' --version 1
node ./bin/dimens-cli.js doc attach-file --team-id TEAM1 --project-id PROJ1 --document-id DOC_1 --file ./release.pdf --title 发布清单.pdf
node ./bin/dimens-cli.js doc append-image --team-id TEAM1 --project-id PROJ1 --document-id DOC_1 --file ./cover.png --alt 封面图
node ./bin/dimens-cli.js doc versions --team-id TEAM1 --project-id PROJ1 --document-id DOC_1说明:
doc attach-file和doc append-image本质上也是“先上传,再把返回的 URL 写入文档内容”- 如果只是想拿上传后的 URL 给其他业务命令复用,可以直接先执行
upload file doc update只负责提交文档内容和版本,不直接接收本地文件
分页读取行数据:
node ./bin/dimens-cli.js row page \
--team-id TEAM1 \
--project-id PROJ1 \
--sheet-id SHEET1 \
--page 1 \
--size 20说明:
- 行读取保留
row page、row info和公开读row open-info - 不再使用
row list - 如果用户要基于行数据做分析,先执行
column list获取真实字段 ID,再用row page组合keyword、search-field-ids、filters、filter-match-type、sort-rule查询数据 - 单行详情需要展开单向关联目标行或富文本原始 content 时,使用
row info --include relations,richtext;公开读取场景使用row open-info --include relations,richtext search-field-ids支持逗号分隔或 JSON 字符串数组;filters和sort-rule必须传合法 JSON
读取单行详情:
node ./bin/dimens-cli.js row info \
--team-id TEAM1 \
--project-id PROJ1 \
--sheet-id SHEET1 \
--row-id ROW1 \
--include relations,richtext公开读取单行详情:
node ./bin/dimens-cli.js row open-info \
--team-id TEAM1 \
--project-id PROJ1 \
--sheet-id SHEET1 \
--row-id ROW1 \
--include relations,richtext批量写入行数据:
node ./bin/dimens-cli.js row batch-create \
--sheet-id SHEET1 \
--file ./data/rows.json说明:
rows.json顶层必须是 JSON 数组,每一项可以直接是字段对象,也可以是{ "data": { ... } }- 后端单批最高限制 1000 行,但 1000 行分片在真实导入中存在静默丢数据风险,CLI 默认按 200 行稳定分片
- 可通过
--batch-size 200显式指定稳定分片大小;如临时调大,不能超过 1000 - 系统初始化、迁移、批量补数据时优先用
row batch-create,不要循环调用row create
权限命令快速示例
权限链路建议按“角色 -> 项目/表权限 -> 行级策略 -> 单行 ACL”理解和使用,这也与仓库内权限设计文档的分层保持一致。
查看角色与权限帮助:
node ./bin/dimens-cli.js help role
node ./bin/dimens-cli.js help permission
node ./bin/dimens-cli.js help row-policy
node ./bin/dimens-cli.js help row-acl创建角色:
node ./bin/dimens-cli.js role create \
--project-id PROJ1 \
--name 班主任 \
--description 班级管理角色 \
--can-manage-sheets false \
--can-edit-schema false \
--can-edit-data true给用户分配角色:
node ./bin/dimens-cli.js role assign-user \
--project-id PROJ1 \
--role-id role_teacher \
--user-id 1001 \
--sheet-id sh_class创建表级权限:
node ./bin/dimens-cli.js permission create \
--project-id PROJ1 \
--role-id role_teacher \
--sheet-id sh_class \
--data-access private_rw \
--can-read true \
--can-write true \
--column-visibility '{"fld_name":true,"fld_class_no":true}' \
--column-readonly '{"fld_score":true}'设置文档 / 报表 / 页面等资源权限:
node ./bin/dimens-cli.js permission set-resource \
--project-id PROJ1 \
--role-id role_teacher \
--resource-id doc_xxx \
--resource-type document \
--visible true \
--editable false创建“仅查看自己”行策略:
node ./bin/dimens-cli.js row-policy create \
--project-id PROJ1 \
--sheet-id sh_class \
--role-id role_teacher \
--name 仅查看自己 \
--effect allow \
--actions view,edit \
--conditions '[{"columnId":"createdBy","operator":"equals","value":"{{currentUser}}"}]' \
--priority 10 \
--match-type and \
--active true启用 / 禁用行策略:
node ./bin/dimens-cli.js row-policy enable \
--project-id PROJ1 \
--id policy_xxx \
--sheet-id sh_class
node ./bin/dimens-cli.js row-policy disable \
--project-id PROJ1 \
--id policy_xxx \
--sheet-id sh_class给指定行追加 ACL:
node ./bin/dimens-cli.js row-acl grant-user \
--sheet-id sh_class \
--row-id row_xxx \
--user-id 1001 \
--permission view \
--can-transfer false
node ./bin/dimens-cli.js row-acl grant-role \
--sheet-id sh_class \
--row-id row_xxx \
--role-id role_teacher \
--permission edit
node ./bin/dimens-cli.js row-acl revoke-role \
--sheet-id sh_class \
--row-id row_xxx \
--role-id role_teacher说明:
permission负责项目 / 表 / 资源层权限配置row-policy负责批量规则化的行级授权row-acl负责对单行做额外精细授权- 如果文档结论与服务端实现出现差异,应优先对照
.trae/已开发文档/权限机制架构设计图.md与.trae/已开发文档/权限流程图.md再确认
调用 AI 聊天:
node ./bin/dimens-cli.js ai chat-completions \
--team-id TEAM1 \
--message "你好" \
--model default公开工作流管理与免登录调用:
node ./bin/dimens-cli.js workflow-public upsert \
--team-id TEAM1 \
--flow-id 12 \
--enabled true \
--run-as-user-id 1001 \
--project-id PROJ1
node ./bin/dimens-cli.js workflow-public invoke \
--public-id wfpub_xxx \
--public-secret wfsk_xxx \
--message "帮我分析这个客户的续费风险" \
--metadata '{"source":"crm","customerId":"C10001"}'公开插件发布与安装:
node ./bin/dimens-cli.js plugin-public publish \
--team-id TEAM1 \
--plugin-id 3
node ./bin/dimens-cli.js plugin-public list --keyword 审批
node ./bin/dimens-cli.js plugin-public install-flow \
--team-id TEAM2 \
--resource-id 88 \
--project-scope-type all_projects调用 AI 图片生成:
node ./bin/dimens-cli.js ai image-generate \
--team-id TEAM1 \
--prompt "企业数据驾驶舱海报" \
--model default \
--size 1024x1024 \
--project-id PROJ1 \
--resource-id poster_1创建并查询 AI 视频任务:
node ./bin/dimens-cli.js ai video-create \
--team-id TEAM1 \
--prompt "数据看板动画展示" \
--model default \
--seconds 8
node ./bin/dimens-cli.js ai video-status \
--team-id TEAM1 \
--task-id video_task_1音频、向量和重排:
node ./bin/dimens-cli.js ai audio-speech --team-id TEAM1 --input "欢迎使用维表智联" --voice alloy
node ./bin/dimens-cli.js ai audio-transcribe --team-id TEAM1 --file ./meeting.mp3
node ./bin/dimens-cli.js ai embeddings --team-id TEAM1 --input "hello"
node ./bin/dimens-cli.js ai rerank --team-id TEAM1 --query "项目风险" --documents '["风险台账","会议纪要"]'执行前显示相关 Skill 提示:
node ./bin/dimens-cli.js ai chat-completions \
--team-id TEAM1 \
--message "你好" \
--model default \
--show-skill执行前只看 Skill 映射:
node ./bin/dimens-cli.js ai chat-completions \
--team-id TEAM1 \
--message "你好" \
--show-skill mapping执行前查看完整 Skill 文档:
node ./bin/dimens-cli.js ai chat-completions \
--team-id TEAM1 \
--message "你好" \
--show-skill full如果是系统建设类需求,也可以直接先看系统级总控 Skill:
node ./bin/dimens-cli.js skill info dimens-system-orchestrator
node ./bin/dimens-cli.js skill show dimens-system-orchestrator --referencesSDK 快速开始
当前 SDK 不是旧版 callTool() 风格,而是“统一客户端 + 分域 SDK”结构。
import { createSDK } from '@bintel/dimens-cli';
const sdk = createSDK({
baseUrl: 'https://dimens.bintelai.com',
});
const loginResult = await sdk.auth.exchangeTokenByApiKey({
apiKey: 'ak_xxx',
apiSecret: 'sk_xxx',
});
const businessSdk = createSDK({
baseUrl: 'https://dimens.bintelai.com',
token: loginResult.data.token,
refreshToken: loginResult.data.refreshToken,
teamId: 'TEAM1',
projectId: 'PROJ1',
});
const projects = await businessSdk.project.page('TEAM1', {
page: 1,
size: 20,
});
const chat = await businessSdk.ai.completions('TEAM1', {
model: 'default',
messages: [
{
role: 'user',
content: '你好',
},
],
});
const image = await businessSdk.ai.generateImage('TEAM1', {
model: 'default',
prompt: '企业数据驾驶舱海报',
size: '1024x1024',
projectId: 'PROJ1',
resourceId: 'poster_1',
});
const videoTask = await businessSdk.ai.createVideo('TEAM1', {
model: 'default',
prompt: '数据看板动画展示',
seconds: '8',
projectId: 'PROJ1',
resourceId: 'video_1',
});
const videoStatus = await businessSdk.ai.getVideo('TEAM1', videoTask.data.id);
console.log(projects.data);
console.log(chat.data);
console.log(image.data);
console.log(videoStatus.data);仓库内一键 Smoke Test
仓库开发场景已经提供现成脚本:
cd /Users/lixiang/data/代码库管理/binterAi/多维项目开发/dimens-cli
export DIMENS_API_KEY="ak_xxx"
export DIMENS_API_SECRET="sk_xxx"
export DIMENS_TEAM_ID="TEAM1"
bash ./scripts/smoke-test.sh可选变量:
export DIMENS_BASE_URL="https://dimens.bintelai.com"
export DIMENS_SMOKE_MESSAGE="CLI smoke test"
export DIMENS_SMOKE_MODEL="default"注意:
scripts/smoke-test.sh是仓库内联调脚本- 如果你是通过 npm 安装包到其他项目中使用,请直接调用
dimens-cli命令或 SDK,不依赖这份仓库脚本
文档索引
开发命令
pnpm build
pnpm test
pnpm typecheck
pnpm publish:check
npm publish --access publicpnpm publish:check 会顺序执行:
- 测试
- 类型检查
- 构建
npm pack --dry-run
常用版本命令:
pnpm release:patch
pnpm release:minor
pnpm release:major更完整的发布步骤见:
项目结构
dimens-cli/
├── bin/ # CLI 入口
├── dist/ # 构建产物
├── scripts/ # 辅助脚本
├── src/
│ ├── cli.ts # CLI 分发入口
│ ├── commands/ # 命令层
│ ├── core/ # 上下文、配置、输出
│ └── sdk/ # SDK 封装
├── tests/ # 测试
└── 文档/ # 设计与使用文档说明
- 当前
api key只保留“换 token”这一条主链,不扩展 API Key 管理命令 - 当前
ai只封装维表后端已经开放的 new-api 代理接口,不直连 new-api,不保存或展示sk-token - 图片、视频、音频、Embedding、Rerank 等接口的
model建议默认传default,由维表后端按团队和 capability 注入默认模型 projectId、resourceId、modelScope、tokenScope是维表内部归因和模式控制字段,不会透传给 new-api 上游- 当前
skill命令组用于本地查看、推荐和展示 Skills,不调用后端接口 - 旧版
callTool/getTools/getSkills文档口径已废弃,不再适用于当前实现
