JSPM

@rottenapple/codex-im-bot

0.2.2
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 62
  • Score
    100M100P100Q9886F
  • License MIT

Custom fork of codex-im: Feishu-first local bridge for Codex.

Package Exports

  • @rottenapple/codex-im-bot
  • @rottenapple/codex-im-bot/src/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@rottenapple/codex-im-bot) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

codex-im bot

@rottenapple/codex-im-bot 是基于 @vdug/codex-im 的自定义发布版本,用飞书长连接机器人把飞书消息转发到本机 Codex,再把 Codex 回复发回飞书。

飞书消息 -> 本机 codex app-server -> 飞书回复

Codex 仍在启动机器本地运行。飞书只负责消息、卡片、文件和审批交互。

该发布包携带生产依赖;其中飞书 SDK 的 axios 依赖范围已随包修正到 ^1.16.0,用于规避 npm audit 中 axios <1.15.0 的已知安全公告。

快速开始

前提:

  • Node.js >=18
  • 已安装并登录可用的 Codex CLI,终端里能运行 codex
  • 已有飞书自建应用,并启用长连接机器人

安装:

npm install -g @rottenapple/codex-im-bot

创建配置:

mkdir -p ~/.codex-im
$EDITOR ~/.codex-im/.env

最小 .env 示例:

FEISHU_APP_ID=cli_xxxxxxxxxxxxxxxxx
FEISHU_APP_SECRET=xxxxxxxxxxxxxxxxxxxxxxxx

CODEX_IM_DEFAULT_CODEX_MODEL=gpt-5.3-codex
CODEX_IM_DEFAULT_CODEX_EFFORT=medium
CODEX_IM_DEFAULT_CODEX_ACCESS_MODE=default

CODEX_IM_DEFAULT_WORKSPACE_ID=default
CODEX_IM_FEISHU_STREAMING_OUTPUT=true
CODEX_IM_FEISHU_STATUS_NOTIFICATIONS=true
CODEX_IM_FEISHU_STATUS_NOTIFICATION_STATES=approval,completed,failed,cancelled
CODEX_IM_DEBUG_RPC=false
CODEX_IM_WORKSPACE_ALLOWLIST=
CODEX_IM_CODEX_ENDPOINT=
CODEX_IM_SESSIONS_FILE=

启动机器人:

codex-im feishu-bot

飞书里发送:

/codex

然后在控制台卡片里绑定项目、选择线程、选择模型和发送消息。

终端命令

命令 用途
npm install -g @rottenapple/codex-im-bot 全局安装
npm update -g @rottenapple/codex-im-bot 更新到 npm 上的最新版本
npm list -g @rottenapple/codex-im-bot --depth=0 查看当前安装版本
npm uninstall -g @rottenapple/codex-im-bot 卸载
codex-im feishu-bot 启动飞书机器人
codex-im --help 查看入口用法

后台运行示例:

tmux new -s codex-im
codex-im feishu-bot

在 tmux 里按 Ctrl-b d 可离开会话;恢复:

tmux attach -t codex-im

配置文件

程序按以下顺序读取环境变量:

  1. 当前运行目录的 .env
  2. ~/.codex-im/.env
  3. 当前 shell 环境变量

默认 session 文件:

~/.codex-im/sessions.json

也可以用 CODEX_IM_SESSIONS_FILE 指定其它位置。

必填变量

变量 说明
FEISHU_APP_ID 飞书自建应用 App ID
FEISHU_APP_SECRET 飞书自建应用 App Secret
CODEX_IM_DEFAULT_CODEX_MODEL 新项目默认 Codex 模型;启动时会校验模型是否可用
CODEX_IM_DEFAULT_CODEX_EFFORT 新项目默认推理强度,例如 lowmediumhighxhigh
CODEX_IM_DEFAULT_CODEX_ACCESS_MODE 默认访问模式,取值为 defaultfull-access

可选变量

变量 默认值 说明
CODEX_IM_DEFAULT_WORKSPACE_ID default 当前飞书会话绑定信息的命名空间
CODEX_IM_FEISHU_STREAMING_OUTPUT true 是否流式更新飞书回复卡
CODEX_IM_FEISHU_STATUS_NOTIFICATIONS true 是否发送轻量状态通知
CODEX_IM_FEISHU_STATUS_NOTIFICATION_STATES approval,completed,failed,cancelled 哪些状态需要通知;可设为 all
CODEX_IM_WORKSPACE_ALLOWLIST 可绑定项目白名单,逗号分隔绝对路径;空表示不限制
CODEX_IM_CODEX_ENDPOINT 指定已有 Codex WebSocket RPC 地址;空表示自动启动本机 codex app-server
CODEX_IM_CODEX_COMMAND codex 自定义 Codex CLI 命令路径
CODEX_IM_SESSIONS_FILE ~/.codex-im/sessions.json session 持久化文件
CODEX_IM_DEBUG_RPC false 仅调试时开启;会输出完整 Codex RPC 载荷

