Skip to content

RFC Proposal: 新增 neocode-gateway 发布物并固化角色边界、运维契约与安全基线 #420

@pionxe

Description

@pionxe

1. Summary

  • 当前发布仅提供 neocode 单一二进制,客户端入口与网关服务端入口混在同一产物中。
  • 本提案引入双产物发布:neocode(客户端)+ neocode-gateway(服务端)。
  • 本提案同时固化三类契约:CLI 角色边界、运维/发布命名稳定性、安全默认值与验收测试。

2. Background and Problems

  • 观察事实:internal/cli/root.go 在根命令注册了 gateway 子命令,说明当前“单二进制多角色”是既有模式。
  • 观察事实:.goreleaser.yaml 当前仅构建 ./cmd/neocode/main.go,二进制名仅 neocode
  • 观察事实:scripts/install.shscripts/install.ps1 默认只安装 neocode / neocode.exe
  • 观察事实:internal/tui/services/gateway_rpc_client.go 存在基于当前可执行文件的自动拉起网关逻辑(exec.Command(executablePath, "gateway"))。
  • 观察事实:网关默认监听地址与校验机制已偏保守(回环监听)。
  • 问题:第三方仅需网关时仍需分发“含客户端语义”的二进制,服务端组件边界不清晰,审计与运维解释成本高。
  • 问题:若仅“多一个可执行文件”但不定义一致性测试与命名契约,后续高概率出现双入口行为漂移与发布脚本断裂。

3. Goals

  • 提供官方 neocode-gateway 发布物,覆盖与 neocode 相同平台矩阵。
  • 明确 CLI 角色边界:neocode-gateway 仅承担网关服务端职责,不承载 TUI 入口语义。
  • 保证双入口共享执行内核,不复制逻辑,并具备一致性测试。
  • 固化安装与资产命名契约,支持显式 flavor 选择并保持脚本长期兼容。
  • 将网关默认安全基线与最小可接入链路纳入 CI 自动验收。

4. Non-Goals

  • 不修改 Gateway 协议与 JSON-RPC 方法语义。
  • 不移除现有 neocode gateway 子命令。
  • 不在本提案内引入 SDK 或多租户授权模型重构。

5. Design

5.1 CLI 角色边界契约

  • 新增 cmd/neocode-gateway/main.go,产出独立服务端二进制。
  • neocode-gateway 仅暴露网关服务相关命令与参数。
  • neocode 保持现有客户端主入口与 gateway 子命令兼容行为。

5.2 入口分离、执行内核共享

  • 通过 internal/cli 抽取网关命令构建与执行路径复用点。
  • neocode gatewayneocode-gateway 调用同一套参数解析与启动函数。
  • 禁止复制一份“平行网关启动逻辑”。

5.3 默认安全基线

  • neocode-gateway 默认监听维持保守策略(本地回环)。
  • 对外暴露能力必须显式配置,并在文档中标注风险与最小鉴权/ACL模板。
  • 认证与 ACL 默认策略保持最小权限原则。

5.4 发布与安装契约

  • .goreleaser.yaml 增加 neocode-gateway build。
  • 资产命名、平台后缀、checksum 输出规则形成稳定约定并写入文档。
  • 安装脚本支持显式参数:--flavor gateway(默认保留现有 flavor)。

5.5 CI 与可接入验收

  • CI 除构建外,新增 gateway-only 冒烟链路:
    • 启动 neocode-gateway
    • 探活(/healthz / /version
    • 最小 /rpc/ws 请求校验
    • 进程退出与资源清理
  • 增加双入口一致性测试:关键参数下响应语义、错误码、关键日志字段一致。

6. Acceptance Criteria

  • Release 产物中同时存在 neocodeneocode-gateway,平台矩阵一致。
  • neocode-gateway 不提供 TUI 启动语义,仅提供网关服务端能力。
  • neocode gatewayneocode-gateway 在同参场景下行为等价:
    • 关键响应语义一致
    • 错误码一致
    • 关键日志字段一致
  • 默认安全基线具备自动化测试:
    • 默认监听地址策略
    • 鉴权缺失时失败行为
  • 安装链路具备回归测试:
    • flavor 选择
    • 下载 URL 组装
    • checksum 校验流程
  • 文档补齐两类运维内容:
    • 部署拓扑建议(本地内嵌网关 vs 独立网关服务)
    • 升级与回滚步骤

7. Dependencies and Impact

  • 受影响模块:
    • cmd/
    • internal/cli/
    • .goreleaser.yaml
    • scripts/install.sh
    • scripts/install.ps1
    • README.md
    • 网关运维与接入文档
  • Assumption: 第三方接入方存在“仅部署网关”的高频场景。
  • Assumption: 双入口一致性测试需新增专门测试文件,现有测试不足以覆盖该类回归。

8. Implementation Changes

  • 新增:cmd/neocode-gateway/main.go
  • 调整:internal/cli 网关命令构建与执行路径,形成共享执行内核
  • 调整:.goreleaser.yaml 增加 gateway-only 构建与产物命名规则
  • 调整:安装脚本引入 --flavor gateway 并校验资产/checksum
  • 新增:双入口行为一致性测试与 gateway-only 冒烟测试
  • 调整:README 与网关文档新增部署拓扑、最小安全模板、升级回滚说明

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions