synabun 2.0.0 → 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 (334) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/NOTICE +5 -0
  3. package/README.md +1 -1
  4. package/THIRD-PARTY-LICENSES.md +46 -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/lib/start-launcher.js +88 -1
  14. package/mcp-server/package-lock.json +2 -2
  15. package/mcp-server/package.json +1 -3
  16. package/neural-interface/i18n/en.json +1500 -153
  17. package/neural-interface/i18n/pt-BR.json +1498 -152
  18. package/neural-interface/lib/assistant-api.js +62 -6
  19. package/neural-interface/lib/assistant-brains/claude.js +4 -0
  20. package/neural-interface/lib/assistant-catalog.js +179 -27
  21. package/neural-interface/lib/assistant-config.js +31 -2
  22. package/neural-interface/lib/assistant-dispatch.js +62 -13
  23. package/neural-interface/lib/assistant-hidden-models.js +393 -66
  24. package/neural-interface/lib/assistant-memory.js +24 -10
  25. package/neural-interface/lib/assistant-persona.js +6 -2
  26. package/neural-interface/lib/assistant-pricing.js +21 -6
  27. package/neural-interface/lib/assistant-runtime.js +181 -12
  28. package/neural-interface/lib/assistant-task-prompt.js +13 -3
  29. package/neural-interface/lib/assistant-test-density.js +142 -0
  30. package/neural-interface/lib/assistant-user-context-budgets.js +123 -0
  31. package/neural-interface/lib/assistant-user-context.js +908 -0
  32. package/neural-interface/lib/assistant-user-knowledge.js +328 -0
  33. package/neural-interface/lib/assistant-user-learn.js +404 -0
  34. package/neural-interface/lib/assistant-user-threads.js +226 -0
  35. package/neural-interface/lib/assistant-user-writer.js +181 -0
  36. package/neural-interface/lib/browser-background-tab.js +134 -0
  37. package/neural-interface/lib/browser-screenshot.js +678 -61
  38. package/neural-interface/lib/claude-agent-bridge.js +33 -6
  39. package/neural-interface/lib/claude-model-catalog.js +30 -2
  40. package/neural-interface/lib/claude-temporary.js +46 -7
  41. package/neural-interface/lib/cloudflared/install.js +533 -0
  42. package/neural-interface/lib/cloudflared/manager.js +545 -0
  43. package/neural-interface/lib/cloudflared/pins.js +115 -0
  44. package/neural-interface/lib/cloudflared/pins.json +63 -0
  45. package/neural-interface/lib/cloudflared/tunnel.js +265 -0
  46. package/neural-interface/lib/editor-completion-endpoint.js +264 -0
  47. package/neural-interface/lib/editor-completion-opencode.js +436 -0
  48. package/neural-interface/lib/editor-completion.js +714 -0
  49. package/neural-interface/lib/editor-config.js +149 -0
  50. package/neural-interface/lib/editor-files-api.js +268 -0
  51. package/neural-interface/lib/editor-git-api.js +134 -0
  52. package/neural-interface/lib/file-explorer-api.js +1039 -0
  53. package/neural-interface/lib/file-explorer-system.js +355 -0
  54. package/neural-interface/lib/file-explorer-trash.ps1 +85 -0
  55. package/neural-interface/lib/file-explorer-watch.js +239 -0
  56. package/neural-interface/lib/git-diff-api.js +103 -0
  57. package/neural-interface/lib/git-read.js +202 -0
  58. package/neural-interface/lib/greeting/api.js +89 -0
  59. package/neural-interface/lib/greeting/budgets.js +90 -0
  60. package/neural-interface/lib/greeting/engine.js +461 -0
  61. package/neural-interface/lib/greeting/facts.js +320 -0
  62. package/neural-interface/lib/greeting/sources.js +252 -0
  63. package/neural-interface/lib/greeting/writer.js +139 -0
  64. package/neural-interface/lib/http-guards.js +189 -13
  65. package/neural-interface/lib/machine-names.js +88 -0
  66. package/neural-interface/lib/memory-api.js +31 -7
  67. package/neural-interface/lib/native-loop-providers.js +10 -5
  68. package/neural-interface/lib/plugin-installer.js +4 -2
  69. package/neural-interface/lib/project-storage.js +5 -7
  70. package/neural-interface/lib/request-gate.js +589 -0
  71. package/neural-interface/lib/ui-blob-api.js +108 -0
  72. package/neural-interface/lib/ui-blob-store.js +68 -0
  73. package/neural-interface/package-lock.json +701 -2
  74. package/neural-interface/package.json +13 -2
  75. package/neural-interface/public/install-app.html +9 -6
  76. package/neural-interface/public/offline.html +3 -2
  77. package/neural-interface/public/onboarding.html +12 -1
  78. package/neural-interface/public/shared/agent-runtime-options.js +22 -6
  79. package/neural-interface/public/shared/assistant/asst-automation.js +286 -0
  80. package/neural-interface/public/shared/assistant/asst-brain-picker.js +312 -62
  81. package/neural-interface/public/shared/assistant/asst-composer.js +11 -1
  82. package/neural-interface/public/shared/assistant/asst-mascot.js +18 -58
  83. package/neural-interface/public/shared/assistant/asst-menu.js +12 -8
  84. package/neural-interface/public/shared/assistant/asst-panel.js +150 -28
  85. package/neural-interface/public/shared/assistant/asst-render.js +162 -19
  86. package/neural-interface/public/shared/assistant/asst-route-models.js +108 -0
  87. package/neural-interface/public/shared/assistant/asst-route.js +23 -329
  88. package/neural-interface/public/shared/assistant/asst-routes-editor.js +495 -0
  89. package/neural-interface/public/shared/assistant/asst-sanitize.js +8 -1
  90. package/neural-interface/public/shared/assistant/asst-sidepanel.js +31 -9
  91. package/neural-interface/public/shared/assistant/asst-state.js +185 -1
  92. package/neural-interface/public/shared/assistant/asst-styles.js +158 -4
  93. package/neural-interface/public/shared/blob-store.js +111 -22
  94. package/neural-interface/public/shared/cdx/cdx-panel.js +32 -11
  95. package/neural-interface/public/shared/cdx/cdx-render.js +25 -89
  96. package/neural-interface/public/shared/cdx/cdx-styles.js +36 -0
  97. package/neural-interface/public/shared/cdx/cdx-tabs.js +87 -4
  98. package/neural-interface/public/shared/constants.js +6 -1
  99. package/neural-interface/public/shared/cp/cp-rehydrate.js +2 -1
  100. package/neural-interface/public/shared/cp/cp-styles.js +15 -0
  101. package/neural-interface/public/shared/editor/editor-ai-logic.js +409 -0
  102. package/neural-interface/public/shared/editor/editor-ai.js +619 -0
  103. package/neural-interface/public/shared/editor/editor-commands.js +212 -0
  104. package/neural-interface/public/shared/editor/editor-compare.js +103 -0
  105. package/neural-interface/public/shared/editor/editor-completion-list.js +172 -0
  106. package/neural-interface/public/shared/editor/editor-doc.js +257 -0
  107. package/neural-interface/public/shared/editor/editor-git-logic.js +131 -0
  108. package/neural-interface/public/shared/editor/editor-git.js +95 -0
  109. package/neural-interface/public/shared/editor/editor-languages.js +156 -0
  110. package/neural-interface/public/shared/editor/editor-lint.js +229 -0
  111. package/neural-interface/public/shared/editor/editor-loader.js +51 -0
  112. package/neural-interface/public/shared/editor/editor-markdown.js +90 -0
  113. package/neural-interface/public/shared/editor/editor-menu.js +233 -0
  114. package/neural-interface/public/shared/editor/editor-minimap.js +371 -0
  115. package/neural-interface/public/shared/editor/editor-palette-logic.js +192 -0
  116. package/neural-interface/public/shared/editor/editor-palette.js +125 -0
  117. package/neural-interface/public/shared/editor/editor-panel-logic.js +288 -0
  118. package/neural-interface/public/shared/editor/editor-panel.js +2099 -0
  119. package/neural-interface/public/shared/editor/editor-prefs.js +224 -0
  120. package/neural-interface/public/shared/editor/editor-safety.js +500 -0
  121. package/neural-interface/public/shared/editor/editor-search.js +352 -0
  122. package/neural-interface/public/shared/editor/editor-statusbar.js +144 -0
  123. package/neural-interface/public/shared/editor/editor-tabs-logic.js +331 -0
  124. package/neural-interface/public/shared/editor/editor-tabs.js +233 -0
  125. package/neural-interface/public/shared/editor/editor-theme.js +244 -0
  126. package/neural-interface/public/shared/editor/editor-view.js +332 -0
  127. package/neural-interface/public/shared/explorer/fx-api.js +216 -0
  128. package/neural-interface/public/shared/explorer/fx-links.js +204 -0
  129. package/neural-interface/public/shared/explorer/fx-logic.js +537 -0
  130. package/neural-interface/public/shared/explorer/fx-main.js +865 -0
  131. package/neural-interface/public/shared/explorer/fx-names.js +87 -0
  132. package/neural-interface/public/shared/explorer/fx-ops.js +370 -0
  133. package/neural-interface/public/shared/explorer/fx-popups.js +490 -0
  134. package/neural-interface/public/shared/explorer/fx-tree.js +790 -0
  135. package/neural-interface/public/shared/file-links.js +339 -0
  136. package/neural-interface/public/shared/greeting/greeting-card.js +178 -0
  137. package/neural-interface/public/shared/greeting/greeting-view.js +148 -0
  138. package/neural-interface/public/shared/html-shell.js +160 -165
  139. package/neural-interface/public/shared/ocp-v2/ocp-v2-childpanel.js +4 -0
  140. package/neural-interface/public/shared/ocp-v2/ocp-v2-greeting.js +47 -0
  141. package/neural-interface/public/shared/ocp-v2/ocp-v2-panel.js +99 -17
  142. package/neural-interface/public/shared/ocp-v2/ocp-v2-render.js +7 -1
  143. package/neural-interface/public/shared/ocp-v2/ocp-v2-send.js +5 -0
  144. package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +40 -0
  145. package/neural-interface/public/shared/ocp-v2/ocp-v2-ws.js +3 -2
  146. package/neural-interface/public/shared/pwa-install-page.js +29 -1
  147. package/neural-interface/public/shared/pwa-install.css +3 -3
  148. package/neural-interface/public/shared/pwa-install.js +100 -1
  149. package/neural-interface/public/shared/settings/settings-code-editor-pane.js +412 -0
  150. package/neural-interface/public/shared/settings/settings-code-editor.js +328 -0
  151. package/neural-interface/public/shared/settings/settings-greeting.js +133 -0
  152. package/neural-interface/public/shared/settings/settings-ia.js +18 -4
  153. package/neural-interface/public/shared/settings/settings-user-context.js +154 -0
  154. package/neural-interface/public/shared/start-bridge.js +238 -19
  155. package/neural-interface/public/shared/styles.css +1414 -721
  156. package/neural-interface/public/shared/synabun-mascot.js +20 -56
  157. package/neural-interface/public/shared/tunnel-view.js +167 -0
  158. package/neural-interface/public/shared/ui-claude-panel.js +157 -16
  159. package/neural-interface/public/shared/ui-detail.js +15 -0
  160. package/neural-interface/public/shared/ui-explorer.js +22 -0
  161. package/neural-interface/public/shared/ui-file-explorer.js +481 -2496
  162. package/neural-interface/public/shared/ui-file-links.js +103 -0
  163. package/neural-interface/public/shared/ui-help.js +26 -0
  164. package/neural-interface/public/shared/ui-invite.js +126 -116
  165. package/neural-interface/public/shared/ui-keybinds.js +4 -0
  166. package/neural-interface/public/shared/ui-loading.js +159 -15
  167. package/neural-interface/public/shared/ui-menubar.js +12 -30
  168. package/neural-interface/public/shared/ui-native-loop-router-state.js +11 -0
  169. package/neural-interface/public/shared/ui-native-loop-router.js +15 -2
  170. package/neural-interface/public/shared/ui-navbar.js +45 -21
  171. package/neural-interface/public/shared/ui-settings.js +455 -488
  172. package/neural-interface/public/shared/ui-sidepanel-runtime.js +2 -1
  173. package/neural-interface/public/shared/ui-sync.js +16 -0
  174. package/neural-interface/public/shared/ui-terminal.js +23 -5
  175. package/neural-interface/public/shared/ui-tunnel.js +130 -0
  176. package/neural-interface/public/shared/ui-tutorial-steps.js +6 -2
  177. package/neural-interface/public/shared/ui-whiteboard.js +12 -0
  178. package/neural-interface/public/shared/ui-worker-end.js +245 -0
  179. package/neural-interface/public/shared/ui-workspaces.js +41 -27
  180. package/neural-interface/public/shared/worker-end.js +251 -0
  181. package/neural-interface/public/sw.js +2 -2
  182. package/neural-interface/public/vendor/codemirror/chunks/apl-CSDKT72Z.js +1 -0
  183. package/neural-interface/public/vendor/codemirror/chunks/asciiarmor-JYYPU5BM.js +1 -0
  184. package/neural-interface/public/vendor/codemirror/chunks/asn1-NRWCZDA6.js +1 -0
  185. package/neural-interface/public/vendor/codemirror/chunks/asterisk-5OU6D4ZQ.js +1 -0
  186. package/neural-interface/public/vendor/codemirror/chunks/brainfuck-ID4N4SYC.js +1 -0
  187. package/neural-interface/public/vendor/codemirror/chunks/chunk-4RZWGCS2.js +1 -0
  188. package/neural-interface/public/vendor/codemirror/chunks/chunk-ACTJM3JR.js +11 -0
  189. package/neural-interface/public/vendor/codemirror/chunks/chunk-S6BMAXLK.js +1 -0
  190. package/neural-interface/public/vendor/codemirror/chunks/chunk-TO2RDOHQ.js +3 -0
  191. package/neural-interface/public/vendor/codemirror/chunks/chunk-US2GMZZQ.js +13 -0
  192. package/neural-interface/public/vendor/codemirror/chunks/chunk-WYYO5ZAJ.js +1 -0
  193. package/neural-interface/public/vendor/codemirror/chunks/chunk-XALZTDJC.js +1 -0
  194. package/neural-interface/public/vendor/codemirror/chunks/chunk-YRNUTRDV.js +1 -0
  195. package/neural-interface/public/vendor/codemirror/chunks/chunk-Z3QOKH62.js +1 -0
  196. package/neural-interface/public/vendor/codemirror/chunks/clike-OWQBSOGL.js +1 -0
  197. package/neural-interface/public/vendor/codemirror/chunks/clojure-KV75UQWC.js +1 -0
  198. package/neural-interface/public/vendor/codemirror/chunks/cmake-GTEP5Y3C.js +1 -0
  199. package/neural-interface/public/vendor/codemirror/chunks/cobol-WCZ7QEGJ.js +1 -0
  200. package/neural-interface/public/vendor/codemirror/chunks/coffeescript-TGLBOT6B.js +1 -0
  201. package/neural-interface/public/vendor/codemirror/chunks/commonlisp-WVVI432V.js +1 -0
  202. package/neural-interface/public/vendor/codemirror/chunks/crystal-S6R6HLKQ.js +1 -0
  203. package/neural-interface/public/vendor/codemirror/chunks/css-PDA2RINP.js +1 -0
  204. package/neural-interface/public/vendor/codemirror/chunks/cypher-HL5QPL4C.js +1 -0
  205. package/neural-interface/public/vendor/codemirror/chunks/d-HHJH2HAJ.js +1 -0
  206. package/neural-interface/public/vendor/codemirror/chunks/diff-MN3A35BY.js +1 -0
  207. package/neural-interface/public/vendor/codemirror/chunks/dist-25SQLBVS.js +3 -0
  208. package/neural-interface/public/vendor/codemirror/chunks/dist-27ZGGJJS.js +1 -0
  209. package/neural-interface/public/vendor/codemirror/chunks/dist-4E52OJIF.js +1 -0
  210. package/neural-interface/public/vendor/codemirror/chunks/dist-6FT73XDC.js +2 -0
  211. package/neural-interface/public/vendor/codemirror/chunks/dist-BE6YGRMW.js +1 -0
  212. package/neural-interface/public/vendor/codemirror/chunks/dist-CJSGKW2O.js +1 -0
  213. package/neural-interface/public/vendor/codemirror/chunks/dist-CRPH2WLI.js +1 -0
  214. package/neural-interface/public/vendor/codemirror/chunks/dist-CTG7JEQN.js +1 -0
  215. package/neural-interface/public/vendor/codemirror/chunks/dist-I3FEVELX.js +1 -0
  216. package/neural-interface/public/vendor/codemirror/chunks/dist-IM5BBSWZ.js +1 -0
  217. package/neural-interface/public/vendor/codemirror/chunks/dist-KERUKTIF.js +1 -0
  218. package/neural-interface/public/vendor/codemirror/chunks/dist-LXTMWZAM.js +1 -0
  219. package/neural-interface/public/vendor/codemirror/chunks/dist-MABASSET.js +1 -0
  220. package/neural-interface/public/vendor/codemirror/chunks/dist-MJVBUZLL.js +3 -0
  221. package/neural-interface/public/vendor/codemirror/chunks/dist-MNB3WZVU.js +1 -0
  222. package/neural-interface/public/vendor/codemirror/chunks/dist-QYWXOE3U.js +7 -0
  223. package/neural-interface/public/vendor/codemirror/chunks/dist-TEBOFWLZ.js +1 -0
  224. package/neural-interface/public/vendor/codemirror/chunks/dist-UNXFROM3.js +1 -0
  225. package/neural-interface/public/vendor/codemirror/chunks/dist-XL2SLQO6.js +1 -0
  226. package/neural-interface/public/vendor/codemirror/chunks/dist-XO42Y3AP.js +6 -0
  227. package/neural-interface/public/vendor/codemirror/chunks/dist-Y2WWDWJK.js +1 -0
  228. package/neural-interface/public/vendor/codemirror/chunks/dist-YFEZKWMU.js +1 -0
  229. package/neural-interface/public/vendor/codemirror/chunks/dist-ZY7SWQO6.js +1 -0
  230. package/neural-interface/public/vendor/codemirror/chunks/dockerfile-3Y4R4NCH.js +1 -0
  231. package/neural-interface/public/vendor/codemirror/chunks/dtd-5343GJ4P.js +1 -0
  232. package/neural-interface/public/vendor/codemirror/chunks/dylan-FI2CXSW2.js +1 -0
  233. package/neural-interface/public/vendor/codemirror/chunks/ebnf-GNQ77YWA.js +1 -0
  234. package/neural-interface/public/vendor/codemirror/chunks/ecl-MRPUAE2L.js +1 -0
  235. package/neural-interface/public/vendor/codemirror/chunks/eiffel-DZROES27.js +1 -0
  236. package/neural-interface/public/vendor/codemirror/chunks/elm-4KICRFKQ.js +1 -0
  237. package/neural-interface/public/vendor/codemirror/chunks/erlang-3IHYC263.js +1 -0
  238. package/neural-interface/public/vendor/codemirror/chunks/factor-C6D3E5UK.js +1 -0
  239. package/neural-interface/public/vendor/codemirror/chunks/fcl-VYTWUJMI.js +1 -0
  240. package/neural-interface/public/vendor/codemirror/chunks/forth-ZBO2EH5M.js +1 -0
  241. package/neural-interface/public/vendor/codemirror/chunks/fortran-5NDCRWIK.js +1 -0
  242. package/neural-interface/public/vendor/codemirror/chunks/gas-SKRMOXFP.js +1 -0
  243. package/neural-interface/public/vendor/codemirror/chunks/gherkin-L45YXZLW.js +1 -0
  244. package/neural-interface/public/vendor/codemirror/chunks/groovy-GLPTLN44.js +1 -0
  245. package/neural-interface/public/vendor/codemirror/chunks/haskell-E7NF7P4Y.js +1 -0
  246. package/neural-interface/public/vendor/codemirror/chunks/haxe-K2NVDOB6.js +1 -0
  247. package/neural-interface/public/vendor/codemirror/chunks/http-Q6DRQIJB.js +1 -0
  248. package/neural-interface/public/vendor/codemirror/chunks/idl-MZYNJVLN.js +1 -0
  249. package/neural-interface/public/vendor/codemirror/chunks/javascript-6YRYK2HR.js +1 -0
  250. package/neural-interface/public/vendor/codemirror/chunks/julia-HXEL2T5G.js +1 -0
  251. package/neural-interface/public/vendor/codemirror/chunks/livescript-MV7CI2JZ.js +1 -0
  252. package/neural-interface/public/vendor/codemirror/chunks/lua-E36NHOOD.js +1 -0
  253. package/neural-interface/public/vendor/codemirror/chunks/mathematica-3XOZZCMC.js +1 -0
  254. package/neural-interface/public/vendor/codemirror/chunks/mbox-ODYGFKS7.js +1 -0
  255. package/neural-interface/public/vendor/codemirror/chunks/mirc-WB43AWF5.js +1 -0
  256. package/neural-interface/public/vendor/codemirror/chunks/mllike-ZT6ET7ZH.js +1 -0
  257. package/neural-interface/public/vendor/codemirror/chunks/modelica-LLMZPFGA.js +1 -0
  258. package/neural-interface/public/vendor/codemirror/chunks/mscgen-2OPNNYFH.js +1 -0
  259. package/neural-interface/public/vendor/codemirror/chunks/mumps-6P3HWJH6.js +1 -0
  260. package/neural-interface/public/vendor/codemirror/chunks/nginx-TCGKQTRW.js +1 -0
  261. package/neural-interface/public/vendor/codemirror/chunks/nsis-ATIGIXTJ.js +1 -0
  262. package/neural-interface/public/vendor/codemirror/chunks/ntriples-5PLBI5OV.js +1 -0
  263. package/neural-interface/public/vendor/codemirror/chunks/octave-QF2S3NL6.js +1 -0
  264. package/neural-interface/public/vendor/codemirror/chunks/oz-JFIVFFH2.js +1 -0
  265. package/neural-interface/public/vendor/codemirror/chunks/pascal-JG6SW76V.js +1 -0
  266. package/neural-interface/public/vendor/codemirror/chunks/perl-4B3IWVVO.js +1 -0
  267. package/neural-interface/public/vendor/codemirror/chunks/pig-ABEBH4MI.js +1 -0
  268. package/neural-interface/public/vendor/codemirror/chunks/powershell-H32XE7TL.js +1 -0
  269. package/neural-interface/public/vendor/codemirror/chunks/properties-NN644MMA.js +1 -0
  270. package/neural-interface/public/vendor/codemirror/chunks/protobuf-YKWQK2J3.js +1 -0
  271. package/neural-interface/public/vendor/codemirror/chunks/pug-RIYXEKFW.js +1 -0
  272. package/neural-interface/public/vendor/codemirror/chunks/puppet-JZQ5WPEV.js +1 -0
  273. package/neural-interface/public/vendor/codemirror/chunks/python-EBCGGHAC.js +1 -0
  274. package/neural-interface/public/vendor/codemirror/chunks/q-5UMH2YQY.js +1 -0
  275. package/neural-interface/public/vendor/codemirror/chunks/r-7XMGG453.js +1 -0
  276. package/neural-interface/public/vendor/codemirror/chunks/rpm-IEV7TSLR.js +1 -0
  277. package/neural-interface/public/vendor/codemirror/chunks/ruby-T4SPFPNM.js +1 -0
  278. package/neural-interface/public/vendor/codemirror/chunks/sas-GEDX67ET.js +1 -0
  279. package/neural-interface/public/vendor/codemirror/chunks/scheme-FTLOWKPC.js +1 -0
  280. package/neural-interface/public/vendor/codemirror/chunks/shell-HUFRKFSJ.js +1 -0
  281. package/neural-interface/public/vendor/codemirror/chunks/sieve-P5QUDVYO.js +1 -0
  282. package/neural-interface/public/vendor/codemirror/chunks/smalltalk-2SORJNQI.js +1 -0
  283. package/neural-interface/public/vendor/codemirror/chunks/solr-M22TGAR5.js +1 -0
  284. package/neural-interface/public/vendor/codemirror/chunks/sparql-4M3KL752.js +1 -0
  285. package/neural-interface/public/vendor/codemirror/chunks/spreadsheet-3K23LA4N.js +1 -0
  286. package/neural-interface/public/vendor/codemirror/chunks/sql-VHRFMUBI.js +1 -0
  287. package/neural-interface/public/vendor/codemirror/chunks/stex-QZDAQUY2.js +1 -0
  288. package/neural-interface/public/vendor/codemirror/chunks/stylus-7ZDKAKBD.js +1 -0
  289. package/neural-interface/public/vendor/codemirror/chunks/swift-WCLCLGMR.js +1 -0
  290. package/neural-interface/public/vendor/codemirror/chunks/tcl-JLMU6WOK.js +1 -0
  291. package/neural-interface/public/vendor/codemirror/chunks/textile-4CHDKZ4T.js +1 -0
  292. package/neural-interface/public/vendor/codemirror/chunks/tiddlywiki-DKMCZZQ4.js +1 -0
  293. package/neural-interface/public/vendor/codemirror/chunks/tiki-F4JIG36Q.js +1 -0
  294. package/neural-interface/public/vendor/codemirror/chunks/toml-BHMHTIM2.js +1 -0
  295. package/neural-interface/public/vendor/codemirror/chunks/troff-YQ2KV5NT.js +1 -0
  296. package/neural-interface/public/vendor/codemirror/chunks/ttcn-ZHRCVFJY.js +1 -0
  297. package/neural-interface/public/vendor/codemirror/chunks/ttcn-cfg-KJOVTY4X.js +1 -0
  298. package/neural-interface/public/vendor/codemirror/chunks/turtle-535P5N6I.js +1 -0
  299. package/neural-interface/public/vendor/codemirror/chunks/vb-76UMQHOT.js +1 -0
  300. package/neural-interface/public/vendor/codemirror/chunks/vbscript-CGNDTK6Z.js +1 -0
  301. package/neural-interface/public/vendor/codemirror/chunks/velocity-VSJDO5T5.js +1 -0
  302. package/neural-interface/public/vendor/codemirror/chunks/verilog-4T6ETXIP.js +1 -0
  303. package/neural-interface/public/vendor/codemirror/chunks/vhdl-T7FNAXUN.js +1 -0
  304. package/neural-interface/public/vendor/codemirror/chunks/webidl-P6MJSJ6J.js +1 -0
  305. package/neural-interface/public/vendor/codemirror/chunks/xquery-UOVILRGN.js +1 -0
  306. package/neural-interface/public/vendor/codemirror/chunks/yacas-CV2APROL.js +1 -0
  307. package/neural-interface/public/vendor/codemirror/chunks/z80-3KFNVM4M.js +1 -0
  308. package/neural-interface/public/vendor/codemirror/codemirror-6.43.14-75f05e67.min.js +2 -0
  309. package/neural-interface/public/vendor/codemirror/manifest.json +60 -0
  310. package/neural-interface/scripts/build-vendor.mjs +78 -2
  311. package/neural-interface/scripts/vendor-codemirror-entry.js +121 -0
  312. package/neural-interface/server.js +873 -1028
  313. package/neural-interface/templates/rulesets/README.md +1 -1
  314. package/package.json +2 -8
  315. package/setup.js +44 -7
  316. package/benchmarks/browser-live-results.json +0 -79
  317. package/benchmarks/browser-v2-results.json +0 -258
  318. package/neural-interface/lib/codex-capabilities.d.ts +0 -41
  319. package/neural-interface/public/category-logos/claude.svg +0 -1
  320. package/neural-interface/public/category-logos/gemini-color.svg +0 -1
  321. package/neural-interface/public/category-logos/openai.svg +0 -1
  322. package/neural-interface/public/category-logos/synabun.png +0 -0
  323. package/neural-interface/public/claude.svg +0 -1
  324. package/neural-interface/public/gallery.svg +0 -6
  325. package/neural-interface/public/leonardoai.svg +0 -1
  326. package/neural-interface/public/mcp.svg +0 -4
  327. package/neural-interface/public/opencode-logo-dark-square.svg +0 -1
  328. package/neural-interface/public/pin-svgrepo-com.svg +0 -25
  329. package/neural-interface/public/sessionicon.svg +0 -8
  330. package/neural-interface/public/toolbar-album.svg +0 -8
  331. package/neural-interface/public/toolbar-question.svg +0 -6
  332. package/neural-interface/public/toolbar-sessions.svg +0 -6
  333. package/neural-interface/scripts/codex-protocol-fixture.mjs +0 -83
  334. 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();
