synabun 2.1.0 → 2.2.1

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 (332) hide show
  1. package/CHANGELOG.md +139 -0
  2. package/README.md +1 -1
  3. package/docs/whatsapp.md +11 -11
  4. package/lib/client-config-repair.js +13 -9
  5. package/lib/external-tools.js +6 -5
  6. package/lib/update-snapshot.js +77 -3
  7. package/lib/virustotal.mjs +12 -1
  8. package/mcp-server/dist/index.js +1 -1
  9. package/mcp-server/dist/index.js.map +1 -1
  10. package/mcp-server/dist/services/budget-judgments.d.ts +1 -1
  11. package/mcp-server/dist/services/budget-judgments.d.ts.map +1 -1
  12. package/mcp-server/dist/services/budget-judgments.js +5 -3
  13. package/mcp-server/dist/services/budget-judgments.js.map +1 -1
  14. package/mcp-server/dist/services/identity.d.ts +2 -2
  15. package/mcp-server/dist/services/identity.js +2 -2
  16. package/mcp-server/dist/services/memory-sessions.d.ts +1 -1
  17. package/mcp-server/dist/services/memory-sessions.d.ts.map +1 -1
  18. package/mcp-server/dist/services/memory-sessions.js +28 -2
  19. package/mcp-server/dist/services/memory-sessions.js.map +1 -1
  20. package/mcp-server/dist/services/neural-interface.d.ts +2 -1
  21. package/mcp-server/dist/services/neural-interface.d.ts.map +1 -1
  22. package/mcp-server/dist/services/neural-interface.js.map +1 -1
  23. package/mcp-server/dist/services/server-instructions.d.ts.map +1 -1
  24. package/mcp-server/dist/services/server-instructions.js +2 -1
  25. package/mcp-server/dist/services/server-instructions.js.map +1 -1
  26. package/mcp-server/dist/services/tool-catalog.js +1 -1
  27. package/mcp-server/dist/services/tool-catalog.js.map +1 -1
  28. package/mcp-server/dist/services/tool-list.d.ts +1 -1
  29. package/mcp-server/dist/services/tool-list.d.ts.map +1 -1
  30. package/mcp-server/dist/services/tool-runtime.d.ts +2 -2
  31. package/mcp-server/dist/services/tool-runtime.d.ts.map +1 -1
  32. package/mcp-server/dist/services/tool-runtime.js +1 -1
  33. package/mcp-server/dist/services/tool-runtime.js.map +1 -1
  34. package/mcp-server/dist/services/typesafe-config.js +1 -1
  35. package/mcp-server/dist/services/typesafe-config.js.map +1 -1
  36. package/mcp-server/dist/tools/agents.d.ts +8 -8
  37. package/mcp-server/dist/tools/agents.d.ts.map +1 -1
  38. package/mcp-server/dist/tools/agents.js +10 -9
  39. package/mcp-server/dist/tools/agents.js.map +1 -1
  40. package/mcp-server/dist/tools/choice.d.ts +6 -0
  41. package/mcp-server/dist/tools/choice.d.ts.map +1 -1
  42. package/mcp-server/dist/tools/choice.js +18 -13
  43. package/mcp-server/dist/tools/choice.js.map +1 -1
  44. package/mcp-server/dist/tools/git-tools.js +2 -2
  45. package/mcp-server/dist/tools/git-tools.js.map +1 -1
  46. package/mcp-server/dist/tools/morelogin.d.ts.map +1 -1
  47. package/mcp-server/dist/tools/morelogin.js +9 -6
  48. package/mcp-server/dist/tools/morelogin.js.map +1 -1
  49. package/mcp-server/dist/tools/skill-tools.d.ts +8 -8
  50. package/mcp-server/dist/tools/skill-tools.d.ts.map +1 -1
  51. package/mcp-server/dist/tools/skill-tools.js +11 -8
  52. package/mcp-server/dist/tools/skill-tools.js.map +1 -1
  53. package/mcp-server/package-lock.json +2 -2
  54. package/mcp-server/package.json +1 -1
  55. package/mcp-server/src/index.ts +1 -1
  56. package/mcp-server/src/services/budget-judgments.ts +5 -3
  57. package/mcp-server/src/services/identity.ts +2 -2
  58. package/mcp-server/src/services/memory-sessions.ts +24 -3
  59. package/mcp-server/src/services/neural-interface.ts +2 -1
  60. package/mcp-server/src/services/server-instructions.ts +2 -1
  61. package/mcp-server/src/services/tool-catalog.ts +1 -1
  62. package/mcp-server/src/services/tool-list.ts +1 -1
  63. package/mcp-server/src/services/tool-runtime.ts +2 -2
  64. package/mcp-server/src/services/typesafe-config.ts +1 -1
  65. package/mcp-server/src/tools/agents.ts +10 -9
  66. package/mcp-server/src/tools/choice.ts +17 -12
  67. package/mcp-server/src/tools/git-tools.ts +2 -2
  68. package/mcp-server/src/tools/morelogin.ts +6 -4
  69. package/mcp-server/src/tools/skill-tools.ts +11 -8
  70. package/neural-interface/i18n/en.json +504 -39
  71. package/neural-interface/i18n/pt-BR.json +504 -39
  72. package/neural-interface/lib/agent-sandbox-elevation.js +6 -0
  73. package/neural-interface/lib/antigravity/acp-client-host.js +554 -0
  74. package/neural-interface/lib/antigravity/acp-connection.js +299 -0
  75. package/neural-interface/lib/antigravity/bypass.js +100 -0
  76. package/neural-interface/lib/antigravity/catalog.js +273 -0
  77. package/neural-interface/lib/antigravity/home.js +260 -0
  78. package/neural-interface/lib/antigravity/migrate-gemini.js +139 -0
  79. package/neural-interface/lib/antigravity/panel-bridge.js +1058 -0
  80. package/neural-interface/lib/antigravity/policy-hook.mjs +78 -0
  81. package/neural-interface/lib/antigravity/policy.js +74 -0
  82. package/neural-interface/lib/antigravity/tool-call.js +178 -0
  83. package/neural-interface/lib/antigravity/transcripts.js +252 -0
  84. package/neural-interface/lib/antigravity/usage.js +43 -0
  85. package/neural-interface/lib/assistant-api.js +1 -0
  86. package/neural-interface/lib/assistant-brains/antigravity.js +423 -0
  87. package/neural-interface/lib/assistant-brains/codex.js +6 -1
  88. package/neural-interface/lib/assistant-budget-planner.js +7 -3
  89. package/neural-interface/lib/assistant-budget-split.js +42 -15
  90. package/neural-interface/lib/assistant-catalog.js +76 -9
  91. package/neural-interface/lib/assistant-config.js +6 -3
  92. package/neural-interface/lib/assistant-dispatch.js +211 -50
  93. package/neural-interface/lib/assistant-envelope.js +153 -1
  94. package/neural-interface/lib/assistant-evidence.js +80 -0
  95. package/neural-interface/lib/assistant-hidden-models.js +7 -5
  96. package/neural-interface/lib/assistant-persona.js +16 -11
  97. package/neural-interface/lib/assistant-plan-permissions.js +15 -0
  98. package/neural-interface/lib/assistant-router.js +237 -35
  99. package/neural-interface/lib/assistant-runtime.js +158 -12
  100. package/neural-interface/lib/assistant-task-prompt.js +10 -8
  101. package/neural-interface/lib/assistant-tools.js +2 -2
  102. package/neural-interface/lib/assistant-usage.js +29 -0
  103. package/neural-interface/lib/backup-service.js +6 -1
  104. package/neural-interface/lib/browser-guard-cdp.js +5 -4
  105. package/neural-interface/lib/browser-network-guard.js +274 -82
  106. package/neural-interface/lib/browser-tool-policy.js +12 -7
  107. package/neural-interface/lib/claude-agent-bridge.js +7 -0
  108. package/neural-interface/lib/claude-history-cache.js +210 -0
  109. package/neural-interface/lib/claude-model-catalog.js +5 -1
  110. package/neural-interface/lib/cli-install-api.js +1 -1
  111. package/neural-interface/lib/cli-install.js +160 -31
  112. package/neural-interface/lib/cli-resolver.js +9 -2
  113. package/neural-interface/lib/cli-update-planner.js +25 -15
  114. package/neural-interface/lib/codex-rollout-reader.js +52 -0
  115. package/neural-interface/lib/codex-worker-app-server.js +25 -6
  116. package/neural-interface/lib/editor-git-api.js +3 -20
  117. package/neural-interface/lib/exec-loop-command.js +9 -2
  118. package/neural-interface/lib/file-explorer-api.js +74 -40
  119. package/neural-interface/lib/file-explorer-watch.js +9 -3
  120. package/neural-interface/lib/git-bash/install.js +52 -6
  121. package/neural-interface/lib/git-bash/manager.js +59 -17
  122. package/neural-interface/lib/git-bash/pins.js +12 -0
  123. package/neural-interface/lib/git-read.js +2 -2
  124. package/neural-interface/lib/git-status-runner.js +390 -0
  125. package/neural-interface/lib/git-status-watchdog.js +40 -0
  126. package/neural-interface/lib/greeting/budgets.js +1 -0
  127. package/neural-interface/lib/greeting/engine.js +2 -2
  128. package/neural-interface/lib/greeting/sources.js +10 -12
  129. package/neural-interface/lib/greeting/writer.js +1 -1
  130. package/neural-interface/lib/mcp-client-config.js +37 -6
  131. package/neural-interface/lib/mcp-external-servers.js +40 -7
  132. package/neural-interface/lib/mcp-installer.js +2 -1
  133. package/neural-interface/lib/memory-session-capture.js +17 -3
  134. package/neural-interface/lib/morelogin.js +147 -25
  135. package/neural-interface/lib/native-loop-providers.js +423 -23
  136. package/neural-interface/lib/native-loop-runtime.js +23 -2
  137. package/neural-interface/lib/opencode-native-boundary.js +165 -22
  138. package/neural-interface/lib/owner-authority.js +1 -1
  139. package/neural-interface/lib/path-confine.js +12 -9
  140. package/neural-interface/lib/peer-identity.js +80 -6
  141. package/neural-interface/lib/pty-host/core.js +28 -1
  142. package/neural-interface/lib/pty-host/lifetime.js +12 -0
  143. package/neural-interface/lib/pty-host/manager.js +12 -1
  144. package/neural-interface/lib/remote-policy.js +1 -1
  145. package/neural-interface/lib/request-gate.js +3 -0
  146. package/neural-interface/lib/rulesets/api.js +6 -5
  147. package/neural-interface/lib/rulesets/fs-safe.js +1 -1
  148. package/neural-interface/lib/rulesets/installer.js +89 -10
  149. package/neural-interface/lib/rulesets/render.js +1 -1
  150. package/neural-interface/lib/session-cache-builder.js +64 -1
  151. package/neural-interface/lib/skills/catalog.js +5 -1
  152. package/neural-interface/lib/skills/creation-brief.js +1 -1
  153. package/neural-interface/lib/skills/creation-sources.js +19 -1
  154. package/neural-interface/lib/skills/deploy.js +9 -4
  155. package/neural-interface/lib/skills/draft-confinement.js +3 -1
  156. package/neural-interface/lib/skills/eval-confinement.js +3 -1
  157. package/neural-interface/lib/skills/eval-trace.js +16 -0
  158. package/neural-interface/lib/skills/export.js +5 -2
  159. package/neural-interface/lib/skills/known-bridge-digests.json +58 -4
  160. package/neural-interface/lib/skills/ownership.js +1 -1
  161. package/neural-interface/lib/skills/roots.js +10 -3
  162. package/neural-interface/lib/skills/runtime-checks.js +6 -3
  163. package/neural-interface/lib/skills/service.js +15 -7
  164. package/neural-interface/lib/skills/telemetry.js +6 -0
  165. package/neural-interface/lib/synabun-version.js +1 -1
  166. package/neural-interface/lib/system-activity.js +1 -1
  167. package/neural-interface/lib/whatsapp/brain.js +7 -3
  168. package/neural-interface/lib/whatsapp/cards.js +22 -9
  169. package/neural-interface/lib/whatsapp/config.js +1 -1
  170. package/neural-interface/lib/worker-confinement.js +77 -1
  171. package/neural-interface/lib/worker-question.js +74 -0
  172. package/neural-interface/lib/worker-resume.js +13 -4
  173. package/neural-interface/lib/worker-sandbox.js +46 -16
  174. package/neural-interface/package-lock.json +18 -2
  175. package/neural-interface/package.json +2 -1
  176. package/neural-interface/public/onboarding.html +1 -1
  177. package/neural-interface/public/shared/agent-runtime-options.js +89 -11
  178. package/neural-interface/public/shared/agy/agy-bypass.js +47 -0
  179. package/neural-interface/public/shared/agy/agy-client.js +266 -0
  180. package/neural-interface/public/shared/agy/agy-commands.js +120 -0
  181. package/neural-interface/public/shared/agy/agy-copy.js +326 -0
  182. package/neural-interface/public/shared/agy/agy-diff.js +161 -0
  183. package/neural-interface/public/shared/agy/agy-events.js +469 -0
  184. package/neural-interface/public/shared/agy/agy-greeting.js +26 -0
  185. package/neural-interface/public/shared/agy/agy-options.js +232 -0
  186. package/neural-interface/public/shared/agy/agy-panel.js +2543 -0
  187. package/neural-interface/public/shared/agy/agy-render.js +392 -0
  188. package/neural-interface/public/shared/agy/agy-setup.js +149 -0
  189. package/neural-interface/public/shared/agy/agy-styles.js +604 -0
  190. package/neural-interface/public/shared/agy/agy-tabs-logic.js +181 -0
  191. package/neural-interface/public/shared/api.js +4 -4
  192. package/neural-interface/public/shared/assistant/asst-agents-dock.js +3 -4
  193. package/neural-interface/public/shared/assistant/asst-api.js +15 -3
  194. package/neural-interface/public/shared/assistant/asst-brain-picker.js +56 -9
  195. package/neural-interface/public/shared/assistant/asst-budget.js +5 -4
  196. package/neural-interface/public/shared/assistant/asst-computer.js +26 -2
  197. package/neural-interface/public/shared/assistant/asst-control.js +48 -0
  198. package/neural-interface/public/shared/assistant/asst-hosts.js +16 -7
  199. package/neural-interface/public/shared/assistant/asst-limit-dock.js +6 -1
  200. package/neural-interface/public/shared/assistant/asst-limit-wait.js +38 -5
  201. package/neural-interface/public/shared/assistant/asst-motion-gate.js +80 -0
  202. package/neural-interface/public/shared/assistant/asst-panel.js +46 -9
  203. package/neural-interface/public/shared/assistant/asst-render.js +112 -18
  204. package/neural-interface/public/shared/assistant/asst-route.js +237 -57
  205. package/neural-interface/public/shared/assistant/asst-routes-editor.js +9 -8
  206. package/neural-interface/public/shared/assistant/asst-scene-styles.js +55 -23
  207. package/neural-interface/public/shared/assistant/asst-scenes.js +279 -80
  208. package/neural-interface/public/shared/assistant/asst-sidepanel-styles.js +4 -4
  209. package/neural-interface/public/shared/assistant/asst-sidepanel.js +51 -7
  210. package/neural-interface/public/shared/assistant/asst-slash.js +8 -2
  211. package/neural-interface/public/shared/assistant/asst-state.js +76 -9
  212. package/neural-interface/public/shared/assistant/asst-style-cache.js +44 -0
  213. package/neural-interface/public/shared/assistant/asst-styles.js +58 -4
  214. package/neural-interface/public/shared/assistant/asst-tool-kinds.js +34 -7
  215. package/neural-interface/public/shared/assistant/asst-usage.js +2 -1
  216. package/neural-interface/public/shared/cdx/cdx-output.js +26 -3
  217. package/neural-interface/public/shared/cdx/cdx-panel.js +14 -2
  218. package/neural-interface/public/shared/cdx/cdx-preview.js +12 -0
  219. package/neural-interface/public/shared/cdx/cdx-protocol.js +11 -10
  220. package/neural-interface/public/shared/cdx/cdx-render.js +10 -9
  221. package/neural-interface/public/shared/cdx/cdx-requests.js +11 -1
  222. package/neural-interface/public/shared/cdx/cdx-styles.js +4 -0
  223. package/neural-interface/public/shared/cdx/cdx-tabs.js +75 -5
  224. package/neural-interface/public/shared/cli-install-controller.js +218 -0
  225. package/neural-interface/public/shared/cli-install-view.js +7 -4
  226. package/neural-interface/public/shared/cli-status.js +9 -8
  227. package/neural-interface/public/shared/constants.js +3 -2
  228. package/neural-interface/public/shared/context-menu-model.js +1 -0
  229. package/neural-interface/public/shared/cp/cp-permissions.js +12 -0
  230. package/neural-interface/public/shared/cp/cp-restore.js +162 -0
  231. package/neural-interface/public/shared/cp/cp-tool-cards.js +10 -3
  232. package/neural-interface/public/shared/desktop-bridge.js +17 -0
  233. package/neural-interface/public/shared/desktop-titlebar-view.js +12 -0
  234. package/neural-interface/public/shared/desktop-titlebar.js +13 -4
  235. package/neural-interface/public/shared/desktop-update-view.js +1 -0
  236. package/neural-interface/public/shared/explorer/fx-api.js +4 -4
  237. package/neural-interface/public/shared/explorer/fx-links.js +3 -3
  238. package/neural-interface/public/shared/explorer/fx-logic.js +1 -1
  239. package/neural-interface/public/shared/explorer/fx-main.js +48 -16
  240. package/neural-interface/public/shared/explorer/fx-tree.js +1 -0
  241. package/neural-interface/public/shared/greeting/greeting-card.js +2 -2
  242. package/neural-interface/public/shared/greeting/greeting-view.js +1 -0
  243. package/neural-interface/public/shared/html-shell.js +21 -4
  244. package/neural-interface/public/shared/loading-teardown.js +34 -0
  245. package/neural-interface/public/shared/ocp-v2/ocp-v2-childpanel.js +6 -1
  246. package/neural-interface/public/shared/ocp-v2/ocp-v2-panel.js +28 -7
  247. package/neural-interface/public/shared/ocp-v2/ocp-v2-rehydrate.js +13 -4
  248. package/neural-interface/public/shared/ocp-v2/ocp-v2-render.js +17 -1
  249. package/neural-interface/public/shared/ocp-v2/ocp-v2-send.js +6 -0
  250. package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +101 -68
  251. package/neural-interface/public/shared/ocp-v2/ocp-v2-ws.js +46 -3
  252. package/neural-interface/public/shared/provider-icons.js +4 -2
  253. package/neural-interface/public/shared/settings/settings-rules.js +2 -2
  254. package/neural-interface/public/shared/settings/settings-skill-folders-pane.js +1 -1
  255. package/neural-interface/public/shared/settings/settings-skill-folders.js +2 -2
  256. package/neural-interface/public/shared/showcase-privacy.js +6 -1
  257. package/neural-interface/public/shared/sidepanel-session-status.js +3 -3
  258. package/neural-interface/public/shared/skills/ss-creation.js +6 -3
  259. package/neural-interface/public/shared/skills/ss-dialog.js +5 -2
  260. package/neural-interface/public/shared/skills/ss-lint.js +9 -1
  261. package/neural-interface/public/shared/skills/ss-profiles.js +44 -6
  262. package/neural-interface/public/shared/skills/ss-review-view.js +2 -2
  263. package/neural-interface/public/shared/skills/studio/sx-actions.js +1 -1
  264. package/neural-interface/public/shared/skills/studio/sx-create-ai-view.js +1 -1
  265. package/neural-interface/public/shared/skills/studio/sx-create-ai.js +2 -1
  266. package/neural-interface/public/shared/skills/studio/sx-dom.js +2 -1
  267. package/neural-interface/public/shared/skills/studio/sx-fixes-view.js +359 -0
  268. package/neural-interface/public/shared/skills/studio/sx-fixes.js +327 -0
  269. package/neural-interface/public/shared/skills/studio/sx-inspector.js +1 -1
  270. package/neural-interface/public/shared/skills/studio/sx-install-flow.js +9 -6
  271. package/neural-interface/public/shared/skills/studio/sx-install.js +20 -3
  272. package/neural-interface/public/shared/skills/studio/sx-library-view.js +144 -35
  273. package/neural-interface/public/shared/skills/studio/sx-library.js +6 -2
  274. package/neural-interface/public/shared/skills/studio/sx-main.js +11 -2
  275. package/neural-interface/public/shared/skills/studio/sx-review-view.js +1 -1
  276. package/neural-interface/public/shared/skills/studio/sx-subject.js +7 -6
  277. package/neural-interface/public/shared/skills/studio/sx-workspace-view.js +6 -5
  278. package/neural-interface/public/shared/state.js +1 -1
  279. package/neural-interface/public/shared/storage-retry.js +47 -0
  280. package/neural-interface/public/shared/storage.js +25 -4
  281. package/neural-interface/public/shared/streaming-markdown.js +58 -0
  282. package/neural-interface/public/shared/styles.css +362 -35
  283. package/neural-interface/public/shared/synabun-mascot.js +27 -8
  284. package/neural-interface/public/shared/synabun-ticker.js +147 -12
  285. package/neural-interface/public/shared/text-cache.js +29 -0
  286. package/neural-interface/public/shared/tool-list-picker.js +2 -2
  287. package/neural-interface/public/shared/tool-list-view.js +2 -2
  288. package/neural-interface/public/shared/topright-overflow-logic.js +54 -0
  289. package/neural-interface/public/shared/ui-antigravity-panel.js +19 -0
  290. package/neural-interface/public/shared/ui-assistant.js +2 -0
  291. package/neural-interface/public/shared/ui-automation-studio.js +20 -12
  292. package/neural-interface/public/shared/ui-claude-panel.js +374 -134
  293. package/neural-interface/public/shared/ui-cli-banner.js +23 -167
  294. package/neural-interface/public/shared/ui-file-explorer.js +48 -6
  295. package/neural-interface/public/shared/ui-file-links.js +2 -2
  296. package/neural-interface/public/shared/ui-games.js +2 -2
  297. package/neural-interface/public/shared/ui-judgments.js +1 -1
  298. package/neural-interface/public/shared/ui-keybinds.js +8 -2
  299. package/neural-interface/public/shared/ui-link.js +3 -3
  300. package/neural-interface/public/shared/ui-loading.js +5 -4
  301. package/neural-interface/public/shared/ui-menubar.js +2 -2
  302. package/neural-interface/public/shared/ui-native-loop-router.js +4 -0
  303. package/neural-interface/public/shared/ui-navbar.js +45 -0
  304. package/neural-interface/public/shared/ui-notifications.js +1 -0
  305. package/neural-interface/public/shared/ui-resume.js +9 -7
  306. package/neural-interface/public/shared/ui-schedules-studio.js +41 -10
  307. package/neural-interface/public/shared/ui-scroll-follow.js +16 -5
  308. package/neural-interface/public/shared/ui-sessions.js +22 -12
  309. package/neural-interface/public/shared/ui-settings.js +90 -65
  310. package/neural-interface/public/shared/ui-sidepanel-session-entry.js +9 -2
  311. package/neural-interface/public/shared/ui-sidepanel-sessions.js +3 -3
  312. package/neural-interface/public/shared/ui-sidepanel-tray.js +48 -7
  313. package/neural-interface/public/shared/ui-sidepanel-windows.js +3 -3
  314. package/neural-interface/public/shared/ui-terminal.js +146 -10
  315. package/neural-interface/public/shared/ui-tool-updates.js +3 -3
  316. package/neural-interface/public/shared/ui-tooltip.js +71 -46
  317. package/neural-interface/public/shared/ui-topright-overflow.js +233 -0
  318. package/neural-interface/public/shared/ui-whiteboard.js +1 -1
  319. package/neural-interface/public/shared/ui-worker-end.js +1 -1
  320. package/neural-interface/public/shared/whatsapp/wa-view.js +2 -2
  321. package/neural-interface/public/shared/worker-questions.js +34 -0
  322. package/neural-interface/public/sidepanel-session.html +1 -1
  323. package/neural-interface/server.js +731 -466
  324. package/neural-interface/templates/rulesets/README.md +1 -1
  325. package/neural-interface/templates/rulesets/legacy-hashes.json +5 -5
  326. package/neural-interface/templates/rulesets/manifest.json +1 -1
  327. package/npm-shrinkwrap.json +18 -2
  328. package/package.json +2 -1
  329. package/skills/skill-forge/SKILL.md +4 -4
  330. package/skills/synabun/SKILL.md +1 -1
  331. package/skills/synabun/modules/schedule.md +3 -3
  332. /package/neural-interface/templates/rulesets/{gemini.md → antigravity.md} +0 -0
