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,233 @@
1
+ // ═══════════════════════════════════════════
2
+ // The top-right toolbar's overflow: one row, always.
3
+ // When the row is wider than its band (#topright-controls' max-width), the lowest-priority buttons leave the row,
4
+ // from the start of OVERFLOW_ORDER (topright-overflow-logic.js), and are listed in the ⋯ menu (#topright-overflow-btn) instead: icon, label,
5
+ // badge and active state copied from the button each time the menu opens, a click forwarded to the button itself,
6
+ // so every handler stays the button's own. The workspace switcher and the ⋯ never leave the row; the tools toggle
7
+ // leaves it last of all, in a band too narrow for anything else.
8
+ // An item that opens a dropdown of its own (bookmarks, share) is pinned back into the row before it is clicked, so
9
+ // its dropdown hangs where it always does; the pin is let go when its dropdown closes.
10
+ // ═══════════════════════════════════════════
11
+
12
+ import { emit, on } from './state.js';
13
+ import { t } from './i18n.js';
14
+ import { OVERFLOW_ORDER, overflowCount, clampDropdownX } from './topright-overflow-logic.js';
15
+
16
+ export { OVERFLOW_ORDER, overflowCount };
17
+
18
+ // The element that leaves the row for each entry (a button inside an overlay goes with its overlay) and the button
19
+ // the menu forwards to.
20
+ const ROW_ITEM = { 'topright-bookmarks-btn': 'bookmarks-overlay', 'invite-overlay': 'invite-overlay' };
21
+ const BUTTON = { 'invite-overlay': 'invite-btn' };
22
+ const DROPDOWN = { 'topright-bookmarks-btn': 'bookmarks-dropdown', 'invite-overlay': 'invite-dropdown' };
23
+
24
+ const labelOf = (btn) => btn.getAttribute('aria-label') || btn.dataset.tooltip || btn.title || btn.id;
25
+
26
+ export function initToprightOverflow() {
27
+ const $ = (id) => document.getElementById(id);
28
+ const controls = $('topright-controls');
29
+ const inner = $('topright-inner');
30
+ const group = $('topright-buttons');
31
+ const moreBtn = $('topright-overflow-btn');
32
+ const menu = $('topright-overflow-menu');
33
+ if (!controls || !inner || !group || !moreBtn || !menu) return null;
34
+
35
+ const entries = OVERFLOW_ORDER.map((id) => ({
36
+ id,
37
+ item: $(ROW_ITEM[id] || id),
38
+ button: $(BUTTON[id] || id),
39
+ dropdown: DROPDOWN[id] ? $(DROPDOWN[id]) : null,
40
+ })).filter((e) => e.item && e.button);
41
+ let pinned = null;
42
+ let open = false;
43
+
44
+ const shownInRow = (el) => el.offsetParent !== null || getComputedStyle(el).display !== 'none';
45
+ const isOverflowed = (e) => e.item.classList.contains('tr-overflowed');
46
+
47
+ // The dividers of the dock: one with no shown tool after it (up to the next divider or the end) goes too.
48
+ const tidyDividers = () => {
49
+ for (const div of inner.querySelectorAll(':scope > .tr-divider')) {
50
+ let el = div.nextElementSibling;
51
+ let any = false;
52
+ while (el && !el.classList.contains('tr-divider')) {
53
+ if (!el.classList.contains('tr-overflowed') && el.style.display !== 'none') { any = true; break; }
54
+ el = el.nextElementSibling;
55
+ }
56
+ div.classList.toggle('tr-overflowed', !any);
57
+ }
58
+ };
59
+
60
+ const fit = () => {
61
+ for (const e of entries) e.item.classList.remove('tr-overflowed');
62
+ for (const div of inner.querySelectorAll(':scope > .tr-divider')) div.classList.remove('tr-overflowed');
63
+ const available = parseFloat(getComputedStyle(controls).maxWidth);
64
+ const gap = parseFloat(getComputedStyle(controls).columnGap) || 0;
65
+ const innerGap = parseFloat(getComputedStyle(inner).columnGap) || 0;
66
+ const groupGap = parseFloat(getComputedStyle(group).columnGap) || 0;
67
+ const dockShown = !controls.classList.contains('tools-hidden');
68
+ // the row as it would be with everything in it and no ⋯ (the ⋯ is left out, not hidden: hiding it here would
69
+ // change the bar's class and wake the observers again)
70
+ const moreShown = controls.classList.contains('has-overflow') ? moreBtn.getBoundingClientRect().width + groupGap : 0;
71
+ const total = (dockShown ? inner.getBoundingClientRect().width + gap : 0) + group.getBoundingClientRect().width - moreShown;
72
+ if (!Number.isFinite(available)) return;
73
+ const widths = entries.map((e) => {
74
+ if (!shownInRow(e.item) || e.item.style.display === 'none') return 0;
75
+ const inDock = inner.contains(e.item);
76
+ if (inDock && !dockShown) return 0;
77
+ return e.item.getBoundingClientRect().width + (inDock ? innerGap : groupGap);
78
+ });
79
+ const menuWidth = 32 + groupGap;
80
+ const pinnedIdx = pinned ? [entries.indexOf(pinned)] : [];
81
+ const { hidden } = overflowCount({ total, available, widths, menuWidth, pinned: pinnedIdx });
82
+ for (const i of hidden) entries[i].item.classList.add('tr-overflowed');
83
+ // The dock's dividers: the 2px margins and gaps they free are not counted above, so the row only gets narrower.
84
+ tidyDividers();
85
+ if (controls.classList.contains('has-overflow') !== hidden.length > 0) controls.classList.toggle('has-overflow', hidden.length > 0);
86
+ if (!hidden.length && open) close();
87
+ else if (open) render();
88
+ };
89
+
90
+ let frame = 0;
91
+ const schedule = () => {
92
+ if (frame) return;
93
+ frame = requestAnimationFrame(() => { frame = 0; fit(); });
94
+ };
95
+
96
+ const render = () => {
97
+ menu.textContent = '';
98
+ // in the row's own order, as they would stand in it
99
+ const listed = entries.filter(isOverflowed)
100
+ .sort((a, b) => (a.item.compareDocumentPosition(b.item) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1));
101
+ for (const e of listed) {
102
+ const row = document.createElement('button');
103
+ row.type = 'button';
104
+ row.className = 'topright-overflow-item';
105
+ row.setAttribute('role', 'menuitem');
106
+ row.dataset.target = e.id;
107
+ if (e.button.classList.contains('active')) row.classList.add('active');
108
+ const icon = document.createElement('span');
109
+ icon.className = 'topright-overflow-icon';
110
+ const svg = e.button.querySelector('svg');
111
+ if (svg) icon.appendChild(svg.cloneNode(true));
112
+ const label = document.createElement('span');
113
+ label.className = 'topright-overflow-label';
114
+ label.textContent = labelOf(e.button);
115
+ row.append(icon, label);
116
+ const badge = e.button.querySelector('.count-badge');
117
+ const text = badge?.textContent.trim();
118
+ if (badge && text && getComputedStyle(badge).display !== 'none') {
119
+ const b = document.createElement('span');
120
+ b.className = `${badge.className} topright-overflow-badge`;
121
+ b.removeAttribute('id');
122
+ b.textContent = text;
123
+ row.appendChild(b);
124
+ }
125
+ row.addEventListener('click', () => activate(e));
126
+ menu.appendChild(row);
127
+ }
128
+ };
129
+
130
+ const items = () => [...menu.querySelectorAll('.topright-overflow-item')];
131
+
132
+ function openMenu(focusFirst) {
133
+ emit('panel:close-all-dropdowns');
134
+ render();
135
+ open = true;
136
+ menu.hidden = false;
137
+ moreBtn.setAttribute('aria-expanded', 'true');
138
+ moreBtn.classList.add('active');
139
+ if (focusFirst) items()[0]?.focus();
140
+ }
141
+ function close(refocus) {
142
+ if (!open) return;
143
+ open = false;
144
+ menu.hidden = true;
145
+ moreBtn.setAttribute('aria-expanded', 'false');
146
+ moreBtn.classList.remove('active');
147
+ if (refocus) moreBtn.focus();
148
+ }
149
+
150
+ function activate(e) {
151
+ close();
152
+ if (e.dropdown) {
153
+ pinned = e;
154
+ fit();
155
+ // let go of the pin once its dropdown closes
156
+ const watch = new MutationObserver(() => {
157
+ if (e.dropdown.style.display === 'none') { watch.disconnect(); if (pinned === e) { pinned = null; schedule(); } }
158
+ });
159
+ watch.observe(e.dropdown, { attributes: true, attributeFilter: ['style'] });
160
+ setTimeout(() => e.button.click(), 0);
161
+ return;
162
+ }
163
+ e.button.click();
164
+ }
165
+
166
+ moreBtn.addEventListener('click', (ev) => {
167
+ ev.stopPropagation();
168
+ if (open) close(); else openMenu(ev.detail === 0);
169
+ });
170
+ moreBtn.addEventListener('keydown', (ev) => {
171
+ if (ev.key === 'ArrowDown' || ev.key === 'ArrowUp') { ev.preventDefault(); if (!open) openMenu(false); const list = items(); (ev.key === 'ArrowUp' ? list.at(-1) : list[0])?.focus(); }
172
+ });
173
+ menu.addEventListener('keydown', (ev) => {
174
+ const list = items();
175
+ const at = list.indexOf(document.activeElement);
176
+ if (ev.key === 'ArrowDown') { ev.preventDefault(); list[(at + 1) % list.length]?.focus(); }
177
+ else if (ev.key === 'ArrowUp') { ev.preventDefault(); list[(at - 1 + list.length) % list.length]?.focus(); }
178
+ else if (ev.key === 'Home') { ev.preventDefault(); list[0]?.focus(); }
179
+ else if (ev.key === 'End') { ev.preventDefault(); list.at(-1)?.focus(); }
180
+ else if (ev.key === 'Tab') close();
181
+ });
182
+ document.addEventListener('keydown', (ev) => { if (open && ev.key === 'Escape') { ev.stopPropagation(); close(true); } }, true);
183
+ document.addEventListener('pointerdown', (ev) => { if (open && !menu.contains(ev.target) && !moreBtn.contains(ev.target)) close(); }, true);
184
+ on('panel:close-all-dropdowns', () => close());
185
+
186
+ moreBtn.setAttribute('aria-label', t('toolbar.more'));
187
+ moreBtn.dataset.tooltip = t('toolbar.more');
188
+
189
+ // Live: the band (window, side panels, explorers, Focus Mode) and the row's own contents.
190
+ const ro = new ResizeObserver(schedule);
191
+ ro.observe(document.documentElement);
192
+ ro.observe(controls);
193
+ for (const e of entries) ro.observe(e.item);
194
+ ro.observe(inner.querySelector('#workspace-overlay') || inner);
195
+ new MutationObserver(schedule).observe(document.documentElement, { attributes: true, attributeFilter: ['style', 'class'] });
196
+ new MutationObserver(schedule).observe(document.body, { attributes: true, attributeFilter: ['style', 'class'] });
197
+ new MutationObserver(schedule).observe(controls, { attributes: true, attributeFilter: ['class'] });
198
+ for (const e of entries) new MutationObserver(schedule).observe(e.item, { attributes: true, attributeFilter: ['style'] });
199
+ const bg = $('static-bg');
200
+ if (bg) new MutationObserver(schedule).observe(bg, { attributes: true, attributeFilter: ['class'] });
201
+ // The dropdowns of the bar, kept whole on screen: right of the band's clip (sidebar, Focus Mode rail and left
202
+ // panels + 20px, as #topright-controls' clip-path) and left of the viewport's edge, as wide as that room at most.
203
+ const EDGE = 8;
204
+ const place = (dd) => {
205
+ dd.style.translate = '';
206
+ dd.style.maxWidth = '';
207
+ if (dd.style.display === 'none' || !dd.isConnected) return;
208
+ const sidebar = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--sidebar-total-width')) || 0;
209
+ const minLeft = Math.max(EDGE, sidebar + 20);
210
+ const maxRight = document.documentElement.clientWidth - EDGE;
211
+ let r = dd.getBoundingClientRect();
212
+ const first = clampDropdownX({ left: r.left, width: r.width, minLeft, maxRight });
213
+ if (first.maxWidth !== null) { dd.style.maxWidth = `${first.maxWidth}px`; r = dd.getBoundingClientRect(); }
214
+ const { shift } = clampDropdownX({ left: r.left, width: r.width, minLeft, maxRight });
215
+ if (shift) dd.style.translate = `${shift}px 0`;
216
+ };
217
+ const dropdowns = ['ws-dropdown', 'bookmarks-dropdown', 'invite-dropdown'].map((id) => $(id)).filter(Boolean);
218
+ for (const dd of dropdowns) {
219
+ // its own writes change the style too: act on a change of shown / hidden only
220
+ let shown = dd.style.display !== 'none';
221
+ new MutationObserver(() => {
222
+ const now = dd.style.display !== 'none';
223
+ if (now !== shown) { shown = now; place(dd); }
224
+ }).observe(dd, { attributes: true, attributeFilter: ['style'] });
225
+ }
226
+ let placing = 0;
227
+ const placeOpen = () => { cancelAnimationFrame(placing); placing = requestAnimationFrame(() => dropdowns.forEach(place)); };
228
+ window.addEventListener('resize', placeOpen);
229
+ new ResizeObserver(placeOpen).observe(controls);
230
+ window.addEventListener('resize', schedule);
231
+ fit();
232
+ return { fit, close };
233
+ }
@@ -3058,7 +3058,7 @@ function isWhiteboardActive() {
3058
3058
  }
