pi-ui-extend 1.0.41 → 1.0.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/README.md +50 -13
  2. package/dist/app/app.d.ts +13 -0
  3. package/dist/app/app.js +158 -8
  4. package/dist/app/cli/install.js +2 -2
  5. package/dist/app/commands/command-controller.d.ts +4 -0
  6. package/dist/app/commands/command-controller.js +11 -0
  7. package/dist/app/commands/command-git-actions.d.ts +25 -0
  8. package/dist/app/commands/command-git-actions.js +381 -0
  9. package/dist/app/commands/command-host.d.ts +4 -0
  10. package/dist/app/commands/command-host.js +5 -2
  11. package/dist/app/commands/command-model-actions.d.ts +1 -0
  12. package/dist/app/commands/command-model-actions.js +57 -35
  13. package/dist/app/commands/command-navigation-actions.d.ts +1 -0
  14. package/dist/app/commands/command-navigation-actions.js +16 -3
  15. package/dist/app/commands/command-registry.d.ts +2 -0
  16. package/dist/app/commands/command-registry.js +15 -1
  17. package/dist/app/commands/command-session-actions.js +9 -3
  18. package/dist/app/commands/reload-context-inventory.d.ts +11 -0
  19. package/dist/app/commands/reload-context-inventory.js +70 -0
  20. package/dist/app/extensions/extension-actions-controller.d.ts +1 -0
  21. package/dist/app/extensions/extension-actions-controller.js +6 -0
  22. package/dist/app/extensions/subagent-catalog-state.d.ts +9 -0
  23. package/dist/app/extensions/subagent-catalog-state.js +23 -0
  24. package/dist/app/input/autocomplete-controller.js +61 -34
  25. package/dist/app/input/input-action-controller.d.ts +2 -0
  26. package/dist/app/input/input-action-controller.js +8 -1
  27. package/dist/app/input/input-controller.d.ts +2 -1
  28. package/dist/app/input/input-controller.js +7 -2
  29. package/dist/app/input/prompt-enhancer-controller.js +53 -35
  30. package/dist/app/input/voice-controller.d.ts +41 -45
  31. package/dist/app/input/voice-controller.js +351 -419
  32. package/dist/app/model/model-usage-controller.js +17 -7
  33. package/dist/app/model/model-usage-status.d.ts +4 -1
  34. package/dist/app/model/model-usage-status.js +270 -46
  35. package/dist/app/popup/menu-items-controller.d.ts +13 -3
  36. package/dist/app/popup/menu-items-controller.js +37 -21
  37. package/dist/app/popup/popup-action-controller.d.ts +12 -2
  38. package/dist/app/popup/popup-action-controller.js +77 -24
  39. package/dist/app/popup/popup-menu-controller.d.ts +36 -14
  40. package/dist/app/popup/popup-menu-controller.js +239 -69
  41. package/dist/app/rendering/dcp-stats.d.ts +9 -4
  42. package/dist/app/rendering/dcp-stats.js +40 -425
  43. package/dist/app/rendering/editor-panels.js +10 -4
  44. package/dist/app/rendering/popup-menu-renderer.d.ts +3 -5
  45. package/dist/app/rendering/popup-menu-renderer.js +42 -37
  46. package/dist/app/rendering/render-controller.js +23 -2
  47. package/dist/app/rendering/status-line-renderer.d.ts +5 -0
  48. package/dist/app/rendering/status-line-renderer.js +41 -5
  49. package/dist/app/rendering/tab-line-renderer.js +26 -20
  50. package/dist/app/runtime.d.ts +12 -1
  51. package/dist/app/runtime.js +120 -12
  52. package/dist/app/screen/mouse-controller.d.ts +2 -0
  53. package/dist/app/screen/mouse-controller.js +17 -7
  54. package/dist/app/screen/status-controller.d.ts +4 -0
  55. package/dist/app/screen/status-controller.js +5 -0
  56. package/dist/app/session/lazy-session-manager.js +34 -0
  57. package/dist/app/session/session-event-controller.d.ts +1 -0
  58. package/dist/app/session/session-event-controller.js +10 -1
  59. package/dist/app/session/session-history.d.ts +1 -0
  60. package/dist/app/session/session-history.js +12 -1
  61. package/dist/app/session/session-lifecycle-controller.d.ts +7 -1
  62. package/dist/app/session/session-lifecycle-controller.js +16 -1
  63. package/dist/app/session/tabs-controller.d.ts +26 -1
  64. package/dist/app/session/tabs-controller.js +454 -147
  65. package/dist/app/subagents/subagents-files.js +60 -1
  66. package/dist/app/subagents/subagents-model.d.ts +1 -0
  67. package/dist/app/subagents/subagents-model.js +18 -2
  68. package/dist/app/subagents/subagents-widget-controller.d.ts +1 -0
  69. package/dist/app/subagents/subagents-widget-controller.js +6 -0
  70. package/dist/app/types.d.ts +16 -1
  71. package/dist/app/workspace/workspace-actions-controller.js +10 -2
  72. package/dist/app/workspace/workspace-undo.d.ts +1 -0
  73. package/dist/app/workspace/workspace-undo.js +1 -0
  74. package/dist/bundled-extensions/question/index.js +9 -1
  75. package/dist/bundled-extensions/question/remote.d.ts +4 -0
  76. package/dist/bundled-extensions/question/remote.js +33 -0
  77. package/dist/bundled-extensions/telegram-connector/bot.d.ts +43 -0
  78. package/dist/bundled-extensions/telegram-connector/bot.js +166 -0
  79. package/dist/bundled-extensions/telegram-connector/config.d.ts +8 -0
  80. package/dist/bundled-extensions/telegram-connector/config.js +87 -0
  81. package/dist/bundled-extensions/telegram-connector/coordinator.d.ts +66 -0
  82. package/dist/bundled-extensions/telegram-connector/coordinator.js +413 -0
  83. package/dist/bundled-extensions/telegram-connector/index.d.ts +3 -0
  84. package/dist/bundled-extensions/telegram-connector/index.js +195 -0
  85. package/dist/bundled-extensions/terminal-bell/index.d.ts +0 -8
  86. package/dist/bundled-extensions/terminal-bell/index.js +0 -76
  87. package/dist/bundled-extensions/workspace-undo/index.d.ts +26 -0
  88. package/dist/bundled-extensions/workspace-undo/index.js +191 -0
  89. package/dist/config.d.ts +21 -2
  90. package/dist/config.js +159 -32
  91. package/dist/default-pix-config.js +25 -5
  92. package/dist/schemas/index.d.ts +1 -0
  93. package/dist/schemas/index.js +1 -0
  94. package/dist/schemas/pi-tools-suite-schema.d.ts +88 -62
  95. package/dist/schemas/pi-tools-suite-schema.js +54 -83
  96. package/dist/schemas/pix-schema.d.ts +19 -2
  97. package/dist/schemas/pix-schema.js +47 -5
  98. package/dist/schemas/tasks-schema.d.ts +18 -0
  99. package/dist/schemas/tasks-schema.js +41 -0
  100. package/docs/concurrency.md +9 -1
  101. package/docs/desktop-mvp.md +22 -6
  102. package/docs/desktop-task-manager.md +148 -84
  103. package/docs/release.md +30 -6
  104. package/external/pi-tools-suite/README.md +197 -84
  105. package/external/pi-tools-suite/docs/evals.md +1 -1
  106. package/external/pi-tools-suite/docs/session-recovery.md +47 -14
  107. package/external/pi-tools-suite/docs/subagent-model-pools.md +48 -30
  108. package/external/pi-tools-suite/docs/ui-qa-subagent.md +440 -0
  109. package/external/pi-tools-suite/package.json +6 -1
  110. package/external/pi-tools-suite/src/antigravity-auth/auth-store.ts +2 -1
  111. package/external/pi-tools-suite/src/antigravity-auth/constants.ts +9 -3
  112. package/external/pi-tools-suite/src/antigravity-auth/headers.ts +41 -3
  113. package/external/pi-tools-suite/src/antigravity-auth/models.ts +94 -21
  114. package/external/pi-tools-suite/src/antigravity-auth/oauth.ts +5 -17
  115. package/external/pi-tools-suite/src/antigravity-auth/payload.ts +72 -7
  116. package/external/pi-tools-suite/src/antigravity-auth/stream.ts +13 -1
  117. package/external/pi-tools-suite/src/async-subagents/agents/frontier-review.md +23 -0
  118. package/external/pi-tools-suite/src/async-subagents/agents/implement.md +1 -1
  119. package/external/pi-tools-suite/src/async-subagents/agents/presets.jsonc +16 -0
  120. package/external/pi-tools-suite/src/async-subagents/agents/research.md +5 -3
  121. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/backends/browser.mjs +346 -0
  122. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/backends/desktop.mjs +1038 -0
  123. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/backends/tui.mjs +759 -0
  124. package/external/pi-tools-suite/src/async-subagents/agents/{browser-qa → ui-qa/browser}/scripts/browser-qa-runner.mjs +32 -23
  125. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/chrome-devtools/chrome-devtools-provider.mjs +895 -0
  126. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/linux/linux-atspi.py +494 -0
  127. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/macos/macos-accessibility.swift +1085 -0
  128. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/native-terminal/bridge-client.mjs +50 -0
  129. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/native-terminal/native-terminal-host.mjs +501 -0
  130. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/windows/windows-uia.ps1 +454 -0
  131. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/browser-auth.md +114 -0
  132. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/browser-chrome-devtools.md +91 -0
  133. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/browser-playwright.md +145 -0
  134. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/browser.md +82 -0
  135. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/desktop-linux.md +26 -0
  136. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/desktop-macos.md +29 -0
  137. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/desktop-windows.md +23 -0
  138. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/desktop.md +54 -0
  139. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/tui-native-terminal.md +59 -0
  140. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/tui-pty.md +37 -0
  141. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/tui.md +60 -0
  142. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/scripts/ui-qa-runner.mjs +535 -0
  143. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa.md +75 -0
  144. package/external/pi-tools-suite/src/async-subagents/commands.ts +15 -71
  145. package/external/pi-tools-suite/src/async-subagents/core/activity.ts +33 -0
  146. package/external/pi-tools-suite/src/async-subagents/core/agent-catalog.ts +5 -4
  147. package/external/pi-tools-suite/src/async-subagents/core/agent-strategy.ts +1 -1
  148. package/external/pi-tools-suite/src/async-subagents/core/agents-dir.ts +8 -5
  149. package/external/pi-tools-suite/src/async-subagents/core/browser-qa.ts +16 -2
  150. package/external/pi-tools-suite/src/async-subagents/core/config.ts +160 -327
  151. package/external/pi-tools-suite/src/async-subagents/core/model-selection.ts +2 -1
  152. package/external/pi-tools-suite/src/async-subagents/core/registry.ts +158 -33
  153. package/external/pi-tools-suite/src/async-subagents/core/routing.ts +21 -5
  154. package/external/pi-tools-suite/src/async-subagents/core/spawn.ts +40 -26
  155. package/external/pi-tools-suite/src/async-subagents/core/state.ts +40 -0
  156. package/external/pi-tools-suite/src/async-subagents/core/types.ts +7 -0
  157. package/external/pi-tools-suite/src/async-subagents/core/ultrawork-auto.ts +51 -45
  158. package/external/pi-tools-suite/src/async-subagents/index.ts +69 -5
  159. package/external/pi-tools-suite/src/async-subagents/lib.ts +16 -9
  160. package/external/pi-tools-suite/src/async-subagents/tools/spawn.ts +8 -5
  161. package/external/pi-tools-suite/src/async-subagents/tools/subagents.ts +5 -4
  162. package/external/pi-tools-suite/src/async-subagents/types.ts +1 -0
  163. package/external/pi-tools-suite/src/coding-discipline/index.ts +90 -59
  164. package/external/pi-tools-suite/src/config.ts +55 -1
  165. package/external/pi-tools-suite/src/context-gateway/accounting-log.ts +282 -0
  166. package/external/pi-tools-suite/src/context-gateway/config.ts +77 -3
  167. package/external/pi-tools-suite/src/context-gateway/efficiency.ts +414 -0
  168. package/external/pi-tools-suite/src/context-gateway/enforcement.ts +222 -0
  169. package/external/pi-tools-suite/src/context-gateway/index.ts +206 -19
  170. package/external/pi-tools-suite/src/context-gateway/storeless-capabilities.ts +7 -7
  171. package/external/pi-tools-suite/src/context-gateway/telemetry.ts +101 -28
  172. package/external/pi-tools-suite/src/context-gateway/types.ts +16 -3
  173. package/external/pi-tools-suite/src/context-inventory.ts +99 -0
  174. package/external/pi-tools-suite/src/dcp/auto-compress-budget.ts +39 -4
  175. package/external/pi-tools-suite/src/dcp/auto-compress.ts +128 -49
  176. package/external/pi-tools-suite/src/dcp/commands.ts +32 -156
  177. package/external/pi-tools-suite/src/dcp/compress-tool.ts +177 -46
  178. package/external/pi-tools-suite/src/dcp/compression-blocks.ts +6 -58
  179. package/external/pi-tools-suite/src/dcp/compression-preview.ts +9 -0
  180. package/external/pi-tools-suite/src/dcp/compression-progress.ts +22 -0
  181. package/external/pi-tools-suite/src/dcp/config.ts +114 -17
  182. package/external/pi-tools-suite/src/dcp/conversation-index.ts +36 -9
  183. package/external/pi-tools-suite/src/dcp/diagnostics.ts +41 -0
  184. package/external/pi-tools-suite/src/dcp/fresh-tool-results.ts +38 -0
  185. package/external/pi-tools-suite/src/dcp/index.ts +338 -66
  186. package/external/pi-tools-suite/src/dcp/journal.ts +126 -4
  187. package/external/pi-tools-suite/src/dcp/progress-controller.ts +2 -1
  188. package/external/pi-tools-suite/src/dcp/prompts.ts +83 -192
  189. package/external/pi-tools-suite/src/dcp/protected-continuity.ts +175 -0
  190. package/external/pi-tools-suite/src/dcp/pruner-candidates.ts +93 -3
  191. package/external/pi-tools-suite/src/dcp/pruner-message-ids.ts +6 -10
  192. package/external/pi-tools-suite/src/dcp/pruner-nudge.ts +36 -33
  193. package/external/pi-tools-suite/src/dcp/pruner-tools.ts +6 -3
  194. package/external/pi-tools-suite/src/dcp/pruner.ts +1 -0
  195. package/external/pi-tools-suite/src/dcp/routine-pressure.ts +86 -0
  196. package/external/pi-tools-suite/src/dcp/state.ts +9 -0
  197. package/external/pi-tools-suite/src/dcp/statistics.d.ts +8 -0
  198. package/external/pi-tools-suite/src/dcp/statistics.js +156 -0
  199. package/external/pi-tools-suite/src/default-pi-tools-suite-config.ts +78 -22
  200. package/external/pi-tools-suite/src/index.ts +7 -1
  201. package/external/pi-tools-suite/src/lib/project.ts +36 -1
  202. package/external/pi-tools-suite/src/model-tools/index.ts +10 -7
  203. package/external/pi-tools-suite/src/repo-discovery/index.ts +304 -4
  204. package/external/pi-tools-suite/src/resource-registry/index.ts +2551 -0
  205. package/external/pi-tools-suite/src/session-recovery/index.ts +17 -0
  206. package/external/pi-tools-suite/src/shell-command-policy.ts +219 -0
  207. package/external/pi-tools-suite/src/todo/index.ts +21 -0
  208. package/external/pi-tools-suite/src/todo/todo.ts +19 -1
  209. package/external/pi-tools-suite/src/tool-descriptions.ts +47 -19
  210. package/package.json +10 -9
  211. package/schemas/pi-tools-suite.json +466 -287
  212. package/schemas/pix.json +129 -11
  213. package/schemas/tasks.json +131 -0
  214. package/skills/simplify/SKILL.md +33 -5
  215. package/docs/desktop-markdown-media.md +0 -77
  216. package/external/pi-tools-suite/docs/browser-qa-subagent.md +0 -177
  217. package/external/pi-tools-suite/docs/dcp-emergency-current-turn.md +0 -102
  218. package/external/pi-tools-suite/src/async-subagents/agents/browser-qa.md +0 -598
  219. package/external/pi-tools-suite/src/async-subagents/async-subagents.sample.jsonc +0 -54
  220. package/external/pi-tools-suite/src/skill-installer/index.ts +0 -333
  221. package/skills/playwright-cli/SKILL.md +0 -420
  222. package/skills/playwright-cli/references/element-attributes.md +0 -23
  223. package/skills/playwright-cli/references/playwright-tests.md +0 -50
  224. package/skills/playwright-cli/references/request-mocking.md +0 -87
  225. package/skills/playwright-cli/references/running-code.md +0 -241
  226. package/skills/playwright-cli/references/session-management.md +0 -273
  227. package/skills/playwright-cli/references/spec-driven-testing.md +0 -311
  228. package/skills/playwright-cli/references/storage-state.md +0 -290
  229. package/skills/playwright-cli/references/test-generation.md +0 -142
  230. package/skills/playwright-cli/references/tracing.md +0 -154
  231. package/skills/playwright-cli/references/video-recording.md +0 -147
  232. package/skills/spec-lite/SKILL.md +0 -140
  233. /package/external/pi-tools-suite/src/async-subagents/agents/{browser-qa → ui-qa/browser}/examples/qa-auth.example.jsonc +0 -0
  234. /package/external/pi-tools-suite/src/async-subagents/agents/{browser-qa → ui-qa/browser}/examples/qa-flow.example.jsonc +0 -0
  235. /package/external/pi-tools-suite/src/async-subagents/agents/{browser-qa → ui-qa/browser}/vendor/fflate.LICENSE +0 -0
  236. /package/external/pi-tools-suite/src/async-subagents/agents/{browser-qa → ui-qa/browser}/vendor/fflate.mjs +0 -0
