npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@xiaohhhh1/canvas-agent

v0.4.67

Published

本地 Canvas Agent 用来连接网站和用户自己电脑上的 Codex。它还负责持久化 Flow C 脚本队列、分段调用本机 Codex、自动回传草案,以及在用户明确点击“一键下载本批全部”后把完成视频校验并保存到所选磁盘目录。

Readme

Infinite Canvas Agent

本地 Canvas Agent 用来连接网站和用户自己电脑上的 Codex。它还负责持久化 Flow C 脚本队列、分段调用本机 Codex、自动回传草案,以及在用户明确点击“一键下载本批全部”后把完成视频校验并保存到所选磁盘目录。

启动

npx -y @xiaohhhh1/canvas-agent

需要排查连接、线程、Codex app-server 或工具调用问题时,可开启 Debug 模式:

npx -y @xiaohhhh1/canvas-agent --debug

Debug 日志会以 [DEBUG][HH:mm:ss] 等传统格式输出到终端,并按启动日期保存到 ~/.infinite-canvas/logs/canvas-agent-YYYY-MM-DD.log。终端日志带级别颜色,文件日志为纯文本;日志包含 HTTP、SSE、线程、turn、Codex app-server 和工具调用事件,token 与图片 Data URL 会自动隐藏。

本仓库开发时也可以直接运行:

cd canvas-agent
npm install
npm run build
node dist/index.js

启动后会输出本机地址和 token:

Local URL: http://127.0.0.1:17371
Connect token: xxxxxx

在画布右上角点击 Agent,填入地址和 token 后连接。

Codex app 插件会读取启动输出里的 Local URL 和 Connect token,并直接打开画布网页地址;Canvas Agent 不负责生成画布打开 URL。

Canvas Agent 默认只监听 127.0.0.1。网页第一次带正确 token 连接后,Canvas Agent 会记录该网页 Origin;之后其他 Origin 不能复用这个本地 Agent,除非用户清理 ~/.infinite-canvas/canvas-agent.json 里的 origins

发布

canvas-agent 使用自己的 package.json 版本号,不跟仓库根目录 VERSION 绑定。推送到 main 后,GitHub Actions 会检查 npm 上是否已经存在当前包版本;不存在时才发布 @xiaohhhh1/canvas-agent

发布前需要在 GitHub 仓库 Secrets 中配置 NPM_TOKEN

Codex MCP

如果希望 Codex 终端能直接操作画布,需要先把 Canvas Agent 注册成 Codex MCP。

直接运行 npx -y @xiaohhhh1/canvas-agent 只启动本地 Agent 服务,不会安装 MCP,也不会增加 Codex 工具上下文。只有安装 Codex app 插件,或手动执行 codex mcp add 后,infinite-canvas 工具才会进入 Codex 上下文;由于工具较多,不使用时建议移除。

通过插件安装时移除插件:

codex plugin remove infinite-canvas

手动添加 MCP 时移除 MCP:

codex mcp remove infinite-canvas

Codex app 插件

仓库内提供了 Codex app 插件:plugins/infinite-canvas。在 Codex app 中添加本仓库的 marketplace 后,可以安装 Infinite Canvas 插件;插件会注册同一个 infinite-canvas MCP,并带上画布操作说明。

添加本地 marketplace 时建议使用仓库绝对路径,避免 Codex 从其他工作目录解析失败:

cd /path/to/infinite-canvas
codex plugin marketplace add "$(pwd)"
codex plugin add infinite-canvas@infinite-canvas-local

插件默认通过 npm 启动 MCP。MCP 启动时会自动检查并拉起常驻本机 HTTP/中继服务,因此客户安装插件后不需要另开终端:

npx -y @xiaohhhh1/canvas-agent mcp

使用时可以直接打开 https://canvas.xiaohhhh1.com/workflow-batches。网站通过已认证的 Agent Relay 与本机助手通信,不把本机目录、Codex 登录信息或短期任务令牌显示给客户。

