Files
command-code-openai-bridge/AGENTS.md
T
2026-08-12 16:23:52 +08:00

7.6 KiB
Raw Blame History

Command Code OpenAI Bridge

Command Code OpenAI Bridge 是一个仅在本机运行的 OpenAI 兼容服务。它把 Chat Completions/Responses 文本、受限图片与纯文本文件输入及 function calling 决策转交给 Command Code CLI 执行。

默认 API 地址:http://127.0.0.1:18000/v1

工作方式

每个请求都会启动一个独立的 Command Code headless agent

  1. 接收并校验 OpenAI Chat Completions 请求。
  2. 保留消息的角色、顺序和完整文本,将会话历史通过 stdin 传给 Command Code;附件经校验后写入请求专用临时文件并以 @path 交给真实 read_file
  3. 在启动服务的终端中显示模型状态、turn、工具调用、工具结果、stderr、最终回答和耗时。
  4. 从 Command Code 的 NDJSON 结构化结果中提取 finalText
  5. 把最终回复、外部 function tool calls 和可用的 token usage 返回给 API 客户端。

服务不保存跨请求会话。每次调用都使用 --no-session,对话历史由客户端维护并在请求中完整提供。

主要能力

  • 提供 GET /healthGET /v1/modelsPOST /v1/chat/completions
  • 支持字符串形式的 content 和 OpenAI 文本 part 数组。
  • Chat 支持图片 data URLResponses 还支持 UTF-8 input_file.file_data。远程 URL、本地路径、PDF 和其他二进制拒绝。
  • Chat Completions 支持标准 function tools、工具选择、assistant tool calls 和 tool 结果消息;工具由客户端执行。
  • 接受 stream: true;普通 Chat 实时转发文本 deltafunction calling 在完整决策校验后发送工具调用 SSE。
  • 支持中文、Unicode、Markdown、代码块和较长文本。
  • 模型名称通过 YAML 配置映射到实际 Command Code 模型。
  • 请求内容通过 stdin 传输,不受命令行参数长度限制。
  • 可配置同时运行的 Command Code 请求数;其余请求进入共享的有限 FIFO 队列,队列已满时返回 HTTP 429。
  • 客户端断开、请求取消、总超时和 Ctrl+C 会终止当前子进程组。
  • 单次 Command Code 失败后,HTTP 服务可继续处理后续请求。
  • Authorization 请求头会被忽略,服务强制绑定 127.0.0.1

普通 Chat SSE 实时转发 Command Code 文本 deltafunction calling 会等待完整决策通过 JSON 与参数 Schema 校验后发送 tool_calls。图片只接受 PNG/JPEG/GIF/WebP base64 data URL,并要求模型映射显式声明 supports_image_input: true。文件只接受 Responses UTF-8 file_data。音频、视频、PDF/Office、任意二进制、Computer Use、托管工具和服务端 Chat 会话均未实现。

技术实现

  • Node.js 22+
  • TypeScript
  • Fastify
  • Zod
  • YAML
  • Command Code CLI 官方 headless 模式:-p --output-format json

项目使用普通子进程读取 Command Code 的 NDJSON 事件。终端输出由本项目渲染,可显示主要运行事件,但不包含 Command Code 原始 Ink TUI、动画和键盘交互。启用 dangerously_skip_permissions 时会向 CLI 传入 --yolo,只应在可信工作目录中使用。

项目结构

src/
├── index.ts         # 程序入口、服务启动和信号处理
├── server.ts        # HTTP 路由、共享并发协调和错误处理
├── openai.ts        # 请求校验、消息转换和响应生成
├── attachments.ts   # data URL/base64 校验、临时文件和清理
├── command-code.ts  # CLI 检查、子进程管理和最终结果提取
├── tool-calling.ts  # 外部 function calling 决策解析与参数校验
├── renderer.ts      # Command Code 事件的终端显示
└── config.ts        # YAML 配置读取与校验

scripts/
├── install.sh       # 安装依赖并构建项目
└── start.sh         # 启动服务

examples/
├── python_client.py # OpenAI Python SDK 示例
├── node_client.mjs  # OpenAI Node.js SDK 示例
└── opencode.json    # OpenCode provider 与模型模态示例

快速开始

./scripts/install.sh
command-code login
command-code status --json
./scripts/start.sh

默认配置位于 config.yaml,配置示例位于 config.example.yaml。常用配置包括监听端口、Command Code 可执行文件、工作目录、总超时、请求体上限、等待队列上限、最大 turn 数、权限模式和模型映射。

调用示例:

curl http://127.0.0.1:18000/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "command-default",
    "messages": [{"role": "user", "content": "用一句话解释递归。"}],
    "stream": false
  }'

更完整的安装、配置、接口说明、运行行为、检查结果和已知限制见 README.md

GitNexus — Code Intelligence

This project is indexed by GitNexus as command-code-openai-bridge (461 symbols, 1291 relationships, 29 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely.

Index stale? Run node .gitnexus/run.cjs analyze from the project root — it auto-selects an available runner. No .gitnexus/run.cjs yet? npx gitnexus analyze (npm 11 crash → npm i -g gitnexus; #1939).

Always Do

  • MUST run impact analysis before editing any symbol. Before modifying a function, class, or method, run impact({target: "symbolName", direction: "upstream"}) and report the blast radius (direct callers, affected processes, risk level) to the user.
  • MUST run detect_changes() before committing to verify your changes only affect expected symbols and execution flows. For regression review, compare against the default branch: detect_changes({scope: "compare", base_ref: "main"}).
  • MUST warn the user if impact analysis returns HIGH or CRITICAL risk before proceeding with edits.
  • When exploring unfamiliar code, use query({search_query: "concept"}) to find execution flows instead of grepping. It returns process-grouped results ranked by relevance.
  • When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use context({name: "symbolName"}).
  • For security review, explain({target: "fileOrSymbol"}) lists taint findings (source→sink flows; needs analyze --pdg).

Never Do

  • NEVER edit a function, class, or method without first running impact on it.
  • NEVER ignore HIGH or CRITICAL risk warnings from impact analysis.
  • NEVER rename symbols with find-and-replace — use rename which understands the call graph.
  • NEVER commit changes without running detect_changes() to check affected scope.

Resources

Resource Use for
gitnexus://repo/command-code-openai-bridge/context Codebase overview, check index freshness
gitnexus://repo/command-code-openai-bridge/clusters All functional areas
gitnexus://repo/command-code-openai-bridge/processes All execution flows
gitnexus://repo/command-code-openai-bridge/process/{name} Step-by-step execution trace

CLI

Task Read this skill file
Understand architecture / "How does X work?" .claude/skills/gitnexus/gitnexus-exploring/SKILL.md
Blast radius / "What breaks if I change X?" .claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md
Trace bugs / "Why is X failing?" .claude/skills/gitnexus/gitnexus-debugging/SKILL.md
Rename / extract / split / refactor .claude/skills/gitnexus/gitnexus-refactoring/SKILL.md
Tools, resources, schema reference .claude/skills/gitnexus/gitnexus-guide/SKILL.md
Index, status, clean, wiki CLI commands .claude/skills/gitnexus/gitnexus-cli/SKILL.md