3059
3059
 
3060
3060
  // A key pressed inside a side panel is the panel's: registerSidepanel marks every panel root
3061
- // (Claude, Codex, OpenCode, Assistant) with data-sidepanel-provider.
3061
+ // (Claude, Codex, OpenCode, Antigravity, Assistant) with data-sidepanel-provider.
3062
3062
  export function isSidepanelKeyTarget(el) {
3063
3063
  return !!el?.closest?.('[data-sidepanel-provider]');
3064
3064
  }
@@ -2,7 +2,7 @@
2
2
  // SynaBun Neural Interface — how a dispatched worker's tab ends: the page side
3
3
  // ═══════════════════════════════════════════
4
4
  //
5
- // What the three provider sidepanels (Claude Code, Codex, OpenCode) share for
5
+ // What the four provider sidepanels (Claude Code, Codex, OpenCode, Antigravity) share for
6
6
  // the end of a worker the Assistant dispatched: following the run until it
7
7
  // has something to show, asking the dispatcher how it went (GET
8
8
  // /api/assistant/runs/:runId, then its `assistant:dispatch` events), the card
@@ -89,7 +89,7 @@ export const BRAIN_COPY = Object.freeze({
89
89
  effortDefault: 'Default effort',
90
90
  saved: 'WhatsApp model saved. It applies from your next message.',
91
91
  });
