Skip to content

feat(antigravity): 支持原生 / 指令、Skill 多选、上下文压缩与工作模式 - #173

Open
windowmmk wants to merge 2 commits into
try2love:mainfrom
windowmmk:feat/antigravity-slash-commands
Open

windowmmk wants to merge 2 commits into
try2love:mainfrom
windowmmk:feat/antigravity-slash-commands

Conversation

@windowmmk

Copy link
Copy Markdown

概述

为 Antigravity 桌面客户端接入补齐原生 / 指令发现与结构化发送、Skill 多选、/compact 上下文压缩以及基于共享 WorkModes 的 plan / goal 工作模式(基于 v2.2.1 1004e5ae)。

主要改动

1. 后端原生能力发现与结构化发送

  • cli_session.py
    • _ALLOWED_METHODS 新增只读白名单 RPC GetSlashCommands。
    • 新增 slash_commands() 与 _raw_model_for_commands(),按当前会话所选模型 / defaultOverrideModelConfig / 首个已启用模型动态解析 MODEL_* 并携带 cascadeId、workspaceUris 实时拉取原生指令,按 info.type 归一化为 system / skill / workflow。
  • adapter.py
    • 当桌面端在线(live=True)时开放 skills、multiSkills、slashCommands、compact、plan、goal 能力。
    • catalog 新增 section='commands' 支持,并在全量目录中返回 commands 与 skills(拉取失败时优雅降级返回空列表与 pluginError)。
    • _build_message_items() 将消息开头的已知 / 指令及多选 plugins(最多 8 个、去重)构造为原生 {'item': {'slashCommand': {'info': ...}}} 结构化项发送;未知前缀及 /usr/bin 等普通路径保持纯文本发送。
    • 新增 compact、goal(operation='set')与 work-mode(default / plan)动作,执行前校验连接状态、待确认审批与原生空闲状态。
    • 忙碌状态下通过 hook 进行 queue / steer 时,_reject_busy_structured_follow_up() 显式拒绝夹带 / 指令、plugins 或 plan / goal 模式的后续消息,防止结构化字段静默丢失。

2. 共享前端、Relay 路由与国际化

  • composer-commands.js & desktop-sessions.js
    • ComposerCommands 支持 action.native:菜单展示 Skill · / 工作流 · 前缀,选中后插入 /<id> ,提交时直接透传后端。
    • DesktopSessionsView 按作用域缓存并刷新原生 / 指令(含 plan / goal / compact 兜底),并在 capabilities.multiSkills === true 时允许 Skill 多选(保留 Claude CLI 单选逻辑不变)。
  • relay/protocol.py & web/shared/i18n.js
    • 允许 Antigravity 通过共享 Relay 路由 POST /api/desktop-sessions/antigravity/compact 与 goal。
    • 补齐新增提示与错误文案的英文翻译(含动态 /<command> 错误模式匹配)。
  • 新增feature说明:2026-11-14-antigravity-native-slash-commands.md。

验证结果(基于提交 0b29440c)

已执行且通过

  • python3 -B scripts/check-boundaries.py:Module boundaries passed; 22 explicit legacy edges remain.
  • 针对性 Python 单元测试(PYTHONPATH=.:tests python3 -B -m unittest tests.test_antigravity_adapter tests.test_antigravity_discovery tests.test_shared_relay tests.test_desktop_sessions tests.test_modes tests.test_native_compaction tests.test_claude_native_commands tests.test_relay_admin):Ran 207 tests — OK
  • 针对性 Node 前端单测(TZ=UTC node --test tests/composer-commands.test.cjs tests/desktop-sessions-ui.test.cjs tests/operation-i18n.test.cjs tests/localization.test.cjs tests/gateway-language.test.cjs tests/relay-routing.test.cjs):231/231 pass (0 fail)
  • 非 Electron 全量前端 Node 单测(124 个测试文件,排除依赖本地 node_modules 的 desktop.test.cjs 与 packaged-qr.test.cjs):1533 pass, 0 fail, 1 skipped
  • 本机实时 Antigravity Language Server 只读验证:本地网关 HTTP 200,调用 Antigravity.call('catalog', sid, {'section': 'commands'}) 实际返回 16 条指令(含 7 个 Skills、teamwork/boost/plan/goal/compact 等),pluginError=None。

全量后端测试(含 1 项与本 PR 无关的既有失败)

  • python3 -B scripts/test-backend.py --source-only:Ran 4085 tests(failures=1, skipped=59;跳过项为 --source-only 与 Windows 平台检查)
    • 唯一失败项为既有 test_pty_terminal.PtyTests.test_close_kills_foreground_process(Linux PTY 进程清理时序,与本 PR 无关)。

未在本机执行(待 CI 或真实桌面联调覆盖)

  • tests/desktop.test.cjs、tests/packaged-qr.test.cjs 与 npm run test:browser(Playwright):本机环境未安装 node_modules(Electron / jsQR / Playwright)。
  • 未向正在运行的真实 Antigravity 活动会话实际下发 /compact、/goal 或 /teamwork 写入请求(结构化 items 编码基于适配器单测校验)。

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant