orionlaw
OrionLaw AI 法务工作台技能包:把合同审查、合同起草、法律咨询三条能力线封装成一套 CLI,交给 agent 调用,成品一律落地为 .docx。
本目录就是完整的安装与分发单元——SKILL.md 加 orionlaw.cjs 加 scripts/、references/ 与三个模块目录,整个目录复制到目标 agent 的 skills 目录即可生效。
能力线
| 模块 | 交付物 | 入口 |
| --- | --- | --- |
| 合同审查 | 风险条款清单(分级)、逐条修订建议、在源文件副本上替换生成的终稿 | contract-review/SKILL.md |
| 合同起草 | 要素清单、大纲、逐节正文、按场景生成的合同正文 | contract-drafting/SKILL.md |
| 法律咨询 | 问答结论(含依据与适用条件)、材料解析结果、多轮追问、会话历史 | legal-consult/SKILL.md |
所有任务都由一个脚本完成:node orionlaw.cjs <命令> [选项],命令在 skill 包根目录执行。agent 负责组装命令、读取 stdout 的结构化结果,再把结论讲给用户——不经过脚本的结论不写进交付物。
环境要求
- Node.js ≥ 18:用到内置
fetch、AbortSignal.timeout、TextDecoder与zlib(打包 .docx 时使用)。依赖声明写在meta.json的required_binaries,脚本一律裸调node,不探测也不兜底:WorkBuddy 由自带运行时提供 Node,Codex 与 Claude Code 用机器上已安装的 Node,环境缺 Node 时技能不可用。 - OrionLaw API Key:形如
al_sk_live_<key_id>_<secret>,在 OrionLaw 控制台自助签发。 - 网络:业务请求发往技能内置的平台基址
https://law.waveinsight.cn(唯一定义在scripts/lib/config.cjs的DEFAULT_BASE_URL)。版本检查读取同一域名下的分发清单dist/latest.json(不带 API Key、不传用户数据),可用ORIONLAW_DISABLE_UPDATE_CHECK=1关闭。 - 文档依赖:交付
.docx需要jszip(审查终稿)与docx(起草正文)。脚本在流程第一条命令(review.upload/draft.analyze,都是免费端点)就把依赖装到<ORIONLAW_WORK_DIR>/deps,装不上立刻失败(预检在最前,失败即停)。离线环境可设ORIONLAW_DEPS_DISABLE_INSTALL=1只检查不安装(需预装),或用--no-deps-check跳过预检(仅要结果、不要 .docx 时)。
安装
把 orionlaw/ 整个目录放到目标 agent 的 skills 目录,平台自带安装器(skillhub、插件市场)走同一约定:
| Agent | 用户级 | 项目级 |
| --- | --- | --- |
| Codex | $CODEX_HOME/skills/(默认 ~/.codex/skills/) | — |
| Claude Code | ~/.claude/skills/ | <项目>/.claude/skills/ |
| WorkBuddy | ~/.workbuddy/skills/ | <项目>/.workbuddy/skills/ |
经 skillhub 安装时由安装器额外写入 _skillhub_meta.json(slug / version / source / namespace / labels.requires_api_key / 图标)与 _meta.json(ownerId / publishedAt),这两类属发布方与安装器的信息,本地不自造。
快速开始
cd <skills>/orionlaw
# 1. 写入凭证(也支持 --key @file 与 --key - 从 stdin 读,避免留在命令历史)
node orionlaw.cjs auth.set --key 'al_sk_live_…'
# 2. 复核:脱敏 Key、Key 来源、内置基址,不联网
node orionlaw.cjs auth.check
# 3. 自检:换票 + 身份与额度 + 本地文档依赖状态
node orionlaw.cjs doctor
doctor 默认只输出非 PII 的账号视图(角色 / 状态 / 通道 / 方案 / 额度 / scopes),加 --full 才给原始 me(含手机号等,排错用,别贴进对话)。
跑通合同审查的一条完整链路:
node orionlaw.cjs review.upload --input ./合同.pdf # → fileId
node orionlaw.cjs review.parse # 轮询解析结果(脚本内 2s/240s)
node orionlaw.cjs review.prepare --source <原始文件地址> --name 合同.pdf # 建档 → reviewId + 主体清单
node orionlaw.cjs review.start --main-body <mainBodyId> # 计费;条款清单缺省自动拉全选
node orionlaw.cjs review.watch # 过程(默认拼完返回全文)
node orionlaw.cjs review.result # 风险清单与修订建议(脚本内轮询到完成)
node orionlaw.cjs doc.review --source ./合同.docx # 本地生成终稿 .docx
上一步的 fileId / reviewId / 主体标识由脚本写在 <ORIONLAW_WORK_DIR>/cache/state.json,后续命令缺省自动沿用,--task、--review 一般可以省略。doc.review 把 .docx 路径返回给用户,它就是成品。
命令一览
命令与旗标的代码侧事实源是 scripts/lib/commands/(按业务线一个文件,汇总在 scripts/lib/endpoints.cjs),机器可读清单用 node orionlaw.cjs --list(46 条,含 charge / stream 标记),完整契约见 references/cli.md。
| 分组 | 命令 | 计费 |
| --- | --- | --- |
| 通用 | doctor、auth.set / auth.check / auth.clear、update.check、version、--help、--list | |
| 合同审查 | review.upload → review.parse → review.prepare → review.start → review.watch / review.result、review.clauses / review.clauses.update、review.revise / review.revise.retry、review.prompt、review.rules.*、review.list / review.delete、review.export,本地 doc.review 出终稿 | review.start |
| 合同起草 | draft.analyze、draft.info / draft.info.edit、draft.outline / draft.outline.edit、draft.generate、draft.step、draft.export、draft.records / draft.records.delete | draft.generate |
| 法律咨询 | consult.ask(含续轮)、consult.answer.from、consult.cite、consult.parse / consult.parse.result、consult.history / consult.query、consult.remove | consult.ask 首轮 |
| 文档产物(本地) | doc.review、doc.draft、doc.render | |
通用选项:--input <file|-> 传长文本或上传文件、--json '<json|@file>' 直接给请求体、--out <file> 指定产物落地、--page / --size / --keyword 列表查询、--query、--header key=value、--timeout <ms>。
计费命令只有三处:review.start、draft.generate、consult.ask(仅新会话首轮——不带 --session / --parent 就是首轮,带上上一轮标识的续轮不扣)。触发计费前先告知用户,结束后用返回的 quota 快照报剩余额度。
输出约定
stdout 只放结构化结果,诊断信息走 stderr。非流式命令输出单行 JSON:
{ "ok": true, "command": "review.result", "clientRequestId": "req_…", "quota": null, "data": {} }
{ "ok": false, "command": "review.start", "error": { "code": 40301, "message": "…", "hint": "…" } }
计费命令的 quota 来自响应头,字段为 dailyRemaining / weeklyRemaining / boostBalance,-1 表示不限。
发现技能有新版本时,成功信封会多一个顶层 update 字段(currentVersion / latestVersion / changelog / coordinate / downloadUrl / manifestUrl / checkedAt),stderr 同时给一行 [update] 提示;更新流程与替换后的边界见 references/conventions.md §8.1。doctor 默认真查一次版本、失败回退缓存,其他命令按节流检查。
流式命令(review.watch、draft.generate、consult.ask)默认在脚本内读完整条流再返回,形态与普通命令一致,data 里多出 text(交付文本)、answer / thinking(正文与思考分开)、session(roundId / chatId / aiRequestId)、end(是否收到结束帧)、final(调试用,可能为空)与 bytes / chunks;加 --stream 才改成逐条 NDJSON 事件(progress / delta / result / error,delta 带 stream 区分正文与思考)。续轮时由调用方显式回传 --session / --parent。
轮询类命令(review.parse、review.result、draft.step、consult.parse.result)在脚本内按各自间隔与总超时取数,上游返回 code = 50001 表示「处理中」,会继续轮询而不是报错。
审查、起草与会话的本地快照由脚本在命令成功后自动写入(POST /api/v1/alpha/{contract-review,draft,chat}/history),失败静默,不影响命令结果。
法务咨询的回答正文里带 [law:1] 这类角标时,脚本会在流结束后自动取一次引用来源,把角标就地替换成来源标题(有链接的走外链),连同固定免责声明一起给到 data.delivery;结构化清单见 data.citations,兜底明细见 data.warnings(不进入交付文本)。不需要出处用 --no-cite,事后重排用 consult.cite。
退出码:
| 码 | 含义 | Agent 动作 |
| --- | --- | --- |
| 0 | 成功 | 解读 data 并组织输出 |
| 2 | 参数、凭证或基址问题 | 向用户索取缺失信息;凭证缺失时提示 node orionlaw.cjs auth.set --key <Key> |
| 3 | 平台业务拒绝 | 原样回报 code 与 message,按 hint 引导 |
| 4 | 网络与超时 | 非计费命令自动退避重试(最多 3 次);计费命令不自动重发,先 doctor 确认额度 |
| 5 | 后端任务失败 | 回报原因并附任务标识 |
凭证与安全
- API Key 按优先级取:环境变量
ORIONLAW_API_KEY→ 凭证文件;写入入口只有auth.set。 - 平台基址是技能内置常量,使用者只需提供 Key。
- 换票:
POST /api/v1/open/token(带X-API-Key)换 15 分钟短票,业务端点带Authorization: Bearer <短票>;短票缓存在<ORIONLAW_WORK_DIR>/cache/token.json供进程间复用,过期或 401 时续换一次并重放。 - Key 与短票只出现在请求头、凭证文件和短票缓存里;日志与 stdout 只出现脱敏值(
al_sk_live_9f3c1a7d2b40_…4c),凭证文件按 POSIX0600创建。 - 合同正文与咨询内容属用户隐私,只在当轮对话内使用;群聊场景只给标题、摘要与结论。
细节见 references/auth.md。
工作目录
| 变量 | 缺省 | 用途 |
| --- | --- | --- |
| ORIONLAW_HOME | ~/.orionlaw | 凭证目录(credentials.json) |
| ORIONLAW_WORK_DIR | ~/.orionlaw(同 ORIONLAW_HOME) | 产物与本地状态 |
ORIONLAW_WORK_DIR 下固定三类子目录,外加按需生成的依赖目录:
| 目录 | 内容 |
| --- | --- |
| uploads/ | 预留目录;上传的原件由平台侧保存,本地只在 cache/state.json 记文件名与大小 |
| outputs/ | 导出的审查稿、起草文稿、解析报告;默认命名与同名处理见 references/cli.md |
| cache/ | 短票与本地状态(token.json、state.json、update-check.json) |
| deps/ | doc.* 懒加载的 docx / jszip |
文档索引
| 文件 | 内容 |
| --- | --- |
| SKILL.md | 模块路由、强制规则、凭证检查(运行时 agent 的入口) |
| references/cli.md | 调用契约、完整命令清单、输出格式、退出码 |
| references/auth.md | 凭证形态、换票流程、失败分支、安全要求 |
| references/conventions.md | 响应信封、路径前缀、请求/响应头、流式协议、计费与错误码 |
| references/contract-review.api.md | 合同审查接口的路径与字段 |
| references/contract-drafting.api.md | 合同起草接口的路径与字段 |
| references/legal-consult.api.md | 法律咨询接口的路径与字段 |
| agents/openai.yaml | Codex 界面展示元数据 |
| meta.json | 版本号(config.cjs 从这里读)与运行依赖声明 |
开发和验证说明(目录结构、改动落点、平台接口事实、多 agent 兼容约定、待办)在仓库根的 ../agent.md,它随包分发时留在仓库里、不进入技能包,因此包内文档一律使用包内相对路径。
版本与许可
版本以 meta.json 为准;许可 MIT。
当前状态:命令表与请求字段已按后端实现逐条核对,路径、请求体、轮询与快照语义对齐;需要精确控制请求体时仍可用 --json(与固定字段、旗标字段按键合并)。
微信扫一扫