92
- const BRAIN_PROVIDER_LABELS = Object.freeze({ 'claude-code': 'Claude', codex: 'Codex', opencode: 'OpenCode' });
92
+ const BRAIN_PROVIDER_LABELS = Object.freeze({ 'claude-code': 'Claude', codex: 'Codex', opencode: 'OpenCode', antigravity: 'Antigravity' });
93
93
  export function brainProviderLabel(provider) { return BRAIN_PROVIDER_LABELS[provider] || String(provider || ''); }
94
94
  /**
95
95
  * The stored choice of a status: { provider, model, effort } or null (same as
@@ -399,7 +399,7 @@ export function waView(status, { now = Date.now() } = {}) {
399
399
  }
400
400
  case 'connected': {
401
401
  const who = accountLine(s);
402
- // A Codex / OpenCode brain holds the conversation at read-only whatever the level.
402
+ // A Codex / OpenCode / Antigravity brain holds the conversation at read-only whatever the level.
403
403
  const applies = s.brainLimit?.provider ? say('view.connected.readOnlyBrain', 'Read-only ({brain} brain)', { brain: s.brainLimit.label || s.brainLimit.provider }) : level;
404
404
  return view('ok', say('view.connected.title', 'Connected'), [mode, who, applies].filter(Boolean).join(' · '), { primary: button('open-conversation', say('button.openConversation', 'Open conversation')), secondary: button('test', say('button.test', 'Send a test message')), step: 'done', pane: 'connected', nav: 'connected' });
405
405
  }
@@ -0,0 +1,34 @@
1
+ // Bridge run state to each provider's existing question card. No card markup lives here.
2
+ import { t } from './i18n.js';
3
+
4
+ export function syncWorkerQuestions(holder, run, { open, close }) {
5
+ const previous = holder._workerQuestions || new Map();
6
+ const next = new Map((run.pending || []).filter((p) => p.kind === 'question' || p.protocol?.provider === 'codex').map((p) => [p.requestId, p]));
7
+ // Set before rendering: callbacks can synchronously read the current request.
8
+ holder._workerQuestions = next;
9
+ for (const [id, pending] of previous) if (!next.has(id)) close(id, pending);
10
+ for (const [id, pending] of next) if (!previous.has(id)) open(id, pending);
11
+ }
12
+
13
+ export async function answerWorkerQuestion(runId, requestId, response) {
14
+ const res = await fetch(`/api/assistant/runs/${encodeURIComponent(runId)}/permission`, {
15
+ method: 'POST', headers: { 'Content-Type': 'application/json' },
16
+ body: JSON.stringify({ ...response, requestId, origin: 'user' }),
17
+ });
18
+ const body = await res.json().catch(() => ({}));
19
+ // Another surface or Stop consumed it first. This card must clear too.
20
+ if (res.status === 409 && ['PERMISSION_ALREADY_RESOLVED', 'NO_PENDING_REQUEST'].includes(body.code)) return { stale: true };
21
+ if (!res.ok || body.ok === false) throw new Error(body.error || t('workerQuestion.deliveryFailed'));
22
+ return body;
23
+ }
24
+
25
+ /** Claude's native card shows one tool call at a time (each call may contain several questions). */
26
+ export function syncWorkerQuestionQueue(holder, run, hooks) {
27
+ syncWorkerQuestions(holder, run, { open() {}, close() {} });
28
+ const next = holder._workerQuestions.keys().next().value || null;
29
+ const previous = holder._workerQuestionActiveId || null;
30
+ if (next === previous) return;
31
+ holder._workerQuestionActiveId = next;
32
+ if (previous) hooks.close(previous);
33
+ if (next) hooks.open(next, holder._workerQuestions.get(next));
34
+ }
@@ -10,7 +10,7 @@
10
10
  html .sp-sidepanel { position:fixed; inset:0 !important; width:100% !important; height:100% !important;
11
11
  min-width:0 !important; max-width:none !important; transform:none !important; border:0; border-radius:0; box-shadow:none; }
12
12
  .sp-window-toggle, .sp-window-move, .sp-window-resize, .sp-dock-resize { display:none !important; }
13
- .cp-header-actions, .cxp-actions, .ocpv2-actions { display:none !important; }
13
+ .cp-header-actions, .cxp-actions, .ocpv2-actions, .agy-actions { display:none !important; }
14
14
  #term-minimized-tray { position:fixed; right:8px; top:45px; z-index:20000; }
15
15
  </style>
16
16
  </head>