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
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
// ═══════════════════════════════════════════
|
|
2
|
+
// SynaBun — Assistant: test density
|
|
3
|
+
// ═══════════════════════════════════════════
|
|
4
|
+
//
|
|
5
|
+
// How much testing SynaBun asks of the workers the Assistant dispatches. The
|
|
6
|
+
// user picks a level next to the permission toggle in the Assistant's
|
|
7
|
+
// composer; it is stored per session like the route mode (the runtime's
|
|
8
|
+
// record.testDensity, null = the default) and read by the dispatcher when it
|
|
9
|
+
// composes a worker's prompt, so a stale brain prompt never changes what the
|
|
10
|
+
// worker gets. This module is the wording and the rules: the TESTING block of
|
|
11
|
+
// a worker brief, the line the brain's prompt carries, the "[SynaBun Tests]"
|
|
12
|
+
// line a change sends, and when a "Not tested" result is not a claim to check.
|
|
13
|
+
// Pure module: no I/O, no server imports.
|
|
14
|
+
|
|
15
|
+
export const TEST_DENSITIES = Object.freeze(['none', 'light', 'standard', 'thorough']);
|
|
16
|
+
export const DEFAULT_TEST_DENSITY = 'light';
|
|
17
|
+
export const TEST_DENSITY_LABELS = Object.freeze({ none: 'None', light: 'Light', standard: 'Standard', thorough: 'Thorough' });
|
|
18
|
+
export const TESTS_HEADER = '[SynaBun Tests]';
|
|
19
|
+
|
|
20
|
+
/** A known level, else `fallback` (the default level unless the caller wants to tell "not set" apart). */
|
|
21
|
+
export function normalizeTestDensity(value, fallback = DEFAULT_TEST_DENSITY) {
|
|
22
|
+
const key = String(value ?? '').trim().toLowerCase();
|
|
23
|
+
return TEST_DENSITIES.includes(key) ? key : fallback;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function testDensityLabel(level) {
|
|
27
|
+
return TEST_DENSITY_LABELS[normalizeTestDensity(level)];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// The classes whose work is code. A dispatch with no class is treated as one of them.
|
|
31
|
+
const TESTING_CLASSES = new Set(['code', 'complex', 'quick']);
|
|
32
|
+
|
|
33
|
+
/** Does a run of this class get the TESTING block? (review, research, browser, computer, automation, design and media runs do not.) */
|
|
34
|
+
export function testingApplies(taskClass) {
|
|
35
|
+
const cls = String(taskClass ?? '').trim();
|
|
36
|
+
return !cls || TESTING_CLASSES.has(cls);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const TESTING_RULES = Object.freeze({
|
|
40
|
+
none: [
|
|
41
|
+
'Do not write tests and do not run test suites.',
|
|
42
|
+
'Only confirm the change loads: a syntax or type check of the files you touched, nothing more.',
|
|
43
|
+
'No browser, visual or live checks.',
|
|
44
|
+
'In ## Result say "Not tested" and list what a person should check.',
|
|
45
|
+
],
|
|
46
|
+
light: [
|
|
47
|
+
'Run only the existing test files that directly cover the code you changed: a few files, never the whole suite.',
|
|
48
|
+
'Add a test only for a bug fix (one regression test) or for new logic that is easy to get wrong; at most one new test file.',
|
|
49
|
+
'No browser, visual or live checks unless TASK names one.',
|
|
50
|
+
'In ## Result list what you ran and what you did not verify.',
|
|
51
|
+
],
|
|
52
|
+
standard: [
|
|
53
|
+
'Add focused tests for the behavior you add or change.',
|
|
54
|
+
'Run the test files for the area you touched, then that package\'s regular non-browser suite once at the end.',
|
|
55
|
+
'Browser or visual checks only when the change is user-facing and TASK asks for one.',
|
|
56
|
+
'In ## Result list what you ran and what you did not verify.',
|
|
57
|
+
],
|
|
58
|
+
thorough: [
|
|
59
|
+
'Cover the change with unit and integration tests, including edge cases and failure paths; add or update browser tests for user-facing changes.',
|
|
60
|
+
'Run the whole suite and fix what you broke.',
|
|
61
|
+
'Verify the result live where the environment allows.',
|
|
62
|
+
'In ## Result list everything you ran and its outcome.',
|
|
63
|
+
],
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
/** What workers do at a level, in one sentence (the brain's lines and a follow-up turn's). */
|
|
67
|
+
const TESTING_SUMMARY = Object.freeze({
|
|
68
|
+
none: 'workers write no tests and run no suites; they only check that the change loads and report "Not tested"',
|
|
69
|
+
light: 'workers run only the test files that cover the change and add a test only for a bug fix or logic that is easy to get wrong',
|
|
70
|
+
standard: 'workers add focused tests, run the test files of the area and then the package\'s regular non-browser suite once',
|
|
71
|
+
thorough: 'workers cover the change with unit and integration tests, run the whole suite and verify live where they can',
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
export function testDensitySummary(level) {
|
|
75
|
+
return TESTING_SUMMARY[normalizeTestDensity(level)];
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* The TESTING block of a worker brief (assistant-task-prompt.js buildTaskPrompt): the one place
|
|
80
|
+
* SynaBun tells a worker how much to test. '' for a class that gets none, and when no level is given.
|
|
81
|
+
*/
|
|
82
|
+
export function testingBlock(level, taskClass = null) {
|
|
83
|
+
if (level === null || level === undefined || level === '' || !testingApplies(taskClass)) return '';
|
|
84
|
+
const id = normalizeTestDensity(level);
|
|
85
|
+
return [
|
|
86
|
+
`TESTING (the user's Test density setting: ${TEST_DENSITY_LABELS[id]}). Binding: it overrides any heavier test or verification instruction in TASK or CONTEXT. Exception: when writing or running tests is itself what TASK asks you to deliver, do that work in full.`,
|
|
87
|
+
...TESTING_RULES[id].map((rule) => `- ${rule}`),
|
|
88
|
+
].join('\n');
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** A follow-up turn of a run whose level changed since its brief: the new rules, in place of the brief's. */
|
|
92
|
+
export function testingFollowUpLine(level) {
|
|
93
|
+
const id = normalizeTestDensity(level);
|
|
94
|
+
return `TESTING changed (the user's Test density setting is now ${TEST_DENSITY_LABELS[id]}; this replaces the TESTING block of your brief): ${TESTING_RULES[id].join(' ')}`;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** At these levels the brain reports what was not tested instead of verifying it. */
|
|
98
|
+
export function reportsUntested(level) {
|
|
99
|
+
const id = normalizeTestDensity(level);
|
|
100
|
+
return id === 'none' || id === 'light';
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* The entry of the brain's system prompt (assistant-persona.js, Rails).
|
|
105
|
+
* `where`: how the prompt names the control (a chat channel has no composer).
|
|
106
|
+
*/
|
|
107
|
+
export function testDensityPersonaLine(level, { where = 'next to the permission toggle' } = {}) {
|
|
108
|
+
const id = normalizeTestDensity(level);
|
|
109
|
+
return `- Test density: ${TEST_DENSITY_LABELS[id]} (the user's setting, ${where}): ${TESTING_SUMMARY[id]}. SynaBun adds the matching binding TESTING rules to every code / complex / quick worker brief. `
|
|
110
|
+
+ 'Do not write test or verification requirements into a task beyond what the user asked for in this request, and do not dispatch a run whose only purpose is to test another run at None or Light unless the user asks. '
|
|
111
|
+
+ 'Follow the same level in your own direct edits. At None or Light, report what was not tested instead of verifying it yourself. '
|
|
112
|
+
+ `A change of level arrives as a "${TESTS_HEADER}" line.`;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** The line a running brain gets when the level changes (like the router's "[SynaBun Router]" line). */
|
|
116
|
+
export function testDensityStamp(level) {
|
|
117
|
+
const id = normalizeTestDensity(level);
|
|
118
|
+
return `${TESTS_HEADER} Test density: ${TEST_DENSITY_LABELS[id]} - ${TESTING_SUMMARY[id]}. Do not write heavier test or verification requirements into a task, and follow the same level in your own edits.`;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// "Not tested", "untested", "no tests were run", "did not run tests".
|
|
122
|
+
const NOT_TESTED_RE = /\b(?:not|un)[\s-]?tested\b|\bno tests? (?:were |was )?(?:run|ran|written|added)\b|\b(?:did not|didn't|have not|haven't) (?:run|write) (?:any |the )?tests?\b/i;
|
|
123
|
+
// A report that tests ran green: "tests pass", "the suite is green", "12 tests passed", "all specs passing".
|
|
124
|
+
const TESTS_PASSED_RE = /\b(?:tests?|suites?|specs?)\b[^.\n]{0,40}\b(?:pass(?:es|ed|ing)?|green|succeed(?:s|ed)?)\b|\b\d+\s+pass(?:ed|ing)?\b/i;
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Is the worker-claim question left out for this turn? Only at None, for a run that got the
|
|
128
|
+
* TESTING block: the worker was told not to test and to say "Not tested", so a "done" with no test
|
|
129
|
+
* output is the report that was asked for, not a claim to check. Still judged, at every level: a
|
|
130
|
+
* message that says tests passed, and a turn in which a command or a tool failed.
|
|
131
|
+
* `text`: the worker's final message; `evidence`: assistant-evidence.js evidenceSnapshot.
|
|
132
|
+
*/
|
|
133
|
+
export function claimCheckWaived({ level, taskClass = null, text = '', evidence = null } = {}) {
|
|
134
|
+
if (level === null || level === undefined || level === '') return false;
|
|
135
|
+
if (normalizeTestDensity(level) !== 'none' || !testingApplies(taskClass)) return false;
|
|
136
|
+
const message = String(text || '');
|
|
137
|
+
if (!NOT_TESTED_RE.test(message) || TESTS_PASSED_RE.test(message)) return false;
|
|
138
|
+
const commands = Array.isArray(evidence?.commands) ? evidence.commands : [];
|
|
139
|
+
const results = Array.isArray(evidence?.results) ? evidence.results : [];
|
|
140
|
+
if (commands.some((c) => c?.exit === 'error') || results.some((r) => r?.is_error === true)) return false;
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// ═══════════════════════════════════════════
|
|
2
|
+
// SynaBun — Assistant user context: every number and name in one place
|
|
3
|
+
// ═══════════════════════════════════════════
|
|
4
|
+
//
|
|
5
|
+
// The user-context engine (assistant-user-context.js: what the Assistant knows
|
|
6
|
+
// about the user, the nudges from recent conversations, the learning loop)
|
|
7
|
+
// reads all of its limits from here. Pure: no I/O, no SynaBun imports.
|
|
8
|
+
|
|
9
|
+
/** `assistant-config.json` → `userContext`: the three layers, all on by default. */
|
|
10
|
+
export const USER_CONTEXT_DEFAULTS = Object.freeze({ knowledge: true, nudges: true, trace: true });
|
|
11
|
+
|
|
12
|
+
/** The settings as booleans; anything that is not exactly `false` reads as on. */
|
|
13
|
+
export function normalizeUserContext(raw) {
|
|
14
|
+
const value = raw && typeof raw === 'object' ? raw : {};
|
|
15
|
+
return { knowledge: value.knowledge !== false, nudges: value.nudges !== false, trace: value.trace !== false };
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Where the engine keeps what it learns: two child categories, created on first use.
|
|
19
|
+
export const CATEGORIES = Object.freeze({
|
|
20
|
+
knowledge: 'user-knowledge',
|
|
21
|
+
knowledgeParent: 'communication-style',
|
|
22
|
+
threads: 'assistant-threads',
|
|
23
|
+
threadsParent: 'conversations',
|
|
24
|
+
});
|
|
25
|
+
export const CATEGORY_DESCRIPTIONS = Object.freeze({
|
|
26
|
+
knowledge: 'One statement per memory about how the user wants the Assistant to work: line 1 is the statement, then Evidence lines and a "Seen N× · confidence X · facet F" line. Written by the SynaBun Assistant\'s learning loop; edit line 1 to correct a statement. Do not store session summaries here.',
|
|
27
|
+
knowledgeParent: 'How the user communicates and wants work done: preferences, corrections, standing instructions.',
|
|
28
|
+
threads: 'One memory per SynaBun Assistant conversation, rewritten in place by the harness: title, time span, the last asks, runs with outcomes and open items. Do not store anything else here.',
|
|
29
|
+
threadsParent: 'Records of past conversations and sessions.',
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
/** What a statement is about. A memory's `subcategory` is one of these. */
|
|
33
|
+
export const FACETS = Object.freeze(['instructions', 'expectations', 'decisions', 'corrections', 'expertise', 'rules', 'goals']);
|
|
34
|
+
/** The memory kinds a statement can have. */
|
|
35
|
+
export const KNOWLEDGE_KINDS = Object.freeze(['preference', 'decision', 'fact']);
|
|
36
|
+
/** facet → memory kind. */
|
|
37
|
+
export const FACET_KIND = Object.freeze({
|
|
38
|
+
instructions: 'preference', expectations: 'preference', corrections: 'preference', rules: 'preference',
|
|
39
|
+
decisions: 'decision', expertise: 'fact', goals: 'fact',
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
/** The digest in the system-level slot. */
|
|
43
|
+
export const DIGEST = Object.freeze({
|
|
44
|
+
maxTokens: 300,
|
|
45
|
+
perFacet: 3,
|
|
46
|
+
statementMaxChars: 160,
|
|
47
|
+
// Rows read from the store before ranking (newest first): bounds the work, not the digest.
|
|
48
|
+
readLimit: 400,
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
/** The per-turn block. */
|
|
52
|
+
export const TURN_BLOCK = Object.freeze({
|
|
53
|
+
firstTokens: 120,
|
|
54
|
+
laterTokens: 80,
|
|
55
|
+
// One item: short enough that the later budget holds the header and one of them.
|
|
56
|
+
itemMaxChars: 160,
|
|
57
|
+
// Deltas (knowledge learned since the digest was frozen) said in one turn.
|
|
58
|
+
deltasPerTurn: 2,
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
/** Nudges from recent interactions. */
|
|
62
|
+
export const NUDGES = Object.freeze({
|
|
63
|
+
// The last thread is offered at session open when it is in the same project, or this recent.
|
|
64
|
+
lastThreadHours: 24,
|
|
65
|
+
// A pause this long between two turns of one conversation is said once.
|
|
66
|
+
gapHours: 4,
|
|
67
|
+
openItemsShown: 2,
|
|
68
|
+
// Significant words an open item shares with the prompt before it counts as overlapping.
|
|
69
|
+
overlapWords: 2,
|
|
70
|
+
// Keys kept in assistant-user-context.json.
|
|
71
|
+
nudgedKept: 500,
|
|
72
|
+
threadsKept: 300,
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
/** The learning loop. */
|
|
76
|
+
export const LEARN = Object.freeze({
|
|
77
|
+
minChars: 16,
|
|
78
|
+
// A paste this long, or this many lines, is not the user's typed words.
|
|
79
|
+
pasteChars: 200,
|
|
80
|
+
pasteLines: 4,
|
|
81
|
+
messageClip: 2000,
|
|
82
|
+
replyClip: 600,
|
|
83
|
+
maxSentences: 12,
|
|
84
|
+
sentenceClip: 300,
|
|
85
|
+
knownStatements: 6,
|
|
86
|
+
// Jev thresholds: a durable signal, a match with a known statement, a contradiction
|
|
87
|
+
// (the bar automatic supersession uses), the writer's statement adding nothing.
|
|
88
|
+
durableMin: 0.8,
|
|
89
|
+
matchMin: 0.7,
|
|
90
|
+
contradictMin: 0.9,
|
|
91
|
+
faithfulMin: 0.8,
|
|
92
|
+
evidenceMax: 3,
|
|
93
|
+
quoteMax: 200,
|
|
94
|
+
// Per session.
|
|
95
|
+
gateCap: 30,
|
|
96
|
+
writerCap: 8,
|
|
97
|
+
writeCap: 6,
|
|
98
|
+
hashesKept: 60,
|
|
99
|
+
timeoutMs: 4000,
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
/** The thread record (one memory per conversation). */
|
|
103
|
+
export const THREAD = Object.freeze({
|
|
104
|
+
asks: 6,
|
|
105
|
+
askClip: 120,
|
|
106
|
+
runs: 8,
|
|
107
|
+
openItems: 6,
|
|
108
|
+
itemClip: 160,
|
|
109
|
+
// The memory is rewritten this long after the conversation's last turn ended.
|
|
110
|
+
writeDebounceMs: 45_000,
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
/** The statement writer (a Claude one-shot on the cheapest Claude model). */
|
|
114
|
+
export const WRITER = Object.freeze({
|
|
115
|
+
timeoutMs: 20_000,
|
|
116
|
+
// The CLI's own alias: used when the catalog names no cheaper Claude model.
|
|
117
|
+
fallbackModel: 'haiku',
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
/** The repo's estimator (mcp-server memory-retrieval `estimateTokens`): UTF-8 bytes / 3, which over-counts. */
|
|
121
|
+
export function estimateTokens(value) {
|
|
122
|
+
return Math.ceil(Buffer.byteLength(String(value ?? ''), 'utf8') / 3);
|
|
123
|
+
}
|