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.
- package/CHANGELOG.md +57 -0
- package/NOTICE +5 -0
- package/README.md +1 -1
- package/THIRD-PARTY-LICENSES.md +46 -0
- package/benchmarks/fixtures/browser/README.md +1 -1
- package/benchmarks/fixtures/desktop/README.md +1 -1
- package/docs/whatsapp.md +2 -2
- package/hooks/claude-code/pre-compact.mjs +11 -0
- package/hooks/claude-code/prompt-submit.mjs +60 -184
- package/hooks/claude-code/session-start.mjs +73 -16
- package/hooks/claude-code/shared.mjs +20 -0
- package/hooks/claude-code/stop.mjs +5 -5
- package/lib/start-launcher.js +88 -1
- package/mcp-server/package-lock.json +2 -2
- package/mcp-server/package.json +1 -3
- package/neural-interface/i18n/en.json +1500 -153
- package/neural-interface/i18n/pt-BR.json +1498 -152
- package/neural-interface/lib/assistant-api.js +62 -6
- package/neural-interface/lib/assistant-brains/claude.js +4 -0
- package/neural-interface/lib/assistant-catalog.js +179 -27
- package/neural-interface/lib/assistant-config.js +31 -2
- package/neural-interface/lib/assistant-dispatch.js +62 -13
- package/neural-interface/lib/assistant-hidden-models.js +393 -66
- package/neural-interface/lib/assistant-memory.js +24 -10
- package/neural-interface/lib/assistant-persona.js +6 -2
- package/neural-interface/lib/assistant-pricing.js +21 -6
- package/neural-interface/lib/assistant-runtime.js +181 -12
- package/neural-interface/lib/assistant-task-prompt.js +13 -3
- package/neural-interface/lib/assistant-test-density.js +142 -0
- package/neural-interface/lib/assistant-user-context-budgets.js +123 -0
- package/neural-interface/lib/assistant-user-context.js +908 -0
- package/neural-interface/lib/assistant-user-knowledge.js +328 -0
- package/neural-interface/lib/assistant-user-learn.js +404 -0
- package/neural-interface/lib/assistant-user-threads.js +226 -0
- package/neural-interface/lib/assistant-user-writer.js +181 -0
- package/neural-interface/lib/browser-background-tab.js +134 -0
- package/neural-interface/lib/browser-screenshot.js +678 -61
- package/neural-interface/lib/claude-agent-bridge.js +33 -6
- package/neural-interface/lib/claude-model-catalog.js +30 -2
- package/neural-interface/lib/claude-temporary.js +46 -7
- package/neural-interface/lib/cloudflared/install.js +533 -0
- package/neural-interface/lib/cloudflared/manager.js +545 -0
- package/neural-interface/lib/cloudflared/pins.js +115 -0
- package/neural-interface/lib/cloudflared/pins.json +63 -0
- package/neural-interface/lib/cloudflared/tunnel.js +265 -0
- package/neural-interface/lib/editor-completion-endpoint.js +264 -0
- package/neural-interface/lib/editor-completion-opencode.js +436 -0
- package/neural-interface/lib/editor-completion.js +714 -0
- package/neural-interface/lib/editor-config.js +149 -0
- package/neural-interface/lib/editor-files-api.js +268 -0
- package/neural-interface/lib/editor-git-api.js +134 -0
- package/neural-interface/lib/file-explorer-api.js +1039 -0
- package/neural-interface/lib/file-explorer-system.js +355 -0
- package/neural-interface/lib/file-explorer-trash.ps1 +85 -0
- package/neural-interface/lib/file-explorer-watch.js +239 -0
- package/neural-interface/lib/git-diff-api.js +103 -0
- package/neural-interface/lib/git-read.js +202 -0
- package/neural-interface/lib/greeting/api.js +89 -0
- package/neural-interface/lib/greeting/budgets.js +90 -0
- package/neural-interface/lib/greeting/engine.js +461 -0
- package/neural-interface/lib/greeting/facts.js +320 -0
- package/neural-interface/lib/greeting/sources.js +252 -0
- package/neural-interface/lib/greeting/writer.js +139 -0
- package/neural-interface/lib/http-guards.js +189 -13
- package/neural-interface/lib/machine-names.js +88 -0
- package/neural-interface/lib/memory-api.js +31 -7
- package/neural-interface/lib/native-loop-providers.js +10 -5
- package/neural-interface/lib/plugin-installer.js +4 -2
- package/neural-interface/lib/project-storage.js +5 -7
- package/neural-interface/lib/request-gate.js +589 -0
- package/neural-interface/lib/ui-blob-api.js +108 -0
- package/neural-interface/lib/ui-blob-store.js +68 -0
- package/neural-interface/package-lock.json +701 -2
- package/neural-interface/package.json +13 -2
- package/neural-interface/public/install-app.html +9 -6
- package/neural-interface/public/offline.html +3 -2
- package/neural-interface/public/onboarding.html +12 -1
- package/neural-interface/public/shared/agent-runtime-options.js +22 -6
- package/neural-interface/public/shared/assistant/asst-automation.js +286 -0
- package/neural-interface/public/shared/assistant/asst-brain-picker.js +312 -62
- package/neural-interface/public/shared/assistant/asst-composer.js +11 -1
- package/neural-interface/public/shared/assistant/asst-mascot.js +18 -58
- package/neural-interface/public/shared/assistant/asst-menu.js +12 -8
- package/neural-interface/public/shared/assistant/asst-panel.js +150 -28
- package/neural-interface/public/shared/assistant/asst-render.js +162 -19
- package/neural-interface/public/shared/assistant/asst-route-models.js +108 -0
- package/neural-interface/public/shared/assistant/asst-route.js +23 -329
- package/neural-interface/public/shared/assistant/asst-routes-editor.js +495 -0
- package/neural-interface/public/shared/assistant/asst-sanitize.js +8 -1
- package/neural-interface/public/shared/assistant/asst-sidepanel.js +31 -9
- package/neural-interface/public/shared/assistant/asst-state.js +185 -1
- package/neural-interface/public/shared/assistant/asst-styles.js +158 -4
- package/neural-interface/public/shared/blob-store.js +111 -22
- package/neural-interface/public/shared/cdx/cdx-panel.js +32 -11
- package/neural-interface/public/shared/cdx/cdx-render.js +25 -89
- package/neural-interface/public/shared/cdx/cdx-styles.js +36 -0
- package/neural-interface/public/shared/cdx/cdx-tabs.js +87 -4
- package/neural-interface/public/shared/constants.js +6 -1
- package/neural-interface/public/shared/cp/cp-rehydrate.js +2 -1
- package/neural-interface/public/shared/cp/cp-styles.js +15 -0
- package/neural-interface/public/shared/editor/editor-ai-logic.js +409 -0
- package/neural-interface/public/shared/editor/editor-ai.js +619 -0
- package/neural-interface/public/shared/editor/editor-commands.js +212 -0
- package/neural-interface/public/shared/editor/editor-compare.js +103 -0
- package/neural-interface/public/shared/editor/editor-completion-list.js +172 -0
- package/neural-interface/public/shared/editor/editor-doc.js +257 -0
- package/neural-interface/public/shared/editor/editor-git-logic.js +131 -0
- package/neural-interface/public/shared/editor/editor-git.js +95 -0
- package/neural-interface/public/shared/editor/editor-languages.js +156 -0
- package/neural-interface/public/shared/editor/editor-lint.js +229 -0
- package/neural-interface/public/shared/editor/editor-loader.js +51 -0
- package/neural-interface/public/shared/editor/editor-markdown.js +90 -0
- package/neural-interface/public/shared/editor/editor-menu.js +233 -0
- package/neural-interface/public/shared/editor/editor-minimap.js +371 -0
- package/neural-interface/public/shared/editor/editor-palette-logic.js +192 -0
- package/neural-interface/public/shared/editor/editor-palette.js +125 -0
- package/neural-interface/public/shared/editor/editor-panel-logic.js +288 -0
- package/neural-interface/public/shared/editor/editor-panel.js +2099 -0
- package/neural-interface/public/shared/editor/editor-prefs.js +224 -0
- package/neural-interface/public/shared/editor/editor-safety.js +500 -0
- package/neural-interface/public/shared/editor/editor-search.js +352 -0
- package/neural-interface/public/shared/editor/editor-statusbar.js +144 -0
- package/neural-interface/public/shared/editor/editor-tabs-logic.js +331 -0
- package/neural-interface/public/shared/editor/editor-tabs.js +233 -0
- package/neural-interface/public/shared/editor/editor-theme.js +244 -0
- package/neural-interface/public/shared/editor/editor-view.js +332 -0
- package/neural-interface/public/shared/explorer/fx-api.js +216 -0
- package/neural-interface/public/shared/explorer/fx-links.js +204 -0
- package/neural-interface/public/shared/explorer/fx-logic.js +537 -0
- package/neural-interface/public/shared/explorer/fx-main.js +865 -0
- package/neural-interface/public/shared/explorer/fx-names.js +87 -0
- package/neural-interface/public/shared/explorer/fx-ops.js +370 -0
- package/neural-interface/public/shared/explorer/fx-popups.js +490 -0
- package/neural-interface/public/shared/explorer/fx-tree.js +790 -0
- package/neural-interface/public/shared/file-links.js +339 -0
- package/neural-interface/public/shared/greeting/greeting-card.js +178 -0
- package/neural-interface/public/shared/greeting/greeting-view.js +148 -0
- package/neural-interface/public/shared/html-shell.js +160 -165
- package/neural-interface/public/shared/ocp-v2/ocp-v2-childpanel.js +4 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-greeting.js +47 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-panel.js +99 -17
- package/neural-interface/public/shared/ocp-v2/ocp-v2-render.js +7 -1
- package/neural-interface/public/shared/ocp-v2/ocp-v2-send.js +5 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +40 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-ws.js +3 -2
- package/neural-interface/public/shared/pwa-install-page.js +29 -1
- package/neural-interface/public/shared/pwa-install.css +3 -3
- package/neural-interface/public/shared/pwa-install.js +100 -1
- package/neural-interface/public/shared/settings/settings-code-editor-pane.js +412 -0
- package/neural-interface/public/shared/settings/settings-code-editor.js +328 -0
- package/neural-interface/public/shared/settings/settings-greeting.js +133 -0
- package/neural-interface/public/shared/settings/settings-ia.js +18 -4
- package/neural-interface/public/shared/settings/settings-user-context.js +154 -0
- package/neural-interface/public/shared/start-bridge.js +238 -19
- package/neural-interface/public/shared/styles.css +1414 -721
- package/neural-interface/public/shared/synabun-mascot.js +20 -56
- package/neural-interface/public/shared/tunnel-view.js +167 -0
- package/neural-interface/public/shared/ui-claude-panel.js +157 -16
- package/neural-interface/public/shared/ui-detail.js +15 -0
- package/neural-interface/public/shared/ui-explorer.js +22 -0
- package/neural-interface/public/shared/ui-file-explorer.js +481 -2496
- package/neural-interface/public/shared/ui-file-links.js +103 -0
- package/neural-interface/public/shared/ui-help.js +26 -0
- package/neural-interface/public/shared/ui-invite.js +126 -116
- package/neural-interface/public/shared/ui-keybinds.js +4 -0
- package/neural-interface/public/shared/ui-loading.js +159 -15
- package/neural-interface/public/shared/ui-menubar.js +12 -30
- package/neural-interface/public/shared/ui-native-loop-router-state.js +11 -0
- package/neural-interface/public/shared/ui-native-loop-router.js +15 -2
- package/neural-interface/public/shared/ui-navbar.js +45 -21
- package/neural-interface/public/shared/ui-settings.js +455 -488
- package/neural-interface/public/shared/ui-sidepanel-runtime.js +2 -1
- package/neural-interface/public/shared/ui-sync.js +16 -0
- package/neural-interface/public/shared/ui-terminal.js +23 -5
- package/neural-interface/public/shared/ui-tunnel.js +130 -0
- package/neural-interface/public/shared/ui-tutorial-steps.js +6 -2
- package/neural-interface/public/shared/ui-whiteboard.js +12 -0
- package/neural-interface/public/shared/ui-worker-end.js +245 -0
- package/neural-interface/public/shared/ui-workspaces.js +41 -27
- package/neural-interface/public/shared/worker-end.js +251 -0
- package/neural-interface/public/sw.js +2 -2
- package/neural-interface/public/vendor/codemirror/chunks/apl-CSDKT72Z.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/asciiarmor-JYYPU5BM.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/asn1-NRWCZDA6.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/asterisk-5OU6D4ZQ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/brainfuck-ID4N4SYC.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-4RZWGCS2.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-ACTJM3JR.js +11 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-S6BMAXLK.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-TO2RDOHQ.js +3 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-US2GMZZQ.js +13 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-WYYO5ZAJ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-XALZTDJC.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-YRNUTRDV.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-Z3QOKH62.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/clike-OWQBSOGL.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/clojure-KV75UQWC.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/cmake-GTEP5Y3C.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/cobol-WCZ7QEGJ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/coffeescript-TGLBOT6B.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/commonlisp-WVVI432V.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/crystal-S6R6HLKQ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/css-PDA2RINP.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/cypher-HL5QPL4C.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/d-HHJH2HAJ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/diff-MN3A35BY.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-25SQLBVS.js +3 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-27ZGGJJS.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-4E52OJIF.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-6FT73XDC.js +2 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-BE6YGRMW.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-CJSGKW2O.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-CRPH2WLI.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-CTG7JEQN.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-I3FEVELX.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-IM5BBSWZ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-KERUKTIF.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-LXTMWZAM.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-MABASSET.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-MJVBUZLL.js +3 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-MNB3WZVU.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-QYWXOE3U.js +7 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-TEBOFWLZ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-UNXFROM3.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-XL2SLQO6.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-XO42Y3AP.js +6 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-Y2WWDWJK.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-YFEZKWMU.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-ZY7SWQO6.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dockerfile-3Y4R4NCH.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dtd-5343GJ4P.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dylan-FI2CXSW2.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/ebnf-GNQ77YWA.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/ecl-MRPUAE2L.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/eiffel-DZROES27.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/elm-4KICRFKQ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/erlang-3IHYC263.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/factor-C6D3E5UK.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/fcl-VYTWUJMI.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/forth-ZBO2EH5M.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/fortran-5NDCRWIK.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/gas-SKRMOXFP.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/gherkin-L45YXZLW.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/groovy-GLPTLN44.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/haskell-E7NF7P4Y.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/haxe-K2NVDOB6.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/http-Q6DRQIJB.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/idl-MZYNJVLN.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/javascript-6YRYK2HR.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/julia-HXEL2T5G.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/livescript-MV7CI2JZ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/lua-E36NHOOD.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/mathematica-3XOZZCMC.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/mbox-ODYGFKS7.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/mirc-WB43AWF5.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/mllike-ZT6ET7ZH.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/modelica-LLMZPFGA.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/mscgen-2OPNNYFH.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/mumps-6P3HWJH6.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/nginx-TCGKQTRW.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/nsis-ATIGIXTJ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/ntriples-5PLBI5OV.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/octave-QF2S3NL6.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/oz-JFIVFFH2.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/pascal-JG6SW76V.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/perl-4B3IWVVO.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/pig-ABEBH4MI.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/powershell-H32XE7TL.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/properties-NN644MMA.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/protobuf-YKWQK2J3.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/pug-RIYXEKFW.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/puppet-JZQ5WPEV.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/python-EBCGGHAC.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/q-5UMH2YQY.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/r-7XMGG453.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/rpm-IEV7TSLR.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/ruby-T4SPFPNM.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/sas-GEDX67ET.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/scheme-FTLOWKPC.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/shell-HUFRKFSJ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/sieve-P5QUDVYO.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/smalltalk-2SORJNQI.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/solr-M22TGAR5.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/sparql-4M3KL752.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/spreadsheet-3K23LA4N.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/sql-VHRFMUBI.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/stex-QZDAQUY2.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/stylus-7ZDKAKBD.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/swift-WCLCLGMR.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/tcl-JLMU6WOK.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/textile-4CHDKZ4T.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/tiddlywiki-DKMCZZQ4.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/tiki-F4JIG36Q.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/toml-BHMHTIM2.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/troff-YQ2KV5NT.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/ttcn-ZHRCVFJY.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/ttcn-cfg-KJOVTY4X.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/turtle-535P5N6I.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/vb-76UMQHOT.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/vbscript-CGNDTK6Z.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/velocity-VSJDO5T5.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/verilog-4T6ETXIP.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/vhdl-T7FNAXUN.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/webidl-P6MJSJ6J.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/xquery-UOVILRGN.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/yacas-CV2APROL.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/z80-3KFNVM4M.js +1 -0
- package/neural-interface/public/vendor/codemirror/codemirror-6.43.14-75f05e67.min.js +2 -0
- package/neural-interface/public/vendor/codemirror/manifest.json +60 -0
- package/neural-interface/scripts/build-vendor.mjs +78 -2
- package/neural-interface/scripts/vendor-codemirror-entry.js +121 -0
- package/neural-interface/server.js +873 -1028
- package/neural-interface/templates/rulesets/README.md +1 -1
- package/package.json +2 -8
- package/setup.js +44 -7
- package/benchmarks/browser-live-results.json +0 -79
- package/benchmarks/browser-v2-results.json +0 -258
- package/neural-interface/lib/codex-capabilities.d.ts +0 -41
- package/neural-interface/public/category-logos/claude.svg +0 -1
- package/neural-interface/public/category-logos/gemini-color.svg +0 -1
- package/neural-interface/public/category-logos/openai.svg +0 -1
- package/neural-interface/public/category-logos/synabun.png +0 -0
- package/neural-interface/public/claude.svg +0 -1
- package/neural-interface/public/gallery.svg +0 -6
- package/neural-interface/public/leonardoai.svg +0 -1
- package/neural-interface/public/mcp.svg +0 -4
- package/neural-interface/public/opencode-logo-dark-square.svg +0 -1
- package/neural-interface/public/pin-svgrepo-com.svg +0 -25
- package/neural-interface/public/sessionicon.svg +0 -8
- package/neural-interface/public/toolbar-album.svg +0 -8
- package/neural-interface/public/toolbar-question.svg +0 -6
- package/neural-interface/public/toolbar-sessions.svg +0 -6
- package/neural-interface/scripts/codex-protocol-fixture.mjs +0 -83
- 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.
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
//
|
|
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,
|
|
81
|
-
* getTarget() → the renderer's visible mascot { kind: 'hero'|'stage',
|
|
82
|
-
* parked?(), hold(on), restore() } or null; caret() → the caret's
|
|
83
|
-
* point or null
|
|
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,
|
|
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() {
|
|
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
|
|
289
|
-
retarget() {
|
|
290
|
-
|
|
291
|
-
|
|
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
|
|
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',
|
|
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',
|
|
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',
|
|
357
|
+
window.removeEventListener('blur', onBlur);
|
|
354
358
|
};
|
|
355
359
|
|
|
356
360
|
_open = { menu, anchor, onClose, cleanup };
|