Skip to content

Repository files navigation

SignalDesk

CI CodeQL License: MIT

SignalDesk v0.6.1 是一个可自行修改的原生 macOS X 运营工作台。它把“IP / 运营身份”与真实 X 账号分开:前者是本地内容策划档案,后者通过 X 官方 OAuth 2.0 逐账号授权。

当前主流程是“发现热门内容 → 生成/编辑跟帖或发帖草稿 → 人工审批 → 逐条最终确认 → X 官方 API 发布”。仍保留复制草稿的人工交接入口。它不把规避平台规则、反检测或所谓“防封”当成产品能力。

当前仓库提供源码和本机构建说明,尚未提供经过 Developer ID 签名、Apple 公证并附带 SHA-256 的公开下载包。不要从第三方下载来历不明的 SignalDesk 二进制文件。

v0.6.1 已接通

  • 原生 SwiftUI / AppKit 界面,支持 macOS 14 及以上版本。
  • 创建任意数量的 IP / 运营身份;身份、草稿与审计记录会原子写入 ~/Library/Application Support/SignalDesk/workspace.json
  • 只需在 App 中输入 X Developer App 的 Client ID,通过官方 OAuth 2.0 + PKCE 逐个授权 X 账号。
  • OAuth 回调固定为 http://127.0.0.1:53682/oauth/callback,必须在 X Developer Portal 中逐字一致地登记。
  • OAuth access/refresh token 只存入 macOS Keychain;工作区 JSON 只保存公开账号信息和授权范围。
  • 设置页可配置“X 应用级 Bearer”,用于官方项目 Usage API,并作为只读热帖搜索的备用凭据;它不是 X 账号登录状态。
  • “X 用量与费用”页展示近 7 天 Post 用量、项目累计与上限、按 App 汇总、本机调用账本和费用估算;官方精确余额仍通过 Developer Console 查看。
  • 设置页优先连接 Grok / SuperGrok 订阅:SignalDesk 调用 xAI 官方 Grok Build CLI 的 grok.com OAuth,不把订阅伪装成 API Key,也不读取密码或 Cookie。
  • 设置页通过 Grok Build 官方 ACP 扩展 x.ai/billing 只读刷新共享额度百分比、周期类型和下次重置时间;该操作不运行模型,也不读取浏览器会话。
  • 订阅热帖发现只开放 Grok Build 的 WebSearch / WebFetch,且只接纳 handle、数字 Post ID 与规范 x.com/<handle>/status/<id> 链接互相一致的候选;它不冒充单独计费的 xAI x_search API。
  • xAI API Key 改为明确标注的可选付费备用;只有用户主动配置后才可能调用 Responses API 的 x_search 或推理。
  • 跟帖草稿优先使用 Grok 订阅;失败时依次回退用户主动配置的 xAI API Key、OpenAI-compatible 备用服务和明确标注的本地模板。
  • 审批与草稿修订号绑定;审批后再修改会使旧审批自动失效。
  • 对已审批草稿提供单条发帖或回复;每次写入前必须明确选择默认 X 账号并完成最终确认。
  • 不提供批量发布队列、后台自动跟帖、失败时切换账号或绕过平台限流。
  • 发布成功后只保存公开 Post ID、链接、时间和账号连接 ID;审计事件不含 token 或响应正文。

连接 X 账号

  1. 在 X Developer Portal 创建应用,将 App 类型设为 Native App / Public Client。
  2. 登记回调 URL:http://127.0.0.1:53682/oauth/callback
  3. 在 SignalDesk 的“X 账号连接”页只粘贴 Client ID。Native App 不应把 Client Secret 编译进客户端。
  4. 点击连接,在 X 官方授权页选择对应账号并确认。每个运营账号都要独立授权一次。

如果账号是用 v0.2 或更早版本连接的,它只有只读范围。升级后请使用同一个 Client ID 再连接一次该账号,并在 X 官方页面重新授权;旧 token 不会被 App 暗中升权。

