synabun 2.0.10 → 2.2.0

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 (656) hide show
  1. package/CHANGELOG.md +207 -0
  2. package/README.md +25 -2
  3. package/THIRD-PARTY-LICENSES.md +22 -0
  4. package/bin/synabun.js +71 -24
  5. package/docs/whatsapp.md +13 -13
  6. package/hooks/claude-code/pre-websearch.mjs +12 -1
  7. package/hooks/claude-code/shared.mjs +5 -0
  8. package/hooks/claude-code/stop.mjs +1 -1
  9. package/lib/claude-hooks.js +172 -18
  10. package/lib/client-config-repair.js +30 -17
  11. package/lib/desktop-app.js +7 -1
  12. package/lib/external-tools.js +7 -6
  13. package/lib/first-launch-protection.js +57 -12
  14. package/lib/mcp-dist.js +176 -0
  15. package/lib/release-npm-ci.mjs +138 -0
  16. package/lib/release-publish.mjs +91 -0
  17. package/lib/release-scan.mjs +50 -0
  18. package/lib/server-crash-record.js +123 -0
  19. package/lib/server-exit.js +318 -0
  20. package/lib/server-supervisor.js +508 -0
  21. package/lib/start-launcher.js +37 -4
  22. package/lib/tools-cli.js +45 -0
  23. package/lib/update-snapshot.js +302 -0
  24. package/lib/virustotal.mjs +203 -0
  25. package/lib/windows-crash-event.js +269 -0
  26. package/mcp-server/dist/http.d.ts +20 -1
  27. package/mcp-server/dist/http.d.ts.map +1 -1
  28. package/mcp-server/dist/http.js +59 -12
  29. package/mcp-server/dist/http.js.map +1 -1
  30. package/mcp-server/dist/index.d.ts +33 -27
  31. package/mcp-server/dist/index.d.ts.map +1 -1
  32. package/mcp-server/dist/index.js +128 -143
  33. package/mcp-server/dist/index.js.map +1 -1
  34. package/mcp-server/dist/preload.js +1 -1
  35. package/mcp-server/dist/preload.js.map +1 -1
  36. package/mcp-server/dist/services/budget-judgments.d.ts +1 -1
  37. package/mcp-server/dist/services/budget-judgments.d.ts.map +1 -1
  38. package/mcp-server/dist/services/budget-judgments.js +5 -3
  39. package/mcp-server/dist/services/budget-judgments.js.map +1 -1
  40. package/mcp-server/dist/services/codex-config-heal.d.ts +6 -2
  41. package/mcp-server/dist/services/codex-config-heal.d.ts.map +1 -1
  42. package/mcp-server/dist/services/codex-config-heal.js +81 -28
  43. package/mcp-server/dist/services/codex-config-heal.js.map +1 -1
  44. package/mcp-server/dist/services/identity.d.ts +2 -2
  45. package/mcp-server/dist/services/identity.js +2 -2
  46. package/mcp-server/dist/services/memory-judge-backfill.d.ts +6 -0
  47. package/mcp-server/dist/services/memory-judge-backfill.d.ts.map +1 -1
  48. package/mcp-server/dist/services/memory-judge-backfill.js +7 -1
  49. package/mcp-server/dist/services/memory-judge-backfill.js.map +1 -1
  50. package/mcp-server/dist/services/memory-sessions.d.ts +1 -1
  51. package/mcp-server/dist/services/memory-sessions.d.ts.map +1 -1
  52. package/mcp-server/dist/services/memory-sessions.js +28 -2
  53. package/mcp-server/dist/services/memory-sessions.js.map +1 -1
  54. package/mcp-server/dist/services/neural-interface.d.ts +18 -11
  55. package/mcp-server/dist/services/neural-interface.d.ts.map +1 -1
  56. package/mcp-server/dist/services/neural-interface.js +67 -11
  57. package/mcp-server/dist/services/neural-interface.js.map +1 -1
  58. package/mcp-server/dist/services/server-instructions.d.ts +7 -2
  59. package/mcp-server/dist/services/server-instructions.d.ts.map +1 -1
  60. package/mcp-server/dist/services/server-instructions.js +22 -63
  61. package/mcp-server/dist/services/server-instructions.js.map +1 -1
  62. package/mcp-server/dist/services/tool-catalog.d.ts +120 -0
  63. package/mcp-server/dist/services/tool-catalog.d.ts.map +1 -0
  64. package/mcp-server/dist/services/tool-catalog.js +339 -0
  65. package/mcp-server/dist/services/tool-catalog.js.map +1 -0
  66. package/mcp-server/dist/services/tool-list-refresh-barrier.d.ts +12 -0
  67. package/mcp-server/dist/services/tool-list-refresh-barrier.d.ts.map +1 -0
  68. package/mcp-server/dist/services/tool-list-refresh-barrier.js +40 -0
  69. package/mcp-server/dist/services/tool-list-refresh-barrier.js.map +1 -0
  70. package/mcp-server/dist/services/tool-list.d.ts +108 -0
  71. package/mcp-server/dist/services/tool-list.d.ts.map +1 -0
  72. package/mcp-server/dist/services/tool-list.js +334 -0
  73. package/mcp-server/dist/services/tool-list.js.map +1 -0
  74. package/mcp-server/dist/services/tool-runtime.d.ts +161 -0
  75. package/mcp-server/dist/services/tool-runtime.d.ts.map +1 -0
  76. package/mcp-server/dist/services/tool-runtime.js +400 -0
  77. package/mcp-server/dist/services/tool-runtime.js.map +1 -0
  78. package/mcp-server/dist/services/typesafe-config.js +1 -1
  79. package/mcp-server/dist/services/typesafe-config.js.map +1 -1
  80. package/mcp-server/dist/services/whiteboard-geometry.d.ts +26 -2
  81. package/mcp-server/dist/services/whiteboard-geometry.d.ts.map +1 -1
  82. package/mcp-server/dist/services/whiteboard-geometry.js +91 -8
  83. package/mcp-server/dist/services/whiteboard-geometry.js.map +1 -1
  84. package/mcp-server/dist/tools/agents.d.ts +14 -14
  85. package/mcp-server/dist/tools/agents.d.ts.map +1 -1
  86. package/mcp-server/dist/tools/agents.js +29 -19
  87. package/mcp-server/dist/tools/agents.js.map +1 -1
  88. package/mcp-server/dist/tools/browser-batch.d.ts +3 -3
  89. package/mcp-server/dist/tools/choice.d.ts +6 -0
  90. package/mcp-server/dist/tools/choice.d.ts.map +1 -1
  91. package/mcp-server/dist/tools/choice.js +18 -13
  92. package/mcp-server/dist/tools/choice.js.map +1 -1
  93. package/mcp-server/dist/tools/git-tools.js +2 -2
  94. package/mcp-server/dist/tools/git-tools.js.map +1 -1
  95. package/mcp-server/dist/tools/image-tools.d.ts +1 -1
  96. package/mcp-server/dist/tools/image-tools.js +1 -1
  97. package/mcp-server/dist/tools/morelogin.d.ts.map +1 -1
  98. package/mcp-server/dist/tools/morelogin.js +9 -6
  99. package/mcp-server/dist/tools/morelogin.js.map +1 -1
  100. package/mcp-server/dist/tools/skill-tools.d.ts +505 -0
  101. package/mcp-server/dist/tools/skill-tools.d.ts.map +1 -0
  102. package/mcp-server/dist/tools/skill-tools.js +642 -0
  103. package/mcp-server/dist/tools/skill-tools.js.map +1 -0
  104. package/mcp-server/dist/tools/skill.d.ts +7 -0
  105. package/mcp-server/dist/tools/skill.d.ts.map +1 -0
  106. package/mcp-server/dist/tools/skill.js +11 -0
  107. package/mcp-server/dist/tools/skill.js.map +1 -0
  108. package/mcp-server/dist/tools/tool-groups.d.ts +68 -0
  109. package/mcp-server/dist/tools/tool-groups.d.ts.map +1 -0
  110. package/mcp-server/dist/tools/tool-groups.js +147 -0
  111. package/mcp-server/dist/tools/tool-groups.js.map +1 -0
  112. package/mcp-server/dist/tools/whiteboard-format.d.ts.map +1 -1
  113. package/mcp-server/dist/tools/whiteboard-format.js +7 -4
  114. package/mcp-server/dist/tools/whiteboard-format.js.map +1 -1
  115. package/mcp-server/dist/tools/whiteboard-tools.d.ts +64 -13
  116. package/mcp-server/dist/tools/whiteboard-tools.d.ts.map +1 -1
  117. package/mcp-server/dist/tools/whiteboard-tools.js +30 -5
  118. package/mcp-server/dist/tools/whiteboard-tools.js.map +1 -1
  119. package/mcp-server/package-lock.json +2 -2
  120. package/mcp-server/package.json +1 -1
  121. package/mcp-server/src/http.ts +75 -12
  122. package/mcp-server/src/index.ts +147 -154
  123. package/mcp-server/src/preload.ts +12 -12
  124. package/mcp-server/src/services/budget-judgments.ts +5 -3
  125. package/mcp-server/src/services/codex-config-heal.ts +80 -29
  126. package/mcp-server/src/services/identity.ts +2 -2
  127. package/mcp-server/src/services/memory-judge-backfill.ts +7 -1
  128. package/mcp-server/src/services/memory-sessions.ts +24 -3
  129. package/mcp-server/src/services/neural-interface.ts +81 -21
  130. package/mcp-server/src/services/server-instructions.ts +29 -64
  131. package/mcp-server/src/services/tool-catalog.ts +403 -0
  132. package/mcp-server/src/services/tool-list-refresh-barrier.ts +33 -0
  133. package/mcp-server/src/services/tool-list.ts +410 -0
  134. package/mcp-server/src/services/tool-runtime.ts +457 -0
  135. package/mcp-server/src/services/typesafe-config.ts +1 -1
  136. package/mcp-server/src/services/whiteboard-geometry.ts +94 -9
  137. package/mcp-server/src/tools/agents.ts +29 -20
  138. package/mcp-server/src/tools/choice.ts +17 -12
  139. package/mcp-server/src/tools/git-tools.ts +2 -2
  140. package/mcp-server/src/tools/image-tools.ts +1 -1
  141. package/mcp-server/src/tools/morelogin.ts +6 -4
  142. package/mcp-server/src/tools/skill-tools.ts +592 -0
  143. package/mcp-server/src/tools/skill.ts +13 -0
  144. package/mcp-server/src/tools/tool-groups.ts +164 -0
  145. package/mcp-server/src/tools/whiteboard-format.ts +9 -3
  146. package/mcp-server/src/tools/whiteboard-tools.ts +39 -5
  147. package/neural-interface/i18n/en.json +3953 -228
  148. package/neural-interface/i18n/pt-BR.json +3901 -179
  149. package/neural-interface/lib/agent-sandbox-elevation.js +6 -0
  150. package/neural-interface/lib/antigravity/acp-client-host.js +554 -0
  151. package/neural-interface/lib/antigravity/acp-connection.js +299 -0
  152. package/neural-interface/lib/antigravity/bypass.js +100 -0
  153. package/neural-interface/lib/antigravity/catalog.js +273 -0
  154. package/neural-interface/lib/antigravity/home.js +260 -0
  155. package/neural-interface/lib/antigravity/migrate-gemini.js +139 -0
  156. package/neural-interface/lib/antigravity/panel-bridge.js +1058 -0
  157. package/neural-interface/lib/antigravity/policy-hook.mjs +78 -0
  158. package/neural-interface/lib/antigravity/policy.js +74 -0
  159. package/neural-interface/lib/antigravity/tool-call.js +178 -0
  160. package/neural-interface/lib/antigravity/transcripts.js +252 -0
  161. package/neural-interface/lib/antigravity/usage.js +43 -0
  162. package/neural-interface/lib/assistant-api.js +128 -28
  163. package/neural-interface/lib/assistant-brains/antigravity.js +423 -0
  164. package/neural-interface/lib/assistant-brains/claude.js +4 -3
  165. package/neural-interface/lib/assistant-brains/codex-browser-policy-hook.mjs +12 -2
  166. package/neural-interface/lib/assistant-brains/codex-route-gate-hook.mjs +32 -9
  167. package/neural-interface/lib/assistant-brains/codex.js +9 -5
  168. package/neural-interface/lib/assistant-brains/opencode.js +120 -54
  169. package/neural-interface/lib/assistant-brains/opencode2-browser-policy/index.js +28 -13
  170. package/neural-interface/lib/assistant-brains/opencode2-route-gate/index.js +59 -19
  171. package/neural-interface/lib/assistant-budget-planner.js +7 -3
  172. package/neural-interface/lib/assistant-budget-split.js +42 -15
  173. package/neural-interface/lib/assistant-catalog.js +81 -15
  174. package/neural-interface/lib/assistant-config.js +6 -3
  175. package/neural-interface/lib/assistant-dispatch.js +1073 -200
  176. package/neural-interface/lib/assistant-envelope.js +156 -2
  177. package/neural-interface/lib/assistant-evidence.js +80 -0
  178. package/neural-interface/lib/assistant-hidden-models.js +7 -5
  179. package/neural-interface/lib/assistant-persona.js +93 -19
  180. package/neural-interface/lib/assistant-plan-permissions.js +25 -9
  181. package/neural-interface/lib/assistant-route-gate-codex.js +3 -0
  182. package/neural-interface/lib/assistant-route-gate.js +6 -4
  183. package/neural-interface/lib/assistant-router.js +245 -38
  184. package/neural-interface/lib/assistant-runtime.js +214 -30
  185. package/neural-interface/lib/assistant-task-prompt.js +87 -21
  186. package/neural-interface/lib/assistant-tools.js +51 -0
  187. package/neural-interface/lib/assistant-usage.js +29 -0
  188. package/neural-interface/lib/backup-service.js +626 -4
  189. package/neural-interface/lib/backup-zip-reader.js +10 -5
  190. package/neural-interface/lib/backup-zip-writer.js +257 -0
  191. package/neural-interface/lib/browser-execution.js +10 -2
  192. package/neural-interface/lib/browser-guard-cdp.js +84 -0
  193. package/neural-interface/lib/browser-network-guard.js +476 -0
  194. package/neural-interface/lib/browser-policy-roots.js +64 -0
  195. package/neural-interface/lib/browser-tool-policy.js +198 -38
  196. package/neural-interface/lib/claude-agent-bridge.js +11 -2
  197. package/neural-interface/lib/claude-history-cache.js +210 -0
  198. package/neural-interface/lib/claude-hooks-status.js +103 -0
  199. package/neural-interface/lib/claude-model-catalog.js +5 -1
  200. package/neural-interface/lib/claude-temporary.js +5 -11
  201. package/neural-interface/lib/cli-install-api.js +1 -1
  202. package/neural-interface/lib/cli-install.js +163 -154
  203. package/neural-interface/lib/cli-resolver.js +13 -3
  204. package/neural-interface/lib/cli-update-planner.js +52 -41
  205. package/neural-interface/lib/cloudflared/tunnel.js +42 -2
  206. package/neural-interface/lib/codex-mcp-approvals.js +11 -0
  207. package/neural-interface/lib/codex-rollout-reader.js +52 -0
  208. package/neural-interface/lib/codex-worker-app-server.js +191 -0
  209. package/neural-interface/lib/confined-fs.js +30 -3
  210. package/neural-interface/lib/crash-notice-api.js +98 -0
  211. package/neural-interface/lib/editor-completion-opencode.js +68 -68
  212. package/neural-interface/lib/editor-git-api.js +3 -20
  213. package/neural-interface/lib/exec-loop-command.js +13 -10
  214. package/neural-interface/lib/file-explorer-api.js +74 -40
  215. package/neural-interface/lib/file-explorer-watch.js +9 -3
  216. package/neural-interface/lib/git-bash/install.js +52 -6
  217. package/neural-interface/lib/git-bash/manager.js +59 -17
  218. package/neural-interface/lib/git-bash/pins.js +12 -0
  219. package/neural-interface/lib/git-read.js +2 -2
  220. package/neural-interface/lib/git-status-runner.js +390 -0
  221. package/neural-interface/lib/git-status-watchdog.js +40 -0
  222. package/neural-interface/lib/greeting/budgets.js +1 -0
  223. package/neural-interface/lib/greeting/engine.js +2 -2
  224. package/neural-interface/lib/greeting/sources.js +10 -12
  225. package/neural-interface/lib/greeting/writer.js +1 -1
  226. package/neural-interface/lib/http-guards.js +8 -2
  227. package/neural-interface/lib/install-details.js +4 -1
  228. package/neural-interface/lib/mcp-agent-servers.js +67 -0
  229. package/neural-interface/lib/mcp-client-config.js +35 -33
  230. package/neural-interface/lib/mcp-external-servers.js +332 -0
  231. package/neural-interface/lib/mcp-installer.js +2 -1
  232. package/neural-interface/lib/{mcp-profile-refresh-coordinator.js → mcp-tools-refresh-coordinator.js} +4 -4
  233. package/neural-interface/lib/memory-session-capture.js +17 -3
  234. package/neural-interface/lib/morelogin.js +177 -25
  235. package/neural-interface/lib/native-loop-providers.js +965 -66
  236. package/neural-interface/lib/native-loop-runtime.js +290 -42
  237. package/neural-interface/lib/opencode-config.js +557 -0
  238. package/neural-interface/lib/opencode-db-schema.js +17 -34
  239. package/neural-interface/lib/opencode-history.js +48 -218
  240. package/neural-interface/lib/opencode-mcp-ready.js +108 -0
  241. package/neural-interface/lib/opencode-native-boundary.js +53 -0
  242. package/neural-interface/lib/opencode-protocol.js +249 -112
  243. package/neural-interface/lib/opencode-runtime-config.js +32 -22
  244. package/neural-interface/lib/opencode-serve-records.js +39 -21
  245. package/neural-interface/lib/opencode-v2-client.js +48 -153
  246. package/neural-interface/lib/opencode-v2-ws-requests.js +36 -210
  247. package/neural-interface/lib/opencode-worker-data.js +27 -0
  248. package/neural-interface/lib/opencode2-client.js +73 -37
  249. package/neural-interface/lib/opencode2-proxy.js +23 -63
  250. package/neural-interface/lib/opencode2-translate.js +51 -2
  251. package/neural-interface/lib/owner-authority.js +249 -0
  252. package/neural-interface/lib/page-session.js +275 -0
  253. package/neural-interface/lib/path-confine.js +12 -9
  254. package/neural-interface/lib/peer-identity.js +793 -0
  255. package/neural-interface/lib/pty-host/core.js +28 -1
  256. package/neural-interface/lib/pty-host/lifetime.js +12 -0
  257. package/neural-interface/lib/pty-host/manager.js +12 -1
  258. package/neural-interface/lib/remote-policy.js +1 -1
  259. package/neural-interface/lib/request-gate.js +20 -2
  260. package/neural-interface/lib/rulesets/api.js +7 -6
  261. package/neural-interface/lib/rulesets/fs-safe.js +1 -1
  262. package/neural-interface/lib/rulesets/installer.js +180 -36
  263. package/neural-interface/lib/rulesets/json-edit.js +1 -1
  264. package/neural-interface/lib/rulesets/render.js +1 -1
  265. package/neural-interface/lib/session-cache-builder.js +81 -31
  266. package/neural-interface/lib/session-title-generator.js +58 -36
  267. package/neural-interface/lib/skills/api-v2.js +495 -0
  268. package/neural-interface/lib/skills/bundle.js +418 -0
  269. package/neural-interface/lib/skills/catalog.js +298 -0
  270. package/neural-interface/lib/skills/creation-api.js +191 -0
  271. package/neural-interface/lib/skills/creation-brief.js +247 -0
  272. package/neural-interface/lib/skills/creation-sources.js +285 -0
  273. package/neural-interface/lib/skills/creation.js +843 -0
  274. package/neural-interface/lib/skills/deploy.js +569 -0
  275. package/neural-interface/lib/skills/digest.js +119 -0
  276. package/neural-interface/lib/skills/discover.js +111 -0
  277. package/neural-interface/lib/skills/draft-confinement.js +216 -0
  278. package/neural-interface/lib/skills/eval-confinement.js +399 -0
  279. package/neural-interface/lib/skills/eval-sandbox.js +280 -0
  280. package/neural-interface/lib/skills/eval-trace.js +135 -0
  281. package/neural-interface/lib/skills/evals-api.js +212 -0
  282. package/neural-interface/lib/skills/evals.js +1573 -0
  283. package/neural-interface/lib/skills/export.js +203 -0
  284. package/neural-interface/lib/skills/frontmatter.js +64 -0
  285. package/neural-interface/lib/skills/health.js +75 -0
  286. package/neural-interface/lib/skills/json-edit.js +165 -0
  287. package/neural-interface/lib/skills/known-bridge-digests.json +441 -0
  288. package/neural-interface/lib/skills/known-bridges.js +96 -0
  289. package/neural-interface/lib/skills/library.js +823 -0
  290. package/neural-interface/lib/skills/local-store.js +21 -0
  291. package/neural-interface/lib/skills/migration.js +433 -0
  292. package/neural-interface/lib/skills/operations.js +45 -0
  293. package/neural-interface/lib/skills/ownership.js +427 -0
  294. package/neural-interface/lib/skills/packages.js +88 -0
  295. package/neural-interface/lib/skills/reviews.js +212 -0
  296. package/neural-interface/lib/skills/revision.js +80 -0
  297. package/neural-interface/lib/skills/roots.js +269 -0
  298. package/neural-interface/lib/skills/runtime-checks.js +358 -0
  299. package/neural-interface/lib/skills/scan-assets.js +252 -0
  300. package/neural-interface/lib/skills/scan-context.js +26 -0
  301. package/neural-interface/lib/skills/scan-shell.js +324 -0
  302. package/neural-interface/lib/skills/scan.js +364 -0
  303. package/neural-interface/lib/skills/scanners.js +54 -0
  304. package/neural-interface/lib/skills/service.js +530 -0
  305. package/neural-interface/lib/skills/telemetry.js +119 -0
  306. package/neural-interface/lib/sqlite-integrity-worker.js +22 -0
  307. package/neural-interface/lib/synabun-version.js +1 -1
  308. package/neural-interface/lib/system-activity.js +1 -1
  309. package/neural-interface/lib/tool-lists.js +124 -0
  310. package/neural-interface/lib/whatsapp/brain.js +7 -3
  311. package/neural-interface/lib/whatsapp/bridge.js +6 -3
  312. package/neural-interface/lib/whatsapp/cards.js +22 -9
  313. package/neural-interface/lib/whatsapp/config.js +1 -1
  314. package/neural-interface/lib/worker-confinement.js +1268 -0
  315. package/neural-interface/lib/worker-guard-setting.js +56 -0
  316. package/neural-interface/lib/worker-mcp-channel.js +175 -0
  317. package/neural-interface/lib/worker-question.js +74 -0
  318. package/neural-interface/lib/worker-relay-ports.js +227 -0
  319. package/neural-interface/lib/worker-resume.js +238 -0
  320. package/neural-interface/lib/worker-sandbox.js +329 -0
  321. package/neural-interface/package-lock.json +34 -12
  322. package/neural-interface/package.json +3 -2
  323. package/neural-interface/public/index.html +3 -1
  324. package/neural-interface/public/index2d.html +19 -11
  325. package/neural-interface/public/onboarding.html +3 -3
  326. package/neural-interface/public/shared/account-menu.js +8 -5
  327. package/neural-interface/public/shared/agent-runtime-options.js +125 -31
  328. package/neural-interface/public/shared/agy/agy-bypass.js +47 -0
  329. package/neural-interface/public/shared/agy/agy-client.js +266 -0
  330. package/neural-interface/public/shared/agy/agy-commands.js +120 -0
  331. package/neural-interface/public/shared/agy/agy-copy.js +326 -0
  332. package/neural-interface/public/shared/agy/agy-diff.js +161 -0
  333. package/neural-interface/public/shared/agy/agy-events.js +469 -0
  334. package/neural-interface/public/shared/agy/agy-greeting.js +26 -0
  335. package/neural-interface/public/shared/agy/agy-options.js +232 -0
  336. package/neural-interface/public/shared/agy/agy-panel.js +2543 -0
  337. package/neural-interface/public/shared/agy/agy-render.js +392 -0
  338. package/neural-interface/public/shared/agy/agy-setup.js +149 -0
  339. package/neural-interface/public/shared/agy/agy-styles.js +604 -0
  340. package/neural-interface/public/shared/agy/agy-tabs-logic.js +181 -0
  341. package/neural-interface/public/shared/api.js +1527 -1336
  342. package/neural-interface/public/shared/app-frame.js +192 -0
  343. package/neural-interface/public/shared/assistant/asst-agents-dock.js +36 -6
  344. package/neural-interface/public/shared/assistant/asst-api.js +1 -1
  345. package/neural-interface/public/shared/assistant/asst-ask-styles.js +270 -0
  346. package/neural-interface/public/shared/assistant/asst-ask-tail.js +118 -0
  347. package/neural-interface/public/shared/assistant/asst-ask.js +397 -0
  348. package/neural-interface/public/shared/assistant/asst-brain-picker.js +105 -44
  349. package/neural-interface/public/shared/assistant/asst-budget.js +5 -4
  350. package/neural-interface/public/shared/assistant/asst-control.js +205 -26
  351. package/neural-interface/public/shared/assistant/asst-followups-card.js +383 -0
  352. package/neural-interface/public/shared/assistant/asst-followups.js +417 -0
  353. package/neural-interface/public/shared/assistant/asst-hosts.js +16 -7
  354. package/neural-interface/public/shared/assistant/asst-limit-dock.js +45 -0
  355. package/neural-interface/public/shared/assistant/asst-limit-wait.js +327 -0
  356. package/neural-interface/public/shared/assistant/asst-limit.js +168 -0
  357. package/neural-interface/public/shared/assistant/asst-mascot.js +49 -12
  358. package/neural-interface/public/shared/assistant/asst-menu.js +7 -6
  359. package/neural-interface/public/shared/assistant/asst-panel.js +151 -19
  360. package/neural-interface/public/shared/assistant/asst-rack-styles.js +66 -49
  361. package/neural-interface/public/shared/assistant/asst-render.js +445 -82
  362. package/neural-interface/public/shared/assistant/asst-route.js +304 -53
  363. package/neural-interface/public/shared/assistant/asst-routes-editor.js +9 -8
  364. package/neural-interface/public/shared/assistant/asst-scenes.js +56 -1
  365. package/neural-interface/public/shared/assistant/asst-sidepanel.js +117 -10
  366. package/neural-interface/public/shared/assistant/asst-slash.js +17 -9
  367. package/neural-interface/public/shared/assistant/asst-state.js +87 -24
  368. package/neural-interface/public/shared/assistant/asst-stop.js +127 -0
  369. package/neural-interface/public/shared/assistant/asst-styles.js +93 -21
  370. package/neural-interface/public/shared/assistant/asst-tool-kinds.js +190 -23
  371. package/neural-interface/public/shared/assistant/asst-usage.js +2 -1
  372. package/neural-interface/public/shared/automation-context.js +5 -2
  373. package/neural-interface/public/shared/cc-dropdown.js +89 -19
  374. package/neural-interface/public/shared/cdx/cdx-context-menu.js +10 -9
  375. package/neural-interface/public/shared/cdx/cdx-copy.js +16 -0
  376. package/neural-interface/public/shared/cdx/cdx-output-model.js +22 -1
  377. package/neural-interface/public/shared/cdx/cdx-output.js +34 -10
  378. package/neural-interface/public/shared/cdx/cdx-panel.js +59 -151
  379. package/neural-interface/public/shared/cdx/cdx-preview.js +12 -0
  380. package/neural-interface/public/shared/cdx/cdx-protocol.js +39 -11
  381. package/neural-interface/public/shared/cdx/cdx-render.js +57 -38
  382. package/neural-interface/public/shared/cdx/cdx-requests.js +14 -4
  383. package/neural-interface/public/shared/cdx/cdx-skill-hints.js +54 -0
  384. package/neural-interface/public/shared/cdx/cdx-styles.js +15 -3
  385. package/neural-interface/public/shared/cdx/cdx-tabs.js +127 -44
  386. package/neural-interface/public/shared/cdx/cdx-ws.js +0 -1
  387. package/neural-interface/public/shared/cli-install-controller.js +218 -0
  388. package/neural-interface/public/shared/cli-install-view.js +11 -12
  389. package/neural-interface/public/shared/cli-status.js +11 -10
  390. package/neural-interface/public/shared/constants.js +5 -4
  391. package/neural-interface/public/shared/context-menu-areas.js +34 -0
  392. package/neural-interface/public/shared/context-menu-logic.js +243 -0
  393. package/neural-interface/public/shared/context-menu-model.js +367 -0
  394. package/neural-interface/public/shared/context-menu.js +372 -0
  395. package/neural-interface/public/shared/cp/cp-context-menu.js +10 -9
  396. package/neural-interface/public/shared/cp/cp-restore.js +162 -0
  397. package/neural-interface/public/shared/cp/cp-tool-cards.js +10 -3
  398. package/neural-interface/public/shared/crash-notice-view.js +168 -0
  399. package/neural-interface/public/shared/desktop-bridge.js +17 -0
  400. package/neural-interface/public/shared/desktop-titlebar-view.js +12 -0
  401. package/neural-interface/public/shared/desktop-titlebar.js +13 -4
  402. package/neural-interface/public/shared/desktop-update-view.js +21 -0
  403. package/neural-interface/public/shared/editor/editor-panel-logic.js +2 -2
  404. package/neural-interface/public/shared/explorer/fx-api.js +4 -4
  405. package/neural-interface/public/shared/explorer/fx-links.js +3 -3
  406. package/neural-interface/public/shared/explorer/fx-logic.js +1 -1
  407. package/neural-interface/public/shared/explorer/fx-main.js +48 -16
  408. package/neural-interface/public/shared/explorer/fx-tree.js +1 -0
  409. package/neural-interface/public/shared/greeting/greeting-card.js +2 -2
  410. package/neural-interface/public/shared/greeting/greeting-view.js +1 -0
  411. package/neural-interface/public/shared/html-shell.js +30 -15
  412. package/neural-interface/public/shared/i18n.js +2 -0
  413. package/neural-interface/public/shared/ocp-v2/ocp-v2-approvals.js +7 -7
  414. package/neural-interface/public/shared/ocp-v2/ocp-v2-binding.js +4 -4
  415. package/neural-interface/public/shared/ocp-v2/ocp-v2-changes-logic.js +3 -101
  416. package/neural-interface/public/shared/ocp-v2/ocp-v2-childpanel.js +2 -0
  417. package/neural-interface/public/shared/ocp-v2/ocp-v2-compact-button.js +1 -3
  418. package/neural-interface/public/shared/ocp-v2/ocp-v2-composer-logic.js +2 -6
  419. package/neural-interface/public/shared/ocp-v2/ocp-v2-context-menu.js +11 -11
  420. package/neural-interface/public/shared/ocp-v2/ocp-v2-context-model.js +0 -3
  421. package/neural-interface/public/shared/ocp-v2/ocp-v2-events.js +8 -4
  422. package/neural-interface/public/shared/ocp-v2/ocp-v2-manager.js +7 -7
  423. package/neural-interface/public/shared/ocp-v2/ocp-v2-outcome-notifications.js +16 -0
  424. package/neural-interface/public/shared/ocp-v2/ocp-v2-panel.js +74 -259
  425. package/neural-interface/public/shared/ocp-v2/ocp-v2-plan.js +1 -2
  426. package/neural-interface/public/shared/ocp-v2/ocp-v2-projectbar.js +95 -202
  427. package/neural-interface/public/shared/ocp-v2/ocp-v2-rehydrate.js +13 -4
  428. package/neural-interface/public/shared/ocp-v2/ocp-v2-render.js +13 -22
  429. package/neural-interface/public/shared/ocp-v2/ocp-v2-send.js +4 -4
  430. package/neural-interface/public/shared/ocp-v2/ocp-v2-session-actions.js +8 -61
  431. package/neural-interface/public/shared/ocp-v2/ocp-v2-sessions-logic.js +2 -91
  432. package/neural-interface/public/shared/ocp-v2/ocp-v2-slash-hints.js +16 -15
  433. package/neural-interface/public/shared/ocp-v2/ocp-v2-state.js +8 -21
  434. package/neural-interface/public/shared/ocp-v2/ocp-v2-status-logic.js +1 -99
  435. package/neural-interface/public/shared/ocp-v2/ocp-v2-status.js +5 -35
  436. package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +17 -21
  437. package/neural-interface/public/shared/ocp-v2/{ocp-v2-profile-inheritance.js → ocp-v2-tools-inheritance.js} +16 -16
  438. package/neural-interface/public/shared/ocp-v2/ocp-v2-ws.js +60 -50
  439. package/neural-interface/public/shared/page-session.js +96 -0
  440. package/neural-interface/public/shared/provider-icons.js +4 -2
  441. package/neural-interface/public/shared/registry.js +5 -3
  442. package/neural-interface/public/shared/retired-2d.js +3 -0
  443. package/neural-interface/public/shared/schedules-view.js +195 -61
  444. package/neural-interface/public/shared/settings/settings-claude-hooks.js +135 -0
  445. package/neural-interface/public/shared/settings/settings-data.js +3 -1
  446. package/neural-interface/public/shared/settings/settings-ia.js +6 -6
  447. package/neural-interface/public/shared/settings/settings-opencode.js +89 -0
  448. package/neural-interface/public/shared/settings/settings-rules.js +2 -2
  449. package/neural-interface/public/shared/settings/settings-skill-folders-pane.js +265 -0
  450. package/neural-interface/public/shared/settings/settings-skill-folders.js +130 -0
  451. package/neural-interface/public/shared/settings/settings-worker-guard.js +72 -0
  452. package/neural-interface/public/shared/showcase-privacy.js +6 -1
  453. package/neural-interface/public/shared/sidepanel-session-status.js +3 -3
  454. package/neural-interface/public/shared/skills/ss-args.js +96 -0
  455. package/neural-interface/public/shared/skills/ss-creation.js +222 -0
  456. package/neural-interface/public/shared/skills/ss-dialog.js +133 -0
  457. package/neural-interface/public/shared/skills/ss-doc.js +173 -0
  458. package/neural-interface/public/shared/skills/ss-eval-adapters.js +269 -0
  459. package/neural-interface/public/shared/skills/ss-eval-grade.js +359 -0
  460. package/neural-interface/public/shared/skills/ss-eval-optimise.js +153 -0
  461. package/neural-interface/public/shared/skills/ss-eval-plan.js +315 -0
  462. package/neural-interface/public/shared/skills/ss-evals.js +417 -0
  463. package/neural-interface/public/shared/skills/ss-form.js +159 -0
  464. package/neural-interface/public/shared/skills/ss-frontmatter.js +376 -0
  465. package/neural-interface/public/shared/skills/ss-ids.js +32 -0
  466. package/neural-interface/public/shared/skills/ss-lint.js +149 -0
  467. package/neural-interface/public/shared/skills/ss-presets.js +117 -0
  468. package/neural-interface/public/shared/skills/ss-profiles.js +513 -0
  469. package/neural-interface/public/shared/skills/ss-resources.js +165 -0
  470. package/neural-interface/public/shared/skills/ss-review-view.js +190 -0
  471. package/neural-interface/public/shared/skills/ss-tabs.js +79 -0
  472. package/neural-interface/public/shared/skills/ss-unicode.js +135 -0
  473. package/neural-interface/public/shared/skills/studio/sx-actions.js +222 -0
  474. package/neural-interface/public/shared/skills/studio/sx-cm.js +101 -0
  475. package/neural-interface/public/shared/skills/studio/sx-create-ai-view.js +749 -0
  476. package/neural-interface/public/shared/skills/studio/sx-create-ai.js +237 -0
  477. package/neural-interface/public/shared/skills/studio/sx-create-view.js +254 -0
  478. package/neural-interface/public/shared/skills/studio/sx-create.js +126 -0
  479. package/neural-interface/public/shared/skills/studio/sx-diff-view.js +43 -0
  480. package/neural-interface/public/shared/skills/studio/sx-diff.js +133 -0
  481. package/neural-interface/public/shared/skills/studio/sx-docs.js +480 -0
  482. package/neural-interface/public/shared/skills/studio/sx-dom.js +230 -0
  483. package/neural-interface/public/shared/skills/studio/sx-edit-view.js +848 -0
  484. package/neural-interface/public/shared/skills/studio/sx-editor-model.js +193 -0
  485. package/neural-interface/public/shared/skills/studio/sx-errors.js +22 -0
  486. package/neural-interface/public/shared/skills/studio/sx-fixes-view.js +359 -0
  487. package/neural-interface/public/shared/skills/studio/sx-fixes.js +327 -0
  488. package/neural-interface/public/shared/skills/studio/sx-geometry.js +82 -0
  489. package/neural-interface/public/shared/skills/studio/sx-import.js +262 -0
  490. package/neural-interface/public/shared/skills/studio/sx-inspector.js +308 -0
  491. package/neural-interface/public/shared/skills/studio/sx-install-flow.js +282 -0
  492. package/neural-interface/public/shared/skills/studio/sx-install.js +313 -0
  493. package/neural-interface/public/shared/skills/studio/sx-library-view.js +748 -0
  494. package/neural-interface/public/shared/skills/studio/sx-library.js +479 -0
  495. package/neural-interface/public/shared/skills/studio/sx-main.js +690 -0
  496. package/neural-interface/public/shared/skills/studio/sx-operations-view.js +98 -0
  497. package/neural-interface/public/shared/skills/studio/sx-operations.js +11 -0
  498. package/neural-interface/public/shared/skills/studio/sx-plan.js +158 -0
  499. package/neural-interface/public/shared/skills/studio/sx-publish-view.js +621 -0
  500. package/neural-interface/public/shared/skills/studio/sx-review-view.js +369 -0
  501. package/neural-interface/public/shared/skills/studio/sx-review.js +148 -0
  502. package/neural-interface/public/shared/skills/studio/sx-scan.js +35 -0
  503. package/neural-interface/public/shared/skills/studio/sx-snippets.js +96 -0
  504. package/neural-interface/public/shared/skills/studio/sx-subject.js +249 -0
  505. package/neural-interface/public/shared/skills/studio/sx-test-view.js +994 -0
  506. package/neural-interface/public/shared/skills/studio/sx-test.js +328 -0
  507. package/neural-interface/public/shared/skills/studio/sx-versions-view.js +241 -0
  508. package/neural-interface/public/shared/skills/studio/sx-workspace-view.js +426 -0
  509. package/neural-interface/public/shared/state.js +1 -1
  510. package/neural-interface/public/shared/streaming-markdown.js +58 -0
  511. package/neural-interface/public/shared/styleguide/sg-panel.js +4 -2
  512. package/neural-interface/public/shared/styles.css +1822 -1756
  513. package/neural-interface/public/shared/synabun-mascot.js +1115 -9
  514. package/neural-interface/public/shared/text-cache.js +29 -0
  515. package/neural-interface/public/shared/tool-list-picker.js +55 -0
  516. package/neural-interface/public/shared/tool-list-storage.js +24 -0
  517. package/neural-interface/public/shared/tool-list-view.js +112 -0
  518. package/neural-interface/public/shared/topright-overflow-logic.js +54 -0
  519. package/neural-interface/public/shared/tour/tour-actor.js +268 -0
  520. package/neural-interface/public/shared/tour/tour-beats.js +336 -0
  521. package/neural-interface/public/shared/tour/tour-engine.js +884 -0
  522. package/neural-interface/public/shared/tour/tour-ink.js +390 -0
  523. package/neural-interface/public/shared/tour/tour-stage.js +440 -0
  524. package/neural-interface/public/shared/tour/tour-state.js +40 -0
  525. package/neural-interface/public/shared/tour/tour-tips.js +99 -0
  526. package/neural-interface/public/shared/tour/tour.css +144 -0
  527. package/neural-interface/public/shared/ui-antigravity-panel.js +19 -0
  528. package/neural-interface/public/shared/ui-assistant.js +2 -0
  529. package/neural-interface/public/shared/ui-automation-studio.js +111 -140
  530. package/neural-interface/public/shared/ui-claude-panel.js +376 -82
  531. package/neural-interface/public/shared/ui-cli-banner.js +23 -167
  532. package/neural-interface/public/shared/ui-command-runner.js +6 -3
  533. package/neural-interface/public/shared/ui-context-menu.js +295 -0
  534. package/neural-interface/public/shared/ui-cost-widget.js +57 -59
  535. package/neural-interface/public/shared/ui-crash-notice.js +187 -0
  536. package/neural-interface/public/shared/ui-detail.js +15 -3
  537. package/neural-interface/public/shared/ui-file-explorer.js +48 -6
  538. package/neural-interface/public/shared/ui-file-links.js +2 -2
  539. package/neural-interface/public/shared/ui-games.js +2 -2
  540. package/neural-interface/public/shared/ui-image-gallery.js +50 -47
  541. package/neural-interface/public/shared/ui-judgments.js +1 -1
  542. package/neural-interface/public/shared/ui-keybinds.js +33 -2
  543. package/neural-interface/public/shared/ui-link.js +3 -3
  544. package/neural-interface/public/shared/ui-menubar.js +10 -20
  545. package/neural-interface/public/shared/ui-native-loop-router-state.js +5 -0
  546. package/neural-interface/public/shared/ui-native-loop-router.js +11 -1
  547. package/neural-interface/public/shared/ui-navbar.js +49 -24
  548. package/neural-interface/public/shared/ui-notifications.js +1 -0
  549. package/neural-interface/public/shared/ui-panels.js +96 -65
  550. package/neural-interface/public/shared/ui-resume.js +9 -7
  551. package/neural-interface/public/shared/ui-schedules-studio.js +546 -431
  552. package/neural-interface/public/shared/ui-scroll-follow.js +16 -5
  553. package/neural-interface/public/shared/ui-sessions.js +27 -15
  554. package/neural-interface/public/shared/ui-settings.js +683 -526
  555. package/neural-interface/public/shared/ui-sidepanel-session-entry.js +9 -2
  556. package/neural-interface/public/shared/ui-sidepanel-sessions.js +4 -4
  557. package/neural-interface/public/shared/ui-sidepanel-state.js +23 -12
  558. package/neural-interface/public/shared/ui-sidepanel-tray.js +48 -7
  559. package/neural-interface/public/shared/ui-sidepanel-windows.js +18 -13
  560. package/neural-interface/public/shared/ui-skills.js +33 -2830
  561. package/neural-interface/public/shared/ui-styleguide.js +5 -2
  562. package/neural-interface/public/shared/ui-sync.js +15 -5
  563. package/neural-interface/public/shared/ui-terminal.js +270 -190
  564. package/neural-interface/public/shared/ui-tool-updates.js +6 -4
  565. package/neural-interface/public/shared/ui-tooltip.js +81 -51
  566. package/neural-interface/public/shared/ui-topright-overflow.js +233 -0
  567. package/neural-interface/public/shared/ui-trash.js +6 -4
  568. package/neural-interface/public/shared/ui-tutorial-layout.js +3 -117
  569. package/neural-interface/public/shared/ui-tutorial-preview.js +103 -0
  570. package/neural-interface/public/shared/ui-tutorial-steps.js +3 -65
  571. package/neural-interface/public/shared/ui-tutorial.css +47 -100
  572. package/neural-interface/public/shared/ui-tutorial.js +285 -509
  573. package/neural-interface/public/shared/ui-update.js +38 -2
  574. package/neural-interface/public/shared/ui-whiteboard.js +312 -59
  575. package/neural-interface/public/shared/ui-worker-end.js +5 -1
  576. package/neural-interface/public/shared/ui-workspaces.js +3 -2
  577. package/neural-interface/public/shared/view-variant.js +66 -0
  578. package/neural-interface/public/shared/whatsapp/wa-view.js +3 -3
  579. package/neural-interface/public/shared/whiteboard-list.js +172 -0
  580. package/neural-interface/public/shared/worker-end.js +10 -3
  581. package/neural-interface/public/shared/worker-questions.js +34 -0
  582. package/neural-interface/public/shared/worker-restart.js +12 -0
  583. package/neural-interface/public/sidepanel-session.html +2 -2
  584. package/neural-interface/public/variant/2d/background.js +2 -1
  585. package/neural-interface/public/variant/2d/context-menu.js +8 -2
  586. package/neural-interface/public/variant/2d/graph.js +42 -20
  587. package/neural-interface/public/variant/2d/hulls.js +14 -9
  588. package/neural-interface/public/variant/2d/lasso.js +11 -7
  589. package/neural-interface/public/variant/2d/main.js +32 -1
  590. package/neural-interface/public/variant/2d/minimap.js +11 -13
  591. package/neural-interface/public/variant/3d/main.js +69 -6
  592. package/neural-interface/public/variant/3d/map-controls.js +24 -9
  593. package/neural-interface/public/vendor/caveat/OFL.txt +93 -0
  594. package/neural-interface/public/vendor/caveat/caveat-latin-400-normal.woff2 +0 -0
  595. package/neural-interface/public/vendor/caveat/caveat-latin-700-normal.woff2 +0 -0
  596. package/neural-interface/public/vendor/caveat/caveat.css +17 -0
  597. package/neural-interface/public/vendor/caveat/manifest.json +12 -0
  598. package/neural-interface/public/vendor/yaml/LICENSE +13 -0
  599. package/neural-interface/public/vendor/yaml/manifest.json +4 -0
  600. package/neural-interface/public/vendor/yaml/yaml-2.9.1.min.js +137 -0
  601. package/neural-interface/scripts/build-vendor.mjs +32 -0
  602. package/neural-interface/server.js +4553 -2855
  603. package/neural-interface/templates/rulesets/README.md +1 -1
  604. package/neural-interface/templates/rulesets/core.md +1 -1
  605. package/neural-interface/templates/rulesets/legacy-hashes.json +23 -5
  606. package/neural-interface/templates/rulesets/manifest.json +8 -8
  607. package/npm-shrinkwrap.json +34 -12
  608. package/package.json +17 -3
  609. package/postinstall.js +9 -4
  610. package/preuninstall.js +1 -1
  611. package/setup.js +97 -322
  612. package/skills/skill-forge/SKILL.md +177 -0
  613. package/skills/skill-forge/evals/evals.json +54 -0
  614. package/skills/skill-forge/references/package.md +105 -0
  615. package/skills/skill-forge/references/review-and-recovery.md +63 -0
  616. package/skills/skill-forge/references/runtime-profiles.md +20 -0
  617. package/skills/skill-forge/references/sources-and-capabilities.md +51 -0
  618. package/skills/synabun/SKILL.md +10 -7
  619. package/skills/synabun/modules/audit.md +1 -5
  620. package/skills/synabun/modules/changelog.md +1 -5
  621. package/skills/synabun/modules/idea.md +1 -1
  622. package/skills/synabun/modules/memorize.md +6 -9
  623. package/skills/synabun/modules/schedule.md +6 -6
  624. package/mcp-server/dist/services/profiles.d.ts +0 -120
  625. package/mcp-server/dist/services/profiles.d.ts.map +0 -1
  626. package/mcp-server/dist/services/profiles.js +0 -387
  627. package/mcp-server/dist/services/profiles.js.map +0 -1
  628. package/mcp-server/dist/tools/leonardo-browser-tools.d.ts +0 -97
  629. package/mcp-server/dist/tools/leonardo-browser-tools.d.ts.map +0 -1
  630. package/mcp-server/dist/tools/leonardo-browser-tools.js +0 -228
  631. package/mcp-server/dist/tools/leonardo-browser-tools.js.map +0 -1
  632. package/mcp-server/dist/tools/leonardo.d.ts +0 -13
  633. package/mcp-server/dist/tools/leonardo.d.ts.map +0 -1
  634. package/mcp-server/dist/tools/leonardo.js +0 -21
  635. package/mcp-server/dist/tools/leonardo.js.map +0 -1
  636. package/mcp-server/dist/tools/profile.d.ts +0 -17
  637. package/mcp-server/dist/tools/profile.d.ts.map +0 -1
  638. package/mcp-server/dist/tools/profile.js +0 -114
  639. package/mcp-server/dist/tools/profile.js.map +0 -1
  640. package/mcp-server/src/services/profiles.ts +0 -428
  641. package/mcp-server/src/tools/leonardo-browser-tools.ts +0 -291
  642. package/mcp-server/src/tools/leonardo.ts +0 -30
  643. package/mcp-server/src/tools/profile.ts +0 -122
  644. package/neural-interface/lib/assistant-brains/opencode-browser-policy.js +0 -47
  645. package/neural-interface/lib/assistant-brains/opencode-route-gate.js +0 -62
  646. package/neural-interface/lib/mcp-profile-servers.js +0 -120
  647. package/neural-interface/public/shared/ui-tutorial-draw.js +0 -311
  648. package/skills/leonardo/SKILL.md +0 -168
  649. package/skills/leonardo/icon.svg +0 -1
  650. package/skills/leonardo/modules/browser-guide.md +0 -378
  651. package/skills/leonardo/modules/image-prompter.md +0 -283
  652. package/skills/leonardo/modules/model-advisor.md +0 -100
  653. package/skills/leonardo/modules/prompt-library.md +0 -110
  654. package/skills/leonardo/modules/style-guide.md +0 -186
  655. package/skills/leonardo/modules/video-prompter.md +0 -317
  656. /package/neural-interface/templates/rulesets/{gemini.md → antigravity.md} +0 -0
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "neural-memory-interface",
3
- "version": "2.0.10",
3
+ "version": "2.2.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "neural-memory-interface",
9
- "version": "2.0.10",
9
+ "version": "2.2.0",
10
10
  "hasInstallScript": true,
