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

@bubuzi/better-gpt

v0.1.0

Published

Cross-platform local MCP gateway with per-workspace tunnels

Readme

better-gpt

通过 TUI / CLI 管理本地 MCP 服务、工作区和独立隧道绑定。 面向个人多台电脑,目标平台为 Windows、macOS、Linux。没有桌面客户端或浏览器界面。

npm 安装与发布

发布到 npm 后可直接启动,无需克隆仓库、安装 TypeScript 或单独发布内部工作区包:

npx @bubuzi/better-gpt@beta
npm install -g @bubuzi/better-gpt@beta
better-gpt
better-gpt --help

需要 Node.js 22.12.0 或以上及 npm 10.9.0 或以上。当前版本为 0.1.0,使用 MIT 许可证。 最低版本由 Commander 15 的 Node.js 要求决定;Node 22 自带的 npm 10.9 可直接安装,开发机使用 Node 24 不影响运行兼容范围。 已支持的范围和缺口见下文,尤其是 ChatGPT 隧道目前只保存配置,连接运行器尚未实现。

发布者在仓库根目录执行:

npm ci
npm run typecheck
npm pack --dry-run
npm publish --access public

prepack 会编译并生成独立 CLI、后台、SSH 代理适配器和搜索 worker;第三方运行依赖由 npm 安装。 发布文件使用白名单,不包含个人配置、凭据、日志、验证目录或本机二进制。迁移所需 Dart 源码和锁文件随包分发,首次迁移仍需 Dart 3;兼容程序在用户数据目录的 cache/legacy-hive 中构建,安装目录不必可写。 发布流程和本地 tarball 验证步骤见 npm 发布说明。

当前交付范围

这是可运行的迁移版本,Codexter的14个基础工具已经接入;完整产品仍有待迁移项,见功能清单。

  • 全屏 Ink 工作台:左侧工作区,右侧以单行调用列表为主;Enter 按需打开详情,Esc/Enter 返回列表。

  • 工作区 MCP 地址复制:c 复制公网 URL、本地 URL 或 OpenAI Tunnel ID;系统剪贴板写入有成功/失败提示。

  • 错误调用记录:未知工具、错误参数、执行异常、非零退出和后台进程失败均有状态与详情,e 仅看异常。

  • 配置面板:新增/选择工作区、保存代理配置,选择来源、预览并确认迁移。

  • CLI:初始化、状态查询、工作区创建、隧道配置保存、绑定和路由预览。

  • 独立本地 MCP 服务:/{workspace-uuid}/mcp,提供原版14个基础工具及额外的workspace_info。

  • 命令调用和进程输出使用真实数据;进程面板显示会话、命令、耗时、退出码,可确认结束进程。

  • 配置版本校验、原子写入、并发写锁、重复标识与无效绑定校验。

  • Cloudflare / OpenAI / frp / SSH / 已有外部隧道的数据模型可并存。

  • Cloudflare 运行器:使用已迁移的程序与加密凭据、独立工作区入口、就绪探测、重连状态、连接器日志和停止清理。

  • 独立后台服务:TUI 连接后台控制入口,q 只退出界面;重新打开恢复状态和后台内存日志。CLI 可启动、查看、停止后台。

  • Codexter 本机数据导入:官方 Hive 内存解码、原 UUID/字段保留、技能文件复制、凭据加密、重复导入去重和受保护回退。

  • 文件工具:read/read_image/apply_patch/ls/grep/glob/code_explore;命令工具exec_command/write_stdin;能力工具skills_list/skill_read/mcp_tools/mcp_call;回合summary及原摘要资源。

  • STDIO/HTTP下游MCP连接、重连、能力选择、错误记录;Windows可选Computer Use helper自动发现及明确应用授权。

  • 自建frp/SSH运行器、官方frpc发行校验、认证代理适配;TUI/CLI自建向导、专用入口及只读诊断,见自建说明。

  • SSH简化向导:先授权再发现.ssh别名/候选密钥,自动继承端口与用户;支持拒绝扫描后手动填写。名称和端口等收进高级设置,域名默认兼作主机地址;TUI/CLI共用默认值。