飞书命令

推荐优先使用 /codex 控制台卡片,文字命令用于兼容和快速操作。

飞书命令 用途
/codex 打开统一控制台卡片
/codex help 查看命令帮助
/codex bind /绝对路径 绑定本机项目目录
/codex where 查看当前项目和线程
/codex workspace 查看当前飞书会话记录过的项目
/codex remove /绝对路径 移除项目绑定
/codex send <相对文件路径> 发送当前项目内的文件到飞书
/codex switch <threadId> 切换到已有 Codex 线程
/codex message 查看最近几轮消息摘要
/codex new 为当前项目创建新线程
/codex stop 停止当前运行中的任务
/codex model 查看当前模型和可选模型
/codex model update 刷新 Codex 可用模型列表
/codex model <modelId> 设置当前项目模型
/codex effort 查看当前推理强度
/codex effort <low|medium|high|xhigh> 设置推理强度
/codex approve 批准当前待审批操作
/codex approve session 本会话内批准同类命令
/codex approve workspace 当前项目内批准同类命令
/codex reject 拒绝当前待审批操作

普通消息不需要命令。项目和线程绑定好以后,直接在飞书里发需求即可。

推荐用法

  1. 在启动机器上运行 codex-im feishu-bot
  2. 在飞书会话发送 /codex
  3. 在卡片里选择或浏览 HOME 下的项目目录。
  4. 选择线程;没有合适线程时新建线程。
  5. 按项目设置模型、推理强度、协作模式和服务档位。
  6. 直接发送普通需求,Codex 回复会回到同一飞书会话。
  7. Codex 需要命令授权、文件授权、Plan 执行、工具提问或 MCP elicitation 时,按飞书卡片按钮处理。

文件处理:

  • /codex send <相对文件路径> 只能发送当前项目内文件。
  • 飞书里直接发给机器人的文件或图片会保存到当前项目的 .codex-im/inbox/,并把本地路径发送给当前 Codex 线程。
  • 发送本机文件前会校验真实路径,避免通过符号链接跳出当前项目根目录。

项目与线程模型

  • 一个飞书会话可以记住多个项目。
  • 每个项目有自己的当前 Codex 线程。
  • 切换项目或线程后,后续普通消息继续发到当前线程。
  • session 数据默认保存在 ~/.codex-im/sessions.json
  • 模型、推理强度、协作模式和服务档位按项目保存。

飞书应用配置

在飞书开放平台创建自建应用,并启用长连接机器人。

事件权限:

名称 标识
消息被 reaction im.message.reaction.created_v1
消息被取消 reaction im.message.reaction.deleted_v1
接收消息 im.message.receive_v1

回调配置:

名称 标识
卡片回传交互 card.action.trigger

应用权限:

名称 标识
获取卡片信息 cardkit:card:read
创建与更新卡片 cardkit:card:write
获取与更新用户基本信息 contact:user.base:readonly
读取用户发给机器人的单聊消息 im:message.p2p_msg:readonly
以应用身份发消息 im:message:send_as_bot
发送删除表情回复 im:message.reactions:write_only
获取与上传图片或文件资源 im:resource

安全注意

  • 不要把 ~/.codex-im/.env、飞书 App Secret、npm token 或 Codex 凭据发给别人。
  • 多人共用机器人时,建议配置 CODEX_IM_WORKSPACE_ALLOWLIST 限制可绑定目录。
  • 谨慎使用 CODEX_IM_DEFAULT_CODEX_ACCESS_MODE=full-access
  • CODEX_IM_DEBUG_RPC=false 是推荐默认值;开启后日志可能包含用户消息、代码片段、文件路径和工具结果。
  • session 文件会按 0600 写入;其中包含项目路径、线程 ID、模型和审批偏好,不包含飞书 App Secret。
  • 这个机器人会在启动机器本地执行 Codex,飞书用户触发的需求等同于远程操作这台机器上的项目。

开发运行

发布包使用:

codex-im feishu-bot

源码目录内开发:

npm install
npm run feishu-bot

语法检查:

npm run check

打包预览:

npm pack --dry-run

发布前审计:

npm audit --omit=dev

参考项目