Flow C 本机后台工作流

  1. 客户在网站添加一个或多个产品,按顺序上传每个产品 1–5 张图片并填写数量。
  2. 点击“交给本机 Codex 写全部脚本”。本机助手每次只处理 10 条并持久化进度,断网或重启后可继续;脚本完成会自动回传网站,不创建付费任务。
  3. 客户审阅脚本并确认费用后,中心 workflow-runner 才执行故事板和视频生成。
  4. 客户先选择一个本机目录,再对需要的批次点击“一键下载本批全部”。登录另一台电脑、选择文件夹或查看历史批次都不会触发下载。Agent 以最多四路并行写 .part,校验大小与 SHA-256 后原子改名;清单已记录且校验有效的批次序号不会重复下载。

本机持久状态默认保存在 ~/.infinite-canvas/workflow-state.json,权限设为仅当前用户可读写。这里包含短期能力令牌和本机路径,不应上传、提交到 Git 或发到聊天中。

Canvas Agent 启动后,给 Codex 添加 MCP:

codex mcp add infinite-canvas -- npx -y @xiaohhhh1/canvas-agent mcp

本仓库开发时可以改成,实际使用建议替换为本机绝对路径:

codex mcp add infinite-canvas -- node /path/to/infinite-canvas/canvas-agent/dist/index.js mcp

Canvas Agent 源码使用 TypeScript 编写,MCP 协议层使用官方 @modelcontextprotocol/sdk,工具入参使用 zod 描述。

如果希望终端里的 Codex 不被 MCP 审批卡住,可以在 ~/.codex/config.toml 里给这个 MCP 设置自动放行:

[mcp_servers.infinite-canvas]
command = "npx"
args = ["-y", "@xiaohhhh1/canvas-agent", "mcp"]
default_tools_approval_mode = "approve"

可用工具:

  • canvas_get_state
  • canvas_get_selection
  • canvas_export_snapshot
  • canvas_apply_ops
  • canvas_create_text_node
  • canvas_create_image_prompt_flow

canvas_apply_ops 示例:

{
  "ops": [
    {
      "type": "add_node",
      "nodeType": "text",
      "title": "标题",
      "position": { "x": 0, "y": 0 },
      "metadata": { "content": "文本内容" }
    }
  ]
}

侧边栏 Codex

本地面板会把提示词发送给 Canvas Agent。Canvas Agent 使用官方 @openai/codex CLI 的 codex app-server --stdio 启动并复用同一个 Codex thread,启动时会注入 infinite-canvas MCP 配置并自动放行 MCP 审批,真正执行画布修改前仍由网页侧边栏二次确认。

侧边栏会展示 Codex 返回的 thread.startedturn.starteditem.*turn.completed 等结构化事件;Canvas Agent 会合并短时间内的回复、思考摘要和命令输出增量,网页使用同一条消息持续更新,并把任务进度、计划、搜索、文件修改与工具操作整理为中文过程时间线。

侧边栏上传或粘贴的图片会先发到本机 Canvas Agent,再由 Canvas Agent 临时写入本机文件并作为 app-server localImage 输入传给 Codex;前端会提示附件体积,单次请求体限制为 30MB。

Claude Code

Claude Code Adapter 代码暂时保留,但当前网页侧边栏只开放 Codex。后续开放 Claude 入口时,Canvas Agent 会调用本机 claude -p --output-format stream-json 并把流式 JSON 事件转发到侧边栏。

如果希望 Claude Code 也能操作画布,需要给 Claude Code 添加同一个 MCP。建议用 user scope,避免 Canvas Agent 从不同目录启动时找不到配置:

claude mcp add --scope user --transport stdio infinite-canvas -- npx -y @xiaohhhh1/canvas-agent mcp

本仓库开发时可以改成:

claude mcp add --scope user --transport stdio infinite-canvas -- node /path/to/infinite-canvas/canvas-agent/dist/index.js mcp

Canvas Agent 调用 Claude Code 时会默认带上 --allowedTools mcp__infinite-canvas__*,画布写操作仍由网页侧边栏确认。