@fajiang/fashuyun-cli
v1.2.10
Published
Fajiang Fashuyun CLI for projects, customers, and follow-up records.
Keywords
Readme
法将法数云 CLI
法将法数云命令行工具,用于在终端中操作项目、客户、联系人、跟进记录,以及合同、回款、发票、账单、计时、任务、任务组、任务类型、案件利冲、用户、组织、角色等业务数据。
功能范围
- 参数语义:查询命令 schema、枚举说明、引用对象解析、JSON 写入前校验。
- 领域入口:保留统一安装包和
fajiang-fashuyun命令,同时支持org-admin、crm、collaboration、case-project、approval-office、delivery-template、finance、finance-compat领域前缀。 - Catalog:查询领域分类、实体关系、workflow 步骤和领域命令风险等级。
- Workflow:沉淀 Agent 高频多接口编排,例如请假审批、客户建档、项目立项、项目总览、服务报告发布。
- 项目:查询、详情、基础信息、新增、修改、删除、状态更新、成员查询、按编号查询、导入导出、案卷/收案审查表导出。
- 合同:查询、详情、新增、修改、删除、客户合同金额排名、批量改状态。
- 回款:查询、详情、新增、修改、删除、客户回款金额排名。
- 发票:查询、详情、按客户查最新发票、新增、修改、删除、批量改状态。
- 客户:查询、带标签查询、详情、基础信息、新增、修改、删除、导入导出、查重、领取/退回公海、批量流转、转移、自动分配。
- 联系人:查询、详情、新增、修改、删除、导入、转移。
- 跟进记录:查询、最新记录、新增、删除,不提供修改命令。
- 计时:查询、详情、新增、修改、删除、开始/结束计时、当前进行中计时、统计与导出。
- 任务:详情、新增、修改、删除、状态变更、项目/个人视图查询、复制、移动、跨项目导入。
- 任务组:查询、新增、修改、删除、调整顺序。
- 任务类型:查询、详情、新增、修改、删除。
- 账单:查询、待处理/待催款、基础信息、详情、新增、修改、恢复、删除、导出、通知、设置成员。
- 案件利冲:判断是否存在利冲、利冲检索、按公司名刷新当前项目利冲。
- 用户:查询、基础信息、详情、新增、修改、状态变更、管理员设置、默认组织、同步、导入导出、删除。
- 组织:查询、我的组织、详情、新增、修改、状态变更、删除。
- 角色:查询、详情、类型、新增、修改、删除。
- 角色成员:查询、新增、批量新增、修改、删除、按用户/角色/部门查询、批量重置。
- 文件:业务文件查询、回收站查询、详情、路径、上传下载、底层 fsid 上传下载。
- 通用协作:标签、跟进、文档/文件可挂在客户、联系人、项目、案件等对象上。
- 非财务扩展:印章、服务报告、自定义字段、部门、部门成员、Word 模板、合同模板。
合同、回款、发票、账单已归入 finance 领域。payment 相关命令默认请求后端统一回款接口,由后端根据当前律所配置自动路由到当前生效的回款实现。
联调回款命令时,examples/payment.create.json 和 examples/payment.update.json 里的 cusid、contractid、projectid、billid、ownerid 只是字段示意,执行前必须替换成真实业务 id;billid 可传 -1 表示让后端按兼容逻辑自动处理。
命令分层规范
guide是 skill / agent 的唯一公开说明入口。- 写请求采用“先
guide、后执行”;高风险写命令在 CLI 内继续保留硬保护。 - 完整规范见
docs/agent-execution-design.md。 - 发版流程与 skill 分发规范见
docs/publishing.md。
环境要求
普通命令需要 Node.js 16 或更高版本。
如果要使用浏览器扫码授权 fajiang-fashuyun auth login,需要 Node.js 18 或更高版本。
node --version安装
如果从 npm 仓库安装:
npm install --global @fajiang/fashuyun-cli安装完成后,CLI 会自动尝试把内置 skill 同步到本机 ~/.agents/skills/fajiang-fashuyun。
如果自动同步失败,再手动执行:
fajiang-fashuyun skill install如果从当前仓库源码安装,请先安装包依赖,再执行全局安装:
npm --prefix ./tools/fajiang-fashuyun-cli install
npm install --global ./tools/fajiang-fashuyun-cli如果需要手动补装或补同步本地 skill,再执行:
fajiang-fashuyun skill install安装后验证:
fajiang-fashuyun skill status
fajiang-fashuyun auth status其中:
skill status用于确认本地 skill 是否已安装、版本是否与当前 CLI 一致skill install用于安装缺失的 skill,或把旧版本自动同步到当前 CLI 内置版本auth status只会告知是否已完成授权,以及当前授权是否有效
源码目录内调试时,建议直接调用 Node 入口,避免 npm run 把业务参数当成 npm 自身参数:
node ./tools/fajiang-fashuyun-cli/bin/fajiang-fashuyun.js auth status
node ./tools/fajiang-fashuyun-cli/bin/fajiang-fashuyun.js leave approval-template-list --enabled true如果必须使用 npm script,业务参数前需要额外加 --:
npm --prefix ./tools/fajiang-fashuyun-cli run start -- leave approval-template-list --enabled true如果你已经安装过旧版本,更新时执行同样的命令即可。
从仓库源码更新时,建议重新执行这两步:
npm --prefix ./tools/fajiang-fashuyun-cli install
npm install --global ./tools/fajiang-fashuyun-cli认证配置
以下内容包含开发/联调用法,面向技术同事使用,不属于给模型看的 skill 提示内容。
CLI 支持两种模式:
prod:默认模式,请求https://fajiang.plus/counseldev:开发模式,请求http://127.0.0.1/counsel
查看当前模式:
fajiang-fashuyun auth mode切到开发模式(仅技术同事):
fajiang-fashuyun auth mode --name dev如需自定义本地地址,也可以在当前模式下覆盖(仅技术同事):
fajiang-fashuyun auth mode --name dev --base-url http://127.0.0.1:8080优先推荐浏览器扫码授权:
fajiang-fashuyun auth login命令会自动打开法将法数云 CLI 专用授权页面。你完成微信扫码授权后,CLI 会自动完成后续配置。
使用该命令前,请确保本机已安装 Chrome、Edge 或 Chromium。 同时需要 Node.js 18 或更高版本。
授权完成后,可执行:
fajiang-fashuyun auth whoami确认当前登录身份。
注意:dev 模式默认不支持扫码授权,因为扫码页仍是线上站点;本地开发通常应使用手动 token(仅技术同事):
fajiang-fashuyun auth manual如果本地后端与线上共用同一套鉴权,也可以先在 prod 模式执行一次扫码授权,再切回 dev 模式,分别保存各自 token。
如果当前环境暂时无法使用浏览器扫码,再使用手动配置方式:
fajiang-fashuyun auth manual如果授权失效,重新执行一次:
fajiang-fashuyun auth login常用命令
查询参数语义:
fajiang-fashuyun schema list
fajiang-fashuyun schema get --command project.create
fajiang-fashuyun enum list --command project.status
fajiang-fashuyun enum list --command project.create解析引用对象和写入前校验:
fajiang-fashuyun resolve --type user --keyword '张三'
fajiang-fashuyun resolve --type customer.company --keyword '北京明海建设有限公司'
fajiang-fashuyun validate --command project.create --json ./project.create.json写入型命令中的 ownerid、leaderid、projectid、customerid 等引用字段必须传 id。不要直接传姓名或客户名称;先用 resolve 或对应 list/get-base 命令找到唯一候选。
查看领域目录:
fajiang-fashuyun catalog domains
fajiang-fashuyun catalog commands --domain org-admin
fajiang-fashuyun catalog entity --name project
fajiang-fashuyun catalog workflow --name leave.request领域入口和旧平铺命令同时可用。新 skill 默认使用领域入口:
fajiang-fashuyun crm customer list --keyword '北京明海建设有限公司'
fajiang-fashuyun org-admin user list --keyword '张三'
fajiang-fashuyun org-admin meta-field list --obj-type company
fajiang-fashuyun case-project project get --id PROJECT_ID
fajiang-fashuyun approval-office leave list --page 0 --size 20
fajiang-fashuyun delivery-template service-report list --page 0 --size 20Workflow 用于 Agent 高频多接口编排;中途失败时返回已完成步骤、已创建对象、失败步骤和恢复命令。若正在当前源码仓库内调试,请优先使用本地 Node 入口,避免全局安装版本落后于当前代码:
node ./bin/fajiang-fashuyun.js guide --target workflow.leave-request --json ./workflow.leave-request.json
node ./bin/fajiang-fashuyun.js workflow leave-request --json ./workflow.leave-request.json
node ./bin/fajiang-fashuyun.js approval-office workflow leave-request --json ./workflow.leave-request.json
node ./bin/fajiang-fashuyun.js crm workflow customer-intake --json ./workflow.customer-intake.json
node ./bin/fajiang-fashuyun.js case-project workflow project-intake --json ./workflow.project-intake.json
node ./bin/fajiang-fashuyun.js case-project workflow project-overview --project-id PROJECT_ID
node ./bin/fajiang-fashuyun.js delivery-template workflow service-report-publish --json ./workflow.service-report-publish.json查看认证状态:
fajiang-fashuyun auth status手动配置:
fajiang-fashuyun auth manual兼容旧命令:
fajiang-fashuyun auth setup查询客户:
fajiang-fashuyun customer list --keyword '北京明海建设有限公司' --page 0 --size 20上传业务文件:
fajiang-fashuyun file upload --file ./contract.docx --btype project --bid PROJECT_ID上传底层存储文件并获取 fsid:
fajiang-fashuyun file upload-fs --file ./report.xlsx --file-type protected下载文件:
fajiang-fashuyun file download --id FILE_ID --output ./downloads/按 fsid 下载原生存储文件:
fajiang-fashuyun file download-fs --fsid FSID --file-name report.xlsx --output ./downloads/如果目标文件已经存在,命令会停止。确认覆盖时可追加 --force。
请假和审批是两个步骤,但对自然语言“帮我发起一个请假审批”这类 workflow 写请求,第一步必须先跑 guide,而不是先查枚举、模板或复制示例:
printf '{}' > ./workflow.leave-request.json
node ./bin/fajiang-fashuyun.js guide --target workflow.leave-request --json ./workflow.leave-request.json只有 guide.ready=true 时,才继续执行真实写命令;如果 ready=false,只围绕 requiredConfirmations / requiredActions 补问用户。
如果用户明确是在做“能力检查”,例如“病假和年假的枚举值是什么、审批流程有没有配置好”,才使用以下检查路径:
node ./bin/fajiang-fashuyun.js leave type-list
node ./bin/fajiang-fashuyun.js enum list --command leave.type
node ./bin/fajiang-fashuyun.js catalog workflow --name leave.request请假类型固定枚举:1=事假、2=病假、3=年假、4=婚假、5=产假、6=其他。--type 可传数字,也可直接传中文名称。JSON 文件同样支持 "type": "病假"。
在 guide.ready=true 之后,再创建请假并发起审批:
node ./bin/fajiang-fashuyun.js workflow leave-request --json ./workflow.leave-request.json
node ./bin/fajiang-fashuyun.js approval-office workflow leave-request --json ./workflow.leave-request.json
node ./bin/fajiang-fashuyun.js leave submit-approval --id VACATE_ID --tid TEMPLATE_ID --name '请假审批' --obj-name '2026-06-01至2026-06-03病假' --note '因需进行手术,申请病假。'审批模板选择建议:
- 只使用
categoryType为leave-status-pass且enable为true的模板。 - 先执行
node ./bin/fajiang-fashuyun.js guide --target workflow.leave-request --json FILE或node ./bin/fajiang-fashuyun.js guide --target command.approval.start --json FILE;若返回ready=false,按requiredConfirmations/requiredActions补齐审批流程、节点选人和业务字段后再执行写命令。 - 若有多个同名模板,优先使用较新的
gmtCreate/gmtModify;如果发起审批返回“系统繁忙”等服务端错误,可换另一个启用模板重试。 - 提交后用
node ./bin/fajiang-fashuyun.js approval status --obj-type vacate --obj-id VACATE_ID或node ./bin/fajiang-fashuyun.js leave get --id VACATE_ID核验请假记录是否进入审批状态。 preflight、approval template-start-check仍可作为兼容检查入口;approval template-node-list --optional-only true可用于底层排查,但不再是推荐主路径。
若模板包含“发起人自选”,审批 JSON 结构示例:
{
"tid": "APPROVAL_TEMPLATE_ID",
"objType": "vacate",
"objId": "VACATE_ID",
"approvalNodeUserMap": {
"TEMPLATE_NODE_ID": ["USER_ID_1"]
},
"approvalNodeCcUserMap": {
"TEMPLATE_NODE_ID": ["USER_ID_2"]
}
}通用审批操作:
fajiang-fashuyun approval list-with-can-approve --scene 1 --user-action 1 --page 0 --size 20
fajiang-fashuyun approval pass --node-id NODE_ID
fajiang-fashuyun approval reject --node-id NODE_ID --content '原因不充分'查询客户详情:
fajiang-fashuyun customer get --id CUSTOMER_ID按名称查询客户基础信息:
fajiang-fashuyun customer get-base --name '北京明海建设有限公司'查询项目:
fajiang-fashuyun project list --keyword '合同' --page 0 --size 20查询项目详情:
fajiang-fashuyun project get --id PROJECT_ID查询项目关联信息:
fajiang-fashuyun collaboration followup list --obj-type project --obj-id PROJECT_ID
fajiang-fashuyun task project --project-id PROJECT_ID --page 0 --size 20
fajiang-fashuyun time list --project-id PROJECT_ID --page 0 --size 20
fajiang-fashuyun collaboration file list --btype project --bid PROJECT_ID --page 0 --size 20
fajiang-fashuyun finance contract list --project-id PROJECT_ID --page 0 --size 20
fajiang-fashuyun finance payment list --project-id PROJECT_ID --page 0 --size 20
fajiang-fashuyun finance invoice list --project-id PROJECT_ID --page 0 --size 20
fajiang-fashuyun stamp list --project-id PROJECT_ID --page 0 --size 20查询合同:
fajiang-fashuyun finance contract list --keyword '常年法律顾问' --page 0 --size 20
fajiang-fashuyun finance contract list --project-id PROJECT_ID --page 0 --size 20
fajiang-fashuyun finance contract ranking --page 0 --size 20查询回款:
fajiang-fashuyun finance payment list --customer-name '北京明海建设有限公司' --page 0 --size 20查询发票:
fajiang-fashuyun finance invoice list --status 0 --page 0 --size 20
fajiang-fashuyun finance invoice latest --customer-name '北京明海建设有限公司'查询客户跟进记录:
fajiang-fashuyun followup list --obj-type company --obj-id CUSTOMER_ID查询项目跟进记录:
fajiang-fashuyun followup list --obj-type project --obj-id PROJECT_ID新增客户跟进记录:
fajiang-fashuyun followup create --obj-type company --obj-id CUSTOMER_ID --content '已电话沟通,客户希望下周出方案'查询计时与结束当前计时:
fajiang-fashuyun time list --keyword '尽调' --page 0 --size 20
fajiang-fashuyun time list --project-id PROJECT_ID --page 0 --size 20
fajiang-fashuyun time conducted
fajiang-fashuyun time end查询任务:
fajiang-fashuyun task project --project-id PROJECT_ID --page 0 --size 20
fajiang-fashuyun task personal --my-leaded true --page 0 --size 20查询任务组和任务类型:
fajiang-fashuyun task-group list --project-id PROJECT_ID
fajiang-fashuyun task-type list --enabled true --page 0 --size 20查询项目文档:
fajiang-fashuyun file list --btype project --bid PROJECT_ID --page 0 --size 20
fajiang-fashuyun file recycle-bin --btype project --bid PROJECT_ID --page 0 --size 20查询账单与导出账单:
fajiang-fashuyun finance bill list --keyword '2025' --page 0 --size 20
fajiang-fashuyun finance bill pending --page 0 --size 20
fajiang-fashuyun finance bill export --id BILL_ID --type word执行案件利冲检索:
fajiang-fashuyun conflict exist --name '示例有限公司'
fajiang-fashuyun conflict search --name '示例有限公司' --page 0 --size 20查询用户、组织、角色:
fajiang-fashuyun user list-base --keyword '张三' --page 0 --size 20
fajiang-fashuyun user get-base --id USER_ID
fajiang-fashuyun organization my
fajiang-fashuyun role list --page 0 --size 20
fajiang-fashuyun role-member user --user-id USER_ID --page 0 --size 20查看完整帮助:
fajiang-fashuyun --help示例 JSON
CLI 自带示例 JSON,可复制后按实际情况修改。
查看示例列表:
fajiang-fashuyun examples list打印某个示例:
fajiang-fashuyun examples print --name customer.create.json复制示例到当前目录后再修改:
fajiang-fashuyun examples copy --name customer.create.json --output ./customer.create.json
fajiang-fashuyun examples copy --name project.create.json --output ./project.create.json
fajiang-fashuyun examples copy --name contract.create.json --output ./contract.create.json
fajiang-fashuyun examples copy --name payment.create.json --output ./payment.create.json
fajiang-fashuyun examples copy --name invoice.create.json --output ./invoice.create.json
fajiang-fashuyun examples copy --name bill.create.json --output ./bill.create.json
fajiang-fashuyun examples copy --name time.create.json --output ./time.create.json
fajiang-fashuyun examples copy --name task.create.json --output ./task.create.json
fajiang-fashuyun examples copy --name task-group.create.json --output ./task-group.create.json
fajiang-fashuyun examples copy --name task-type.create.json --output ./task-type.create.json
fajiang-fashuyun examples copy --name user.create.json --output ./user.create.json
fajiang-fashuyun examples copy --name organization.create.json --output ./organization.create.json
fajiang-fashuyun examples copy --name role.create.json --output ./role.create.json
fajiang-fashuyun examples copy --name role-member.create.json --output ./role-member.create.json
fajiang-fashuyun examples copy --name contact.create.json --output ./contact.create.json
fajiang-fashuyun examples copy --name stamp.create.json --output ./stamp.create.json
fajiang-fashuyun examples copy --name service-report.create.json --output ./service-report.create.json
fajiang-fashuyun examples copy --name tag.create.json --output ./tag.create.json
fajiang-fashuyun examples copy --name meta-field.create.json --output ./meta-field.create.json
fajiang-fashuyun examples copy --name group.create.json --output ./group.create.json
fajiang-fashuyun examples copy --name group-user.create.json --output ./group-user.create.json
fajiang-fashuyun examples copy --name word-template.create.json --output ./word-template.create.json
fajiang-fashuyun examples copy --name contract-template.create.json --output ./contract-template.create.json
fajiang-fashuyun examples copy --name file.upload.json --output ./file.upload.json
fajiang-fashuyun examples copy --name file.upload-fs.json --output ./file.upload-fs.json
fajiang-fashuyun examples copy --name file.download.json --output ./file.download.json
fajiang-fashuyun examples copy --name file.download-fs.json --output ./file.download-fs.json
fajiang-fashuyun examples copy --name leave.create.json --output ./leave.create.json
fajiang-fashuyun examples copy --name leave.submit-approval.json --output ./leave.submit-approval.json
fajiang-fashuyun examples copy --name approval.start.json --output ./approval.start.json
fajiang-fashuyun examples copy --name workflow.leave-request.json --output ./workflow.leave-request.json
fajiang-fashuyun examples copy --name workflow.customer-intake.json --output ./workflow.customer-intake.json
fajiang-fashuyun examples copy --name workflow.project-intake.json --output ./workflow.project-intake.json
fajiang-fashuyun examples copy --name workflow.service-report-publish.json --output ./workflow.service-report-publish.json如果目标文件已经存在,命令会停止。确认覆盖时可追加 --force。
JSON 输入
新增和修改命令使用 JSON 文件传入复杂参数:
fajiang-fashuyun customer create --json ./customer.create.json
fajiang-fashuyun customer update --id CUSTOMER_ID --json ./customer.update.json
fajiang-fashuyun project create --json ./project.create.json
fajiang-fashuyun project update --id PROJECT_ID --json ./project.update.json
fajiang-fashuyun finance contract create --json ./contract.create.json
fajiang-fashuyun finance payment create --json ./payment.create.json
fajiang-fashuyun finance invoice create --json ./invoice.create.json
fajiang-fashuyun time start --json ./time.start.json
fajiang-fashuyun finance bill create --json ./bill.create.json
fajiang-fashuyun task create --json ./task.create.json
fajiang-fashuyun task-group create --json ./task-group.create.json
fajiang-fashuyun task-type create --json ./task-type.create.json
fajiang-fashuyun leave create --json ./leave.create.json
fajiang-fashuyun guide --target workflow.leave-request --json ./workflow.leave-request.json
fajiang-fashuyun leave submit-approval --json ./leave.submit-approval.json
fajiang-fashuyun guide --target command.approval.start --json ./approval.start.json
fajiang-fashuyun approval start --json ./approval.start.jsonpayment.create.json / payment.update.json 现在采用统一回款入参:
- 兼容旧回款字段:
contractid、contractName、paymentType - 也支持当前账单回款字段:
projectid、billid、currency、needConfirm、lastPayment - 当后端当前生效的是账单回款实现时,如果没有显式传
projectid/billid,后端会优先尝试从contractid推导项目和账单;没有可复用账单时会自动按前端默认行为新建账单
列表查询也可以用 JSON 文件覆盖或补充查询条件:
fajiang-fashuyun customer list --json ./customer.query.json
fajiang-fashuyun project list --json ./project.query.json
fajiang-fashuyun leave list --json ./leave.query.json
fajiang-fashuyun approval list --json ./approval.query.json文件上传下载示例 JSON 用于说明命令参数,不作为 --json 请求体直接传入。按示例字段拼成对应命令执行即可,例如:
fajiang-fashuyun file upload-fs --file ./report.xlsx --file-type protected
fajiang-fashuyun file download-fs --fsid FSID --file-name report.xlsx --output ./downloads/客户字段展示
客户输出会把部分状态值转换为文字,同时保留原始值:
- 查询类
guide --target command.xxx --json FILE在FILE尚未创建时可从空对象{}起步;执行完guide后,应继续使用其返回的默认范围和字段提示来组装真实查询,而不是忽略guide结果。 - 列表类真实查询如果输出较长 JSON,优先先落盘或用完整结构化方式读取,再解析
displayRecords;不要直接依据终端截断片段总结结果。 phase显示为文字,原始值放在phaseValue。- 客户/联系人列表会同时返回
displayRecords,用于对齐前端列表展示列;优先读取displayRecords[].fields、displayRecords[].fieldMap或displayRecords[].displayValueMap来展示系统字段和自定义字段,避免自行从records.list推断列结构。 displayRecords会同时参考metafield定义和当前用户的前端列表列配置(如company.list.config、pcompany.list.config、contact.list.config),因此不同列表页、不同用户看到的字段顺序和可见列可能不同,这属于预期行为。level显示为文字,原始值放在levelValue。chargeStatus显示为文字,原始值放在chargeStatusValue。paymentPeriod显示为2个月这类文字,原始值放在paymentPeriodValue。
客户阶段和客户级别会尽量与网页展示保持一致。客户新增、修改和 JSON 查询文件中也可以直接使用这些文字值。
删除确认
删除命令默认会二次确认:
fajiang-fashuyun customer delete --id CUSTOMER_ID明确确认删除时可使用:
fajiang-fashuyun customer delete --id CUSTOMER_ID --yes构建
npm run build 会将 src/ 下所有源码通过 esbuild 打包为单一文件,再用 javascript-obfuscator 进行混淆(控制流平坦化、字符串 base64 编码、死代码注入),输出到 dist/index.js。同时将 examples/ 下的 JSON 示例文件拷贝到 dist/examples/。
npm run buildnpm run check 用于校验源码和构建产物的语法:
npm run check发布与分发
- CLI npm 发版、skill 随 npm 包发布、以及本地 skill 安装/重装说明,统一见
docs/publishing.md。 - 交互式发版命令:
npm run publish:interactive - 不要把交互式发版脚本绑定到 npm 的
"publish"生命周期。