@@ -1,4 +1,44 @@
1
1
  import type { AntigravityModel, HeaderStyle } from "./types";
2
+ import { AGY_CLI_CHANGE_LIST, AGY_CLI_VERSION } from "./constants";
3
+
4
+ function normalizePlatform(platform = process.platform): string {
5
+ return platform === "win32" ? "windows" : platform || "unknown";
6
+ }
7
+
8
+ function normalizeArch(arch = process.arch): string {
9
+ switch (arch) {
10
+ case "x64":
11
+ return "amd64";
12
+ case "ia32":
13
+ return "386";
14
+ default:
15
+ return arch || "unknown";
16
+ }
17
+ }
18
+
19
+ /** Native agy CLI 1.1.24 content-request identity captured by cortexkit 2.2.1. */
20
+ export function buildAntigravityHarnessUserAgent(
21
+ version = AGY_CLI_VERSION,
22
+ platform = process.platform,
23
+ arch = process.arch,
24
+ authMethod = "consumer",
25
+ ): string {
26
+ const changeList = version === AGY_CLI_VERSION ? `; cl=${AGY_CLI_CHANGE_LIST}` : "";
27
+ return `antigravity/cli/${version} (aidev_client; os_type=${normalizePlatform(platform)}; arch=${normalizeArch(arch)}${changeList}; auth_method=${authMethod})`;
28
+ }
29
+
30
+ export function getAntigravityBootstrapHeaders(accessToken: string): Record<string, string> {
31
+ return {
32
+ "User-Agent": buildAntigravityHarnessUserAgent(),
33
+ Authorization: `Bearer ${accessToken}`,
34
+ "Content-Type": "application/json",
35
+ "Accept-Encoding": "gzip",
36
+ };
37
+ }
38
+
39
+ export function getAntigravityLoadCodeAssistMetadata(): Record<string, string> {
40
+ return { ideType: "ANTIGRAVITY" };
41
+ }
2
42
 
3
43
  export function getAntigravityHeaders(style: "antigravity" | "gemini-cli" = "antigravity"): Record<string, string> {
4
44
  if (style === "gemini-cli") {
@@ -9,9 +49,7 @@ export function getAntigravityHeaders(style: "antigravity" | "gemini-cli" = "ant
9
49
  };
10
50
  }
11
51
  return {
12
- "User-Agent": "antigravity/1.18.3 darwin/arm64",
13
- "X-Goog-Api-Client": "google-cloud-sdk vscode_cloudshelleditor/0.1",
14
- "Client-Metadata": `{"ideType":"ANTIGRAVITY","platform":"${process.platform === "win32" ? "WINDOWS" : "MACOS"}","pluginType":"GEMINI"}`,
52
+ "User-Agent": buildAntigravityHarnessUserAgent(),
15
53
  };
16
54
  }
17
55
 
@@ -1,4 +1,52 @@
1
+ // Antigravity model catalog, synced with the upstream cortexkit registry
2
+ // (packages/core/src/model-registry.ts + transform/model-resolver.ts at
3
+ // commit fa48c66f2d931a9182d9c2fa38cdb1d9c4d61f10).
4
+ //
5
+ // Only models the Pi protocol can represent are advertised: the upstream
6
+ // image-output model is intentionally NOT registered because Pi has no way to
7
+ // express image-only output. Live route resolution for these public IDs lives
8
+ // in payload.ts (resolveActualModel).
1
9
  export const modelDefinitions = [
10
+ {
11
+ id: "antigravity-gemini-3.8-flash",
12
+ name: "Gemini 3.8 Flash (Antigravity)",
13
+ reasoning: true,
14
+ input: ["text", "image"],
15
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
16
+ contextWindow: 1_048_576,
17
+ maxTokens: 65_536,
18
+ thinkingLevelMap: { minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "high" },
19
+ },
20
+ {
21
+ id: "antigravity-gemini-3.7-flash",
22
+ name: "Gemini 3.7 Flash (Antigravity)",
23
+ reasoning: true,
24
+ input: ["text", "image"],
25
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
26
+ contextWindow: 1_048_576,
27
+ maxTokens: 65_536,
28
+ thinkingLevelMap: { minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "high" },
29
+ },
30
+ {
31
+ id: "antigravity-gemini-3.6-flash",
32
+ name: "Gemini 3.6 Flash (Antigravity)",
33
+ reasoning: true,
34
+ input: ["text", "image"],
35
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
36
+ contextWindow: 1_048_576,
37
+ maxTokens: 65_536,
38
+ thinkingLevelMap: { minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "high" },
39
+ },
40
+ {
41
+ id: "antigravity-gemini-3.5-flash",
42
+ name: "Gemini 3.5 Flash (Antigravity)",
43
+ reasoning: true,
44
+ input: ["text", "image"],
45
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
46
+ contextWindow: 1_048_576,
47
+ maxTokens: 65_536,
48
+ thinkingLevelMap: { minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "high" },
49
+ },
2
50
  {
3
51
  id: "antigravity-gemini-3.1-pro",
4
52
  name: "Gemini 3.1 Pro (Antigravity)",
@@ -7,11 +55,46 @@ export const modelDefinitions = [
7
55
  cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
8
56
  contextWindow: 1_048_576,
9
57
  maxTokens: 65_535,
10
- thinkingLevelMap: { minimal: null, low: "low", medium: null, high: null, xhigh: null },
58
+ thinkingLevelMap: { minimal: null, low: "low", medium: null, high: "high", xhigh: "high" },
11
59
  },
60
+ {
61
+ id: "antigravity-claude-sonnet-4-6-thinking",
62
+ name: "Claude Sonnet 4.6 Thinking (Antigravity)",
63
+ reasoning: true,
64
+ input: ["text", "image"],
65
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
66
+ contextWindow: 200_000,
67
+ maxTokens: 64_000,
68
+ thinkingLevelMap: { minimal: null, low: "low", medium: "medium", high: "high", xhigh: "high" },
69
+ },
70
+ {
71
+ id: "antigravity-claude-opus-4-6-thinking",
72
+ name: "Claude Opus 4.6 Thinking (Antigravity)",
73
+ reasoning: true,
74
+ input: ["text", "image"],
75
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
76
+ contextWindow: 200_000,
77
+ maxTokens: 64_000,
78
+ thinkingLevelMap: { minimal: null, low: "low", medium: "medium", high: "high", xhigh: "high" },
79
+ },
80
+ {
81
+ // GPT-OSS 120B with reasoning effort "medium" baked into the live route.
82
+ // Pi gets no thinkingConfig for it; the map pins every level to medium
83
+ // so the UI stays honest without changing routing.
84
+ id: "antigravity-gpt-oss-120b-medium",
85
+ name: "GPT-OSS 120B Medium (Antigravity)",
86
+ reasoning: true,
87
+ input: ["text"],
88
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
89
+ contextWindow: 131_072,
90
+ maxTokens: 32_768,
91
+ thinkingLevelMap: { minimal: "medium", low: "medium", medium: "medium", high: "medium", xhigh: "medium" },
92
+ },
93
+ // Legacy Antigravity entries kept as aliases; both live routes still exist
94
+ // upstream (gemini-3-flash is also the target of the 3.5-flash high tier).
12
95
  {
13
96
  id: "antigravity-gemini-3-flash",
14
- name: "Gemini 3 Flash (Antigravity)",
97
+ name: "Gemini 3 Flash (Antigravity, legacy)",
15
98
  reasoning: true,
16
99
  input: ["text", "image"],
17
100
  cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
@@ -19,6 +102,15 @@ export const modelDefinitions = [
19
102
  maxTokens: 65_536,
20
103
  thinkingLevelMap: { minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null },
21
104
  },
105
+ {
106
+ id: "antigravity-claude-sonnet-4-6",
107
+ name: "Claude Sonnet 4.6 (Antigravity, legacy)",
108
+ reasoning: false,
109
+ input: ["text", "image"],
110
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
111
+ contextWindow: 200_000,
112
+ maxTokens: 64_000,
113
+ },
22
114
  // These Gemini CLI-named models mirror opencode's provider surface, but opencode
23
115
  // routes them Antigravity-first unless cli_first is enabled.
24
116
  {
@@ -64,23 +156,4 @@ export const modelDefinitions = [
64
156
  thinkingLevelMap: { minimal: null, low: "low", medium: null, high: null, xhigh: null },
65
157
  antigravityHeaderStyle: "antigravity",
66
158
  },
67
- {
68
- id: "antigravity-claude-sonnet-4-6",
69
- name: "Claude Sonnet 4.6 (Antigravity)",
70
- reasoning: false,
71
- input: ["text", "image"],
72
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
73
- contextWindow: 200_000,
74
- maxTokens: 64_000,
75
- },
76
- {
77
- id: "antigravity-claude-opus-4-6-thinking",
78
- name: "Claude Opus 4.6 Thinking (Antigravity)",
79
- reasoning: true,
80
- input: ["text", "image"],
81
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
82
- contextWindow: 200_000,
83
- maxTokens: 64_000,
84
- thinkingLevelMap: { minimal: null, low: "low", medium: "medium", high: "high", xhigh: "high" },
85
- },
86
159
  ];
@@ -2,7 +2,7 @@ import { createHash, randomBytes } from "node:crypto";
2
2
  import type { OAuthCredentials } from "@earendil-works/pi-ai";
3
3
  import { DEFAULT_PROJECT_ID, LOAD_ENDPOINTS, REDIRECT_URI, SCOPES, TOKEN_EXPIRY_SKEW_MS, PROVIDER_ID } from "./constants";
4
4
  import { accountFromCredential, clampAccountIndex, encodeApiKey, findMatchingAccountIndex, getAccountProjectId, getAccountRefreshToken, getGoogleOAuthClientCredentials, getPiAuthPath, getStoredAccounts, joinRefresh, readJsonFile, splitRefresh, writeJsonFileSecure } from "./auth-store";
5
- import { getAntigravityHeaders } from "./headers";
5
+ import { getAntigravityBootstrapHeaders, getAntigravityHeaders, getAntigravityLoadCodeAssistMetadata } from "./headers";
6
6
  import { notifyAntigravityLoginFailure } from "./status";
7
7
  import type { AntigravityAddAccountResult, AntigravityFailoverCredential, AntigravityLoginCallbacks, GoogleOAuthClientCredentials, OpencodeAntigravityAccount, PiAuthCredential, PiAuthData, RefreshedAntigravityAccount } from "./types";
8
8
 
@@ -33,12 +33,7 @@ function assertGoogleOAuthCredentialsConfigured(credentials?: GoogleOAuthClientC
33
33
  }
34
34
 
35
35
  async function fetchProjectId(accessToken: string): Promise<string | undefined> {
36
- const headers = {
37
- Authorization: `Bearer ${accessToken}`,
38
- "Content-Type": "application/json",
39
- ...getAntigravityHeaders("gemini-cli"),
40
- "Client-Metadata": getAntigravityHeaders()["Client-Metadata"],
41
- };
36
+ const headers = getAntigravityBootstrapHeaders(accessToken);
42
37
 
43
38
  for (const endpoint of LOAD_ENDPOINTS) {
44
39
  try {
@@ -46,11 +41,7 @@ async function fetchProjectId(accessToken: string): Promise<string | undefined>
46
41
  method: "POST",
47
42
  headers,
48
43
  body: JSON.stringify({
49
- metadata: {
50
- ideType: "ANTIGRAVITY",
51
- platform: process.platform === "win32" ? "WINDOWS" : "MACOS",
52
- pluginType: "GEMINI",
53
- },
44
+ metadata: getAntigravityLoadCodeAssistMetadata(),
54
45
  }),
55
46
  });
56
47
  if (!response.ok) continue;
@@ -130,6 +121,7 @@ export async function loginAntigravity(callbacks: AntigravityLoginCallbacks, opt
130
121
  headers: {
131
122
  "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
132
123
  Accept: "*/*",
124
+ "Accept-Encoding": "gzip, deflate, br",
133
125
  "User-Agent": getAntigravityHeaders("gemini-cli")["User-Agent"],
134
126
  },
135
127
  body: new URLSearchParams({
@@ -235,11 +227,7 @@ async function refreshAccountToken(
235
227
  const response = await fetch("https://oauth2.googleapis.com/token", {
236
228
  method: "POST",
237
229
  signal,
238
- headers: {
239
- "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
240
- Accept: "*/*",
241
- "User-Agent": getAntigravityHeaders("gemini-cli")["User-Agent"],
242
- },
230
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
243
231
  body: new URLSearchParams({
244
232
  client_id: clientCredentials.clientId,
245
233
  ...(clientCredentials.clientSecret ? { client_secret: clientCredentials.clientSecret } : {}),
@@ -22,7 +22,10 @@ function supportsMultimodalFunctionResponse(modelId: string): boolean {
22
22
  }
23
23
 
24
24
  function isGemini3Model(modelId: string): boolean {
25
- return /^gemini(?:-live)?-3(?:[.-]|$)/i.test(modelId);
25
+ // "gemini-pro-agent" is the Antigravity agent-mode route for Gemini 3.1 Pro;
26
+ // it needs the same thought-signature sentinel as the versioned gemini-3
27
+ // routes.
28
+ return /^gemini(?:-live)?-3(?:[.-]|$)/i.test(modelId) || /^gemini-pro-agent$/i.test(modelId);
26
29
  }
27
30
 
28
31
  function isValidThoughtSignature(signature: unknown): signature is string {
@@ -333,13 +336,51 @@ function geminiProThinkingLevel(modelId: string, headerStyle: HeaderStyle, level
333
336
  return "low";
334
337
  }
335
338
 
339
+ type FlashTier = "low" | "medium" | "high";
340
+
341
+ /**
342
+ * Live Antigravity routes for the versioned flash generations, keyed by the
343
+ * public (prefix-stripped) model id. Mirrors the upstream cortexkit
344
+ * model-resolver: each thinking tier maps to a distinct live route plus a
345
+ * numeric thinking budget (-1 = dynamic for 3.7/3.8). 3.5-flash has no
346
+ * per-tier routes of its own and rides the older gemini-3 routes instead.
347
+ */
348
+ const ANTIGRAVITY_FLASH_ROUTES: Record<string, {
349
+ routes: Record<FlashTier, string>;
350
+ budgets: Record<FlashTier, number>;
351
+ }> = {
352
+ "gemini-3.8-flash": {
353
+ routes: { low: "gemini-3.8-flash-low", medium: "gemini-3.8-flash-medium", high: "gemini-3.8-flash-high" },
354
+ budgets: { low: -1, medium: -1, high: -1 },
355
+ },
356
+ "gemini-3.7-flash": {
357
+ routes: { low: "gemini-3.7-flash-low", medium: "gemini-3.7-flash-medium", high: "gemini-3.7-flash-high" },
358
+ budgets: { low: -1, medium: -1, high: -1 },
359
+ },
360
+ "gemini-3.6-flash": {
361
+ routes: { low: "gemini-3.6-flash-low", medium: "gemini-3.6-flash-medium", high: "gemini-3.6-flash-high" },
362
+ budgets: { low: 1_000, medium: 4_000, high: 10_000 },
363
+ },
364
+ "gemini-3.5-flash": {
365
+ routes: { low: "gemini-3.5-flash-extra-low", medium: "gemini-3.5-flash-low", high: "gemini-3-flash-agent" },
366
+ budgets: { low: 1_000, medium: 4_000, high: 10_000 },
367
+ },
368
+ };
369
+
370
+ function flashTier(level: "minimal" | "low" | "medium" | "high" | undefined): FlashTier {
371
+ if (level === "high") return "high";
372
+ if (level === undefined || level === "medium") return "medium";
373
+ return "low";
374
+ }
375
+
336
376
  function resolveActualModel(
337
377
  model: AntigravityModel,
338
378
  options?: SimpleStreamOptions,
339
379
  ): { actualModel: string; thinkingConfig?: Record<string, unknown> } {
340
380
  const headerStyle = getModelHeaderStyle(model);
341
381
  const requested = model.id.replace(/^antigravity-/i, "");
342
- const level = reasoningLevel(options) ?? "low";
382
+ const requestedLevel = reasoningLevel(options);
383
+ const level = requestedLevel ?? "low";
343
384
  let effective = requested;
344
385
  const requestedLower = requested.toLowerCase();
345
386
 
@@ -354,6 +395,27 @@ function resolveActualModel(
354
395
 
355
396
  const lower = effective.toLowerCase();
356
397
 
398
+ if (headerStyle === "antigravity") {
399
+ // Current Antigravity catalog: versioned flash generations and 3.1 Pro
400
+ // route to per-tier live models with numeric thinking budgets. Requests
401
+ // without an explicit level default to the medium tier for flash.
402
+ const flash = ANTIGRAVITY_FLASH_ROUTES[lower];
403
+ if (flash) {
404
+ const tier = flashTier(requestedLevel);
405
+ return {
406
+ actualModel: flash.routes[tier],
407
+ thinkingConfig: { thinkingBudget: flash.budgets[tier], includeThoughts: true },
408
+ };
409
+ }
410
+ if (/^gemini-3\.1-pro$/.test(lower)) {
411
+ const high = level === "high";
412
+ return {
413
+ actualModel: high ? "gemini-pro-agent" : "gemini-3.1-pro-low",
414
+ thinkingConfig: { thinkingBudget: high ? 10_001 : 1_001, includeThoughts: true },
415
+ };
416
+ }
417
+ }
418
+
357
419
  if (/^gemini-3(?:\.\d+)?-pro/.test(lower)) {
358
420
  // Live Antigravity currently rejects gemini-3.1-pro-high with a generic
359
421
  // 400 INVALID_ARGUMENT, while gemini-3.1-pro-low works. Keep the public
@@ -370,7 +432,11 @@ function resolveActualModel(
370
432
  if (lower.includes("claude") && lower.includes("thinking")) {
371
433
  const budgets = options?.thinkingBudgets ?? {};
372
434
  const budget = budgetForLevel(level, budgets);
373
- return { actualModel: effective, thinkingConfig: { thinking_budget: budget, include_thoughts: true } };
435
+ // Sonnet 4.6 thinking is served by the base claude-sonnet-4-6 route with
436
+ // thinking enabled via the budget, while Opus keeps a dedicated
437
+ // -thinking route.
438
+ const actualModel = /^claude-sonnet/.test(lower) ? effective.replace(/-thinking$/i, "") : effective;
439
+ return { actualModel, thinkingConfig: { thinking_budget: budget, include_thoughts: true } };
374
440
  }
375
441
  if (lower.includes("gemini-2.5")) {
376
442
  const budgets = options?.thinkingBudgets ?? {};
@@ -415,9 +481,8 @@ export function buildPayload(model: AntigravityModel, context: Context, options?
415
481
  }
416
482
 
417
483
  export function extraHeadersForPayload(payload: Record<string, unknown>): Record<string, string> {
418
- const model = typeof payload.model === "string" ? payload.model.toLowerCase() : "";
419
- if (model.includes("claude") && model.includes("thinking")) {
420
- return { "anthropic-beta": "interleaved-thinking-2025-05-14" };
421
- }
484
+ void payload;
485
+ // Native agy CLI content requests do not send anthropic-beta or the old
486
+ // Cloud SDK metadata headers. Thinking is encoded in generationConfig only.
422
487
  return {};
423
488
  }
@@ -71,7 +71,7 @@ async function sendAntigravityRequest(
71
71
  const headers = new Headers({
72
72
  Authorization: `Bearer ${apiKey}`,
73
73
  "Content-Type": "application/json",
74
- Accept: "text/event-stream",
74
+ ...(headerStyle === "antigravity" ? { "Accept-Encoding": "gzip" } : { Accept: "text/event-stream" }),
75
75
  ...getAntigravityHeaders(headerStyle),
76
76
  ...requestHeaders,
77
77
  });
@@ -79,6 +79,18 @@ async function sendAntigravityRequest(
79
79
  if (value === null) headers.delete(name);
80
80
  else headers.set(name, value);
81
81
  }
82
+ if (headerStyle === "antigravity") {
83
+ // Match native agy content traffic and prevent host/provider headers from
84
+ // leaking into the Cloud Code proxy. x-goog-user-project in particular is
85
+ // known to turn otherwise valid requests into 403 responses.
86
+ headers.set("User-Agent", getAntigravityHeaders("antigravity")["User-Agent"]);
87
+ headers.set("Accept-Encoding", "gzip");
88
+ headers.delete("X-Goog-Api-Client");
89
+ headers.delete("Client-Metadata");
90
+ headers.delete("X-Goog-User-Project");
91
+ headers.delete("anthropic-beta");
92
+ headers.delete("Accept");
93
+ }
82
94
  response = await fetch(`${endpoint}/v1internal:streamGenerateContent?alt=sse`, {
83
95
  method: "POST",
84
96
  signal: options?.signal,
@@ -0,0 +1,23 @@
1
+ ---
2
+ description: Independent frontier-model code review gate for substantive code changes made by a non-frontier parent. Use after implementation and targeted checks, before finalizing. Read-only review of the actual diff and surrounding code; use research for ordinary evidence gathering and oracle for architecture or high-stakes second opinions.
3
+ icon: eye
4
+ models: [openai-codex/gpt-5.6-sol, zai/glm-5.3]
5
+ notForParentModels: [openai-codex/gpt-5.6-sol*, zai/glm-5.3]
6
+ thinking: high
7
+ tools: [read, grep, bash]
8
+ ---
9
+
10
+ # Frontier code review
11
+
12
+ Review the implementation independently. Inspect the actual diff and the
13
+ surrounding contracts; do not accept the implementer's summary as evidence.
14
+
15
+ Look for correctness bugs, regressions, broken invariants, unsafe edge cases,
16
+ missing error handling, concurrency/state mistakes, security issues, and tests
17
+ that fail to cover a material behavior change. Prefer a small number of
18
+ actionable findings over stylistic commentary or speculative rewrites.
19
+
20
+ Do not edit source or tests. Run narrow read-only checks when they materially
21
+ increase confidence. For each finding, give severity, rationale, and precise
22
+ file/line evidence. If there are no findings, say so explicitly and name any
23
+ important residual risk or verification gap.
@@ -13,7 +13,7 @@ not broaden scope or make product/architecture decisions for the parent.
13
13
 
14
14
  For UI work, preserve the existing design language and inspect supplied visual
15
15
  references with an image-capable model. Report unavailable capabilities instead
16
- of claiming visual verification. Actual browser QA belongs to browser-qa.
16
+ of claiming visual verification. Actual user-interface QA belongs to ui-qa.
17
17
 
18
18
  Run relevant targeted checks and report changed paths plus their results. If
19
19
  requirements conflict or the task exceeds your capabilities, stop with a
@@ -0,0 +1,16 @@
1
+ {
2
+ // Presets are available-model pools. Agent candidate order still comes from
3
+ // each agent's Markdown frontmatter; pool order never reorders candidates.
4
+ "cheap": {
5
+ "description": "GLM pool: economical workers plus GLM-5.3 for frontier-review/oracle.",
6
+ "models": ["zai/glm-5-turbo", "zai/glm-5.3-flash", "zai/glm-5.3"]
7
+ },
8
+ "gpt": {
9
+ "description": "GPT pool: Luna/Terra workers; Sol is available to frontier-review/oracle.",
10
+ "models": ["openai-codex/gpt-5.6-luna", "openai-codex/gpt-5.6-terra", "openai-codex/gpt-5.6-sol"]
11
+ },
12
+ "deep": {
13
+ "description": "Mixed pool; workers retain economical candidate order and frontier-review/oracle use strong models.",
14
+ "models": ["zai/glm-5-turbo", "zai/glm-5.3-flash", "openai-codex/gpt-5.6-luna", "openai-codex/gpt-5.6-terra", "openai-codex/gpt-5.6-sol", "zai/glm-5.3"]
15
+ }
16
+ }
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Read-only evidence gathering - search files, trace behavior, investigate hypotheses, or independently review a diff. Return findings with paths, not raw source. Use verify for running checks and implement for changes.
2
+ description: Read-only evidence gathering - search files, trace behavior, investigate hypotheses, or analyze a focused review question. Return findings with paths, not raw source. Use frontier-review for the post-implementation code-review gate when available, verify for running checks, and implement for changes.
3
3
  icon: search
4
4
  models: [zai/glm-5-turbo, openai-codex/gpt-5.6-luna]
5
5
  thinking: low
@@ -9,8 +9,10 @@ tools: [read, grep]
9
9
  # Research
10
10
 
11
11
  Investigate the assigned question within scope. Read and compare evidence; do
12
- not edit files or invent missing facts. A review is a fresh investigation of
13
- the supplied diff, not approval based on the implementer's summary.
12
+ not edit files or invent missing facts. When assigned a review question, make
13
+ it a fresh investigation of the relevant code, not approval based on another
14
+ agent's summary. The broad post-implementation review gate belongs to
15
+ frontier-review when that role is available.
14
16
 
15
17
  Return the answer and supporting file:line references, distinguishing confirmed
16
18
  findings from hypotheses. Report gaps or a concrete blocker when the available