11
11
  "license": "Apache-2.0",
12
12
  "dependencies": {
13
+ "@agentclientprotocol/sdk": "2.2.0",
13
14
  "@anthropic-ai/claude-agent-sdk": "0.3.288",
14
15
  "@huggingface/transformers": "^3.0.0",
15
16
  "@openai/codex-sdk": "^0.160.0",
16
- "@opencode-ai/sdk": "1.18.34",
17
17
  "@xterm/addon-fit": "0.11.0",
18
18
  "@xterm/addon-search": "0.16.0",
19
19
  "@xterm/addon-serialize": "0.14.0",
@@ -31,6 +31,7 @@
31
31
  "playwright": "^1.59.1",
32
32
  "undici": "^8.5.0",
33
33
  "ws": "^8.21.0",
34
+ "yaml": "2.9.1",
34
35
  "zod": "^4.4.3"
35
36
  },
36
37
  "devDependencies": {
@@ -57,6 +58,21 @@
57
58
  "node": ">=22.19.0"
58
59
  }
59
60
  },
61
+ "node_modules/@agentclientprotocol/sdk": {
62
+ "version": "2.2.0",
63
+ "resolved": "https://registry.npmjs.org/@agentclientprotocol/sdk/-/sdk-2.2.0.tgz",
64
+ "integrity": "sha512-o1+eDQVb05yzPY+5v54awHyONU1oeLsbLVavkwrMQaZDuJDh/38pQiXJS4ix4d6QA3Y4bU0lHFRjwg99KKKSaQ==",
65
+ "license": "Apache-2.0",
66
+ "peerDependencies": {
67
+ "@modelcontextprotocol/server": "^2.4.0",
68
+ "zod": "^3.25.76 || ^4.0.0"
69
+ },
70
+ "peerDependenciesMeta": {
71
+ "@modelcontextprotocol/server": {
72
+ "optional": true
73
+ }
74
+ }
75
+ },
60
76
  "node_modules/@antfu/install-pkg": {
61
77
  "version": "2.1.0",
62
78
  "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-2.1.0.tgz",
@@ -2205,15 +2221,6 @@
2205
2221
  "node": ">=18"
2206
2222
  }