@@ -18,10 +18,12 @@
18
18
  // Anything else is the renderer's pose: the hero idles, the "Thinking" row's
19
19
  // character thinks, the stage acts out its call. A pose the director sets is
20
20
  // held: the renderer leaves it alone until the director lets go and asks it
21
- // to restore its own. Only one panel animates its rigs: the visible one used
22
- // last (typing, focus, a new stage). Pure logic: the clock, timers and page
23
- // input come in through `env`, so node:test drives it with fakes
24
- // (tests/assistant-mascot.test.mjs).
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).
25
27
 
26
28
  export const MASCOT_TIMING = Object.freeze({
27
29
  watchEveryMs: 120,
@@ -60,32 +62,16 @@ export function lookToward(box, point, { horizontal = false } = {}) {
60
62
  return { x: unit((vx / d) * m), y: unit((vy / d) * m) };
61
63
  }
62
64
 
63
- // ── One panel animates: the visible one used last ──
64
- const directors = new Set();
65
- let lead = null;
66
- let seq = 0;
67
-
68
- function elect() {
69
- let best = null;
70
- for (const d of directors) if (d.visible() && (!best || d.activeAt() > best.activeAt())) best = d;
71
- if (!best) for (const d of directors) if (!best || d.activeAt() > best.activeAt()) best = d;
72
- if (best === lead) return;
73
- const prev = lead;
74
- lead = best;
75
- prev?.leadChanged();
76
- best?.leadChanged();
77
- }
78
-
79
65
  /**
80
- * createMascotDirector({ getTarget, caret, setEnabled, isVisible, env })
81
- * getTarget() → the renderer's visible mascot { kind: 'hero'|'stage', rig, el,
82
- * parked?(), hold(on), restore() } or null; caret() → the caret's client
83
- * point or null; setEnabled(on) → whether this panel's rigs animate;
84
- * 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.
85
70
  * env: { now, setTimeout, clearTimeout, input(fn) → unsubscribe (page pointer
86
71
  * and key input), lastInputAt() }.
72
+ * All of its state is its own: one director per panel, any number at once.
87
73
  */
88
- export function createMascotDirector({ getTarget = () => null, caret = () => null, setEnabled = () => {}, isVisible = () => true, env = {} } = {}) {
74
+ export function createMascotDirector({ getTarget = () => null, caret = () => null, env = {} } = {}) {
89
75
  const now = env.now || (() => Date.now());
90
76
  const later = env.setTimeout || ((fn, ms) => setTimeout(fn, ms));
91
77
  const cancel = env.clearTimeout || ((id) => clearTimeout(id));
@@ -108,7 +94,6 @@ export function createMascotDirector({ getTarget = () => null, caret = () => nul
108
94
  let sleepTimer = 0;
109
95
  let lastInput = now();
110
96
  let stopInput = null;
111
- let activeAt = (seq += 1);
112
97
 
113
98
  const safe = (fn) => { try { return fn(); } catch { return undefined; } };
114
99
  const boxOf = (t) => safe(() => t.el?.getBoundingClientRect?.()) || null;
@@ -199,7 +184,6 @@ export function createMascotDirector({ getTarget = () => null, caret = () => nul
199
184
  /** The draft changed: `present` false (an empty draft) ends the watch. */
200
185
  function type(present = true) {
201
186
  if (destroyed) return;
202
- touch();
203
187
  noteInput();
204
188
  if (!present) { stopTyping(); return; }
205
189
  const first = !typing;
@@ -237,27 +221,13 @@ export function createMascotDirector({ getTarget = () => null, caret = () => nul
237
221
  armSleep();
238
222
  }
239
223
 
240
- function touch() {
241
- activeAt = (seq += 1);
242
- elect();
243
- }
244
-
245
- const self = {
246
- visible: () => !destroyed && safe(isVisible) !== false,
247
- activeAt: () => activeAt,
248
- leadChanged() { if (!destroyed) safe(() => setEnabled(lead === self)); },
249
- };
250
- directors.add(self);
251
- touch();
252
- if (lead !== self) self.leadChanged();
253
-
254
224
  return {
255
225
  /** The draft changed (typing): the mascot watches the caret column. */
256
226
  type,
257
227
  /** Blur, or the draft went away. */
258
228
  stopTyping,
259
229
  /** A prompt went out: the watch hands over at once (the renderer gives the hero to the "Thinking" row). */
260
- sent() { touch(); stopTyping(); },
230
+ sent() { stopTyping(); },
261
231
  /** A card waits on the user (`rectOf()` → its box), or none (null). */
262
232
  setBlocked(rectOf) {
263
233
  blocked = typeof rectOf === 'function' ? rectOf : null;
@@ -285,20 +255,12 @@ export function createMascotDirector({ getTarget = () => null, caret = () => nul
285
255
  },
286
256
  /** The turn ended with `pose` ('success' | 'error' | null): played once on the rig on screen. */
287
257
  turnEnded,
288
- /** The renderer's visible mascot changed; a new stage makes this panel the one that animates. */
289
- retarget() {
290
- if (destroyed) return;
291
- const t = safe(getTarget) || null;
292
- if (t && t !== target && t.kind === 'stage') touch();
293
- apply();
294
- },
295
- /** The user is here (focus, a click): this panel animates. */
296
- touch() { touch(); noteInput(); },
297
- /** The host showed or hid the panel. */
298
- visibilityChanged() { elect(); },
299
- 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(); },
300
262
  /** For tests and devtools: what the director holds right now. */
301
- 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 }),
302
264
  destroy() {
303
265
  if (destroyed) return;
304
266
  if (target && holding) safe(() => target.hold(false));
@@ -306,8 +268,6 @@ export function createMascotDirector({ getTarget = () => null, caret = () => nul
306
268
  for (const id of [typingTimer, lookTimer, sleepTimer]) if (id) cancel(id);
307
269
  dropOneShot();
308
270
  if (stopInput) { safe(stopInput); stopInput = null; }
309
- directors.delete(self);
310
- if (lead === self) { lead = null; elect(); }
311
271
  },
312
272
  };
313
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 };