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
|
@@ -30,7 +30,7 @@ import { CLAUDE_NOT_INSTALLED, resolveClaudeSdkExecutable } from './claude-execu
|
|
|
30
30
|
import { diagnoseLaunchFailure, isNativeBinaryLaunchFailure } from './native-binary-runtime.js';
|
|
31
31
|
import { normalizePanelSession, startSignature, applyPanelSessionOptions, liveSettingsPatch, normalizeMcpServers, mergeTabMcpServers } from './claude-panel-session.js';
|
|
32
32
|
import { SESSION_REQUESTS, runSessionRequest, slimRewind, slimMcpStatus } from './claude-panel-requests.js';
|
|
33
|
-
import { applyTemporaryOptions, plansDirsOf, planFileOfToolCall, removeTemporaryPlanFiles } from './claude-temporary.js';
|
|
33
|
+
import { applyTemporaryOptions, plansDirsOf, snapshotPlanFiles, planFileOfToolCall, removeTemporaryPlanFiles } from './claude-temporary.js';
|
|
34
34
|
import { rootBypassBlock } from './claude-bypass-policy.js';
|
|
35
35
|
import { randomUUID } from 'node:crypto';
|
|
36
36
|
import { dirname, join } from 'node:path';
|
|
@@ -107,6 +107,7 @@ export const PANEL_CAPABILITIES = Object.freeze([
|
|
|
107
107
|
'message_flags', // session.hookEvents / promptSuggestions / subagentText / agentSummaries → the matching SDK options
|
|
108
108
|
'task_control', // inbound `stop_task` / `background_tasks` → `task_control_result`; system/session_crons events
|
|
109
109
|
'origin_human', // a query marked `typed: true` is sent with origin {kind:'human'}
|
|
110
|
+
'greeting', // query `greetingId`: the model is told once what SynaBun greeted the user with (lib/greeting/)
|
|
110
111
|
'session_requests', // inbound `session_request {id, what, args}` → `session_response`: context_usage, usage, mcp_status, mcp_reconnect, mcp_toggle, rewind_preview
|
|
111
112
|
'rewind_stats', // `rewind_result` carries filesChanged / insertions / deletions
|
|
112
113
|
'session_title', // query `title` names a new session where the CLI reads it
|
|
@@ -226,7 +227,7 @@ function log(...args) { console.log('[claude-sdk]', ...args); }
|
|
|
226
227
|
|
|
227
228
|
// Panel sessions, a temporary chat (lib/claude-temporary.js): the plan files
|
|
228
229
|
// Claude Code wrote for one that still have to be removed. path → { plansDirs,
|
|
229
|
-
// since, ended, last }. One is removed once the pump of the process that wrote
|
|
230
|
+
// since, before, ended, last }. One is removed once the pump of the process that wrote
|
|
230
231
|
// it has settled (`ended`), and stays owed after that removal, whether it
|
|
231
232
|
// removed the file or found none: the pump settles when the SDK's own cleanup
|
|
232
233
|
// stops waiting for the process, which can be before the process is gone, and
|
|
@@ -602,8 +603,9 @@ export class ClaudeSession {
|
|
|
602
603
|
// `typesafe:'off'` on a query (the live skin test) keeps this CLI's hooks
|
|
603
604
|
// from paying for judgments: they read the kill switch from their env.
|
|
604
605
|
// (Panel sessions: the CLI reports running / idle / requires_action only when
|
|
605
|
-
// asked to; `idle` is its own word that a turn is over. See _noteSessionState.
|
|
606
|
-
|
|
606
|
+
// asked to; `idle` is its own word that a turn is over. See _noteSessionState.
|
|
607
|
+
// SYNABUN_PANEL_SESSION tells the user-level SynaBun hooks that the panel greets here, not they.)
|
|
608
|
+
env: { ...cleanEnv(), ...(this.typesafeOff ? { SYNABUN_TYPESAFE: 'off' } : {}), ...(sessionOpts.env || {}), ...(accountEnv || {}), ...(this.panel ? { CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS: '1', SYNABUN_PANEL_SESSION: '1' } : {}) },
|
|
607
609
|
abortController: this.abortController,
|
|
608
610
|
stderr: (text) => {
|
|
609
611
|
const t = String(text || '').trim();
|
|
@@ -643,6 +645,16 @@ export class ClaudeSession {
|
|
|
643
645
|
// Resuming a session whose prompt cache has expired pays to write it
|
|
644
646
|
// again: the CLI says how much at SessionStart.
|
|
645
647
|
options.hooks = mergeHookMatchers(options.hooks, {
|
|
648
|
+
// The greeting SynaBun showed when this conversation opened (lib/greeting/): said to the
|
|
649
|
+
// model once, with the first prompt, as background. The model is never asked to greet.
|
|
650
|
+
UserPromptSubmit: [{
|
|
651
|
+
hooks: [async () => {
|
|
652
|
+
const note = gen === this._queryGen ? this._greetingNote : '';
|
|
653
|
+
if (!note) return {};
|
|
654
|
+
this._greetingNote = '';
|
|
655
|
+
return { hookSpecificOutput: { hookEventName: 'UserPromptSubmit', additionalContext: note } };
|
|
656
|
+
}],
|
|
657
|
+
}],
|
|
646
658
|
SessionStart: [{
|
|
647
659
|
hooks: [async (input) => {
|
|
648
660
|
if (gen === this._queryGen && input?.prompt_cache_likely_expired === true && Number(input?.estimated_cache_write_usd) > 0) {
|
|
@@ -744,7 +756,10 @@ export class ClaudeSession {
|
|
|
744
756
|
// (Which of the session's MCP connections is SynaBun's is asked of the live process when a tool of one is called.)
|
|
745
757
|
applyTemporaryOptions(options, { mcpUrl: deps.mcpUrl || '', mcpStatus: () => this.q?.mcpServerStatus?.() });
|
|
746
758
|
this._tempPlansDirs = plansDirsOf(options.env, { cwd: workDir, settings: options.settings });
|
|
747
|
-
if (!this._tempSince)
|
|
759
|
+
if (!this._tempSince) {
|
|
760
|
+
this._tempPlansBefore = snapshotPlanFiles(this._tempPlansDirs);
|
|
761
|
+
this._tempSince = Date.now();
|
|
762
|
+
}
|
|
748
763
|
}
|
|
749
764
|
// The executable resolved at the top of this call. The SDK uses
|
|
750
765
|
// pathToClaudeCodeExecutable verbatim with zero validation, so it was vetted
|
|
@@ -1079,7 +1094,7 @@ export class ClaudeSession {
|
|
|
1079
1094
|
// stay owed and are swept once more when it can no longer be alive.
|
|
1080
1095
|
_removeTemporaryPlans() {
|
|
1081
1096
|
if (!this._tempPlans?.size) return;
|
|
1082
|
-
const owed = { plansDirs: this._tempPlansDirs, since: this._tempSince, ended: false, last: false };
|
|
1097
|
+
const owed = { plansDirs: this._tempPlansDirs, since: this._tempSince, before: this._tempPlansBefore, ended: false, last: false };
|
|
1083
1098
|
for (const path of this._tempPlans) _temporaryPlansOwed.set(path, owed);
|
|
1084
1099
|
this._tempPlans.clear();
|
|
1085
1100
|
Promise.resolve(this.pumpPromise).catch(() => {}).then(() => {
|
|
@@ -1098,6 +1113,7 @@ export class ClaudeSession {
|
|
|
1098
1113
|
this._tempLive = false;
|
|
1099
1114
|
this._tempOver = false;
|
|
1100
1115
|
this._tempSince = 0;
|
|
1116
|
+
this._tempPlansBefore = null;
|
|
1101
1117
|
}
|
|
1102
1118
|
|
|
1103
1119
|
// Whether this message makes, keeps or may not make the conversation a
|
|
@@ -2811,6 +2827,17 @@ export class ClaudeSession {
|
|
|
2811
2827
|
} catch {}
|
|
2812
2828
|
}
|
|
2813
2829
|
|
|
2830
|
+
// The panel echoes the id of the greeting it showed when this conversation opened: the model is
|
|
2831
|
+
// told once, with this prompt (the UserPromptSubmit hook in _startQuery). A slash command takes none.
|
|
2832
|
+
// (A prompt the person typed in the panel is also them being here, whether or not the user-level hooks are installed.)
|
|
2833
|
+
if (this.panel && !warmOnly && msg.typed === true && typeof prompt === 'string' && prompt.trim() && typeof deps.greetingActivity === 'function') {
|
|
2834
|
+
try { deps.greetingActivity({ cwd: cwd || this.cwd || null, words: prompt, temporary: this.temporary === true }); } catch { /* the prompt goes on */ }
|
|
2835
|
+
}
|
|
2836
|
+
if (this.panel && !warmOnly && typeof msg.greetingId === 'string' && typeof deps.greetingNote === 'function') {
|
|
2837
|
+
try { this._greetingNote = String(deps.greetingNote(msg.greetingId, { skip: typeof prompt === 'string' && prompt.trimStart().startsWith('/') }) || ''); }
|
|
2838
|
+
catch { this._greetingNote = ''; }
|
|
2839
|
+
}
|
|
2840
|
+
|
|
2814
2841
|
// SynaBun skill injection runs FIRST; unrecognized /commands pass through to the CLI
|
|
2815
2842
|
if (prompt && prompt.startsWith('/')) {
|
|
2816
2843
|
try {
|
|
@@ -45,6 +45,32 @@ const CACHE_TTL_MS = 10 * 60 * 1000;
|
|
|
45
45
|
let _cache = { at: 0, key: '', models: [] };
|
|
46
46
|
let _inflight = null;
|
|
47
47
|
|
|
48
|
+
// Who else keeps a copy of this list (the Assistant's model catalog). Told when a
|
|
49
|
+
// discovery returns a list that differs from the one before it, so a copy is
|
|
50
|
+
// dropped the moment the picker's own source changes: after a CLI update, or
|
|
51
|
+
// when the account's models change. The first discovery after a start counts.
|
|
52
|
+
const _changeListeners = new Set();
|
|
53
|
+
|
|
54
|
+
export function onClaudeModelsChanged(listener) {
|
|
55
|
+
if (typeof listener !== 'function') return () => {};
|
|
56
|
+
_changeListeners.add(listener);
|
|
57
|
+
return () => { _changeListeners.delete(listener); };
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// What makes two lists the same list for a picker: ids in order, the model each
|
|
61
|
+
// runs as, the label, the context window and the effort levels.
|
|
62
|
+
export function claudeModelsSignature(models) {
|
|
63
|
+
return JSON.stringify((Array.isArray(models) ? models : []).map(m => [
|
|
64
|
+
m?.id || '', m?.resolvedModel || '', m?.label || '', m?.contextWindow || 0, (m?.effortLevels || []).join(','),
|
|
65
|
+
]));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function notifyModelsChanged(models) {
|
|
69
|
+
for (const listener of [..._changeListeners]) {
|
|
70
|
+
try { listener(models); } catch {}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
48
74
|
// What a cache keyed on "the CLI" has to key on. An update never changes the
|
|
49
75
|
// configured path: the native installer and Homebrew re-point a symlink at a new
|
|
50
76
|
// version directory, and npm rewrites the entrypoint in place. The resolved target
|
|
@@ -262,7 +288,7 @@ export function queryClaudeCliModels(claudeBin, { cwd, timeoutMs = DISCOVERY_TIM
|
|
|
262
288
|
// Cached discovery. `source` lets the UI distinguish a verified list from the
|
|
263
289
|
// baked-in fallback. Cache is keyed on the binary's identity, so switching the
|
|
264
290
|
// configured CLI (Settings > Terminal) or updating it re-discovers.
|
|
265
|
-
export async function discoverClaudeModels(claudeBin, { force = false, cwd } = {}) {
|
|
291
|
+
export async function discoverClaudeModels(claudeBin, { force = false, cwd, query = queryClaudeCliModels } = {}) {
|
|
266
292
|
const bin = String(claudeBin || '');
|
|
267
293
|
const key = binaryIdentity(bin);
|
|
268
294
|
const fresh = _cache.models.length
|
|
@@ -273,10 +299,12 @@ export async function discoverClaudeModels(claudeBin, { force = false, cwd } = {
|
|
|
273
299
|
|
|
274
300
|
_inflight = (async () => {
|
|
275
301
|
try {
|
|
276
|
-
const raw = await
|
|
302
|
+
const raw = await query(bin, { cwd });
|
|
277
303
|
const models = normalizeClaudeModels(raw);
|
|
278
304
|
if (models.length) {
|
|
305
|
+
const changed = claudeModelsSignature(models) !== claudeModelsSignature(_cache.models);
|
|
279
306
|
_cache = { at: Date.now(), key, models };
|
|
307
|
+
if (changed) notifyModelsChanged(models);
|
|
280
308
|
return { source: 'cli', models };
|
|
281
309
|
}
|
|
282
310
|
return { source: 'fallback', models: [...CLAUDE_FALLBACK_MODELS] };
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
// one sentence the model is told, and the plan files Claude Code writes for it
|
|
8
8
|
// whatever the options say.
|
|
9
9
|
|
|
10
|
-
import { lstatSync, readFileSync, realpathSync, statSync, unlinkSync } from 'node:fs';
|
|
10
|
+
import { lstatSync, readFileSync, readdirSync, realpathSync, statSync, unlinkSync } from 'node:fs';
|
|
11
11
|
import { homedir } from 'node:os';
|
|
12
|
-
import { dirname, extname, isAbsolute, join, relative, resolve } from 'node:path';
|
|
12
|
+
import { basename, dirname, extname, isAbsolute, join, relative, resolve } from 'node:path';
|
|
13
13
|
|
|
14
14
|
// Set in the environment of a temporary session's process. SynaBun's Claude
|
|
15
15
|
// Code hooks read it (hooks/claude-code/shared.mjs, isTemporaryChat) and store,
|
|
@@ -386,6 +386,41 @@ export function plansDirsOf(env, { cwd = '', settings = null } = {}) {
|
|
|
386
386
|
const real = (p) => { try { return realpathSync(p); } catch { return resolve(p); } };
|
|
387
387
|
const listOf = (dirs) => (Array.isArray(dirs) ? dirs : [dirs]).filter(Boolean);
|
|
388
388
|
|
|
389
|
+
// Resolve existing ancestors too, when the plans directory does not exist yet.
|
|
390
|
+
function realPlanFolder(dir) {
|
|
391
|
+
const full = resolve(dir);
|
|
392
|
+
try { return realpathSync(full); } catch {
|
|
393
|
+
const parent = dirname(full);
|
|
394
|
+
return parent === full ? full : join(realPlanFolder(parent), basename(full));
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* Files present before the session starts. Filesystem creation timestamps can
|
|
400
|
+
* lag Date.now(), so they cannot reliably identify a newly created plan.
|
|
401
|
+
* Device/inode identities also preserve existing files after edits or renames.
|
|
402
|
+
* Missing folders start empty; unreadable folders remain unclassified.
|
|
403
|
+
*/
|
|
404
|
+
export function snapshotPlanFiles(plansDirs) {
|
|
405
|
+
const before = { roots: new Set(), files: new Set() };
|
|
406
|
+
for (const dir of listOf(plansDirs)) {
|
|
407
|
+
const root = realPlanFolder(dir);
|
|
408
|
+
try {
|
|
409
|
+
for (const name of readdirSync(root)) {
|
|
410
|
+
try { before.files.add(planFileIdentity(lstatSync(join(root, name)))); } catch (err) {
|
|
411
|
+
if (err?.code !== 'ENOENT' && err?.code !== 'ENOTDIR') throw err;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
before.roots.add(root);
|
|
415
|
+
} catch (err) {
|
|
416
|
+
if (err?.code === 'ENOENT') before.roots.add(root);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
return before;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
const planFileIdentity = (stat) => `${stat.dev}:${stat.ino}`;
|
|
423
|
+
|
|
389
424
|
/**
|
|
390
425
|
* The plan file a tool call of the session names, when it is one: a Write or
|
|
391
426
|
* Edit of a Markdown file directly in a plans folder, or the file an
|
|
@@ -407,12 +442,13 @@ export function planFileOfToolCall(block, plansDirs) {
|
|
|
407
442
|
* a plans folder whatever the session's options say (`plansDirectory` only
|
|
408
443
|
* moves it inside the project), so the bridge removes it once the session's
|
|
409
444
|
* process has ended. Only a regular Markdown file that is really in one of the
|
|
410
|
-
* plans folders and was
|
|
411
|
-
*
|
|
445
|
+
* plans folders and was absent from the pre-session snapshot: a plan that was
|
|
446
|
+
* there before is someone else's. Callers without a snapshot retain the
|
|
447
|
+
* timestamp check.
|
|
412
448
|
* @returns {{ removed: string[], failed: string[] }} `failed`: still there
|
|
413
449
|
* because the removal itself did not work; the caller keeps them and tries again
|
|
414
450
|
*/
|
|
415
|
-
export function removeTemporaryPlanFiles(paths, { plansDirs, plansDir, since }) {
|
|
451
|
+
export function removeTemporaryPlanFiles(paths, { plansDirs, plansDir, since, before }) {
|
|
416
452
|
const removed = [];
|
|
417
453
|
const failed = [];
|
|
418
454
|
const roots = new Set();
|
|
@@ -422,8 +458,11 @@ export function removeTemporaryPlanFiles(paths, { plansDirs, plansDir, since })
|
|
|
422
458
|
if (extname(path).toLowerCase() !== '.md') continue;
|
|
423
459
|
const stat = lstatSync(path);
|
|
424
460
|
if (!stat.isFile()) continue; // not a link, not a folder
|
|
425
|
-
|
|
426
|
-
if (!(
|
|
461
|
+
const parent = realpathSync(dirname(path));
|
|
462
|
+
if (!roots.has(parent)) continue;
|
|
463
|
+
if (before) {
|
|
464
|
+
if (!before.roots.has(parent) || before.files.has(planFileIdentity(stat))) continue;
|
|
465
|
+
} else if (!(stat.birthtimeMs >= since)) continue;
|
|
427
466
|
unlinkSync(path);
|
|
428
467
|
removed.push(path);
|
|
429
468
|
} catch (err) {
|