macOS 上首次 OAuth 会短暂打开系统默认浏览器;X 授权完成后自动回到 SignalDesk。SignalDesk 不会用 WKWebView 或无头浏览器承接登录,因为嵌入式授权会让 App 有机会读取密码、键盘输入和 Cookie,也可能被授权服务拦截。后续 token 刷新和 API 操作不需要再次启动浏览器,除非授权失效或权限范围改变。

SignalDesk 不接受、不解析、不验证以下内容:X 用户名/密码、邮箱/密码、Cookie、TOTP/2FA 秘钥、备份码、session token,以及售号商提供的任何“一行登录包”。如果这些凭据曾发送给他人或第三方,应立即更换密码、重置 2FA,并撤销已有会话与应用授权。

连接 Grok 订阅

  1. 安装 xAI 官方 Grok Build CLI。SignalDesk 会依次检查 ~/.grok/bin/grok~/.local/bin/grok、Homebrew 常用路径,不调用 shell 别名。
  2. 在“设置 → 服务连接”点击“连接 Grok 订阅”,只在 xAI 官方 OAuth 页面登录你的 grok.com / SuperGrok 账号。
  3. SignalDesk 通过 grok versiongrok models 检查本机安装、登录状态与可见模型;随后通过 grok agent stdio 的官方 ACP x.ai/billing 扩展刷新共享额度与下次重置时间。两项检测都不运行模型推理。
  4. 若登录错账号,可在设置中确认“切换订阅账号”。这会先清除 Grok Build 的本机 OAuth 缓存,再打开官方登录页。

xAI 的 Grok FAQ 说明符合条件的 SuperGrok 方案可使用 Grok Build,并共享订阅周用量池;这不等于获得 xAI API 余额。SignalDesk 会显示 ACP 返回的真实百分比和周期结束时间,并保留 官方 Usage 页面作为核对入口。订阅搜索依赖 Grok Build 当时开放的 WebSearch 能力,专用实时 X Search 是否可用必须以实际结果为准。所有结果仍需人工审核。

可选:xAI API Key

如需单独计费的 xAI x_search API,可在“可选备用:xAI API Key”中自行配置。Key 只存 macOS Keychain,连接校验只调用官方 GET /v1/models,不运行推理或搜索。Grok Responses 请求使用 store: false。SuperGrok 订阅与 xAI API 额度、账单相互独立。

搜索、跟帖与发帖边界

  • v0.6 默认申请 tweet.read tweet.write users.read offline.access,用于识别账号、读取数据、逐条发帖/回复和刷新授权。
  • 发现顺序为 Grok 订阅 WebSearch → 用户主动配置的 xAI API x_search → X OAuth Recent Search → X 应用级 Bearer。订阅候选必须通过规范 URL 字段核对;xAI API 候选还必须通过服务端引用中的 Post ID 核对。
  • 热门帖评论可以在 SignalDesk 内生成、审核并回复。普通发现帖仍标记为 manualOnly,代表不可进入自动队列;当前修订审批通过并逐条最终确认后,才会调用官方 API。
  • 只实现新帖与回复;不实现自动点赞、转帖、关注或私信。
  • 写入客户端调用官方 POST /2/tweets;回复目标使用明确的原帖 Post ID,不从正文或链接中猜测。
  • 不提供密码自动登录、无人值守跟帖、浏览器指纹伪装、验证码绕过、代理轮换或反检测功能。

API 费用

X API 与普通 X 账号订阅分开。搜索、读取、发帖或回复能否调用,取决于 Developer App 的当前权限、额度和 X 的计费规则。配置凭据不会自动产生请求;点击真实搜索,或在发布确认框中确认发送时,才可能消耗 API 额度/积分。上线前应以 X Developer Portal 当时显示的价格和用量为准。

SignalDesk 通过官方 GET /2/usage/tweets 读取 Post 用量统计,并每 5 分钟最多刷新一次。该接口不返回预付美元余额或逐笔账单;本地费用数字只用于预算预警,不应视为 X 发票。