@@ -0,0 +1,58 @@
1
+ // Promote complete Markdown blocks once; only the unfinished tail is rebuilt.
2
+ // A final whole-document parse resolves cross-block constructs (link references,
3
+ // loose lists). The conservative boundary follows the Claude panel's live path.
4
+ export function findStableMarkdownBoundary(text, from = 0, minTail = 120) {
5
+ let best = from, pos = from, prevBlank = false;
6
+ let fenceChar = '', fenceLen = 0;
7
+ const limit = text.length - minTail;
8
+ while (pos < limit) {
9
+ const nl = text.indexOf('\n', pos);
10
+ if (nl === -1) break;
11
+ const line = text.slice(pos, nl);
12
+ const trimmed = line.replace(/^[ \t]+/, '');
13
+ const fence = /^(`{3,}|~{3,})/.exec(trimmed);
14
+ if (fence) {
15
+ if (!fenceChar) { fenceChar = fence[1][0]; fenceLen = fence[1].length; }
16
+ else if (fence[1][0] === fenceChar && fence[1].length >= fenceLen && /^\s*$/.test(trimmed.slice(fence[1].length))) fenceChar = '';
17
+ }
18
+ const lineStart = pos;
19
+ const blank = trimmed === '';
20
+ pos = nl + 1;
21
+ if (fenceChar) { prevBlank = false; continue; }
22
+ if (prevBlank && !blank && lineStart <= limit) {
23
+ if (!/^[ \t]/.test(line) && !/^([-*+] |\d{1,9}[.)] |>|\|)/.test(trimmed)) best = lineStart;
24
+ }
25
+ prevBlank = blank;
26
+ }
27
+ return best;
28
+ }
29
+
30
+ const prefixes = new WeakMap();
31
+
32
+ // `render` sanitizes into its destination, exactly as for a finished message.
33
+ export function renderStreamingMarkdown(body, text, render, { streaming = false } = {}) {
34
+ if (!streaming) { prefixes.delete(body); render(body, text); return; }
35
+ let state = prefixes.get(body);
36
+ if (!state || text.length < state.length) {
37
+ state = { length: 0, nodes: 0 };
38
+ prefixes.set(body, state);
39
+ }
40
+ try {
41
+ const boundary = findStableMarkdownBoundary(text, state.length);
42
+ while (body.childNodes.length > state.nodes) body.lastChild.remove();
43
+ const fragment = body.ownerDocument.createElement('div');
44
+ if (boundary > state.length) {
45
+ render(fragment, text.slice(state.length, boundary));
46
+ body.append(...fragment.childNodes);
47
+ state.nodes = body.childNodes.length;
48
+ state.length = boundary;
49
+ }
50
+ if (text.length > state.length) {
51
+ render(fragment, text.slice(state.length));
52
+ body.append(...fragment.childNodes);
53
+ }
54
+ } catch {
55
+ prefixes.delete(body);
56
+ render(body, text);
57
+ }
58
+ }
@@ -1799,6 +1799,12 @@
1799
1799
  0 8px 20px rgba(0,0,0,0.25),
1800
1800
  0 24px 48px rgba(0,0,0,0.18);
1801
1801
  }
1802
+ html.platform-win32 .menubar-dropdown,
1803
+ html.platform-win32 .menubar-submenu {
1804
+ background: rgba(28, 28, 32, 0.98);
1805
+ backdrop-filter: none;
1806
+ -webkit-backdrop-filter: none;
1807
+ }
1802
1808
 
1803
1809
  /* Arrow caret — seamless extension of the container */
1804
1810
  .menubar-dropdown::before {
@@ -3165,7 +3171,7 @@
3165
3171
  }
3166
3172
  .kb-cli-claude { color: #D4A27F; }
3167
3173
  .kb-cli-codex { color: #74c7a5; }
3168
- .kb-cli-gemini { color: #669DF6; }
3174
+ .kb-cli-antigravity { color: #669DF6; }
3169
3175
 
3170
3176
  /* Keycap-style buttons */
3171
3177
  .kb-key-btn {
@@ -4448,7 +4454,7 @@
4448
4454
 
4449
4455
  /* Setup tab: provider icon accents when section expanded */
4450
4456
  #setup-claude:not(.collapsed) .gfx-group-title .cc-provider-icon { color: #d97757; }
4451
- #setup-gemini:not(.collapsed) .gfx-group-title .cc-provider-icon { color: #4285f4; }
4457
+ #setup-antigravity:not(.collapsed) .gfx-group-title .cc-provider-icon { color: #4285f4; }
4452
4458
  #setup-codex:not(.collapsed) .gfx-group-title .cc-provider-icon { color: #10a37f; }
4453
4459
 
4454
4460
  /* Setup tab: status badge */
@@ -6118,7 +6124,8 @@
6118
6124
  html.sp-resizing .claude-panel,
6119
6125
  html.sp-resizing .codex-panel,
6120
6126
  html.sp-resizing .ocp-panel,
6121
- html.sp-resizing .ocpv2-panel {
6127
+ html.sp-resizing .ocpv2-panel,
6128
+ html.sp-resizing .agy-panel {
6122
6129
  backdrop-filter: none !important;
6123
6130
  -webkit-backdrop-filter: none !important;
6124
6131
  background: rgba(18, 18, 20, 0.985) !important;
@@ -6130,18 +6137,18 @@
6130
6137
  top: calc(var(--navbar-height, 48px) + 20px);
6131
6138
  right: calc(20px + var(--right-panel-width, var(--claude-panel-width, 0px)));
6132
6139
  /* One row in the band between the left panels (Memory Explorer, File Explorer) and the right one, 20px clear of
6133
- each, never over a left panel: where the band is narrower than the row, the dock takes a line of its own under
6134
- the buttons (wrap-reverse: the buttons' line stays on top; see "Fit" below). What still reaches left of the
6140
+ each, never over a left panel: where the band is narrower than the row, the lowest-priority buttons leave it
6141
+ for the ⋯ menu (ui-topright-overflow.js; see "Fit" below), so the row never wraps. What still reaches left of the
6135
6142
  band (no band at all between wide panels, a dropdown that opens leftwards) is cut off at the band's edge:
6136
6143
  nothing of the toolbar is drawn, or takes a click, over a left panel. */
6137
- max-width: var(--topright-band);
6144
+ max-width: calc(var(--topright-band) - var(--topright-tray-inset));
6138
6145
  min-height: 40px; /* the dock's height: the buttons and the pills stay where they are when it hides */
6139
6146
  justify-content: flex-end;
6140
6147
  clip-path: inset(-100vh -100vw -200vh calc(var(--sidebar-total-width, 0px) + var(--right-panel-width, var(--claude-panel-width, 0px)) + 40px + 100% - 100vw));
6141
6148
  transition: right 0.3s cubic-bezier(0.22, 1, 0.36, 1);
6142
6149
  z-index: 400;
6143
6150
  display: flex;
6144
- flex-wrap: wrap-reverse;
6151
+ flex-wrap: nowrap;
6145
6152
  align-items: center;
6146
6153
  gap: 6px;
6147
6154
  font-family: inherit;
@@ -6172,6 +6179,8 @@
6172
6179
  display: flex;
6173
6180
  align-items: center;
6174
6181
  flex-shrink: 0;
6182
+ /* One line, always: what does not fit the band goes into the ⋯ menu (ui-topright-overflow.js). */
6183
+ flex-wrap: nowrap;
6175
6184
  gap: 2px;
6176
6185
  overflow: visible;
6177
6186
  background: rgba(18, 18, 22, 0.65);
@@ -6189,13 +6198,123 @@
6189
6198
  box-shadow: var(--shadow-lg), var(--shadow-highlight);
6190
6199
  }
6191
6200
 
6192
- /* The tools toggle and the agent side panels: one row of their own that never wraps, at the bar's right edge. */
6201
+ /* The ⋯, the tools toggle and the agent side panels: one row at the bar's right edge that never wraps. */
6193
6202
  #topright-buttons {
6203
+ position: relative;
6194
6204
  display: flex;
6195
6205
  align-items: center;
6196
6206
  flex-shrink: 0;
6207
+ flex-wrap: nowrap;
6197
6208
  gap: 6px;
6198
- min-height: 40px; /* the dock's height: a bar that wraps keeps its lines 40px apart, the buttons where they were */
6209
+ min-height: 40px; /* the dock's height: the buttons stay where they are when it hides */
6210
+ }
6211
+
6212
+ /* ── Overflow: a button that does not fit the band leaves the row for the ⋯ menu (ui-topright-overflow.js) ── */
6213
+ #topright-controls .tr-overflowed {
6214
+ display: none !important;
6215
+ }
6216
+ #topright-overflow-btn {
6217
+ display: none;
6218
+ }
6219
+ #topright-controls.has-overflow #topright-overflow-btn {
6220
+ display: flex;
6221
+ }
6222
+ /* The menu hangs from the bar's right edge, over the session pills (z-index inside the row's stacking context),
6223
+ opaque like the dock's other menus since its blur cannot reach the pills. */
6224
+ #topright-overflow-menu {
6225
+ position: absolute;
6226
+ top: calc(100% + 6px);
6227
+ right: 0;
6228
+ z-index: 3;
6229
+ min-width: 200px;
6230
+ max-width: calc(var(--topright-band) - var(--topright-tray-inset));
6231
+ max-height: calc(100vh - var(--navbar-height, 48px) - 90px);
6232
+ overflow-y: auto;
6233
+ display: flex;
6234
+ flex-direction: column;
6235
+ gap: 2px;
6236
+ padding: 4px;
6237
+ box-sizing: border-box;
6238
+ background: rgb(18, 18, 22);
6239
+ border: 1px solid var(--b-subtle, rgba(255, 255, 255, 0.06));
6240
+ border-radius: 10px;
6241
+ box-shadow: var(--shadow-lg), var(--shadow-highlight);
6242
+ }
6243
+ #topright-overflow-menu[hidden] {
6244
+ display: none;
6245
+ }
6246
+ .topright-overflow-item {
6247
+ position: relative;
6248
+ display: flex;
6249
+ align-items: center;
6250
+ gap: 8px;
6251
+ width: 100%;
6252
+ min-height: 30px;
6253
+ padding: 0 10px 0 8px;
6254
+ background: transparent;
6255
+ border: none;
6256
+ border-radius: 5px;
6257
+ color: var(--t-muted);
6258
+ font: 400 13px/1.45 inherit;
6259
+ font-family: inherit;
6260
+ text-align: left;
6261
+ cursor: pointer;
6262
+ white-space: nowrap;
6263
+ }
6264
+ .topright-overflow-item:hover,
6265
+ .topright-overflow-item:focus-visible {
6266
+ background: rgba(255, 255, 255, 0.08);
6267
+ color: var(--t-bright);
6268
+ outline: none;
6269
+ }
6270
+ .topright-overflow-item.active {
6271
+ color: var(--t-bright);
6272
+ }
6273
+ .topright-overflow-item.active::before {
6274
+ content: '';
6275
+ position: absolute;
6276
+ left: 2px;
6277
+ top: 50%;
6278
+ transform: translateY(-50%);
6279
+ width: 2.5px;
6280
+ height: 12px;
6281
+ border-radius: 2px;
6282
+ background: var(--accent-blue);
6283
+ }
6284
+ .topright-overflow-icon {
6285
+ display: flex;
6286
+ align-items: center;
6287
+ justify-content: center;
6288
+ width: 16px;
6289
+ flex-shrink: 0;
6290
+ }
6291
+ .topright-overflow-icon svg {
6292
+ width: 14px;
6293
+ height: 14px;
6294
+ stroke: currentColor;
6295
+ stroke-width: 1.7;
6296
+ fill: none;
6297
+ }
6298
+ .topright-overflow-icon svg[fill="currentColor"] {
6299
+ fill: currentColor;
6300
+ stroke: none;
6301
+ }
6302
+ .topright-overflow-label {
6303
+ flex: 1;
6304
+ min-width: 0;
6305
+ overflow: hidden;
6306
+ text-overflow: ellipsis;
6307
+ }
6308
+ .topright-overflow-item .topright-overflow-badge {
6309
+ position: static;
6310
+ font-size: 10px;
6311
+ min-width: 16px;
6312
+ height: 16px;
6313
+ line-height: 16px;
6314
+ padding: 0 4px;
6315
+ border-radius: 8px;
6316
+ text-align: center;
6317
+ font-weight: 600;
6199
6318
  }
6200
6319
 
6201
6320
  /* Hidden by the tools toggle (#topright-tools-btn, ui-navbar.js): the buttons and the pills stay where they are. */
@@ -6203,14 +6322,82 @@
6203
6322
  display: none;
6204
6323
  }
6205
6324
 
6206
- /* ── Fit: the buttons one row in any band, nothing hidden, nothing over a left panel ──
6325
+ /* ── The whiteboard rail toggle (ui-navbar.js): #wb-hide-btn at the rail's foot hides the rail (#wb-toolbar,
6326
+ pickers included: they are its children); the SynaBun logo button (#toolbar-show-btn) above the console button
6327
+ (#term-peek-dock) brings it back. Shown only while the whiteboard is (#static-bg.visible, Focus Mode). The
6328
+ workspace toolbar and the session pills are never touched. ── */
6329
+ #wb-toolbar {
6330
+ transition: opacity 0.22s ease, translate 0.22s cubic-bezier(0.22, 1, 0.36, 1), visibility 0s linear 0s;
6331
+ }
6332
+ #wb-toolbar.wb-rail-hidden {
6333
+ opacity: 0;
6334
+ visibility: hidden;
6335
+ pointer-events: none;
6336
+ translate: -12px 0;
6337
+ transition: opacity 0.22s ease, translate 0.22s cubic-bezier(0.22, 1, 0.36, 1), visibility 0s linear 0.22s;
6338
+ }
6339
+ #toolbar-show-btn {
6340
+ position: fixed;
6341
+ left: calc(var(--sidebar-total-width, 0px) + 16px);
6342
+ bottom: 64px; /* directly above the console button (#term-peek-dock: 40px at bottom 16px), 8px between */
6343
+ z-index: 149;
6344
+ display: flex;
6345
+ align-items: center;
6346
+ justify-content: center;
6347
+ width: 40px;
6348
+ height: 40px;
6349
+ padding: 0;
6350
+ background: rgba(18, 18, 20, 0.85);
6351
+ backdrop-filter: blur(var(--blur-heavy)) saturate(1.4);
6352
+ -webkit-backdrop-filter: blur(var(--blur-heavy)) saturate(1.4);
6353
+ border: 1px solid rgba(255, 255, 255, 0.08);
6354
+ border-radius: 10px;
6355
+ box-shadow: var(--shadow-md), var(--shadow-highlight);
6356
+ cursor: pointer;
6357
+ animation: toolbar-show-in 0.22s cubic-bezier(0.22, 1, 0.36, 1);
6358
+ transition: background 0.2s, border-color 0.2s;
6359
+ }
6360
+ #toolbar-show-btn[hidden],
6361
+ body:not(:has(#static-bg.visible)) #toolbar-show-btn,
6362
+ body.fe-editor-open #toolbar-show-btn {
6363
+ display: none;
6364
+ }
6365
+ #toolbar-show-btn img {
6366
+ width: 22px;
6367
+ height: 22px;
6368
+ object-fit: contain;
6369
+ opacity: 0.75;
6370
+ pointer-events: none;
6371
+ transition: opacity 0.2s;
6372
+ }
6373
+ #toolbar-show-btn:hover {
6374
+ background: rgba(24, 24, 28, 0.95);
6375
+ border-color: rgba(255, 255, 255, 0.16);
6376
+ }
6377
+ #toolbar-show-btn:hover img,
6378
+ #toolbar-show-btn:focus-visible img {
6379
+ opacity: 1;
6380
+ }
6381
+ #toolbar-show-btn:focus-visible {
6382
+ outline: 1px solid rgba(255, 255, 255, 0.4);
6383
+ outline-offset: 2px;
6384
+ }
6385
+ @keyframes toolbar-show-in {
6386
+ from { opacity: 0; transform: translateY(6px) scale(0.92); }
6387
+ to { opacity: 1; transform: none; }
6388
+ }
6389
+ #wb-hide-btn svg {
6390
+ stroke-width: 2;
6391
+ }
6392
+
6393
+ /* ── Fit: one row in any band, nothing out of reach, nothing over a left panel ──
6207
6394
  --topright-row is the row at its widest without the workspace name: the dock (the switcher with its save button,
6208
6395
  50px; seven tools of 30px and the update button; two dividers; the dock's gaps and edges: 298px in all, 266px
6209
6396
  while the update button is hidden), then --topright-buttons, the tools toggle and the four agent buttons with
6210
- the gaps before them (190px). Below row + 45px of band the workspace name goes into the switcher's tooltip
6397
+ the gaps before them (222px: six 32px buttons, five 6px gaps). Below row + 45px of band the workspace name goes into the switcher's tooltip
6211
6398
  (--topright-compact; it shows from 40px on, up to 120px, and takes what the band leaves it). Below the row itself
6212
- the bar wraps (#topright-controls: flex-wrap: wrap-reverse): the toggle and the agent buttons stay on top, in one
6213
- row, and the dock takes a line of its own right under them, right-aligned, still one row. --topright-compact is
6399
+ nothing wraps: the buttons that do not fit leave the row for the ⋯ menu, lowest priority first
6400
+ (ui-topright-overflow.js OVERFLOW_ORDER, measured live). --topright-compact is
6214
6401
  1 below its width and 0 from it up (tan(atan2()) divides a length by a length); it lives on :root so that a
6215
6402
  style query reaches the name. Change --topright-row (or --topright-buttons) with the controls of the row. */
6216
6403
  @property --topright-compact {
@@ -6220,7 +6407,7 @@
6220
6407
  }
6221
6408
  :root {
6222
6409
  --topright-band: calc(100vw - var(--sidebar-total-width, 0px) - var(--right-panel-width, var(--claude-panel-width, 0px)) - 40px);
6223
- --topright-buttons: 190px;
6410
+ --topright-buttons: 222px;
6224
6411
  --topright-row: calc(298px + var(--topright-buttons));
6225
6412
  --topright-compact: clamp(0, tan(atan2(calc(var(--topright-row) + 45px - var(--topright-band)), 0.01px)), 1);
6226
6413
  }
@@ -6267,6 +6454,7 @@
6267
6454
  #topright-controls > #term-minimized-tray > .term-minimized-pill .term-minimized-pill-label,
6268
6455
  #topright-controls > #term-minimized-tray > .term-minimized-pill:hover .term-minimized-pill-label {
6269
6456
  max-width: clamp(28px, calc(var(--topright-band) - var(--topright-tray-inset) - 62px), 100px);
6457
+ transition: none;
6270
6458
  }
6271
6459
 
6272
6460
  /* ── Thin divider between groups ── */
@@ -6389,11 +6577,13 @@
6389
6577
  }
6390
6578
 
6391
6579
  /* ── Standalone buttons outside the unified bar (the tools toggle, the side panels) ── */
6580
+ #topright-overflow-btn,
6392
6581
  #topright-tools-btn,
6393
6582
  #topright-assistant-panel-btn,
6394
6583
  #topright-claude-panel-btn,
6395
6584
  #topright-codex-panel-btn,
6396
- #topright-opencode-panel-btn {
6585
+ #topright-opencode-panel-btn,
6586
+ #topright-antigravity-panel-btn {
6397
6587
  background: rgba(18, 18, 22, 0.65);
6398
6588
  backdrop-filter: blur(var(--blur-heavy)) saturate(1.3);
6399
6589
  -webkit-backdrop-filter: blur(var(--blur-heavy)) saturate(1.3);
@@ -6403,11 +6593,13 @@
6403
6593
  width: 32px;
6404
6594
  height: 32px;
6405
6595
  }
6596
+ #topright-overflow-btn:hover,
6406
6597
  #topright-tools-btn:hover,
6407
6598
  #topright-assistant-panel-btn:hover,
6408
6599
  #topright-claude-panel-btn:hover,
6409
6600
  #topright-codex-panel-btn:hover,
6410
- #topright-opencode-panel-btn:hover {
6601
+ #topright-opencode-panel-btn:hover,
6602
+ #topright-antigravity-panel-btn:hover {
6411
6603
  background: rgba(24, 24, 30, 0.8);
6412
6604
  border-color: rgba(255, 255, 255, 0.1);
6413
6605
  }
@@ -7666,7 +7858,7 @@
7666
7858
  .ocpv2-session-pill, .ocpv2-part-tool, .ocpv2-input-wrap, .ocpv2-compose-btn,
7667
7859
  .ocp-session-pill, .ocp-tool-card, .ocp-input-shell, .term-minimized-pill-label)::before,
7668
7860
  body.ui-interacting :is(.wb-tool.locked, .cp-session-pill,
7669
- .cxp-session-pill, .ocpv2-session-pill,
7861
+ .cxp-session-pill, .ocpv2-session-pill, .agy-session-pill,
7670
7862
  .ocp-session-pill, .term-minimized-pill-label)::after { animation-play-state: paused !important; }
7671
7863
 
7672
7864
  /* Hidden tab: freeze the 30+ infinite glow/pulse animations so a background
@@ -8520,9 +8712,8 @@
8520
8712
  z-index: 500000;
8521
8713
  padding: 5px 10px;
8522
8714
  border-radius: 6px;
8523
- background: rgba(30, 34, 44, 0.92);
8715
+ background: rgba(26, 30, 40, 0.96);
8524
8716
  border: 1px solid rgba(255,255,255,0.08);
8525
- backdrop-filter: blur(12px);
8526
8717
  color: rgba(255,255,255,0.85);
8527
8718
  font-size: 12.5px;
8528
8719
  font-family: inherit;
@@ -9789,8 +9980,15 @@
9789
9980
  .sm-backdrop.backdrop-hidden,
9790
9981
  .ig-backdrop.backdrop-hidden {
9791
9982
  opacity: 0 !important;
9983
+ backdrop-filter: none !important;
9984
+ -webkit-backdrop-filter: none !important;
9792
9985
  pointer-events: none;
9793
9986
  }
9987
+ html.platform-win32 .studio-backdrop {
9988
+ background: rgba(5, 5, 8, 0.62);
9989
+ backdrop-filter: none;
9990
+ -webkit-backdrop-filter: none;
9991
+ }
9794
9992
 
9795
9993
  /* ── Settings Panel (draggable/pinnable) ── */
9796
9994
  .settings-panel {
@@ -14011,8 +14209,8 @@
14011
14209
  .settings-panel .stg-card .stg-mcp-form-grid .stg-field { margin-bottom: 0; }
14012
14210
  /* a field of the Add-a-server form is half the form wide: a popup or a number stacks under its label like the text
14013
14211
  fields beside it, instead of taking the label's line and squeezing the label and the help into what is left */
14014
- .settings-panel .stg-card .stg-mcp-form-grid .stg-field:has(> :is(select, input[type="number"])) { display: block; }
14015
- .settings-panel .stg-card .stg-mcp-form-grid .stg-field:has(> :is(select, input[type="number"])) > label { margin: 0 0 6px; }
14212
+ .settings-panel .stg-card .stg-mcp-form-grid .stg-field:has(> :is(select, .cc-dropdown, input[type="number"])) { display: block; }
14213
+ .settings-panel .stg-card .stg-mcp-form-grid .stg-field:has(> :is(select, .cc-dropdown, input[type="number"])) > label { margin: 0 0 6px; }
14016
14214
  .settings-panel .stg-card .stg-mcp-form-label { font-size: 12px; color: var(--stg-help); }
14017
14215
  .settings-panel .stg-card .stg-mcp-env-add { font-size: 12px; color: var(--stg-body); }
14018
14216
  .settings-panel .stg-card .stg-mcp-gh-optrun { font-size: 13px; color: var(--stg-text); }
@@ -16514,6 +16712,28 @@
16514
16712
  flex-shrink: 0;
16515
16713
  }
16516
16714
  .fe-branch-btn-badge:empty { display: none; }
16715
+ /* Scan state: a dot in the corner, out of the flow, so no state moves the row (words: tooltip, label, popover). */
16716
+ .fe-branch-btn-state {
16717
+ position: absolute;
16718
+ top: 2px;
16719
+ right: 2px;
16720
+ width: 4px;
16721
+ height: 4px;
16722
+ border-radius: 50%;
16723
+ background: transparent;
16724
+ pointer-events: none;
16725
+ }
16726
+ .fe-branch-btn[data-scan-state="scanning"] .fe-branch-btn-state { background: var(--t-secondary); }
16727
+ .fe-branch-btn[data-scan-state="timed-out"] .fe-branch-btn-state { background: var(--fe-git-modified); }
16728
+ .fe-branch-btn[data-scan-state="failed"] .fe-branch-btn-state { background: var(--fe-git-deleted); }
16729
+ .fe-branch-btn[data-scan-state="scanning"] > svg { opacity: 0.5; }
16730
+ .fe-branch-btn--placeholder .fe-branch-btn-name { color: var(--t-secondary); }
16731
+ @media (prefers-reduced-motion: no-preference) {
16732
+ .fe-branch-btn[data-scan-state="scanning"] .fe-branch-btn-state { animation: fe-git-scan-pulse 1.2s ease-in-out infinite; }
16733
+ }
16734
+ @keyframes fe-git-scan-pulse { 50% { opacity: 0.3; } }
16735
+ /* Read out by screen readers only; takes no room in the row. */
16736
+ .fe-git-scan-live { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
16517
16737
 
16518
16738
  /* ── Git popover ── */
16519
16739
  .fe-git-popover {
@@ -16524,7 +16744,9 @@
16524
16744
  border: 1px solid var(--fe-menu-border);
16525
16745
  border-radius: var(--r-card);
16526
16746
  box-shadow: var(--fe-menu-shadow);
16527
- z-index: 300;
16747
+ /* Same tier as .fe-ctx-flyout: a float anchored to the panel, appended to body to escape it, must still
16748
+ outrank what is drawn beside it (#topright-controls at 400) and above it (a floating terminal at 10000). */
16749
+ z-index: 100010;
16528
16750
  padding: 10px;
16529
16751
  opacity: 0;
16530
16752
  transform: translateX(-8px) scale(0.96);
@@ -16668,6 +16890,15 @@
16668
16890
  line-height: 1.5;
16669
16891
  }
16670
16892
  .fe-git-summary:empty { display: none; }
16893
+ .fe-git-scan-state {
16894
+ font-size: 10.5px;
16895
+ font-family: var(--ff-mono);
16896
+ color: var(--t-secondary);
16897
+ line-height: 1.5;
16898
+ }
16899
+ .fe-git-scan-state[hidden] { display: none; }
16900
+ .fe-git-scan-state[data-tone="timed-out"] { color: var(--fe-git-modified); }
16901
+ .fe-git-scan-state[data-tone="failed"] { color: var(--fe-git-deleted); }
16671
16902
  .fe-git-summary .gs-m { color: var(--fe-git-modified); }
16672
16903
  .fe-git-summary .gs-a { color: var(--fe-git-new); }
16673
16904
  .fe-git-summary .gs-d { color: var(--fe-git-deleted); }
@@ -18345,6 +18576,11 @@
18345
18576
  opacity: 0;
18346
18577
  pointer-events: none;
18347
18578
  }
18579
+ /* Faded out: nothing inside keeps animating (loading-teardown.js adds `gone` once the fade ends). */
18580
+ #loading-overlay.hidden #loading-text,
18581
+ #loading-overlay.hidden #loading-mascot,
18582
+ #loading-overlay.hidden #loading-mascot * { animation: none !important; }
18583
+ #loading-overlay.gone { display: none !important; }
18348
18584
 
18349
18585
  .loading-logo {
18350
18586
  height: 28px;
@@ -19463,7 +19699,7 @@
19463
19699
  .sx .sx-menu-item--danger:hover { color: var(--sx-err); }
19464
19700
 
19465
19701
  /* ── Workspace ── */
19466
- .sx-ws-head { flex: none; padding: 8px 16px 0; display: grid; gap: 8px; position: relative; }
19702
+ .sx-ws-head { flex: none; padding: 12px 16px 0; display: grid; gap: 8px; position: relative; }
19467
19703
  .sx-crumb { display: flex; align-items: center; gap: 6px; font-size: var(--fs-xs); color: var(--t-secondary); }
19468
19704
  .sx-ws-title { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
19469
19705
  .sx-ws-name { margin: 0; font: 600 calc(18px * var(--font-scale, 1))/1.3 var(--ff-heading); color: var(--t-bright); overflow-wrap: anywhere; }
@@ -19739,7 +19975,14 @@
19739
19975
  .sx .sx-status--review, .sx .sx-status--changes { color: var(--sx-info); border-color: var(--b-visible); }
19740
19976
  .sx .sx-status--draft { color: var(--sx-gold); border-color: color-mix(in oklab, var(--sx-gold) 40%, transparent); }
19741
19977
  .sx .sx-status--none { color: var(--t-secondary); }
19742
- .sx-health-cell { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px; max-width: 100%; }
19978
+ /* One pill box for every pill of the Studio (kind tag, status, health): the same height as a small button, so a
19979
+ row of pills and buttons lines up in the Library cell and in the workspace head. */
19980
+ .sx .sx-tag, .sx .sx-status, .sx .sx-health {
19981
+ display: inline-flex; align-items: center; gap: 6px; box-sizing: border-box;
19982
+ min-height: 24px; padding: 2px 8px; border-radius: 6px; line-height: 1.3;
19983
+ }
19984
+ .sx .sx-tag { display: inline-block; line-height: 18px; }
19985
+ .sx-health-cell { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 6px; max-width: 100%; }
19743
19986
  .sx-health-cell .sx-status { white-space: normal; }
19744
19987
  .sx-health-cell .sx-status > span { white-space: normal; overflow: visible; }
19745
19988
  .sx .sx-banner-lines { display: grid; gap: 2px; margin-top: 4px; color: var(--t-primary); }
@@ -20157,6 +20400,87 @@
20157
20400
  .ss-dlg-error { margin: 4px 0 0; min-height: 1em; color: hsla(0, 70%, 72%, 1); font-size: var(--fs-xs); }
20158
20401
  .ss-dlg-error:empty { display: none; }
20159
20402
 
20403
+ /* ── A delete that is typed to confirm (sx-library-view.js deleteConfirmBox) ──
20404
+ One row per item, the consequence, then the field; Delete stays off until the word matches. */
20405
+ .ss-dlg.ss-dlg--confirm { width: min(480px, calc(100% - 32px)); max-height: calc(100% - 40px); padding: 20px 20px 16px; }
20406
+ .ss-dlg--confirm .ss-dlg-title { font-size: var(--fs-md, 15px); margin-bottom: 12px; }
20407
+ .ss-dlg--confirm .ss-dlg-actions { margin-top: 16px; gap: 8px; align-items: stretch; }
20408
+ .ss-dlg--confirm .ss-dlg-btn { min-width: 88px; height: 30px; padding: 0 14px; display: inline-flex; align-items: center; justify-content: center; }
20409
+ .ss-dlg--confirm .ss-dlg-btn--danger:disabled { opacity: 0.45; }
20410
+ .sx-del { display: flex; flex-direction: column; gap: 12px; }
20411
+ .sx-del-list {
20412
+ list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column;
20413
+ border: 1px solid var(--b-subtle); border-radius: 9px; background: var(--s-light); overflow: hidden;
20414
+ }
20415
+ .sx-del-item {
20416
+ display: grid; grid-template-columns: 18px minmax(0, 1fr) auto auto; align-items: center; gap: 4px 10px;
20417
+ padding: 8px 12px; min-height: 40px; box-sizing: border-box;
20418
+ }
20419
+ .sx-del-item + .sx-del-item, .sx-del-more { border-top: 1px solid var(--b-subtle); }
20420
+ .sx-del-icon { display: inline-grid; place-items: center; color: var(--t-secondary); }
20421
+ .sx-del-icon svg { width: 15px; height: 15px; }
20422
+ .sx-del-main { display: flex; flex-direction: column; min-width: 0; }
20423
+ .sx-del-name { color: var(--t-bright); font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
20424
+ .sx-del-path {
20425
+ color: var(--t-secondary); font: 400 var(--sx-meta, 11px)/1.4 var(--ff-mono, 'JetBrains Mono', monospace);
20426
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
20427
+ }
20428
+ .sx-del-kind, .sx-del-effect {
20429
+ font-size: var(--sx-meta, 11px); line-height: 1; padding: 4px 7px; border-radius: 5px; white-space: nowrap;
20430
+ border: 1px solid var(--b-light); color: var(--t-primary);
20431
+ }
20432
+ .sx-del-effect--disk { color: var(--sx-err); border-color: color-mix(in oklab, var(--sx-err) 35%, transparent); background: color-mix(in oklab, var(--sx-err) 8%, transparent); }
20433
+ .sx-del-effect--library { color: var(--t-primary); background: var(--s-medium); }
20434
+ .sx-del-more { padding: 6px 12px 8px 40px; color: var(--t-secondary); font-size: var(--sx-meta, 11px); }
20435
+ .ss-dlg-body p.sx-del-note { display: flex; gap: 8px; align-items: flex-start; margin: 0; color: var(--t-primary); }
20436
+ .sx-del-note svg { flex: none; width: 14px; height: 14px; margin-top: 2px; color: var(--t-secondary); }
20437
+ .sx-del-note--danger svg { color: var(--sx-err); }
20438
+ .sx-del-field { display: flex; flex-direction: column; gap: 6px; padding-top: 4px; }
20439
+ .sx-del-label { color: var(--t-primary); }
20440
+ .sx-del-word {
20441
+ font: 500 var(--fs-xs)/1 var(--ff-mono, 'JetBrains Mono', monospace); color: var(--t-bright);
20442
+ padding: 2px 6px; margin: 0 2px; border-radius: 4px; background: var(--s-medium); border: 1px solid var(--b-light);
20443
+ }
20444
+ .sx-del-input {
20445
+ width: 100%; height: 32px; padding: 0 10px; box-sizing: border-box;
20446
+ background: var(--sx-field, rgba(255,255,255,0.04)); border: 1px solid var(--b-light); border-radius: 5px;
20447
+ color: var(--t-bright); font: 400 var(--fs-xs)/1 var(--ff-mono, 'JetBrains Mono', monospace);
20448
+ transition: border-color 0.12s, box-shadow 0.12s;
20449
+ }
20450
+ .sx-del-input:hover { border-color: var(--b-visible); }
20451
+ .sx-del-input:focus { outline: none; border-color: color-mix(in oklab, var(--sx-err) 55%, transparent); box-shadow: 0 0 0 3px color-mix(in oklab, var(--sx-err) 14%, transparent); }
20452
+ @media (max-width: 520px) {
20453
+ .sx-del-item { grid-template-columns: 18px minmax(0, 1fr) auto; }
20454
+ .sx-del-kind { display: none; }
20455
+ }
20456
+
20457
+ /* ── The fix panel (sx-fixes-view.js): a card per problem, its meaning and its buttons ── */
20458
+ .sx .sx-health--fix { cursor: pointer; font-family: inherit; transition: filter 0.12s, border-color 0.12s; }
20459
+ .sx .sx-health--fix:hover { filter: brightness(1.15); border-color: currentColor; }
20460
+ .sx .sx-health--fix:focus-visible { outline: 2px solid var(--sx-focus); outline-offset: 1px; }
20461
+ .sx-fix-panel { display: flex; flex-direction: column; gap: 8px; margin-top: 4px; }
20462
+ .sx-fix-card { padding: 10px 12px; border: 1px solid var(--b-subtle); border-left-width: 3px; border-radius: 9px; background: var(--s-light); }
20463
+ .sx-fix-card--err { border-left-color: var(--sx-err); }
20464
+ .sx-fix-card--warn { border-left-color: var(--sx-warn); }
20465
+ .sx-fix-card--info { border-left-color: var(--b-visible); }
20466
+ .sx-fix-card-head { display: flex; align-items: center; gap: 8px; color: var(--t-bright); }
20467
+ .sx-fix-card-head svg { width: 14px; height: 14px; flex: none; }
20468
+ .sx-fix-card--err .sx-fix-card-head svg { color: var(--sx-err); }
20469
+ .sx-fix-card--warn .sx-fix-card-head svg { color: var(--sx-warn); }
20470
+ .sx-fix-mode { margin-left: auto; font-size: var(--sx-meta, 11px); line-height: 1; padding: 4px 7px; border-radius: 5px; border: 1px solid var(--b-light); color: var(--t-secondary); white-space: nowrap; }
20471
+ .sx-fix-mode--auto { color: var(--sx-ok); border-color: color-mix(in oklab, var(--sx-ok) 35%, transparent); }
20472
+ .ss-dlg-body p.sx-fix-explain { margin: 6px 0 8px; color: var(--t-primary); }
20473
+ .sx-fix-actions { display: flex; flex-wrap: wrap; gap: 6px; }
20474
+ .sx-fix-actions .sx-dim { margin: 0; }
20475
+ .sx-fix-preview { margin: 4px 0 0; padding: 0; list-style: none; border: 1px solid var(--b-subtle); border-radius: 9px; background: var(--s-light); }
20476
+ .sx-fix-preview-row { padding: 7px 12px; color: var(--t-primary); }
20477
+ .sx-fix-preview-row + .sx-fix-preview-row { border-top: 1px solid var(--b-subtle); }
20478
+ .sx-fix-choose { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; }
20479
+ .sx-fix-choice { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border: 1px solid var(--b-subtle); border-radius: 9px; cursor: pointer; }
20480
+ .sx-fix-choice:has(input:checked) { border-color: var(--b-visible); background: var(--s-light); }
20481
+ .sx-fix-choice:has(input:disabled) { opacity: 0.5; cursor: default; }
20482
+ .sx .sx-fix-notice .sx-btn { flex: none; }
20483
+
20160
20484
  /* ── An import's review ── */
20161
20485
  .ss-review { display: flex; flex-direction: column; gap: 8px; }
20162
20486
  .ss-review-row { display: flex; gap: 10px; align-items: baseline; }
@@ -22009,7 +22333,7 @@
22009
22333
  .as-launch-profile[data-profile="codex"].active .as-launch-profile-name {
22010
22334
  color: hsla(160, 45%, 72%, 0.95);
22011
22335
  }
22012
- .as-launch-profile[data-profile="gemini"].active .as-launch-profile-name {
22336
+ .as-launch-profile[data-profile="antigravity"].active .as-launch-profile-name {
22013
22337
  color: hsla(210, 55%, 78%, 0.95);
22014
22338
  }
22015
22339
  .as-launch-profile-name {
@@ -24571,6 +24895,16 @@
24571
24895
  transition: none !important;
24572
24896
  }
24573
24897
  }
24898
+ html.platform-win32 .term-minimized-pill,
24899
+ html.desktop-titlebar--win32 .term-minimized-pill {
24900
+ background: rgba(20, 20, 26, 0.94);
24901
+ backdrop-filter: none;
24902
+ -webkit-backdrop-filter: none;
24903
+ }
24904
+ html.platform-win32 .term-minimized-pill:hover,
24905
+ html.desktop-titlebar--win32 .term-minimized-pill:hover {
24906
+ background: rgba(30, 30, 38, 0.96);
24907
+ }
24574
24908
 
24575
24909
  /* Genie minimize/restore animation on floating tabs (class toggled by
24576
24910
  ui-terminal.js minimizeTab/restoreTab only while it runs) */
@@ -28029,16 +28363,8 @@
28029
28363
  color: #000;
28030
28364
  border-color: var(--c-accent, #6aa9ff);
28031
28365
  }
28032
- .sm-pr-select {
28033
- flex: 1;
28034
- background: var(--s-subtle, rgba(255,255,255,0.04));
28035
- color: var(--t-primary, #fff);
28036
- border: 1px solid var(--b-subtle, rgba(255,255,255,0.1));
28037
- border-radius: var(--r-small, 6px);
28038
- padding: 6px 8px;
28039
- font-size: 11px;
28040
- }
28041
- .sm-pr-select:disabled { opacity: 0.5; }
28366
+ /* The model list is the app's styled dropdown (cc-dropdown.js): it takes the row's width. */
28367
+ .sm-pr-row > .cc-dropdown.sm-pr-dropdown { flex: 1; min-width: 0; }
28042
28368
 
28043
28369
  /* ── Section labels ── */
28044
28370
  .sm-section-label {
@@ -29204,3 +29530,4 @@ body .styleguide-panel {
29204
29530
  .ocpv2-tools-picker .cc-dropdown-trigger { min-width: 0; max-width: 160px; border: none; background: transparent; color: var(--t-primary); font-family: inherit; }
29205
29531
 
29206
29532
  .ocpv2-tools-picker .tool-list-picker .cc-dropdown-menu { background: rgba(22,22,26,0.98); }
29533
+