2207
2223
  },
2208
- "node_modules/@opencode-ai/sdk": {
2209
- "version": "1.18.34",
2210
- "resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.18.34.tgz",
2211
- "integrity": "sha512-R9QWUpcngtdQ6FCixz7NC6n1WsSho6CEuRUzYHz/CzZcp3miSklDzXkm0oDwXVCnuEu+ANoeM0f6RDp51kOMzQ==",
2212
- "license": "MIT",
2213
- "dependencies": {
2214
- "cross-spawn": "7.0.6"
2215
- }
2216
- },
2217
2224
  "node_modules/@pkgjs/parseargs": {
2218
2225
  "version": "0.11.0",
2219
2226
  "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
@@ -6391,6 +6398,21 @@
6391
6398
  "node": ">=18"
6392
6399
  }
6393
6400
  },
6401
+ "node_modules/yaml": {
6402
+ "version": "2.9.1",
6403
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz",
6404
+ "integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==",
6405
+ "license": "ISC",
6406
+ "bin": {
6407
+ "yaml": "bin.mjs"
6408
+ },
6409
+ "engines": {
6410
+ "node": ">= 14.6"
6411
+ },
6412
+ "funding": {
6413
+ "url": "https://github.com/sponsors/eemeli"
6414
+ }
6415
+ },
6394
6416
  "node_modules/zip-stream": {
6395
6417
  "version": "6.0.1",
6396
6418
  "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neural-memory-interface",
3
- "version": "2.0.10",
3
+ "version": "2.2.0",
4
4
  "private": true,
5
5
  "description": "Private local SynaBun interface for memory visualization and multi-agent workflows",
6
6
  "license": "Apache-2.0",
@@ -21,10 +21,10 @@
21
21
  "postinstall": "node scripts/rebuild-pty.js && node scripts/build-vendor.mjs"
22
22
  },
23
23
  "dependencies": {
24
+ "@agentclientprotocol/sdk": "2.2.0",
24
25
  "@anthropic-ai/claude-agent-sdk": "0.3.288",
25
26
  "@huggingface/transformers": "^3.0.0",
26
27
  "@openai/codex-sdk": "^0.160.0",
27
- "@opencode-ai/sdk": "1.18.34",
28
28
  "@xterm/addon-fit": "0.11.0",
29
29
  "@xterm/addon-search": "0.16.0",
30
30
  "@xterm/addon-serialize": "0.14.0",
@@ -42,6 +42,7 @@
42
42
  "playwright": "^1.59.1",
43
43
  "undici": "^8.5.0",
44
44
  "ws": "^8.21.0",
45
+ "yaml": "2.9.1",
45
46
  "zod": "^4.4.3"
46
47
  },
47
48
  "overrides": {
@@ -13,7 +13,8 @@
13
13
  <link rel="manifest" href="/manifest.json">
14
14
  <link rel="preconnect" href="https://fonts.googleapis.com">
15
15
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
16
- <link href="https://fonts.googleapis.com/css2?family=Caveat:wght@400;700&family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&family=Space+Grotesk:wght@500;600;700&display=swap" rel="stylesheet">
16
+ <link rel="stylesheet" href="/vendor/caveat/caveat.css">
17
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&family=Space+Grotesk:wght@500;600;700&display=swap" rel="stylesheet">
17
18
  <link href="https://db.onlinewebfonts.com/c/3284c3a32cf946466fb963369b3c5b2d?family=Disket+Mono" rel="stylesheet">
18
19
  <link rel="stylesheet" href="/shared/styles.css">
19
20
  <!-- three.js is vendored (scripts/build-vendor.mjs); only the map renderer imports it.
@@ -59,6 +60,7 @@
59
60
  <!-- html2canvas for card screenshot MCP tool (vendored: public/vendor/html2canvas/) -->
60
61
  <script src="/vendor/html2canvas/html2canvas-1.4.1.min.js" defer></script>
61
62
 
63
+ <script type="module" src="/shared/page-session.js"></script>
62
64
  <script type="module" src="/variant/3d/main.js"></script>
63
65
  </body>
64
66
  </html>
@@ -1,4 +1,5 @@
1
1
  <!DOCTYPE html>
2
+ <!-- DEPRECATED: 2D source retained on disk. Old bookmarks redirect to the 3D memory map. -->
2
3
  <html lang="en">
3
4
  <head>
4
5
  <meta charset="UTF-8">
@@ -13,21 +14,26 @@
13
14
  <link rel="manifest" href="/manifest.json">
14
15
  <link rel="preconnect" href="https://fonts.googleapis.com">
15
16
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
16
- <link href="https://fonts.googleapis.com/css2?family=Caveat:wght@400;700&family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&family=Space+Grotesk:wght@500;600;700&display=swap" rel="stylesheet">
17
+ <link rel="stylesheet" href="/vendor/caveat/caveat.css">
18
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&family=Space+Grotesk:wght@500;600;700&display=swap" rel="stylesheet">
17
19
  <link href="https://db.onlinewebfonts.com/c/3284c3a32cf946466fb963369b3c5b2d?family=Disket+Mono" rel="stylesheet">
18
20
  <link rel="stylesheet" href="/shared/styles.css">
19
21
  <style>
20
22
  /* ═══════════════════════════════════════════
21
23
  2D VARIANT — Main Canvas
22
24
  ═══════════════════════════════════════════ */
25
+ /* The graph fills the app frame (styles.css APP FRAME); graph.js sizes its buffer and reads pointers from this box.
26
+ A canvas does not stretch between left and right: its size is written out. */
23
27
  #canvas-main {
24
28
  position: fixed;
25
- top: 0; left: 0;
26
- width: 100%; height: 100%;
29
+ top: var(--frame-top); left: var(--frame-left);
30
+ width: calc(100% - var(--sidebar-total-width, 0px) - 2 * var(--frame-gap));
31
+ height: calc(100dvh - var(--frame-top) - var(--frame-gap));
32
+ border-radius: var(--frame-radius);
27
33
  z-index: 1;
28
- cursor: grab;
34
+ cursor: move;
29
35
  }
30
- #canvas-main:active { cursor: grabbing; }
36
+ #canvas-main:active { cursor: move; }
31
37
 
32
38
  /* ═══════════════════════════════════════════
33
39
  2D VARIANT — Minimap
@@ -48,10 +54,10 @@
48
54
  box-shadow: 0 2px 20px rgba(0,0,0,0.4);
49
55
  transition: opacity 0.2s ease;
50
56
  opacity: 0; pointer-events: none;
51
- cursor: grab;
57
+ cursor: move;
52
58
  user-select: none;
53
59
  }
54
- #minimap:active { cursor: grabbing; }
60
+ #minimap:active { cursor: move; }
55
61
  #minimap.visible { opacity: 1; pointer-events: auto; }
56
62
  #minimap-canvas { width: 100%; height: 100%; display: block; }
57
63
  #minimap-label {
@@ -89,8 +95,9 @@
89
95
  ═══════════════════════════════════════════ */
90
96
  #lasso-canvas {
91
97
  position: fixed;
92
- top: 0; left: 0;
93
- width: 100%; height: 100%;
98
+ top: var(--frame-top); left: var(--frame-left);
99
+ width: calc(100% - var(--sidebar-total-width, 0px) - 2 * var(--frame-gap));
100
+ height: calc(100dvh - var(--frame-top) - var(--frame-gap));
94
101
  z-index: 5;
95
102
  pointer-events: none;
96
103
  }
@@ -123,7 +130,8 @@
123
130
  <div class="ctx-item ctx-item--danger" data-action="trash">Move to Trash</div>
124
131
  </div>
125
132
 
126
- <!-- Boot 2D variant -->
127
- <script type="module" src="/variant/2d/main.js"></script>
133
+ <!-- Redirect the deprecated entry point (also works with a static host) -->
134
+ <script type="module" src="/shared/page-session.js"></script>
135
+ <script type="module" src="/shared/retired-2d.js"></script>
128
136
  </body>
129
137
  </html>
@@ -1489,9 +1489,9 @@ const wizardState = {
1489
1489
  // `id` is also the host name of the rules API (/api/setup/rules/:host).
1490
1490
  const TOOLS = [
1491
1491
  { id: 'claude', name: 'Claude Code', api: '/api/claude-code/mcp', configPath: '~/.claude.json' },
1492
- { id: 'gemini', name: 'Gemini CLI', api: '/api/setup/gemini/mcp', configPath: '~/.gemini/settings.json' },
1492
+ { id: 'antigravity', name: 'Antigravity CLI', api: '/api/setup/antigravity/mcp', configPath: '~/.gemini/config/mcp_config.json' },
1493
1493
  { id: 'codex', name: 'Codex CLI', api: '/api/setup/codex/mcp', configPath: '~/.codex/config.toml' },
1494
- { id: 'opencode', name: 'OpenCode', api: '/api/opencode/mcp', configPath: '~/.config/opencode/config.json' },
1494
+ { id: 'opencode', name: 'OpenCode', api: '/api/opencode/mcp', configPath: '~/.config/opencode/opencode.json' },
1495
1495
  ];
1496
1496
 
1497
1497
  // ═══════════════════════════════════════════
@@ -2636,7 +2636,7 @@ function showToggleRules(id, rules, { connected, wanted }) {
2636
2636
  else if (rules.path) text = `Rules installed: ${rules.path}`;
2637
2637
  } else if (rules && rules.ok !== false && rules.kept && rules.kept.length) {
2638
2638
  // Disconnected. A copy the user edited is theirs: SynaBun left it where it is (and for OpenCode, so is a copy
2639
- // their own line in config.json points at).
2639
+ // their own line in opencode.json points at).
2640
2640
  text = `Your ${rules.kept[0].reason === 'listed-in-config' ? '' : 'edited '}rules were left in place: ${rules.kept[0].path}`;
2641
2641
  } else if (rules && rules.ok === false && rules.error) {
2642
2642
  // Disconnected, but rules could not be taken out (damaged markers, a symlink): say which and why.
@@ -14,6 +14,7 @@
14
14
  import {
15
15
  accountManageModel, accountMenuModel, accountText, apiKeyErrorText, serverAccountId,
16
16
  } from './account-view.js';
17
+ import { frameRect } from './app-frame.js';
17
18
 
18
19
  const STYLE_ID = 'account-menu-styles';
19
20
  // Values come from the panel's own tokens: Claude's global --t-* / --s-* scale, Codex's --cxp-* scale
@@ -338,15 +339,17 @@ export function mountAccountMenu({ provider = 'claude', container, before = null
338
339
  if (!rect.width && !rect.height && trigger.parentElement) rect = trigger.parentElement.getBoundingClientRect();
339
340
  const owner = layer?.() || trigger.closest('[class*="panel"]');
340
341
  const ownerWidth = owner?.getBoundingClientRect?.().width;
341
- popup.style.width = `${Math.max(0, Math.min(320, ownerWidth > 240 ? ownerWidth - 16 : 320, window.innerWidth - 16))}px`;
342
+ // Inside the app frame (app-frame.js; the whole window on a page without it), 8px clear of its edges.
343
+ const f = frameRect();
344
+ popup.style.width = `${Math.max(0, Math.min(320, ownerWidth > 240 ? ownerWidth - 16 : 320, f.width - 16))}px`;
342
345
  const width = popup.offsetWidth || 300;
343
- const left = Math.max(8, Math.min(rect.right - width, window.innerWidth - width - 8));
344
- const below = window.innerHeight - rect.bottom - 14;
345
- const above = rect.top - 14;
346
+ const left = Math.max(f.left + 8, Math.min(rect.right - width, f.right - width - 8));
347
+ const below = f.bottom - rect.bottom - 14;
348
+ const above = rect.top - f.top - 14;
346
349
  const flip = below < 180 && above > below;
347
350
  popup.style.maxHeight = `${Math.max(80, Math.min(520, flip ? above : below))}px`;
348
351
  popup.style.left = `${Math.round(left)}px`;
349
- popup.style.top = `${Math.round(flip ? Math.max(8, rect.top - 6 - popup.offsetHeight) : rect.bottom + 6)}px`;
352
+ popup.style.top = `${Math.round(flip ? Math.max(f.top + 8, rect.top - 6 - popup.offsetHeight) : rect.bottom + 6)}px`;
350
353
  let z = 201;
351
354
  try { z = (parseInt(getComputedStyle(owner).zIndex, 10) || 200) + 1; } catch {}
352
355
  popup.style.zIndex = String(z);
@@ -6,16 +6,36 @@ import { fetchOpencodeProviders, opencodeProviders } from './opencode-providers.
6
6
  export const CLI_PROFILES = [
7
7
  { id: 'claude-code', label: 'Claude Code', desc: 'Anthropic' },
8
8
  { id: 'codex', label: 'Codex CLI', desc: 'OpenAI' },
9
- { id: 'gemini', label: 'Gemini CLI', desc: 'Google' },
9
+ { id: 'antigravity', label: 'Antigravity CLI', desc: 'Google' },
10
10
  { id: 'opencode', label: 'OpenCode CLI', desc: 'Multi-provider' },
11
11
  ];
12
12
 
13
- const STATIC_MODELS = {
14
- gemini: [
15
- { id: 'gemini-2.5-pro', label: '2.5 Pro', desc: 'Most capable', tier: 'default' },
16
- { id: 'gemini-2.5-flash', label: '2.5 Flash', desc: 'Lightweight' },
17
- ],
18
- };
13
+ // Google Antigravity replaced the Gemini CLI (provider id `gemini` → `antigravity`). What was saved before
14
+ // (a launch profile, a resume tab, a template's CLI or icon) can still say `gemini`: it reads as Antigravity.
15
+ // The server moves its own files the same way (lib/antigravity/migrate-gemini.js).
16
+ export function migrateProviderId(id) { return id === 'gemini' ? 'antigravity' : id; }
17
+
18
+ // The Gemini CLI's own model ids (gemini-1.x, gemini-2.x) are not Antigravity's: one saved for it reads as
19
+ // none, so Antigravity's default runs (the same rule as isGeminiCliModel in lib/antigravity/migrate-gemini.js).
20
+ const GEMINI_CLI_MODEL_RE = /^gemini-[12](?:[.-]|$)/i;
21
+ export function migrateProviderModel(profileId, model) {
22
+ return migrateProviderId(profileId) === 'antigravity' && typeof model === 'string' && GEMINI_CLI_MODEL_RE.test(model.trim()) ? null : model;
23
+ }
24
+
25
+ /** Saved launch records (loop templates, schedules, groups, timers) with a Gemini CLI profile or icon read as Antigravity's. */
26
+ export function migrateLaunchRecords(list) {
27
+ if (!Array.isArray(list)) return list;
28
+ return list.map((record) => {
29
+ if (!record || typeof record !== 'object' || (record.profile !== 'gemini' && record.icon !== 'gemini')) return record;
30
+ const next = { ...record };
31
+ if (next.icon === 'gemini') next.icon = migrateProviderId(next.icon);
32
+ if (next.profile === 'gemini') {
33
+ next.profile = migrateProviderId(next.profile);
34
+ if (migrateProviderModel(next.profile, next.model) !== next.model) next.model = null;
35
+ }
36
+ return next;
37
+ });
38
+ }
19
39
 
20
40
  // Claude Code models are discovered live from the installed CLI via
21
41
  // /api/claude/models (see lib/claude-model-catalog.js) — the CLI is the only
@@ -59,6 +79,15 @@ export const EFFORT_LEVELS_BY_PROFILE = {
59
79
  { id: 'max', label: 'Max', desc: 'Maximum' },
60
80
  { id: 'ultra', label: 'Ultra', desc: 'Maximum, with delegation', tier: 'top' },
61
81
  ],
82
+ // The levels `agy --effort` takes; `off` passes none, so Antigravity uses its own default.
83
+ antigravity: [
84
+ { id: 'off', label: 'Default', desc: 'Model default' },
85
+ { id: 'low', label: 'Low', desc: 'Light' },
86
+ { id: 'medium', label: 'Med', desc: 'Balanced' },
87
+ { id: 'high', label: 'High', desc: 'Deep' },
88
+ { id: 'xhigh', label: 'XHigh', desc: 'Very deep' },
89
+ { id: 'max', label: 'Max', desc: 'Maximum', tier: 'top' },
90
+ ],
62
91
  };
63
92
 
64
93
  // One effort vocabulary, lowest first (the server keeps the same table in
@@ -145,11 +174,16 @@ let _opencodeModelsCache = null;
145
174
  let _opencodeModelsLoading = null;
146
175
  let _claudeModelsCache = null;
147
176
  let _claudeModelsLoading = null;
148
- let _mcpProfilePresets = null;
149
- let _mcpProfilePresetsLoading = null;
150
-
151
- // The verified Claude and Codex lists are also kept in sessionStorage (this tab only): after a reload the
152
- // pickers paint from them at once (a list read back is due, so the first load still asks the server).
177
+ let _antigravityModelsCache = null;
178
+ let _antigravityModelsLoading = null;
179
+ let _toolCatalog = null;
180
+ const _toolCatalogLoads = new Map();
181
+ const _toolCatalogByCwd = new Map();
182
+ const _toolCatalogAt = new Map();
183
+ let _toolCatalogEpoch = 0;
184
+
185
+ // The verified Claude, Codex and Antigravity lists are also kept in sessionStorage (this tab only): after a reload
186
+ // the pickers paint from them at once (a list read back is due, so the first load still asks the server).
153
187
  const LIST_STORE_PREFIX = 'synabun:runtime-models:v1:';
154
188
  function keepList(key, list) {
155
189
  try { if (typeof sessionStorage !== 'undefined') sessionStorage.setItem(LIST_STORE_PREFIX + key, JSON.stringify(list)); } catch { /* full or unavailable */ }
@@ -166,6 +200,8 @@ function keptList(key) {
166
200
  if (claude && !_claudeModelsCache) _claudeModelsCache = claude;
167
201
  const codex = keptList('codex:default');
168
202
  if (codex && !_codexModelsCache.has('default')) _codexModelsCache.set('default', codex);
203
+ const antigravity = keptList('antigravity');
204
+ if (antigravity && !_antigravityModelsCache) _antigravityModelsCache = antigravity;
169
205
  })();
170
206
 
171
207
  function localJsonArray(key) {
@@ -535,16 +571,59 @@ export async function fetchClaudeModels(force = false) {
535
571
  return _claudeModelsLoading;
536
572
  }
537
573
 
574
+ // GET /api/antigravity/models answers { models: [{ id, label, description?, default? }], source: 'live' | 'unavailable' }.
575
+ function antigravityModelOption(model) {
576
+ const id = String(model?.id || '').trim();
577
+ if (!id) return null;
578
+ return {
579
+ id,
580
+ provider: 'antigravity',
581
+ cliReady: true,
582
+ label: String(model.label || id),
583
+ desc: String(model.description || ''),
584
+ ...(model.default === true ? { tier: 'default', isDefault: true } : {}),
585
+ };
586
+ }
587
+
588
+ // Antigravity's models come only from the installed `agy`: there is no list of SynaBun's own to fall back on,
589
+ // so until it answers the pickers are empty and a launch runs Antigravity's default. A list it gave once is
590
+ // kept through a failed or unavailable answer.
591
+ export async function fetchAntigravityModels(force = false) {
592
+ if (!force && _antigravityModelsCache?.length && modelListIsFresh('antigravity')) return _antigravityModelsCache;
593
+ if (_antigravityModelsLoading) return _antigravityModelsLoading;
594
+ _antigravityModelsLoading = (async () => {
595
+ try {
596
+ const resp = await fetch('/api/antigravity/models');
597
+ const data = await resp.json().catch(() => ({}));
598
+ const models = resp.ok && data?.source !== 'unavailable' && Array.isArray(data?.models)
599
+ ? data.models.map(antigravityModelOption).filter(Boolean)
600
+ : [];
601
+ if (models.length) {
602
+ _antigravityModelsCache = models;
603
+ _modelListAt.set('antigravity', Date.now());
604
+ keepList('antigravity', models);
605
+ }
606
+ return _antigravityModelsCache || [];
607
+ } catch {
608
+ return _antigravityModelsCache || [];
609
+ } finally {
610
+ _antigravityModelsLoading = null;
611
+ }
612
+ })();
613
+ return _antigravityModelsLoading;
614
+ }
615
+
538
616
  // Profiles whose model list is fetched at runtime rather than baked in. Callers use
539
617
  // this to decide whether to kick off an async load and re-render when it lands.
540
618
  export function isDynamicModelProfile(profileId) {
541
- return profileId === 'opencode' || profileId === 'codex' || profileId === 'claude-code';
619
+ return profileId === 'opencode' || profileId === 'codex' || profileId === 'claude-code' || profileId === 'antigravity';
542
620
  }
543
621
 
544
622
  export async function ensureModelsForProfile(profileId, force = false, accountId = 'default') {
545
623
  if (profileId === 'codex') return fetchCodexModels(force, accountId);
546
624
  if (profileId === 'opencode') return fetchOpencodeModels(force);
547
625
  if (profileId === 'claude-code') return fetchClaudeModels(force);
626
+ if (profileId === 'antigravity') return fetchAntigravityModels(force);
548
627
  return getModelsForProfile(profileId, accountId);
549
628
  }
550
629
 
@@ -562,7 +641,8 @@ export function getModelsForProfile(profileId, accountId = 'default') {
562
641
  if (profileId === 'codex') return _codexModelsCache.get(String(accountId || 'default')) || [];
563
642
  if (profileId === 'opencode') return _opencodeModelsCache || keptOpencodeModels() || [];
564
643
  if (profileId === 'claude-code') return _claudeModelsCache || [];
565
- return STATIC_MODELS[profileId] || [];
644
+ if (profileId === 'antigravity') return _antigravityModelsCache || [];
645
+ return [];
566
646
  }
567
647
 
568
648
  // Live Claude and Codex options are spawn-ready ids. Only legacy Claude options
@@ -633,27 +713,40 @@ export function normalizeEffortForProfile(profileId, effort) {
633
713
  return levels.some(e => e.id === value) ? value : null;
634
714
  }
635
715
 
636
- export async function fetchMcpProfilePresets(force = false) {
637
- if (!force && _mcpProfilePresets) return _mcpProfilePresets;
638
- // Callers asking at the same time share one request.
639
- if (_mcpProfilePresetsLoading) return _mcpProfilePresetsLoading;
640
- _mcpProfilePresetsLoading = (async () => {
716
+ export async function fetchToolCatalog(force = false, { cwd = '' } = {}) {
717
+ const key = String(cwd || '');
718
+ if (force) invalidateToolCatalog();
719
+ const epoch = _toolCatalogEpoch;
720
+ if (!force && _toolCatalogAt.get(key) === epoch && _toolCatalogByCwd.has(key)) { _toolCatalog = _toolCatalogByCwd.get(key); return _toolCatalog; }
721
+ if (_toolCatalogLoads.has(key)) return _toolCatalogLoads.get(key);
722
+ const loading = (async () => {
641
723
  try {
642
- const resp = await fetch('/api/mcp/profile');
724
+ const resp = await fetch(`/api/mcp/tools${key ? `?cwd=${encodeURIComponent(key)}` : ''}`);
643
725
  const data = await resp.json().catch(() => ({}));
644
- _mcpProfilePresets = data?.ok && data.presets ? data.presets : {};
645
- return _mcpProfilePresets;
646
- } catch {
647
- return {};
648
- } finally {
649
- _mcpProfilePresetsLoading = null;
650
- }
726
+ let catalog = resp.ok && data?.ok && Array.isArray(data.groups) ? data : null;
727
+ if (epoch !== _toolCatalogEpoch) return fetchToolCatalog(false, { cwd: key });
728
+ if (catalog) { const previous = _toolCatalogByCwd.get(key); if (previous) catalog = Object.assign(previous, catalog); _toolCatalogByCwd.set(key, catalog); _toolCatalogAt.set(key, epoch); _toolCatalog = catalog; }
729
+ return catalog;
730
+ } catch { return null; }
731
+ finally { if (epoch === _toolCatalogEpoch) _toolCatalogLoads.delete(key); }
651
732
  })();
652
- return _mcpProfilePresetsLoading;
733
+ _toolCatalogLoads.set(key, loading);
734
+ return loading;
735
+ }
736
+
737
+ export function invalidateToolCatalog(change) {
738
+ _toolCatalogEpoch++; _toolCatalogLoads.clear();
739
+ if (change?.name && typeof change.enabled === 'boolean') for (const catalog of _toolCatalogByCwd.values()) {
740
+ const row = catalog.servers?.find(row => row.ref === `mcp:${change.name}`); if (row) row.blocked = !change.enabled;
741
+ }
742
+ }
743
+
744
+ export function updateCachedToolDefault(tools) {
745
+ if (Array.isArray(tools)) for (const catalog of _toolCatalogByCwd.values()) catalog.defaultTools = [...tools];
653
746
  }
654
747
 
655
- export function getCachedMcpProfilePresets() {
656
- return _mcpProfilePresets || {};
748
+ export function getCachedToolCatalog(cwd) {
749
+ return cwd === undefined ? _toolCatalog : _toolCatalogByCwd.get(String(cwd || '')) || null;
657
750
  }
658
751
 
659
752
  export function clearRuntimeOptionCaches() {
@@ -662,8 +755,9 @@ export function clearRuntimeOptionCaches() {
662
755
  _opencodeModelsCache = null;
663
756
  opencodeProviders.invalidate('');
664
757
  _claudeModelsCache = null;
758
+ _antigravityModelsCache = null;
665
759
  _modelListAt.clear();
666
- _mcpProfilePresets = null;
760
+ invalidateToolCatalog(); _toolCatalog = null; _toolCatalogByCwd.clear(); _toolCatalogAt.clear();
667
761
  _claudeAccountsCache = null;
668
762
  _opencodeAgentsCache = null;
669
763
  }
@@ -0,0 +1,47 @@
1
+ // ═══════════════════════════════════════════
2
+ // SynaBun — Antigravity panel: a tab's Bypass (no DOM)
3
+ // ═══════════════════════════════════════════
4
+ //
5
+ // Bypass is a tab's choice, like the Claude Code panel's: off by default, turned on only by the owner in the
6
+ // permissions picker (after one confirm each time), saved with the tab, and stated to the bridge with every session
7
+ // the tab opens (`bypass` on session:new / load / resume) and at once for a running one (session:bypass). The bridge
8
+ // answers each permission request of that session "allow once" itself, except what SynaBun's hard rails refuse
9
+ // (lib/antigravity/bypass.js: the browser policy and the protected folders). A server without the `bypass`
10
+ // capability cannot run it: the pick waits there, shown as unavailable, and the tab asks as before.
11
+
12
+ export const PERMISSION_DEFAULT = 'default';
13
+ export const PERMISSION_BYPASS = 'bypass';
14
+
15
+ /** The permissions picker of a tab: its entries, the state the control is styled by and its tooltip. */
16
+ export function bypassControl({ bypass = false, supported = true } = {}, T = (key) => key) {
17
+ const on = bypass === true;
18
+ const entries = [
19
+ { value: PERMISSION_DEFAULT, label: T('permDefault'), title: T('permDefaultHint'), selected: !on },
20
+ { value: PERMISSION_BYPASS, label: T('permBypass'), title: supported ? T('permBypassHint') : T('permBypassRestart'), selected: on, disabled: !supported && !on },
21
+ ];
22
+ if (on && !supported) return { entries, state: 'bypass', waiting: true, title: T('permBypassWaiting') };
23
+ if (on) return { entries, state: 'bypass', waiting: false, title: T('permBypassOnTitle') };
24
+ return { entries, state: '', waiting: false, title: supported ? T('permDefaultHint') : T('permBypassRestart') };
25
+ }
26
+
27
+ /** What a pick in the picker does: { confirm: true } to ask first, { set: boolean } to apply, or null for no change. */
28
+ export function pickPermission(value, { bypass = false, supported = true } = {}) {
29
+ const want = value === PERMISSION_BYPASS;
30
+ if (want === (bypass === true)) return null;
31
+ if (want && !supported) return null;
32
+ return want ? { confirm: true } : { set: false };
33
+ }
34
+
35
+ /** A saved tab's Bypass: only a literal true counts (anything else in storage is off). */
36
+ export function restoredBypass(value) {
37
+ return value === true;
38
+ }
39
+
40
+ /** A permission:auto event as one transcript row: { severity, text }. */
41
+ export function autoAnswerRow(message, T = (key) => key) {
42
+ const tool = String(message?.toolCall?.title || message?.toolCall?.kind || T('permTool')).slice(0, 160);
43
+ if (message?.decision === 'refused') {
44
+ return { severity: 'error', text: T('permAutoRefused', { tool, reason: String(message.reason || '').slice(0, 400) }) };
45
+ }
46
+ return { severity: 'info', text: T('permAutoAllowed', { tool }) };
47
+ }