Grok Build 使用符合条件的 Grok / SuperGrok 订阅共享用量池,不走 xAI API Key,但也不能承诺“无限免费”。SignalDesk 的额度刷新只调用官方 ACP billing 扩展,不产生模型推理;当订阅额度不可用时,SignalDesk 会明确提示,并只在用户已经主动配置其他凭据时回退。

xAI API 与 SuperGrok 会员分账。按 2026-08-03 的官方公开价格,API x_search 工具费为 US$5 / 1,000 次成功工具调用(即每次 US$0.005),并另计模型输入、推理和输出 Token;一次代理请求可能调用工具多次。SignalDesk 会在 API 结果页显示服务端报告的工具次数及工具费估算,但精确账单仍以 xAI Console 为准。

构建

需要 macOS 14+ 与 Xcode Command Line Tools,无需安装额外依赖:

cd SignalDesk
chmod +x build.sh
./build.sh
open build/SignalDesk.app

开发期可以构建调试包:

./build.sh debug
open build/SignalDesk.app

运行不访问真实 X 或第三方服务的离线自检:

./build.sh selftest

自检覆盖 Codable、临时目录 JSON 存储、账号字段归一化、发现评分、审批版本生命周期、互动资格边界、PKCE/OAuth 参数、官方发帖/回复 JSON、Grok Build OAuth 状态解析、订阅命令权限边界、ACP 周额度与重置时间解码、规范 X 链接核对、Grok API Key 校验、API X Search 引用核对、Grok 草稿与确定性本地草稿。凭据测试使用注入的假后端,所有测试请求由内存协议或假命令执行器截获。

build.sh 使用项目自己的模块缓存,不依赖用户目录缓存。默认使用 ad-hoc 本地签名,适合本机运行;对外分发仍需 Developer ID 签名和 Apple 公证。

测试与支持范围

  • 本地最低门禁:swift test --disable-sandbox./build.sh selftest./build.sh releaseplutil -lintcodesign --verify --strict
  • GitHub CI 覆盖 macOS 14 arm64 和 macOS 15 Intel;macOS 14 runner 已进入 GitHub 的弃用周期,仓库会在其停止服务前调整最低系统验证方式。
  • SignalDesk 只支持官方 OAuth/API 与人工确认流程。Cookie、密码包、验证码绕过、无头登录、批量自动跟帖和规避平台限制不在支持范围内。

数据与凭据安全

  • 不要把 API Key、Client Secret、OAuth Token、Cookie、账号密码或 TOTP 秘钥写进源码、JSON 工作区、日志或截图。
  • X OAuth token、备用 X Bearer、xAI API Key 和备用 AI API Key 通过 macOS Keychain 保存;Grok 订阅授权由官方 Grok Build 自行管理;界面不回显原文。
  • Client ID、AI Endpoint 和 Model 属于非秘密设置;普通运营数据保存在工作区 JSON。
  • 审计日志只记录动作类型、时间和必要的运营上下文,不记录请求头、Token、第三方错误正文或完整接口响应。
  • 工作区先完整编码再原子替换;现有文件损坏时会报错并保留原文件,不静默覆盖成空数据。

项目结构

  • Sources/SignalDesk:原生 macOS App 界面与本机 OAuth 回调
  • Sources/SignalDeskCore:领域模型、OAuth/PKCE、评分、存储与安全边界
  • Sources/SignalDeskSelfTest:不访问真实外部服务的可执行自检
  • Resources/Info.plist:App Bundle 元数据
  • Tools/IconGenerator.swift:程序化生成独立品牌图标
  • build.sh:编译、组装与本地签名 .app

文档与参与

源码以 MIT License 发布。外部服务、CLI 与平台框架的归属和分发边界见 第三方说明

SignalDesk 是独立项目,不隶属于 X Corp.;“X”及其相关标识归各自权利人所有。

About

Native macOS X operations workspace with OAuth 2.0 PKCE and human-reviewed discovery, drafting, and handoff.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages