synabun 2.0.0-beta → 2.0.5

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 (374) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/NOTICE +5 -0
  3. package/README.md +1 -1
  4. package/THIRD-PARTY-LICENSES.md +51 -0
  5. package/benchmarks/fixtures/browser/README.md +1 -1
  6. package/benchmarks/fixtures/desktop/README.md +1 -1
  7. package/docs/whatsapp.md +2 -2
  8. package/hooks/claude-code/pre-compact.mjs +11 -0
  9. package/hooks/claude-code/prompt-submit.mjs +60 -184
  10. package/hooks/claude-code/session-start.mjs +73 -16
  11. package/hooks/claude-code/shared.mjs +20 -0
  12. package/hooks/claude-code/stop.mjs +5 -5
  13. package/launcher.mjs +40 -0
  14. package/lib/claude-hooks.js +61 -8
  15. package/lib/client-config-repair.js +4 -3
  16. package/lib/data-home-migration.js +4 -0
  17. package/lib/desktop-pwa.js +206 -0
  18. package/lib/external-tools.js +221 -0
  19. package/lib/first-launch-protection.js +5 -0
  20. package/lib/packaged-runtime.js +110 -0
  21. package/lib/start-launcher.js +1396 -0
  22. package/mcp-server/package-lock.json +2 -2
  23. package/mcp-server/package.json +1 -3
  24. package/neural-interface/i18n/en.json +1540 -154
  25. package/neural-interface/i18n/pt-BR.json +1538 -153
  26. package/neural-interface/lib/assistant-api.js +62 -6
  27. package/neural-interface/lib/assistant-brains/claude.js +4 -0
  28. package/neural-interface/lib/assistant-catalog.js +179 -27
  29. package/neural-interface/lib/assistant-config.js +31 -2
  30. package/neural-interface/lib/assistant-dispatch.js +62 -13
  31. package/neural-interface/lib/assistant-envelope.js +9 -6
  32. package/neural-interface/lib/assistant-hidden-models.js +393 -66
  33. package/neural-interface/lib/assistant-memory.js +24 -10
  34. package/neural-interface/lib/assistant-persona.js +6 -2
  35. package/neural-interface/lib/assistant-pricing.js +21 -6
  36. package/neural-interface/lib/assistant-runtime.js +181 -12
  37. package/neural-interface/lib/assistant-task-prompt.js +13 -3
  38. package/neural-interface/lib/assistant-test-density.js +142 -0
  39. package/neural-interface/lib/assistant-user-context-budgets.js +123 -0
  40. package/neural-interface/lib/assistant-user-context.js +908 -0
  41. package/neural-interface/lib/assistant-user-knowledge.js +328 -0
  42. package/neural-interface/lib/assistant-user-learn.js +404 -0
  43. package/neural-interface/lib/assistant-user-threads.js +226 -0
  44. package/neural-interface/lib/assistant-user-writer.js +181 -0
  45. package/neural-interface/lib/augmented-path.js +23 -3
  46. package/neural-interface/lib/browser-background-tab.js +134 -0
  47. package/neural-interface/lib/browser-language.js +83 -0
  48. package/neural-interface/lib/browser-screenshot.js +678 -61
  49. package/neural-interface/lib/claude-agent-bridge.js +87 -153
  50. package/neural-interface/lib/claude-executable.js +241 -0
  51. package/neural-interface/lib/claude-model-catalog.js +82 -93
  52. package/neural-interface/lib/claude-temporary.js +46 -7
  53. package/neural-interface/lib/cloudflared/install.js +533 -0
  54. package/neural-interface/lib/cloudflared/manager.js +545 -0
  55. package/neural-interface/lib/cloudflared/pins.js +115 -0
  56. package/neural-interface/lib/cloudflared/pins.json +63 -0
  57. package/neural-interface/lib/cloudflared/tunnel.js +265 -0
  58. package/neural-interface/lib/editor-completion-endpoint.js +264 -0
  59. package/neural-interface/lib/editor-completion-opencode.js +436 -0
  60. package/neural-interface/lib/editor-completion.js +714 -0
  61. package/neural-interface/lib/editor-config.js +149 -0
  62. package/neural-interface/lib/editor-files-api.js +268 -0
  63. package/neural-interface/lib/editor-git-api.js +134 -0
  64. package/neural-interface/lib/file-explorer-api.js +1039 -0
  65. package/neural-interface/lib/file-explorer-system.js +355 -0
  66. package/neural-interface/lib/file-explorer-trash.ps1 +85 -0
  67. package/neural-interface/lib/file-explorer-watch.js +239 -0
  68. package/neural-interface/lib/git-diff-api.js +103 -0
  69. package/neural-interface/lib/git-read.js +202 -0
  70. package/neural-interface/lib/greeting/api.js +89 -0
  71. package/neural-interface/lib/greeting/budgets.js +90 -0
  72. package/neural-interface/lib/greeting/engine.js +461 -0
  73. package/neural-interface/lib/greeting/facts.js +320 -0
  74. package/neural-interface/lib/greeting/sources.js +252 -0
  75. package/neural-interface/lib/greeting/writer.js +139 -0
  76. package/neural-interface/lib/http-guards.js +189 -13
  77. package/neural-interface/lib/machine-names.js +88 -0
  78. package/neural-interface/lib/memory-api.js +31 -7
  79. package/neural-interface/lib/native-binary-runtime.js +69 -337
  80. package/neural-interface/lib/native-loop-providers.js +40 -49
  81. package/neural-interface/lib/offline-page.js +54 -0
  82. package/neural-interface/lib/plugin-installer.js +4 -2
  83. package/neural-interface/lib/project-storage.js +5 -7
  84. package/neural-interface/lib/request-gate.js +589 -0
  85. package/neural-interface/lib/session-title-generator.js +5 -0
  86. package/neural-interface/lib/synabun-update-plan.js +19 -0
  87. package/neural-interface/lib/ui-blob-api.js +108 -0
  88. package/neural-interface/lib/ui-blob-store.js +68 -0
  89. package/neural-interface/package-lock.json +701 -253
  90. package/neural-interface/package.json +13 -2
  91. package/neural-interface/public/install-app.html +34 -0
  92. package/neural-interface/public/manifest.json +2 -0
  93. package/neural-interface/public/offline.html +402 -66
  94. package/neural-interface/public/onboarding.html +264 -147
  95. package/neural-interface/public/shared/agent-runtime-options.js +22 -6
  96. package/neural-interface/public/shared/assistant/asst-automation.js +286 -0
  97. package/neural-interface/public/shared/assistant/asst-brain-picker.js +312 -62
  98. package/neural-interface/public/shared/assistant/asst-composer.js +11 -1
  99. package/neural-interface/public/shared/assistant/asst-mascot.js +26 -64
  100. package/neural-interface/public/shared/assistant/asst-menu.js +12 -8
  101. package/neural-interface/public/shared/assistant/asst-panel.js +150 -28
  102. package/neural-interface/public/shared/assistant/asst-rack-styles.js +0 -3
  103. package/neural-interface/public/shared/assistant/asst-render.js +219 -67
  104. package/neural-interface/public/shared/assistant/asst-route-models.js +108 -0
  105. package/neural-interface/public/shared/assistant/asst-route.js +23 -329
  106. package/neural-interface/public/shared/assistant/asst-routes-editor.js +495 -0
  107. package/neural-interface/public/shared/assistant/asst-sanitize.js +8 -1
  108. package/neural-interface/public/shared/assistant/asst-sidepanel.js +31 -9
  109. package/neural-interface/public/shared/assistant/asst-state.js +185 -1
  110. package/neural-interface/public/shared/assistant/asst-styles.js +162 -6
  111. package/neural-interface/public/shared/blob-store.js +111 -22
  112. package/neural-interface/public/shared/cdx/cdx-panel.js +32 -11
  113. package/neural-interface/public/shared/cdx/cdx-render.js +25 -89
  114. package/neural-interface/public/shared/cdx/cdx-styles.js +36 -0
  115. package/neural-interface/public/shared/cdx/cdx-tabs.js +87 -4
  116. package/neural-interface/public/shared/command-runner-model.js +30 -0
  117. package/neural-interface/public/shared/constants.js +6 -1
  118. package/neural-interface/public/shared/cp/cp-rehydrate.js +2 -1
  119. package/neural-interface/public/shared/cp/cp-styles.js +15 -0
  120. package/neural-interface/public/shared/editor/editor-ai-logic.js +409 -0
  121. package/neural-interface/public/shared/editor/editor-ai.js +619 -0
  122. package/neural-interface/public/shared/editor/editor-commands.js +212 -0
  123. package/neural-interface/public/shared/editor/editor-compare.js +103 -0
  124. package/neural-interface/public/shared/editor/editor-completion-list.js +172 -0
  125. package/neural-interface/public/shared/editor/editor-doc.js +257 -0
  126. package/neural-interface/public/shared/editor/editor-git-logic.js +131 -0
  127. package/neural-interface/public/shared/editor/editor-git.js +95 -0
  128. package/neural-interface/public/shared/editor/editor-languages.js +156 -0
  129. package/neural-interface/public/shared/editor/editor-lint.js +229 -0
  130. package/neural-interface/public/shared/editor/editor-loader.js +51 -0
  131. package/neural-interface/public/shared/editor/editor-markdown.js +90 -0
  132. package/neural-interface/public/shared/editor/editor-menu.js +233 -0
  133. package/neural-interface/public/shared/editor/editor-minimap.js +371 -0
  134. package/neural-interface/public/shared/editor/editor-palette-logic.js +192 -0
  135. package/neural-interface/public/shared/editor/editor-palette.js +125 -0
  136. package/neural-interface/public/shared/editor/editor-panel-logic.js +288 -0
  137. package/neural-interface/public/shared/editor/editor-panel.js +2099 -0
  138. package/neural-interface/public/shared/editor/editor-prefs.js +224 -0
  139. package/neural-interface/public/shared/editor/editor-safety.js +500 -0
  140. package/neural-interface/public/shared/editor/editor-search.js +352 -0
  141. package/neural-interface/public/shared/editor/editor-statusbar.js +144 -0
  142. package/neural-interface/public/shared/editor/editor-tabs-logic.js +331 -0
  143. package/neural-interface/public/shared/editor/editor-tabs.js +233 -0
  144. package/neural-interface/public/shared/editor/editor-theme.js +244 -0
  145. package/neural-interface/public/shared/editor/editor-view.js +332 -0
  146. package/neural-interface/public/shared/explorer/fx-api.js +216 -0
  147. package/neural-interface/public/shared/explorer/fx-links.js +204 -0
  148. package/neural-interface/public/shared/explorer/fx-logic.js +537 -0
  149. package/neural-interface/public/shared/explorer/fx-main.js +865 -0
  150. package/neural-interface/public/shared/explorer/fx-names.js +87 -0
  151. package/neural-interface/public/shared/explorer/fx-ops.js +370 -0
  152. package/neural-interface/public/shared/explorer/fx-popups.js +490 -0
  153. package/neural-interface/public/shared/explorer/fx-tree.js +790 -0
  154. package/neural-interface/public/shared/file-links.js +339 -0
  155. package/neural-interface/public/shared/greeting/greeting-card.js +178 -0
  156. package/neural-interface/public/shared/greeting/greeting-view.js +148 -0
  157. package/neural-interface/public/shared/html-shell.js +169 -170
  158. package/neural-interface/public/shared/ocp-v2/ocp-v2-childpanel.js +4 -0
  159. package/neural-interface/public/shared/ocp-v2/ocp-v2-greeting.js +47 -0
  160. package/neural-interface/public/shared/ocp-v2/ocp-v2-panel.js +99 -17
  161. package/neural-interface/public/shared/ocp-v2/ocp-v2-render.js +7 -1
  162. package/neural-interface/public/shared/ocp-v2/ocp-v2-send.js +5 -0
  163. package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +40 -0
  164. package/neural-interface/public/shared/ocp-v2/ocp-v2-ws.js +3 -2
  165. package/neural-interface/public/shared/pwa-install-page.js +62 -0
  166. package/neural-interface/public/shared/pwa-install.css +12 -0
  167. package/neural-interface/public/shared/pwa-install.js +127 -0
  168. package/neural-interface/public/shared/settings/settings-code-editor-pane.js +412 -0
  169. package/neural-interface/public/shared/settings/settings-code-editor.js +328 -0
  170. package/neural-interface/public/shared/settings/settings-greeting.js +133 -0
  171. package/neural-interface/public/shared/settings/settings-ia.js +18 -4
  172. package/neural-interface/public/shared/settings/settings-rules.js +160 -0
  173. package/neural-interface/public/shared/settings/settings-user-context.js +154 -0
  174. package/neural-interface/public/shared/start-bridge.js +802 -0
  175. package/neural-interface/public/shared/styleguide/sg-colors.js +5 -2
  176. package/neural-interface/public/shared/styleguide/sg-import-export.js +4 -3
  177. package/neural-interface/public/shared/styleguide/sg-kit.js +4 -1
  178. package/neural-interface/public/shared/styleguide/sg-panel.js +9 -1
  179. package/neural-interface/public/shared/styleguide/sg-typography.js +1 -0
  180. package/neural-interface/public/shared/styles.css +2219 -1117
  181. package/neural-interface/public/shared/synabun-mascot.js +20 -56
  182. package/neural-interface/public/shared/term-ready.js +307 -0
  183. package/neural-interface/public/shared/tunnel-view.js +167 -0
  184. package/neural-interface/public/shared/ui-claude-panel.js +160 -19
  185. package/neural-interface/public/shared/ui-command-runner.js +251 -468
  186. package/neural-interface/public/shared/ui-detail.js +15 -0
  187. package/neural-interface/public/shared/ui-explorer.js +22 -0
  188. package/neural-interface/public/shared/ui-file-explorer.js +481 -2496
  189. package/neural-interface/public/shared/ui-file-links.js +103 -0
  190. package/neural-interface/public/shared/ui-help.js +26 -0
  191. package/neural-interface/public/shared/ui-invite.js +126 -116
  192. package/neural-interface/public/shared/ui-judgments.js +1 -1
  193. package/neural-interface/public/shared/ui-keybinds.js +4 -0
  194. package/neural-interface/public/shared/ui-loading.js +367 -12
  195. package/neural-interface/public/shared/ui-menubar.js +21 -55
  196. package/neural-interface/public/shared/ui-native-loop-router-state.js +11 -0
  197. package/neural-interface/public/shared/ui-native-loop-router.js +15 -2
  198. package/neural-interface/public/shared/ui-navbar.js +45 -21
  199. package/neural-interface/public/shared/ui-settings.js +491 -547
  200. package/neural-interface/public/shared/ui-sidepanel-runtime.js +2 -1
  201. package/neural-interface/public/shared/ui-sync.js +16 -0
  202. package/neural-interface/public/shared/ui-terminal.js +153 -149
  203. package/neural-interface/public/shared/ui-tunnel.js +130 -0
  204. package/neural-interface/public/shared/ui-tutorial-steps.js +6 -2
  205. package/neural-interface/public/shared/ui-whiteboard.js +12 -0
  206. package/neural-interface/public/shared/ui-worker-end.js +245 -0
  207. package/neural-interface/public/shared/ui-workspaces.js +41 -27
  208. package/neural-interface/public/shared/worker-end.js +251 -0
  209. package/neural-interface/public/sw.js +3 -1
  210. package/neural-interface/public/variant/2d/main.js +2 -1
  211. package/neural-interface/public/variant/3d/main.js +2 -1
  212. package/neural-interface/public/vendor/codemirror/chunks/apl-CSDKT72Z.js +1 -0
  213. package/neural-interface/public/vendor/codemirror/chunks/asciiarmor-JYYPU5BM.js +1 -0
  214. package/neural-interface/public/vendor/codemirror/chunks/asn1-NRWCZDA6.js +1 -0
  215. package/neural-interface/public/vendor/codemirror/chunks/asterisk-5OU6D4ZQ.js +1 -0
  216. package/neural-interface/public/vendor/codemirror/chunks/brainfuck-ID4N4SYC.js +1 -0
  217. package/neural-interface/public/vendor/codemirror/chunks/chunk-4RZWGCS2.js +1 -0
  218. package/neural-interface/public/vendor/codemirror/chunks/chunk-ACTJM3JR.js +11 -0
  219. package/neural-interface/public/vendor/codemirror/chunks/chunk-S6BMAXLK.js +1 -0
  220. package/neural-interface/public/vendor/codemirror/chunks/chunk-TO2RDOHQ.js +3 -0
  221. package/neural-interface/public/vendor/codemirror/chunks/chunk-US2GMZZQ.js +13 -0
  222. package/neural-interface/public/vendor/codemirror/chunks/chunk-WYYO5ZAJ.js +1 -0
  223. package/neural-interface/public/vendor/codemirror/chunks/chunk-XALZTDJC.js +1 -0
  224. package/neural-interface/public/vendor/codemirror/chunks/chunk-YRNUTRDV.js +1 -0
  225. package/neural-interface/public/vendor/codemirror/chunks/chunk-Z3QOKH62.js +1 -0
  226. package/neural-interface/public/vendor/codemirror/chunks/clike-OWQBSOGL.js +1 -0
  227. package/neural-interface/public/vendor/codemirror/chunks/clojure-KV75UQWC.js +1 -0
  228. package/neural-interface/public/vendor/codemirror/chunks/cmake-GTEP5Y3C.js +1 -0
  229. package/neural-interface/public/vendor/codemirror/chunks/cobol-WCZ7QEGJ.js +1 -0
  230. package/neural-interface/public/vendor/codemirror/chunks/coffeescript-TGLBOT6B.js +1 -0
  231. package/neural-interface/public/vendor/codemirror/chunks/commonlisp-WVVI432V.js +1 -0
  232. package/neural-interface/public/vendor/codemirror/chunks/crystal-S6R6HLKQ.js +1 -0
  233. package/neural-interface/public/vendor/codemirror/chunks/css-PDA2RINP.js +1 -0
  234. package/neural-interface/public/vendor/codemirror/chunks/cypher-HL5QPL4C.js +1 -0
  235. package/neural-interface/public/vendor/codemirror/chunks/d-HHJH2HAJ.js +1 -0
  236. package/neural-interface/public/vendor/codemirror/chunks/diff-MN3A35BY.js +1 -0
  237. package/neural-interface/public/vendor/codemirror/chunks/dist-25SQLBVS.js +3 -0
  238. package/neural-interface/public/vendor/codemirror/chunks/dist-27ZGGJJS.js +1 -0
  239. package/neural-interface/public/vendor/codemirror/chunks/dist-4E52OJIF.js +1 -0
  240. package/neural-interface/public/vendor/codemirror/chunks/dist-6FT73XDC.js +2 -0
  241. package/neural-interface/public/vendor/codemirror/chunks/dist-BE6YGRMW.js +1 -0
  242. package/neural-interface/public/vendor/codemirror/chunks/dist-CJSGKW2O.js +1 -0
  243. package/neural-interface/public/vendor/codemirror/chunks/dist-CRPH2WLI.js +1 -0
  244. package/neural-interface/public/vendor/codemirror/chunks/dist-CTG7JEQN.js +1 -0
  245. package/neural-interface/public/vendor/codemirror/chunks/dist-I3FEVELX.js +1 -0
  246. package/neural-interface/public/vendor/codemirror/chunks/dist-IM5BBSWZ.js +1 -0
  247. package/neural-interface/public/vendor/codemirror/chunks/dist-KERUKTIF.js +1 -0
  248. package/neural-interface/public/vendor/codemirror/chunks/dist-LXTMWZAM.js +1 -0
  249. package/neural-interface/public/vendor/codemirror/chunks/dist-MABASSET.js +1 -0
  250. package/neural-interface/public/vendor/codemirror/chunks/dist-MJVBUZLL.js +3 -0
  251. package/neural-interface/public/vendor/codemirror/chunks/dist-MNB3WZVU.js +1 -0
  252. package/neural-interface/public/vendor/codemirror/chunks/dist-QYWXOE3U.js +7 -0
  253. package/neural-interface/public/vendor/codemirror/chunks/dist-TEBOFWLZ.js +1 -0
  254. package/neural-interface/public/vendor/codemirror/chunks/dist-UNXFROM3.js +1 -0
  255. package/neural-interface/public/vendor/codemirror/chunks/dist-XL2SLQO6.js +1 -0
  256. package/neural-interface/public/vendor/codemirror/chunks/dist-XO42Y3AP.js +6 -0
  257. package/neural-interface/public/vendor/codemirror/chunks/dist-Y2WWDWJK.js +1 -0
  258. package/neural-interface/public/vendor/codemirror/chunks/dist-YFEZKWMU.js +1 -0
  259. package/neural-interface/public/vendor/codemirror/chunks/dist-ZY7SWQO6.js +1 -0
  260. package/neural-interface/public/vendor/codemirror/chunks/dockerfile-3Y4R4NCH.js +1 -0
  261. package/neural-interface/public/vendor/codemirror/chunks/dtd-5343GJ4P.js +1 -0
  262. package/neural-interface/public/vendor/codemirror/chunks/dylan-FI2CXSW2.js +1 -0
  263. package/neural-interface/public/vendor/codemirror/chunks/ebnf-GNQ77YWA.js +1 -0
  264. package/neural-interface/public/vendor/codemirror/chunks/ecl-MRPUAE2L.js +1 -0
  265. package/neural-interface/public/vendor/codemirror/chunks/eiffel-DZROES27.js +1 -0
  266. package/neural-interface/public/vendor/codemirror/chunks/elm-4KICRFKQ.js +1 -0
  267. package/neural-interface/public/vendor/codemirror/chunks/erlang-3IHYC263.js +1 -0
  268. package/neural-interface/public/vendor/codemirror/chunks/factor-C6D3E5UK.js +1 -0
  269. package/neural-interface/public/vendor/codemirror/chunks/fcl-VYTWUJMI.js +1 -0
  270. package/neural-interface/public/vendor/codemirror/chunks/forth-ZBO2EH5M.js +1 -0
  271. package/neural-interface/public/vendor/codemirror/chunks/fortran-5NDCRWIK.js +1 -0
  272. package/neural-interface/public/vendor/codemirror/chunks/gas-SKRMOXFP.js +1 -0
  273. package/neural-interface/public/vendor/codemirror/chunks/gherkin-L45YXZLW.js +1 -0
  274. package/neural-interface/public/vendor/codemirror/chunks/groovy-GLPTLN44.js +1 -0
  275. package/neural-interface/public/vendor/codemirror/chunks/haskell-E7NF7P4Y.js +1 -0
  276. package/neural-interface/public/vendor/codemirror/chunks/haxe-K2NVDOB6.js +1 -0
  277. package/neural-interface/public/vendor/codemirror/chunks/http-Q6DRQIJB.js +1 -0
  278. package/neural-interface/public/vendor/codemirror/chunks/idl-MZYNJVLN.js +1 -0
  279. package/neural-interface/public/vendor/codemirror/chunks/javascript-6YRYK2HR.js +1 -0
  280. package/neural-interface/public/vendor/codemirror/chunks/julia-HXEL2T5G.js +1 -0
  281. package/neural-interface/public/vendor/codemirror/chunks/livescript-MV7CI2JZ.js +1 -0
  282. package/neural-interface/public/vendor/codemirror/chunks/lua-E36NHOOD.js +1 -0
  283. package/neural-interface/public/vendor/codemirror/chunks/mathematica-3XOZZCMC.js +1 -0
  284. package/neural-interface/public/vendor/codemirror/chunks/mbox-ODYGFKS7.js +1 -0
  285. package/neural-interface/public/vendor/codemirror/chunks/mirc-WB43AWF5.js +1 -0
  286. package/neural-interface/public/vendor/codemirror/chunks/mllike-ZT6ET7ZH.js +1 -0
  287. package/neural-interface/public/vendor/codemirror/chunks/modelica-LLMZPFGA.js +1 -0
  288. package/neural-interface/public/vendor/codemirror/chunks/mscgen-2OPNNYFH.js +1 -0
  289. package/neural-interface/public/vendor/codemirror/chunks/mumps-6P3HWJH6.js +1 -0
  290. package/neural-interface/public/vendor/codemirror/chunks/nginx-TCGKQTRW.js +1 -0
  291. package/neural-interface/public/vendor/codemirror/chunks/nsis-ATIGIXTJ.js +1 -0
  292. package/neural-interface/public/vendor/codemirror/chunks/ntriples-5PLBI5OV.js +1 -0
  293. package/neural-interface/public/vendor/codemirror/chunks/octave-QF2S3NL6.js +1 -0
  294. package/neural-interface/public/vendor/codemirror/chunks/oz-JFIVFFH2.js +1 -0
  295. package/neural-interface/public/vendor/codemirror/chunks/pascal-JG6SW76V.js +1 -0
  296. package/neural-interface/public/vendor/codemirror/chunks/perl-4B3IWVVO.js +1 -0
  297. package/neural-interface/public/vendor/codemirror/chunks/pig-ABEBH4MI.js +1 -0
  298. package/neural-interface/public/vendor/codemirror/chunks/powershell-H32XE7TL.js +1 -0
  299. package/neural-interface/public/vendor/codemirror/chunks/properties-NN644MMA.js +1 -0
  300. package/neural-interface/public/vendor/codemirror/chunks/protobuf-YKWQK2J3.js +1 -0
  301. package/neural-interface/public/vendor/codemirror/chunks/pug-RIYXEKFW.js +1 -0
  302. package/neural-interface/public/vendor/codemirror/chunks/puppet-JZQ5WPEV.js +1 -0
  303. package/neural-interface/public/vendor/codemirror/chunks/python-EBCGGHAC.js +1 -0
  304. package/neural-interface/public/vendor/codemirror/chunks/q-5UMH2YQY.js +1 -0
  305. package/neural-interface/public/vendor/codemirror/chunks/r-7XMGG453.js +1 -0
  306. package/neural-interface/public/vendor/codemirror/chunks/rpm-IEV7TSLR.js +1 -0
  307. package/neural-interface/public/vendor/codemirror/chunks/ruby-T4SPFPNM.js +1 -0
  308. package/neural-interface/public/vendor/codemirror/chunks/sas-GEDX67ET.js +1 -0
  309. package/neural-interface/public/vendor/codemirror/chunks/scheme-FTLOWKPC.js +1 -0
  310. package/neural-interface/public/vendor/codemirror/chunks/shell-HUFRKFSJ.js +1 -0
  311. package/neural-interface/public/vendor/codemirror/chunks/sieve-P5QUDVYO.js +1 -0
  312. package/neural-interface/public/vendor/codemirror/chunks/smalltalk-2SORJNQI.js +1 -0
  313. package/neural-interface/public/vendor/codemirror/chunks/solr-M22TGAR5.js +1 -0
  314. package/neural-interface/public/vendor/codemirror/chunks/sparql-4M3KL752.js +1 -0
  315. package/neural-interface/public/vendor/codemirror/chunks/spreadsheet-3K23LA4N.js +1 -0
  316. package/neural-interface/public/vendor/codemirror/chunks/sql-VHRFMUBI.js +1 -0
  317. package/neural-interface/public/vendor/codemirror/chunks/stex-QZDAQUY2.js +1 -0
  318. package/neural-interface/public/vendor/codemirror/chunks/stylus-7ZDKAKBD.js +1 -0
  319. package/neural-interface/public/vendor/codemirror/chunks/swift-WCLCLGMR.js +1 -0
  320. package/neural-interface/public/vendor/codemirror/chunks/tcl-JLMU6WOK.js +1 -0
  321. package/neural-interface/public/vendor/codemirror/chunks/textile-4CHDKZ4T.js +1 -0
  322. package/neural-interface/public/vendor/codemirror/chunks/tiddlywiki-DKMCZZQ4.js +1 -0
  323. package/neural-interface/public/vendor/codemirror/chunks/tiki-F4JIG36Q.js +1 -0
  324. package/neural-interface/public/vendor/codemirror/chunks/toml-BHMHTIM2.js +1 -0
  325. package/neural-interface/public/vendor/codemirror/chunks/troff-YQ2KV5NT.js +1 -0
  326. package/neural-interface/public/vendor/codemirror/chunks/ttcn-ZHRCVFJY.js +1 -0
  327. package/neural-interface/public/vendor/codemirror/chunks/ttcn-cfg-KJOVTY4X.js +1 -0
  328. package/neural-interface/public/vendor/codemirror/chunks/turtle-535P5N6I.js +1 -0
  329. package/neural-interface/public/vendor/codemirror/chunks/vb-76UMQHOT.js +1 -0
  330. package/neural-interface/public/vendor/codemirror/chunks/vbscript-CGNDTK6Z.js +1 -0
  331. package/neural-interface/public/vendor/codemirror/chunks/velocity-VSJDO5T5.js +1 -0
  332. package/neural-interface/public/vendor/codemirror/chunks/verilog-4T6ETXIP.js +1 -0
  333. package/neural-interface/public/vendor/codemirror/chunks/vhdl-T7FNAXUN.js +1 -0
  334. package/neural-interface/public/vendor/codemirror/chunks/webidl-P6MJSJ6J.js +1 -0
  335. package/neural-interface/public/vendor/codemirror/chunks/xquery-UOVILRGN.js +1 -0
  336. package/neural-interface/public/vendor/codemirror/chunks/yacas-CV2APROL.js +1 -0
  337. package/neural-interface/public/vendor/codemirror/chunks/z80-3KFNVM4M.js +1 -0
  338. package/neural-interface/public/vendor/codemirror/codemirror-6.43.14-75f05e67.min.js +2 -0
  339. package/neural-interface/public/vendor/codemirror/manifest.json +60 -0
  340. package/neural-interface/scripts/build-vendor.mjs +78 -2
  341. package/neural-interface/scripts/rebuild-pty.js +15 -12
  342. package/neural-interface/scripts/vendor-codemirror-entry.js +121 -0
  343. package/neural-interface/server.js +1092 -1212
  344. package/neural-interface/templates/rulesets/README.md +1 -1
  345. package/package.json +13 -7
  346. package/postinstall.js +11 -81
  347. package/setup.js +111 -6
  348. package/benchmarks/browser-live-results.json +0 -79
  349. package/benchmarks/browser-v2-results.json +0 -258
  350. package/docs/browser-v2.md +0 -109
  351. package/docs/hook-integrity.md +0 -89
  352. package/docs/judgments.md +0 -182
  353. package/docs/style-guide.md +0 -246
  354. package/neural-interface/lib/codex-capabilities.d.ts +0 -41
  355. package/neural-interface/public/category-logos/claude.svg +0 -1
  356. package/neural-interface/public/category-logos/gemini-color.svg +0 -1
  357. package/neural-interface/public/category-logos/openai.svg +0 -1
  358. package/neural-interface/public/category-logos/synabun.png +0 -0
  359. package/neural-interface/public/claude.svg +0 -1
  360. package/neural-interface/public/gallery.svg +0 -6
  361. package/neural-interface/public/leonardoai.svg +0 -1
  362. package/neural-interface/public/mcp.svg +0 -4
  363. package/neural-interface/public/opencode-logo-dark-square.svg +0 -1
  364. package/neural-interface/public/pin-svgrepo-com.svg +0 -25
  365. package/neural-interface/public/sessionicon.svg +0 -8
  366. package/neural-interface/public/toolbar-album.svg +0 -8
  367. package/neural-interface/public/toolbar-question.svg +0 -6
  368. package/neural-interface/public/toolbar-sessions.svg +0 -6
  369. package/neural-interface/scripts/codex-protocol-fixture.mjs +0 -83
  370. package/scripts/audit-claude-hook-usage.mjs +0 -12
  371. package/scripts/audit-memory-duplicates.mjs +0 -44
  372. package/scripts/measure-claude-hook-overhead.mjs +0 -77
  373. package/scripts/recover-user-config.mjs +0 -254
  374. package/skills/synabun/synabunicon.png +0 -0
@@ -12,6 +12,7 @@
12
12
  // send/stop) · file input. The other runtime controls live in the toolbar.
13
13
 
14
14
  import { matchSlashCommands, SLASH_COMMANDS } from './asst-slash.js';
15
+ import { isLongPaste, typedText } from './asst-automation.js';
15
16
 
16
17
  const TEXT_EXTENSIONS = new Set([
17
18
  'txt', 'md', 'js', 'ts', 'jsx', 'tsx', 'json', 'html', 'css', 'scss', 'less', 'xml', 'svg',
@@ -151,6 +152,7 @@ export function createComposer(hostEl, hooks = {}) {
151
152
  files: [], // { name, content }
152
153
  uploads: [], // { name, size, mime, path, status: 'uploading'|'done', progress, controller }
153
154
  memories: [], // node objects
155
+ pastes: [], // long text pastes still to be told apart from typed words (asst-automation.js typedText)
154
156
  slashOpen: false,
155
157
  slashIndex: 0,
156
158
  slashItems: [],
@@ -321,6 +323,9 @@ export function createComposer(hostEl, hooks = {}) {
321
323
  if (!text && !state.images.length && !state.files.length && !state.uploads.length && !state.memories.length) return;
322
324
  const payload = {
323
325
  text,
326
+ // What the user typed, without the long pastes: all SynaBun may learn about them from (the prompt keeps everything).
327
+ typed: typedText(text, state.pastes),
328
+ pastes: state.pastes.slice(),
324
329
  images: state.images.slice(),
325
330
  files: state.files.slice(),
326
331
  uploads: state.uploads.map(({ name, size, mime, path }) => ({ name, size, mime, path })),
@@ -334,6 +339,7 @@ export function createComposer(hostEl, hooks = {}) {
334
339
  state.files = [];
335
340
  state.uploads = [];
336
341
  state.memories = [];
342
+ state.pastes = [];
337
343
  renderAttachments();
338
344
  closeSlash();
339
345
  autoResize();
@@ -409,9 +415,12 @@ export function createComposer(hostEl, hooks = {}) {
409
415
  return Number.isFinite(x) && Number.isFinite(y) ? { x, y } : null;
410
416
  }
411
417
 
412
- // ── Paste (images) ──
418
+ // ── Paste (images; long text is remembered as pasted, not typed) ──
413
419
  textarea.addEventListener('paste', (e) => {
414
420
  if (!e.clipboardData) return;
421
+ let pasted = '';
422
+ try { pasted = e.clipboardData.getData?.('text/plain') || ''; } catch { pasted = ''; }
423
+ if (isLongPaste(pasted)) state.pastes = [...state.pastes, pasted].slice(-20);
415
424
  for (const item of e.clipboardData.items) {
416
425
  if (item.type.startsWith('image/')) {
417
426
  const blob = item.getAsFile();
@@ -596,6 +605,7 @@ export function createComposer(hostEl, hooks = {}) {
596
605
  state.files.push(...(payload.files || []));
597
606
  state.uploads.push(...(payload.uploads || []).map((u) => ({ ...u, status: 'done', progress: 1 })));
598
607
  state.memories.push(...(payload.memories || []));
608
+ state.pastes = [...state.pastes, ...(payload.pastes || [])].slice(-20);
599
609
  renderAttachments();
600
610
  autoResize();
601
611
  updateSlash();
@@ -2,9 +2,10 @@
2
2
  // SynaBun Assistant — the panel's mascot director
3
3
  // ═══════════════════════════════════════════
4
4
  // The renderer (asst-render.js) owns the rigs and says which one is on screen:
5
- // the hero (the empty state's character, parked after a send until the first
6
- // stage takes it over) or the live rack's stage. This module dresses that one
7
- // in the panel's own state, above the pose the renderer gives it:
5
+ // the hero (the empty state's character; a send hands it over to the
6
+ // "Thinking" row's at once), the live rack's stage or the "Thinking" row's.
7
+ // This module dresses that one in the panel's own state, above the pose the
8
+ // renderer gives it:
8
9
  //
9
10
  // offline the socket dropped (the Reconnecting banner); one startle on reconnect
10
11
  // blocked a card waits on you: eyes on it, two pulses, then still
@@ -14,12 +15,15 @@
14
15
  // sleep the hero only, after 90 s with no input while nothing runs;
15
16
  // the rig wakes itself on a pointer move or a key
16
17
  //
17
- // Anything else is the renderer's pose: the hero idles (thinks once parked),
18
- // the stage acts out its call. A pose the director sets is held: the renderer
19
- // leaves it alone until the director lets go and asks it to restore its own.
20
- // Only one panel animates its rigs: the visible one used last (typing, focus,
21
- // a new stage). Pure logic: the clock, timers and page input come in through
22
- // `env`, so node:test drives it with fakes (tests/assistant-mascot.test.mjs).
18
+ // Anything else is the renderer's pose: the hero idles, the "Thinking" row's
19
+ // character thinks, the stage acts out its call. A pose the director sets is
20
+ // held: the renderer leaves it alone until the director lets go and asks it
21
+ // to restore its own. A director knows its own panel only: nothing in this
22
+ // module is shared between directors, so every open session dresses and
23
+ // animates its own character at the same time as every other one (a rig that
24
+ // is off screen parks itself: synabun-mascot.js). Pure logic: the clock,
25
+ // timers and page input come in through `env`, so node:test drives it with
26
+ // fakes (tests/assistant-mascot.test.mjs).
23
27
 
24
28
  export const MASCOT_TIMING = Object.freeze({
25
29
  watchEveryMs: 120,
@@ -58,32 +62,16 @@ export function lookToward(box, point, { horizontal = false } = {}) {
58
62
  return { x: unit((vx / d) * m), y: unit((vy / d) * m) };
59
63
  }
60
64
 
61
- // ── One panel animates: the visible one used last ──
62
- const directors = new Set();
63
- let lead = null;
64
- let seq = 0;
65
-
66
- function elect() {
67
- let best = null;
68
- for (const d of directors) if (d.visible() && (!best || d.activeAt() > best.activeAt())) best = d;
69
- if (!best) for (const d of directors) if (!best || d.activeAt() > best.activeAt()) best = d;
70
- if (best === lead) return;
71
- const prev = lead;
72
- lead = best;
73
- prev?.leadChanged();
74
- best?.leadChanged();
75
- }
76
-
77
65
  /**
78
- * createMascotDirector({ getTarget, caret, setEnabled, isVisible, env })
79
- * getTarget() → the renderer's visible mascot { kind: 'hero'|'stage', rig, el,
80
- * parked?(), hold(on), restore() } or null; caret() → the caret's client
81
- * point or null; setEnabled(on) → whether this panel's rigs animate;
82
- * isVisible() → the panel is on screen.
66
+ * createMascotDirector({ getTarget, caret, env })
67
+ * getTarget() → the renderer's visible mascot { kind: 'hero'|'stage'|'working',
68
+ * rig, el, parked?(), hold(on), restore() } or null; caret() → the caret's
69
+ * client point or null.
83
70
  * env: { now, setTimeout, clearTimeout, input(fn) → unsubscribe (page pointer
84
71
  * and key input), lastInputAt() }.
72
+ * All of its state is its own: one director per panel, any number at once.
85
73
  */
86
- export function createMascotDirector({ getTarget = () => null, caret = () => null, setEnabled = () => {}, isVisible = () => true, env = {} } = {}) {
74
+ export function createMascotDirector({ getTarget = () => null, caret = () => null, env = {} } = {}) {
87
75
  const now = env.now || (() => Date.now());
88
76
  const later = env.setTimeout || ((fn, ms) => setTimeout(fn, ms));
89
77
  const cancel = env.clearTimeout || ((id) => clearTimeout(id));
@@ -106,7 +94,6 @@ export function createMascotDirector({ getTarget = () => null, caret = () => nul
106
94
  let sleepTimer = 0;
107
95
  let lastInput = now();
108
96
  let stopInput = null;
109
- let activeAt = (seq += 1);
110
97
 
111
98
  const safe = (fn) => { try { return fn(); } catch { return undefined; } };
112
99
  const boxOf = (t) => safe(() => t.el?.getBoundingClientRect?.()) || null;
@@ -197,7 +184,6 @@ export function createMascotDirector({ getTarget = () => null, caret = () => nul
197
184
  /** The draft changed: `present` false (an empty draft) ends the watch. */
198
185
  function type(present = true) {
199
186
  if (destroyed) return;
200
- touch();
201
187
  noteInput();
202
188
  if (!present) { stopTyping(); return; }
203
189
  const first = !typing;
@@ -235,27 +221,13 @@ export function createMascotDirector({ getTarget = () => null, caret = () => nul
235
221
  armSleep();
236
222
  }
237
223
 
238
- function touch() {
239
- activeAt = (seq += 1);
240
- elect();
241
- }
242
-
243
- const self = {
244
- visible: () => !destroyed && safe(isVisible) !== false,
245
- activeAt: () => activeAt,
246
- leadChanged() { if (!destroyed) safe(() => setEnabled(lead === self)); },
247
- };
248
- directors.add(self);
249
- touch();
250
- if (lead !== self) self.leadChanged();
251
-
252
224
  return {
253
225
  /** The draft changed (typing): the mascot watches the caret column. */
254
226
  type,
255
227
  /** Blur, or the draft went away. */
256
228
  stopTyping,
257
- /** A prompt went out: the watch hands over at once (the renderer parks the hero thinking). */
258
- sent() { touch(); stopTyping(); },
229
+ /** A prompt went out: the watch hands over at once (the renderer gives the hero to the "Thinking" row). */
230
+ sent() { stopTyping(); },
259
231
  /** A card waits on the user (`rectOf()` → its box), or none (null). */
260
232
  setBlocked(rectOf) {
261
233
  blocked = typeof rectOf === 'function' ? rectOf : null;
@@ -283,20 +255,12 @@ export function createMascotDirector({ getTarget = () => null, caret = () => nul
283
255
  },
284
256
  /** The turn ended with `pose` ('success' | 'error' | null): played once on the rig on screen. */
285
257
  turnEnded,
286
- /** The renderer's visible mascot changed; a new stage makes this panel the one that animates. */
287
- retarget() {
288
- if (destroyed) return;
289
- const t = safe(getTarget) || null;
290
- if (t && t !== target && t.kind === 'stage') touch();
291
- apply();
292
- },
293
- /** The user is here (focus, a click): this panel animates. */
294
- touch() { touch(); noteInput(); },
295
- /** The host showed or hid the panel. */
296
- visibilityChanged() { elect(); },
297
- isLead: () => lead === self,
258
+ /** The renderer's visible mascot changed. */
259
+ retarget() { apply(); },
260
+ /** The user is here (focus, a click): a sleeping hero wakes, the quiet starts over. */
261
+ touch() { if (!destroyed) noteInput(); },
298
262
  /** For tests and devtools: what the director holds right now. */
299
- state: () => ({ target: target?.kind || null, pose: shown.split('|')[0] || null, typing, blocked: !!blocked, offline, sleeping, oneShot: oneShot?.pose || null, lead: lead === self }),
263
+ state: () => ({ target: target?.kind || null, pose: shown.split('|')[0] || null, typing, blocked: !!blocked, offline, sleeping, oneShot: oneShot?.pose || null }),
300
264
  destroy() {
301
265
  if (destroyed) return;
302
266
  if (target && holding) safe(() => target.hold(false));
@@ -304,8 +268,6 @@ export function createMascotDirector({ getTarget = () => null, caret = () => nul
304
268
  for (const id of [typingTimer, lookTimer, sleepTimer]) if (id) cancel(id);
305
269
  dropOneShot();
306
270
  if (stopInput) { safe(stopInput); stopInput = null; }
307
- directors.delete(self);
308
- if (lead === self) { lead = null; elect(); }
309
271
  },
310
272
  };
311
273
  }
@@ -21,6 +21,7 @@
21
21
  // info { label, value } → non-interactive row
22
22
  // tag { label } → non-interactive badge row
23
23
  // input { placeholder, value, onSubmit } → inline text field
24
+ // `restoreFocus` on an item or input sends focus back to the anchor once it is chosen.
24
25
  // Keys: ↑/↓ move, Home/End jump, Enter/Space activate, Esc closes (focus back
25
26
  // to the anchor), Tab closes. The optional filter hides non-matching items and
26
27
  // any group left empty.
@@ -72,6 +73,7 @@ export function closeMenu({ restoreFocus = false } = {}) {
72
73
  menu.remove();
73
74
  if (anchor?.isConnected) {
74
75
  if (anchor.getAttribute('aria-haspopup')) anchor.setAttribute('aria-expanded', 'false');
76
+ anchor.removeAttribute('aria-controls');
75
77
  if (restoreFocus) { try { anchor.focus({ preventScroll: true }); } catch { /* detached */ } }
76
78
  }
77
79
  try { onClose?.(); } catch { /* listener error */ }
@@ -115,7 +117,7 @@ function buildItems(list, items, { role, onActivate }) {
115
117
  input.value = spec.value || '';
116
118
  input.setAttribute('aria-label', spec.label || spec.placeholder || 'Value');
117
119
  input.dataset.submit = '1';
118
- input._asstSubmit = (value) => { closeMenu(); spec.onSubmit?.(value); };
120
+ input._asstSubmit = (value) => { closeMenu({ restoreFocus: !!spec.restoreFocus }); spec.onSubmit?.(value); };
119
121
  list.appendChild(input);
120
122
  continue;
121
123
  }
@@ -160,7 +162,7 @@ function buildItems(list, items, { role, onActivate }) {
160
162
  }
161
163
 
162
164
  /** Hide items that do not match `query`, then any header/separator left without items. */
163
- export function applyMenuFilter(list, query) {
165
+ export function applyMenuFilter(list, query, emptyLabel = 'No matches') {
164
166
  const q = String(query || '').trim().toLowerCase();
165
167
  const rows = [...list.children];
166
168
  for (const row of rows) {
@@ -192,7 +194,7 @@ export function applyMenuFilter(list, query) {
192
194
  let empty = list.querySelector('.asst-dd-empty.asst-dd-noresults');
193
195
  const hasItem = rows.some(r => !r.hidden && (r.classList.contains('asst-dd-item') || r.classList.contains('asst-dd-input')));
194
196
  if (q && !hasItem) {
195
- if (!empty) { empty = el('div', 'asst-dd-empty asst-dd-noresults', 'No matches'); list.appendChild(empty); }
197
+ if (!empty) { empty = el('div', 'asst-dd-empty asst-dd-noresults', emptyLabel); list.appendChild(empty); }
196
198
  empty.hidden = false;
197
199
  } else if (empty) empty.hidden = true;
198
200
  }
@@ -287,12 +289,13 @@ export function openMenu(anchor, opts = {}) {
287
289
  item.onSelect?.(item, node);
288
290
  };
289
291
  buildItems(list, items, { role, onActivate: activate });
290
- if (width) menu.style.minWidth = `${width}px`;
292
+ if (width) menu.style.minWidth = opts.repositionOnResize ? `min(${width}px, calc(100vw - 16px))` : `${width}px`;
293
+ if (width && opts.repositionOnResize) menu.style.width = `min(${width}px, calc(100vw - 16px))`;
291
294
  document.body.appendChild(menu);
292
295
  positionMenu(menu, anchor, placement);
293
296
 
294
297
  if (filterInput) {
295
- filterInput.addEventListener('input', () => { applyMenuFilter(list, filterInput.value); positionMenu(menu, anchor, placement); });
298
+ filterInput.addEventListener('input', () => { applyMenuFilter(list, filterInput.value, opts.filterEmptyLabel); positionMenu(menu, anchor, placement); });
296
299
  }
297
300
 
298
301
  const onDocDown = (e) => {
@@ -341,16 +344,17 @@ export function openMenu(anchor, opts = {}) {
341
344
  // Keep single-letter global keybinds out of an open menu.
342
345
  e.stopPropagation();
343
346
  };
344
- const onResize = () => closeMenu();
347
+ const onResize = () => opts.repositionOnResize ? positionMenu(menu, anchor, placement) : closeMenu();
348
+ const onBlur = () => closeMenu();
345
349
  document.addEventListener('mousedown', onDocDown, true);
346
350
  document.addEventListener('keydown', onKey, true);
347
351
  window.addEventListener('resize', onResize);
348
- window.addEventListener('blur', onResize);
352
+ window.addEventListener('blur', onBlur);
349
353
  const cleanup = () => {
350
354
  document.removeEventListener('mousedown', onDocDown, true);
351
355
  document.removeEventListener('keydown', onKey, true);
352
356
  window.removeEventListener('resize', onResize);
353
- window.removeEventListener('blur', onResize);
357
+ window.removeEventListener('blur', onBlur);
354
358
  };
355
359
 
356
360
  _open = { menu, anchor, onClose, cleanup };