尚未实现:OpenAI运行器、全部配置编辑界面、日志持久化、完整OAuth交互和系统开机自启动安装。 CF 和 ChatGPT 的配置入口在项目菜单“绑定 / 更换隧道”。CF 当前引导导入已有域名和凭据文件,尚未提供浏览器登录、创建隧道及自动配置 DNS 的完整流程;ChatGPT 引导保存 Tunnel ID 和 Runtime Key,尚不能建立连接。 已配置的隧道不会被显示为已连接。命令子进程会继承对应代理环境;这不代表所有外部程序都会使用代理。

开发环境

2026-10-13 从官方 npm registry 核对并锁定:

| 技术 | 版本 | 用途 | | --- | --- | --- | | Node.js | 24.21.0 开发环境;运行最低 22.12.0 | Windows native 开发;其他系统使用本机 Node | | TypeScript | 7.0.2 | 严格类型检查与编译 | | Ink | 8.0.0 | 终端渲染 | | React | 19.3.0 | Ink 的组件模型,无浏览器依赖 | | Ink UI | 2.0.0 | 终端选择与文本输入 | | MCP Server SDK | 2.3.1 | 官方 MCP 实现 | | MCP Node adapter | 2.1.1 | Node HTTP 适配 | | Zod | 4.6.7 | 配置与输入校验 | | Commander | 15.0.0 | CLI 命令 |

npm 开发环境为本机 11.19.0,发布包支持 npm 10.9.0 或以上;锁文件提交到仓库。使用当前 Node LTS,而不为了追版本切换全局运行时。 独立缓存位于 work/npm-cache,不修改用户全局 npm 缓存或 registry。

cd F:\AI_PROJECT\better-gpt
npm ci
npm run build
npm start

npm start 先构建当前源码,再在当前终端打开全屏 TUI,避免运行过期界面;退出后恢复原终端画面。 TUI 默认连接独立后台:按 s 启动 MCP 与隧道,按 q 或 Ctrl+C 只退出管理界面,后台继续工作。 再次打开会连接同一后台,恢复工作区状态、调用记录和运行进程。明确停止服务才会关闭 MCP、隧道及其受管命令。 这与前台 serve 不同:serve 的 Ctrl+C 会结束该前台实例。

| 按键 | 操作 | | --- | --- | | Tab / Shift+Tab | 在工作区和记录列表间切换;详情中返回列表 | | ↑↓ / Enter | 选择工作区或记录,进入详情 | | Esc / Enter(详情中) | 关闭详情并返回原列表位置 | | c | 复制聚焦工作区的 MCP URL / OpenAI Tunnel ID | | 1 / 2 | 实时日志 / 运行终端 | | / / e | 侧栏搜索工作区;右侧筛选调用 / 仅看异常 | | PgUp / PgDn、Home / End | 工作区和列表翻页、跳至首尾;详情滚动 | | f | 恢复跟随新调用或进程输出 | | x | 确认结束选中的运行进程 | | m | 工作区、Skills、MCP、隧道、迁移、设置之间切换 | | n / r | 新建工作区 / 刷新配置并尝试重连后台 | | s | 联动启停后台 MCP 和已绑定隧道;管理后台保持待命 | | p | 聚焦项目菜单:绑定/换绑、解绑、启停、复制地址、删除管理记录 | | d | 对照客户端和后台加载的配置文件、工作区名称、UUID与项目绝对路径;绑定页也可按d | | u | 按Cloudflare、自定义、ChatGPT或全部范围启停公网入口 | | t | 一键启动 / 恢复全部已启用工作区的公网入口,包含已单独暂停的项目 | | ? / q | 查看帮助 / 退出管理界面,服务继续运行 |

80×24 与 120×36 原生 Windows 终端已验证。72 列以下折叠侧栏为工作区选择视图;最低 60×18。 较矮终端使用单行工作区列表,名称旁显示渠道和连接状态颜色;较高终端显示两行及状态文字。绿色已连接、黄色连接中/重连/外部未验证、红色失败、灰色暂停/未启动/未绑定;左下角汇总所有隧道。 侧栏显示可见范围,支持搜索与首尾跳转。新建/导入后自动选中新工作区;名称未显示时可在侧栏按/搜索,或按End到末尾。 单项目公网开关与本地MCP独立,暂停不会停止本地工具。共享同一隧道的其他工作区继续运行;最后一个项目暂停才停止该连接器。暂停状态保存在配置中;全部启动会恢复已暂停项目。 新建项目后直接选择:CF、ChatGPT、已有自建隧道名称、新建SSH/frp。CF/ChatGPT仅首次填写共享配置;已有自建隧道直接复用。ChatGPT的tunnel_…是隧道配置编号,与每项目独立随机生成的UUID不同。 解绑和删除项目都保留共享隧道配置。删除需在项目菜单确认,只移除管理记录并停止该项目的受管进程,不删除磁盘文件。运行中换绑立即撤销旧入口并接入新入口,同一配置的其他项目不受影响。 终端面板沿用 Flutter 的受管进程输出模式,不是用于 vim 等全屏程序的 PTY 模拟器。 TUI 的日志来自所连接的后台。退出/重开 TUI 不清空日志;后台退出后,其内存日志清空。 不会读取旧 Flutter 或另一独立 serve 前台实例的内存日志;日志持久化与导出仍未实现。 详情固定所选记录;收到新调用时,正在查看的详情与滚动位置不切换。列表支持异常筛选与分页。 Windows 使用原生系统剪贴板,macOS 使用 pbcopy,Linux 需要图形会话以及 wl-copy、xclip 或 xsel。 仅本地工作区需先启动服务,复制实际监听端口的地址;公网绑定复制已配置的 URL,并不代表隧道连通性已验证。 本地开发服务默认端口 18921;可用 BETTER_GPT_PORT 指定 TUI 端口,0 表示分配空闲端口。

也可在本项目目录使用 npx --no-install better-gpt,无需全局安装。 非交互式终端必须使用明确的 CLI 子命令;不会尝试进入 TUI。

npm run cli -- --help
npm run cli -- init
npm run cli -- workspace add --name "项目 A" --path "F:\MY_PROJECT"
npm run cli -- status
npm run cli -- service start
npm run cli -- service status
npm run cli -- service stop
npm run cli -- serve --port 18921
npm run cli -- serve --port 18921 --local-only
npm run cli -- migration-inspect
npm run typecheck

开发入口 npm run dev 会编译共享包,再通过 tsx 运行 CLI。它不会自动重启服务进程。

service start 启动独立后台并联动已绑定隧道,命令返回后服务继续运行;可加 --local-only、--profile、--port。 service status 查询实际后台状态;service stop 停止 MCP、隧道和受管进程,并退出后台进程。 本地控制使用 Windows named pipe / Unix socket,不开放公网管理 URL;多个 TUI 连接同一个数据目录的后台。 当前实现为独立后台进程,不安装 Windows Service、systemd unit、launchd 或开机自启动项。 更新源码后需在适当时机重启后台进程,已运行的 Node 不会自动加载新的构建文件。

Windows 停止连接器时清理本次进程树并设有界等待,原生连接器显式加入 Job。 启动会核对连接器归属;本应用所有者已退出的 Windows 孤儿可安全恢复,活跃其他实例和外部连接器只报告冲突。 若在后台初始化中途强杀导致 runtime/startup.lock 遗留,会明确报告锁路径;确认记录的进程已退出后处理,不自动覆盖未知所有者的锁。

