pi-ui-extend 1.0.42 → 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 (233) hide show
  1. package/README.md +41 -12
  2. package/dist/app/app.d.ts +10 -0
  3. package/dist/app/app.js +132 -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 +3 -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 +51 -34
  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 +14 -0
  17. package/dist/app/commands/reload-context-inventory.js +12 -1
  18. package/dist/app/input/autocomplete-controller.js +61 -34
  19. package/dist/app/input/input-action-controller.d.ts +2 -0
  20. package/dist/app/input/input-action-controller.js +8 -1
  21. package/dist/app/input/input-controller.d.ts +2 -1
  22. package/dist/app/input/input-controller.js +7 -2
  23. package/dist/app/input/prompt-enhancer-controller.js +53 -35
  24. package/dist/app/input/voice-controller.d.ts +41 -45
  25. package/dist/app/input/voice-controller.js +351 -419
  26. package/dist/app/model/model-usage-controller.js +17 -7
  27. package/dist/app/model/model-usage-status.d.ts +4 -1
  28. package/dist/app/model/model-usage-status.js +270 -46
  29. package/dist/app/popup/menu-items-controller.d.ts +13 -3
  30. package/dist/app/popup/menu-items-controller.js +37 -21
  31. package/dist/app/popup/popup-action-controller.d.ts +12 -2
  32. package/dist/app/popup/popup-action-controller.js +77 -24
  33. package/dist/app/popup/popup-menu-controller.d.ts +36 -14
  34. package/dist/app/popup/popup-menu-controller.js +239 -69
  35. package/dist/app/rendering/dcp-stats.d.ts +9 -4
  36. package/dist/app/rendering/dcp-stats.js +40 -425
  37. package/dist/app/rendering/popup-menu-renderer.d.ts +3 -5
  38. package/dist/app/rendering/popup-menu-renderer.js +42 -37
  39. package/dist/app/rendering/render-controller.js +23 -2
  40. package/dist/app/rendering/status-line-renderer.d.ts +5 -0
  41. package/dist/app/rendering/status-line-renderer.js +41 -5
  42. package/dist/app/rendering/tab-line-renderer.js +26 -20
  43. package/dist/app/runtime.d.ts +12 -1
  44. package/dist/app/runtime.js +120 -12
  45. package/dist/app/screen/mouse-controller.d.ts +2 -0
  46. package/dist/app/screen/mouse-controller.js +17 -7
  47. package/dist/app/screen/status-controller.d.ts +4 -0
  48. package/dist/app/screen/status-controller.js +5 -0
  49. package/dist/app/session/lazy-session-manager.js +34 -0
  50. package/dist/app/session/session-event-controller.d.ts +1 -0
  51. package/dist/app/session/session-event-controller.js +10 -1
  52. package/dist/app/session/session-history.d.ts +1 -0
  53. package/dist/app/session/session-history.js +12 -1
  54. package/dist/app/session/session-lifecycle-controller.d.ts +6 -1
  55. package/dist/app/session/session-lifecycle-controller.js +10 -1
  56. package/dist/app/session/tabs-controller.d.ts +25 -1
  57. package/dist/app/session/tabs-controller.js +442 -153
  58. package/dist/app/subagents/subagents-widget-controller.d.ts +1 -0
  59. package/dist/app/subagents/subagents-widget-controller.js +6 -0
  60. package/dist/app/types.d.ts +11 -1
  61. package/dist/app/workspace/workspace-actions-controller.js +10 -2
  62. package/dist/app/workspace/workspace-undo.d.ts +1 -0
  63. package/dist/app/workspace/workspace-undo.js +1 -0
  64. package/dist/bundled-extensions/question/index.js +9 -1
  65. package/dist/bundled-extensions/question/remote.d.ts +4 -0
  66. package/dist/bundled-extensions/question/remote.js +33 -0
  67. package/dist/bundled-extensions/telegram-connector/bot.d.ts +43 -0
  68. package/dist/bundled-extensions/telegram-connector/bot.js +166 -0
  69. package/dist/bundled-extensions/telegram-connector/config.d.ts +8 -0
  70. package/dist/bundled-extensions/telegram-connector/config.js +87 -0
  71. package/dist/bundled-extensions/telegram-connector/coordinator.d.ts +66 -0
  72. package/dist/bundled-extensions/telegram-connector/coordinator.js +413 -0
  73. package/dist/bundled-extensions/telegram-connector/index.d.ts +3 -0
  74. package/dist/bundled-extensions/telegram-connector/index.js +195 -0
  75. package/dist/bundled-extensions/terminal-bell/index.d.ts +0 -8
  76. package/dist/bundled-extensions/terminal-bell/index.js +0 -76
  77. package/dist/bundled-extensions/workspace-undo/index.d.ts +26 -0
  78. package/dist/bundled-extensions/workspace-undo/index.js +191 -0
  79. package/dist/config.d.ts +21 -2
  80. package/dist/config.js +159 -32
  81. package/dist/default-pix-config.js +20 -10
  82. package/dist/schemas/pi-tools-suite-schema.d.ts +8 -4
  83. package/dist/schemas/pi-tools-suite-schema.js +11 -5
  84. package/dist/schemas/pix-schema.d.ts +12 -2
  85. package/dist/schemas/pix-schema.js +37 -9
  86. package/dist/schemas/tasks-schema.js +1 -1
  87. package/docs/concurrency.md +3 -1
  88. package/docs/desktop-mvp.md +10 -5
  89. package/docs/desktop-task-manager.md +81 -28
  90. package/docs/release.md +30 -6
  91. package/external/pi-tools-suite/README.md +165 -39
  92. package/external/pi-tools-suite/docs/session-recovery.md +7 -0
  93. package/external/pi-tools-suite/docs/subagent-model-pools.md +12 -5
  94. package/external/pi-tools-suite/docs/ui-qa-subagent.md +440 -0
  95. package/external/pi-tools-suite/package.json +6 -1
  96. package/external/pi-tools-suite/src/antigravity-auth/auth-store.ts +2 -1
  97. package/external/pi-tools-suite/src/antigravity-auth/constants.ts +9 -3
  98. package/external/pi-tools-suite/src/antigravity-auth/headers.ts +41 -3
  99. package/external/pi-tools-suite/src/antigravity-auth/models.ts +94 -21
  100. package/external/pi-tools-suite/src/antigravity-auth/oauth.ts +5 -17
  101. package/external/pi-tools-suite/src/antigravity-auth/payload.ts +72 -7
  102. package/external/pi-tools-suite/src/antigravity-auth/stream.ts +13 -1
  103. package/external/pi-tools-suite/src/async-subagents/agents/implement.md +1 -1
  104. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/backends/browser.mjs +346 -0
  105. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/backends/desktop.mjs +1038 -0
  106. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/backends/tui.mjs +759 -0
  107. package/external/pi-tools-suite/src/async-subagents/agents/{browser-qa → ui-qa/browser}/scripts/browser-qa-runner.mjs +32 -23
  108. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/chrome-devtools/chrome-devtools-provider.mjs +895 -0
  109. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/linux/linux-atspi.py +494 -0
  110. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/macos/macos-accessibility.swift +1085 -0
  111. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/native-terminal/bridge-client.mjs +50 -0
  112. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/native-terminal/native-terminal-host.mjs +501 -0
  113. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/windows/windows-uia.ps1 +454 -0
  114. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/browser-auth.md +114 -0
  115. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/browser-chrome-devtools.md +91 -0
  116. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/browser-playwright.md +145 -0
  117. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/browser.md +82 -0
  118. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/desktop-linux.md +26 -0
  119. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/desktop-macos.md +29 -0
  120. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/desktop-windows.md +23 -0
  121. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/desktop.md +54 -0
  122. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/tui-native-terminal.md +59 -0
  123. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/tui-pty.md +37 -0
  124. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/tui.md +60 -0
  125. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/scripts/ui-qa-runner.mjs +535 -0
  126. package/external/pi-tools-suite/src/async-subagents/agents/ui-qa.md +75 -0
  127. package/external/pi-tools-suite/src/async-subagents/commands.ts +1 -1
  128. package/external/pi-tools-suite/src/async-subagents/core/agent-strategy.ts +1 -1
  129. package/external/pi-tools-suite/src/async-subagents/core/agents-dir.ts +0 -2
  130. package/external/pi-tools-suite/src/async-subagents/core/browser-qa.ts +16 -2
  131. package/external/pi-tools-suite/src/async-subagents/core/config.ts +40 -17
  132. package/external/pi-tools-suite/src/async-subagents/core/model-selection.ts +2 -1
  133. package/external/pi-tools-suite/src/async-subagents/core/registry.ts +158 -33
  134. package/external/pi-tools-suite/src/async-subagents/core/routing.ts +7 -4
  135. package/external/pi-tools-suite/src/async-subagents/core/spawn.ts +34 -24
  136. package/external/pi-tools-suite/src/async-subagents/core/ultrawork-auto.ts +51 -45
  137. package/external/pi-tools-suite/src/async-subagents/lib.ts +9 -1
  138. package/external/pi-tools-suite/src/async-subagents/tools/spawn.ts +0 -1
  139. package/external/pi-tools-suite/src/async-subagents/tools/subagents.ts +2 -2
  140. package/external/pi-tools-suite/src/coding-discipline/index.ts +90 -59
  141. package/external/pi-tools-suite/src/config.ts +14 -0
  142. package/external/pi-tools-suite/src/context-gateway/accounting-log.ts +282 -0
  143. package/external/pi-tools-suite/src/context-gateway/config.ts +66 -1
  144. package/external/pi-tools-suite/src/context-gateway/efficiency.ts +414 -0
  145. package/external/pi-tools-suite/src/context-gateway/enforcement.ts +123 -3
  146. package/external/pi-tools-suite/src/context-gateway/index.ts +137 -4
  147. package/external/pi-tools-suite/src/context-gateway/storeless-capabilities.ts +5 -5
  148. package/external/pi-tools-suite/src/context-gateway/telemetry.ts +2 -2
  149. package/external/pi-tools-suite/src/context-gateway/types.ts +8 -1
  150. package/external/pi-tools-suite/src/dcp/auto-compress-budget.ts +39 -4
  151. package/external/pi-tools-suite/src/dcp/auto-compress.ts +41 -14
  152. package/external/pi-tools-suite/src/dcp/commands.ts +14 -156
  153. package/external/pi-tools-suite/src/dcp/compress-tool.ts +8 -2
  154. package/external/pi-tools-suite/src/dcp/compression-progress.ts +22 -0
  155. package/external/pi-tools-suite/src/dcp/config.ts +58 -4
  156. package/external/pi-tools-suite/src/dcp/conversation-index.ts +36 -9
  157. package/external/pi-tools-suite/src/dcp/diagnostics.ts +41 -0
  158. package/external/pi-tools-suite/src/dcp/fresh-tool-results.ts +38 -0
  159. package/external/pi-tools-suite/src/dcp/index.ts +338 -66
  160. package/external/pi-tools-suite/src/dcp/journal.ts +126 -4
  161. package/external/pi-tools-suite/src/dcp/progress-controller.ts +2 -1
  162. package/external/pi-tools-suite/src/dcp/pruner-candidates.ts +92 -2
  163. package/external/pi-tools-suite/src/dcp/pruner-nudge.ts +36 -33
  164. package/external/pi-tools-suite/src/dcp/pruner.ts +1 -0
  165. package/external/pi-tools-suite/src/dcp/routine-pressure.ts +86 -0
  166. package/external/pi-tools-suite/src/dcp/state.ts +9 -0
  167. package/external/pi-tools-suite/src/dcp/statistics.d.ts +8 -0
  168. package/external/pi-tools-suite/src/dcp/statistics.js +156 -0
  169. package/external/pi-tools-suite/src/default-pi-tools-suite-config.ts +68 -16
  170. package/external/pi-tools-suite/src/lib/project.ts +36 -1
  171. package/external/pi-tools-suite/src/model-tools/index.ts +10 -7
  172. package/external/pi-tools-suite/src/repo-discovery/index.ts +304 -4
  173. package/external/pi-tools-suite/src/resource-registry/index.ts +282 -21
  174. package/external/pi-tools-suite/src/session-recovery/index.ts +17 -0
  175. package/external/pi-tools-suite/src/todo/index.ts +21 -0
  176. package/external/pi-tools-suite/src/todo/todo.ts +19 -1
  177. package/external/pi-tools-suite/src/tool-descriptions.ts +44 -15
  178. package/package.json +7 -8
  179. package/schemas/pi-tools-suite.json +44 -12
  180. package/schemas/pix.json +109 -15
  181. package/schemas/tasks.json +1 -2
  182. package/skills/simplify/SKILL.md +33 -5
  183. package/external/pi-tools-suite/docs/browser-qa-subagent.md +0 -196
  184. package/external/pi-tools-suite/src/async-subagents/agents/browser-qa.md +0 -598
  185. package/skills/playwright-cli/SKILL.md +0 -420
  186. package/skills/playwright-cli/references/element-attributes.md +0 -23
  187. package/skills/playwright-cli/references/playwright-tests.md +0 -50
  188. package/skills/playwright-cli/references/request-mocking.md +0 -87
  189. package/skills/playwright-cli/references/running-code.md +0 -241
  190. package/skills/playwright-cli/references/session-management.md +0 -273
  191. package/skills/playwright-cli/references/spec-driven-testing.md +0 -311
  192. package/skills/playwright-cli/references/storage-state.md +0 -290
  193. package/skills/playwright-cli/references/test-generation.md +0 -142
  194. package/skills/playwright-cli/references/tracing.md +0 -154
  195. package/skills/playwright-cli/references/video-recording.md +0 -147
  196. package/skills/spec-wiki/SKILL.md +0 -55
  197. package/skills/spec-wiki/evals/evals.json +0 -132
  198. package/skills/spec-wiki/evals/files/bootstrap/architecture/rfc-007.md +0 -14
  199. package/skills/spec-wiki/evals/files/bootstrap/docs/how-to-pay.md +0 -4
  200. package/skills/spec-wiki/evals/files/bootstrap/docs/overview.md +0 -9
  201. package/skills/spec-wiki/evals/files/bootstrap/requirements/payment-behavior.md +0 -17
  202. package/skills/spec-wiki/evals/files/bootstrap/src/payments.ts +0 -12
  203. package/skills/spec-wiki/evals/files/bootstrap/tests/payments.test.ts +0 -11
  204. package/skills/spec-wiki/evals/files/focused/src/session.ts +0 -5
  205. package/skills/spec-wiki/evals/files/focused/tests/session.test.ts +0 -17
  206. package/skills/spec-wiki/evals/files/maintenance/low-signal/incoming/capture.txt +0 -2
  207. package/skills/spec-wiki/evals/files/maintenance/low-signal/src/capture.ts +0 -3
  208. package/skills/spec-wiki/evals/files/maintenance/move/docs/old-job-contract.md +0 -18
  209. package/skills/spec-wiki/evals/files/maintenance/move/src/job.ts +0 -5
  210. package/skills/spec-wiki/evals/files/maintenance/new-relation/docs/session-refresh.md +0 -24
  211. package/skills/spec-wiki/evals/files/maintenance/new-relation/incoming/refresh-worker.ts +0 -7
  212. package/skills/spec-wiki/evals/files/maintenance/new-relation/src/session.ts +0 -7
  213. package/skills/spec-wiki/evals/files/maintenance/no-impact/docs/auth-contract.md +0 -17
  214. package/skills/spec-wiki/evals/files/maintenance/no-impact/incoming/telemetry-format.ts +0 -3
  215. package/skills/spec-wiki/evals/files/maintenance/no-impact/src/auth.ts +0 -3
  216. package/skills/spec-wiki/evals/files/query/docs/how-to-run-jobs.md +0 -4
  217. package/skills/spec-wiki/evals/files/query/docs/spec-overview.md +0 -9
  218. package/skills/spec-wiki/evals/files/query/features/jobs/cancellation-contract.md +0 -15
  219. package/skills/spec-wiki/evals/files/query/features/jobs/retry-spec.md +0 -6
  220. package/skills/spec-wiki/evals/maintenance_regression.py +0 -311
  221. package/skills/spec-wiki/evals/retrieval-eval.md +0 -37
  222. package/skills/spec-wiki/evals/retrieval-evals.json +0 -37
  223. package/skills/spec-wiki/evals/trigger-evals.json +0 -94
  224. package/skills/spec-wiki/references/bootstrap.md +0 -100
  225. package/skills/spec-wiki/references/focused-spec.md +0 -117
  226. package/skills/spec-wiki/references/index-schema.md +0 -330
  227. package/skills/spec-wiki/references/maintenance.md +0 -134
  228. package/skills/spec-wiki/references/query.md +0 -74
  229. package/skills/spec-wiki/scripts/spec_wiki.py +0 -2076
  230. /package/external/pi-tools-suite/src/async-subagents/agents/{browser-qa → ui-qa/browser}/examples/qa-auth.example.jsonc +0 -0
  231. /package/external/pi-tools-suite/src/async-subagents/agents/{browser-qa → ui-qa/browser}/examples/qa-flow.example.jsonc +0 -0
  232. /package/external/pi-tools-suite/src/async-subagents/agents/{browser-qa → ui-qa/browser}/vendor/fflate.LICENSE +0 -0
  233. /package/external/pi-tools-suite/src/async-subagents/agents/{browser-qa → ui-qa/browser}/vendor/fflate.mjs +0 -0
@@ -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,
@@ -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