数据目录

  • Windows:%APPDATA%/better-gpt
  • macOS:~/Library/Application Support/better-gpt
  • Linux:$XDG_DATA_HOME/better-gpt,未配置时为 ~/.local/share/better-gpt
  • 覆盖:BETTER_GPT_DATA_DIR,或 CLI 全局选项 --data-dir。

新项目不写入 codexter / codexter-dev 数据目录。 配置加载诊断:运行 npm run cli -- diagnostics,或在TUI按d。输出包含客户端/后台PID、入口、工作目录、配置名义路径、实际物理路径、指纹,以及全部工作区名称、UUID、项目绝对路径和绑定。--json可输出结构化数据。 加载与绑定日志自动写入数据目录的runtime/diagnostics/client-<PID>.jsonl及daemon-<PID>.jsonl;绑定请求使用同一requestId关联两侧记录。日志只记录指定元数据,不记录密钥、代理密码或Agent指令。

Windows打包应用可能将AppData文件重定向到%LOCALAPPDATA%/Packages/<package>/LocalCache/Roaming。同一个名义配置路径可能对应不同物理文件;应用使用实际写入的存储标识生成后台控制通道,并在绑定前核对物理配置路径,避免普通终端误连容器内的后台。升级后需退出旧TUI再运行npm start;系统凭据和两份既有配置继续保留,不自动合并。 migration-inspect 只读取已知文件的存在性和大小,不解析 Hive、不读取系统密钥、不启动迁移。

导入旧版数据

在 TUI 选择“迁移” → 旧数据目录 → 查看预览 → “确认备份并导入”。支持上下键、Enter 和 Esc。 完成后可查看导入的工作区;重复导入同一快照不会创建重复记录。 Windows 本机迁移已实测,macOS 凭据读取路径尚未实机验证;Linux 来源的系统凭据迁移暂不支持。

首次迁移需要 Dart 3 来构建一次性的 Hive 2.2.3 兼容工具,TUI 会自动准备;也可手动运行:

npm run migration:build
npm run cli -- migration preview --source "$env:APPDATA\codexter"
npm run cli -- migration import --source "$env:APPDATA\codexter" --fingerprint <预览中的fingerprint>
npm run cli -- migration rollback <最近一次迁移ID>

常规 TUI/CLI 不依赖 Flutter。兼容工具只从管道中的内存快照读取 Hive,不打开旧数据库路径或执行恢复。 新配置使用 schemaVersion 2,可读取版本 1。旧全局字段和完整原始文件进入加密归档;密钥由系统凭据库保护。 迁移后用户修改了配置时,自动回退会拒绝覆盖这些修改。 导入不会启动或接管旧隧道。数据导入完成不等于原版工具和下游 MCP 运行功能已全部迁移。

多隧道配置

在 examples/ 中提供不含真实凭据的配置示例。导入时可以省略 id,系统自动生成。 credentialRef / runtimeKeyRef 是凭据引用,不是令牌内容。迁移生成的 vault: 引用使用系统密钥库和 AES-GCM 保存;示例中的引用仅为占位。

npm run cli -- tunnel add --file examples/cloudflare.profile.json
npm run cli -- tunnel add --file examples/openai.profile.json
npm run cli -- tunnel add --file examples/frp.profile.json
npm run cli -- workspace bind --workspace <工作区UUID> --profile <隧道配置UUID>
npm run cli -- workspace bind --workspace <工作区UUID> --profile <OpenAI配置UUID> --tunnel-id <TunnelID>
npm run cli -- tunnel plan

tunnel plan 只显示路由计划,不会启动 cloudflared、tunnel-client 或 frpc。

按范围控制后台公网入口(不停止本地MCP):

better-gpt tunnel start --all
better-gpt tunnel start --provider cloudflare
better-gpt tunnel start --provider custom
better-gpt tunnel stop --workspace <UUID>
better-gpt tunnel start --workspace <UUID>
better-gpt tunnel stop --profile <UUID>

custom包括frp/SSH/external,也支持分别指定这三个提供方。按渠道启动保留其他渠道的连接。OpenAI运行器尚未实现,配置菜单中的ChatGPT操作会如实报告运行器缺失。

导入后按 s 或运行 serve,默认联动启动已启用、已绑定工作区的 Cloudflare 隧道。 运行凭据从新数据目录的加密库读取,通过子进程环境传递,不写入参数或生成的 YAML。 程序依据实际监听端口生成新运行配置,保留原域名与 /{uuid}/mcp,不重建 Tunnel、不修改 DNS。 各 Cloudflare 配置使用独立回环入口,入口逐次检查工作区绑定;同一个 Tunnel ID 不能配置为两个 profile。 --local-only 明确只启动本地服务,--profile <UUID> 只启动该配置及其工作区。

旧 Codexter 的相同隧道仍在运行时,新程序会拒绝重复连接并显示原因;先在旧程序中停止服务,再按 t 重试。 这是为了避免 Cloudflare 将请求分配到新旧两个功能不同的后端。新程序不会杀掉旧进程。 在 m → 隧道 查看连接器日志和错误;“已连接”表示 cloudflared 就绪端点确认存在边缘连接,不等于已完成域名 DNS/Access 与所有旧工具的验收。 OpenAI配置目前会明确报告运行器尚未接入;external配置启动专用回环入口,连接器由用户管理,公网身份可用tunnel doctor检查。

代理环境会传递给 cloudflared,但其边缘连接使用原生 QUIC/HTTP2 网络,不能把 HTTP/SOCKS 环境变量当成已代理边缘流量。 该限制在隧道日志中显示;下载与下游HTTP走统一代理适配,frp仅接受HTTP/SOCKS5代理,SSH使用CONNECT/SOCKS适配。 同一Cloudflare、SSH、frp或外部配置可绑定多个工作区。新ChatGPT配置将共享Tunnel ID存放在profile,项目绑定不再填写独立ID;旧版项目ID字段继续保留兼容。ChatGPT运行器和共享入口的项目路由尚未接入,不把配置完成视为连接可用。 公网入口使用 https://域名/{uuid}/mcp,OpenAI 对外使用 Tunnel ID,本地路径仍为 /{uuid}/mcp。

本地serve --profile <UUID>可以验证工作区允许名单,只监听127.0.0.1。各受管隧道使用独立入口,并校验绑定及Host/Origin;公网MCP独立身份认证仍待实现,入口范围限制不能替代鉴权。

下载代理

安装依赖可以继承现有代理环境。需要手动设置时,例如:

$env:HTTP_PROXY = 'http://127.0.0.1:7890'
$env:HTTPS_PROXY = 'http://127.0.0.1:7890'
npm ci

不要把账号、密码或 token 写入仓库 .npmrc。 应用代理模型区分 environment/direct/custom,接受 HTTP、HTTPS、SOCKS4/4a/5/5h 地址。 新命令进程已注入对应代理环境及本机绕过规则;认证信息通过加密凭据引用解析。下载器与下游HTTP MCP支持统一代理,环境模式遵守目标协议及NO_PROXY。 外部命令是否遵守代理变量取决于其自身实现;cloudflared原生边缘连接不保证走这些代理。

代码结构

apps/
  cli/                 命令解析、交互入口、前台服务
  tui/                 Ink 终端界面
packages/
  contracts/           版本化配置、校验、工作区地址模型
  core/                配置存储、工作区、MCP 入口、路由计划、数据迁移、凭据库
tools/
  legacy-hive/         一次性只读 Hive 兼容工具
docs/
  architecture.md      已确认设计与边界
  migration.md         旧配置无损迁移契约
  roadmap.md           功能迁移清单
  verification.md      本次实际验证结果
examples/              不含凭据的隧道配置示例

不新增自动化测试作为本次初始化内容;验证采用类型检查、构建、实际 CLI/TUI 操作和 HTTP 调用。