synabun 2.0.0-beta → 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +65 -0
- package/NOTICE +5 -0
- package/README.md +1 -1
- package/THIRD-PARTY-LICENSES.md +51 -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/launcher.mjs +40 -0
- package/lib/claude-hooks.js +61 -8
- package/lib/client-config-repair.js +4 -3
- package/lib/data-home-migration.js +4 -0
- package/lib/desktop-pwa.js +206 -0
- package/lib/external-tools.js +221 -0
- package/lib/first-launch-protection.js +5 -0
- package/lib/packaged-runtime.js +110 -0
- package/lib/start-launcher.js +1396 -0
- package/mcp-server/package-lock.json +2 -2
- package/mcp-server/package.json +1 -3
- package/neural-interface/i18n/en.json +1540 -154
- package/neural-interface/i18n/pt-BR.json +1538 -153
- 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-envelope.js +9 -6
- 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/augmented-path.js +23 -3
- package/neural-interface/lib/browser-background-tab.js +134 -0
- package/neural-interface/lib/browser-language.js +83 -0
- package/neural-interface/lib/browser-screenshot.js +678 -61
- package/neural-interface/lib/claude-agent-bridge.js +87 -153
- package/neural-interface/lib/claude-executable.js +241 -0
- package/neural-interface/lib/claude-model-catalog.js +82 -93
- 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-binary-runtime.js +69 -337
- package/neural-interface/lib/native-loop-providers.js +40 -49
- package/neural-interface/lib/offline-page.js +54 -0
- 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/session-title-generator.js +5 -0
- package/neural-interface/lib/synabun-update-plan.js +19 -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 -253
- package/neural-interface/package.json +13 -2
- package/neural-interface/public/install-app.html +34 -0
- package/neural-interface/public/manifest.json +2 -0
- package/neural-interface/public/offline.html +402 -66
- package/neural-interface/public/onboarding.html +264 -147
- 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 +26 -64
- 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-rack-styles.js +0 -3
- package/neural-interface/public/shared/assistant/asst-render.js +219 -67
- 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 +162 -6
- 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/command-runner-model.js +30 -0
- 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 +169 -170
- 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 +62 -0
- package/neural-interface/public/shared/pwa-install.css +12 -0
- package/neural-interface/public/shared/pwa-install.js +127 -0
- 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-rules.js +160 -0
- package/neural-interface/public/shared/settings/settings-user-context.js +154 -0
- package/neural-interface/public/shared/start-bridge.js +802 -0
- package/neural-interface/public/shared/styleguide/sg-colors.js +5 -2
- package/neural-interface/public/shared/styleguide/sg-import-export.js +4 -3
- package/neural-interface/public/shared/styleguide/sg-kit.js +4 -1
- package/neural-interface/public/shared/styleguide/sg-panel.js +9 -1
- package/neural-interface/public/shared/styleguide/sg-typography.js +1 -0
- package/neural-interface/public/shared/styles.css +2219 -1117
- package/neural-interface/public/shared/synabun-mascot.js +20 -56
- package/neural-interface/public/shared/term-ready.js +307 -0
- package/neural-interface/public/shared/tunnel-view.js +167 -0
- package/neural-interface/public/shared/ui-claude-panel.js +160 -19
- package/neural-interface/public/shared/ui-command-runner.js +251 -468
- 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-judgments.js +1 -1
- package/neural-interface/public/shared/ui-keybinds.js +4 -0
- package/neural-interface/public/shared/ui-loading.js +367 -12
- package/neural-interface/public/shared/ui-menubar.js +21 -55
- 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 +491 -547
- 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 +153 -149
- 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 +3 -1
- package/neural-interface/public/variant/2d/main.js +2 -1
- package/neural-interface/public/variant/3d/main.js +2 -1
- 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/rebuild-pty.js +15 -12
- package/neural-interface/scripts/vendor-codemirror-entry.js +121 -0
- package/neural-interface/server.js +1092 -1212
- package/neural-interface/templates/rulesets/README.md +1 -1
- package/package.json +13 -7
- package/postinstall.js +11 -81
- package/setup.js +111 -6
- package/benchmarks/browser-live-results.json +0 -79
- package/benchmarks/browser-v2-results.json +0 -258
- package/docs/browser-v2.md +0 -109
- package/docs/hook-integrity.md +0 -89
- package/docs/judgments.md +0 -182
- package/docs/style-guide.md +0 -246
- 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/scripts/audit-claude-hook-usage.mjs +0 -12
- package/scripts/audit-memory-duplicates.mjs +0 -44
- package/scripts/measure-claude-hook-overhead.mjs +0 -77
- package/scripts/recover-user-config.mjs +0 -254
- package/skills/synabun/synabunicon.png +0 -0
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
} from './cdx-plan.js';
|
|
14
14
|
import { fetchBlobNamespace, putBlob, deleteBlob, flushBlobs } from '../blob-store.js';
|
|
15
15
|
import { state as appState, on as appOn } from '../state.js';
|
|
16
|
+
import { forgetGreeting, mountGreeting } from '../greeting/greeting-card.js';
|
|
16
17
|
import { fetchProjects, searchSessions } from '../api.js';
|
|
17
18
|
import {
|
|
18
19
|
getCodexModelName,
|
|
@@ -24,6 +25,8 @@ import { syncSidepanelLayout, focusSidepanel, isHostedSessionFocused } from '../
|
|
|
24
25
|
import { notify, NOTIF_TYPE } from '../ui-notifications.js';
|
|
25
26
|
import { createStickyScrollController } from '../ui-scroll-follow.js';
|
|
26
27
|
import { requestGeneratedSessionTitle } from '../session-title.js';
|
|
28
|
+
import { fileLinkText } from '../ui-file-links.js';
|
|
29
|
+
import { WORKER_END_CLASS, backToAssistant, buildWorkerEndCard, endWorkerRunOnClose, forgetWorkerEnd } from '../ui-worker-end.js';
|
|
27
30
|
import {
|
|
28
31
|
CODEX_COMMANDS, CODEX_COMMAND_BY_NAME, parseCodexCommand, codexCommandHints,
|
|
29
32
|
capabilityAvailability, latestCompletedCodexText, configValue, configRestriction,
|
|
@@ -467,6 +470,8 @@ function buildWsCallbacks(tab, options = {}) {
|
|
|
467
470
|
clearTranscript();
|
|
468
471
|
}
|
|
469
472
|
restoreServerRequests(heldRequests);
|
|
473
|
+
// The history rebuilt the transcript: a dispatched worker's end card goes back at its end.
|
|
474
|
+
placeWorkerEnd(tab);
|
|
470
475
|
if (options.historyOnly) {
|
|
471
476
|
tab._automationHydrated = true;
|
|
472
477
|
closeAutomationHistorySocket(tab);
|
|
@@ -1247,6 +1252,7 @@ function writeThreadSnapshot(tab, { force = false } = {}) {
|
|
|
1247
1252
|
const accountId = String(tab.accountId || 'default');
|
|
1248
1253
|
const snapshotNodes = [...messagesEl.children].filter((node) => (
|
|
1249
1254
|
!node.classList?.contains('cxp-empty') && !node.classList?.contains('cxp-thinking')
|
|
1255
|
+
&& !node.classList?.contains(WORKER_END_CLASS)
|
|
1250
1256
|
));
|
|
1251
1257
|
const ownsEveryNode = codexTranscriptNodesHaveOwnership(snapshotNodes, { threadId, accountId });
|
|
1252
1258
|
if (!ownsEveryNode) {
|
|
@@ -1257,6 +1263,8 @@ function writeThreadSnapshot(tab, { force = false } = {}) {
|
|
|
1257
1263
|
}
|
|
1258
1264
|
const snapshotEl = messagesEl.cloneNode(true);
|
|
1259
1265
|
stripMcpAppRuntime(snapshotEl);
|
|
1266
|
+
// A worker's end card is drawn again from its run, never restored from markup.
|
|
1267
|
+
snapshotEl.querySelectorAll(`.${WORKER_END_CLASS}`).forEach((node) => node.remove());
|
|
1260
1268
|
const html = snapshotEl.innerHTML || '';
|
|
1261
1269
|
if (!html.trim()) return;
|
|
1262
1270
|
const ownedItemNodes = snapshotNodes.filter((node) => node.dataset?.itemId);
|
|
@@ -1506,6 +1514,11 @@ function storedAutoAccept() {
|
|
|
1506
1514
|
function releaseAutomationForManualUse(tab = _boundTab) {
|
|
1507
1515
|
const runId = detachTerminalCodexAutomation(tab, storedAutoAccept());
|
|
1508
1516
|
if (!runId) return false;
|
|
1517
|
+
// While the tab still shows the run's thread, the dock's Focus on the run raises it (cdx-panel.js).
|
|
1518
|
+
tab.releasedRunId = runId;
|
|
1519
|
+
forgetWorkerEnd(runId);
|
|
1520
|
+
tab._workerEnd = null;
|
|
1521
|
+
placeWorkerEnd(tab);
|
|
1509
1522
|
window.dispatchEvent(new CustomEvent('native-loop:dismissed', { detail: { runId } }));
|
|
1510
1523
|
if (isActiveTab(tab)) syncToolbarState();
|
|
1511
1524
|
saveTabs();
|
|
@@ -2843,6 +2856,7 @@ export function createTab(saved = {}, { autoSwitch = true } = {}) {
|
|
|
2843
2856
|
automationRunId,
|
|
2844
2857
|
automationActive: !!saved.automationActive,
|
|
2845
2858
|
automationOwnerId: saved.automationOwnerId || null,
|
|
2859
|
+
releasedRunId: automationRunId ? null : (saved.releasedRunId || null),
|
|
2846
2860
|
};
|
|
2847
2861
|
tab.messagesEl = createMessagesEl(tab);
|
|
2848
2862
|
tab.pillEl = createTrayPill(tab);
|
|
@@ -2870,15 +2884,18 @@ export function closeTab(idx, { detachAutomation = false } = {}) {
|
|
|
2870
2884
|
const tab = _tabs[idx];
|
|
2871
2885
|
teardownMcpApps(tab, 'Tab closed');
|
|
2872
2886
|
if (tab.automationRunId && !detachAutomation) {
|
|
2887
|
+
const runId = tab.automationRunId;
|
|
2873
2888
|
window.dispatchEvent(new CustomEvent('native-loop:dismissed', {
|
|
2874
|
-
detail: { runId
|
|
2889
|
+
detail: { runId },
|
|
2875
2890
|
}));
|
|
2876
|
-
|
|
2891
|
+
// A worker that finished its task is completed; any other run is stopped.
|
|
2892
|
+
endWorkerRunOnClose(runId, () => fetch('/api/loop/stop', {
|
|
2877
2893
|
method: 'POST',
|
|
2878
2894
|
headers: { 'Content-Type': 'application/json' },
|
|
2879
|
-
body: JSON.stringify({ runId
|
|
2880
|
-
}).catch(() => {});
|
|
2895
|
+
body: JSON.stringify({ runId }),
|
|
2896
|
+
}).catch(() => {}));
|
|
2881
2897
|
}
|
|
2898
|
+
if (tab.automationRunId) forgetWorkerEnd(tab.automationRunId);
|
|
2882
2899
|
wsDisconnectTab(tab, { releaseWriter: !tabHasActiveWriterWork(tab) });
|
|
2883
2900
|
tab.closed = true;
|
|
2884
2901
|
tab.titleRequestController?.abort();
|
|
@@ -2923,6 +2940,31 @@ export function closeTab(idx, { detachAutomation = false } = {}) {
|
|
|
2923
2940
|
saveTabs();
|
|
2924
2941
|
}
|
|
2925
2942
|
|
|
2943
|
+
/**
|
|
2944
|
+
* The end of a worker the Assistant dispatched (ui-worker-end.js), as
|
|
2945
|
+
* `tab._workerEnd` says it: one card, the last node of the transcript, put
|
|
2946
|
+
* back after a history render and never in a snapshot. Its button closes the
|
|
2947
|
+
* tab the way the X does (a warm worker that finished its task is completed,
|
|
2948
|
+
* one still at work is stopped; its record stays for the Assistant) and shows
|
|
2949
|
+
* the Assistant session that dispatched it.
|
|
2950
|
+
*/
|
|
2951
|
+
export function placeWorkerEnd(tab) {
|
|
2952
|
+
const messagesEl = tab?.messagesEl;
|
|
2953
|
+
if (!messagesEl || tab.closed) return;
|
|
2954
|
+
messagesEl.querySelectorAll(`:scope > .${WORKER_END_CLASS}`).forEach((node) => node.remove());
|
|
2955
|
+
const view = tab._workerEnd;
|
|
2956
|
+
if (!view) return;
|
|
2957
|
+
messagesEl.appendChild(buildWorkerEndCard(view, {
|
|
2958
|
+
classes: { card: 'cxp-worker-end', title: 'cxp-post-plan-header', detail: 'cxp-post-plan-note', button: 'cxp-request-btn' },
|
|
2959
|
+
onBack: () => {
|
|
2960
|
+
const idx = _tabs.indexOf(tab);
|
|
2961
|
+
if (idx >= 0) closeTab(idx);
|
|
2962
|
+
backToAssistant(view.assistantSessionId);
|
|
2963
|
+
},
|
|
2964
|
+
}));
|
|
2965
|
+
if (isActiveTab(tab)) scrollEnd(true);
|
|
2966
|
+
}
|
|
2967
|
+
|
|
2926
2968
|
export function saveTabs() {
|
|
2927
2969
|
try {
|
|
2928
2970
|
commitBoundState();
|
|
@@ -2977,6 +3019,7 @@ export function saveTabs() {
|
|
|
2977
3019
|
automationRunId: tab.automationRunId || null,
|
|
2978
3020
|
automationActive: !!tab.automationActive,
|
|
2979
3021
|
automationOwnerId: tab.automationOwnerId || null,
|
|
3022
|
+
releasedRunId: tab.releasedRunId || null,
|
|
2980
3023
|
};
|
|
2981
3024
|
});
|
|
2982
3025
|
const localRunIds = new Set(localTabs.map((tab) => tab.automationRunId).filter(Boolean));
|
|
@@ -3097,6 +3140,34 @@ export function updateTrayPillRunning() {
|
|
|
3097
3140
|
}
|
|
3098
3141
|
|
|
3099
3142
|
|
|
3143
|
+
// ── Greeting (shared/greeting/, lib/greeting/) ──
|
|
3144
|
+
// What SynaBun says when a person comes back and opens a new thread: one or two sentences in the
|
|
3145
|
+
// empty state, written by SynaBun ahead of time (the thread's model never greets). Only for the
|
|
3146
|
+
// bound tab while it holds no thread and shows no automation run; the short wait lets a tab that
|
|
3147
|
+
// was made for a run, or is restoring a thread, say so first. Its id goes back with the first
|
|
3148
|
+
// prompt (`greetingId`), so the model is told once what was said.
|
|
3149
|
+
function offerGreetingSoon() {
|
|
3150
|
+
const tab = _boundTab;
|
|
3151
|
+
if (!tab) return;
|
|
3152
|
+
setTimeout(() => { try { offerGreeting(tab); } catch { /* a thread always opens */ } }, 300);
|
|
3153
|
+
}
|
|
3154
|
+
function offerGreeting(tab) {
|
|
3155
|
+
if (tab !== _boundTab || tab.closed || _threadId || _running || _startingThread || tab.automationActive || tab.automationRunId) return;
|
|
3156
|
+
const host = _messagesEl?.querySelector(':scope > .cxp-empty');
|
|
3157
|
+
if (!host || host.style.display === 'none') return;
|
|
3158
|
+
// "Restoring Codex thread…" / "Starting fresh Codex thread…": not an idle new thread.
|
|
3159
|
+
if (host.querySelector('.cxp-empty-status')?.textContent) return;
|
|
3160
|
+
const key = () => `${tab.id}.${tab.greetSeq || 0}`;
|
|
3161
|
+
const session = key();
|
|
3162
|
+
mountGreeting(host, {
|
|
3163
|
+
surface: 'codex-panel', session, cwd: _project || tab.project || '',
|
|
3164
|
+
onOpenMemory: (id) => { if (id) emit('memory:open', { id }); },
|
|
3165
|
+
isCurrent: () => tab === _boundTab && !_threadId && session === key() && !!_messagesEl?.contains(host),
|
|
3166
|
+
}).then((greeting) => {
|
|
3167
|
+
if (session === key()) tab.greeting = greeting ? { id: greeting.id, session } : null;
|
|
3168
|
+
}).catch(() => {});
|
|
3169
|
+
}
|
|
3170
|
+
|
|
3100
3171
|
// ── Thread state (lines 4711-5000) ──
|
|
3101
3172
|
function hideEmpty() {
|
|
3102
3173
|
const empty = _messagesEl?.querySelector('.cxp-empty');
|
|
@@ -3125,6 +3196,7 @@ export function clearTranscript(emptyText = freshThreadText()) {
|
|
|
3125
3196
|
for (const child of [..._messagesEl.children]) retireMcpAppNode(child, () => child.remove());
|
|
3126
3197
|
_messagesEl.insertAdjacentHTML('afterbegin', `<div class="cxp-empty"><div class="cxp-empty-logo">${OPENAI_ICON}</div><span class="cxp-empty-name">Codex</span><span class="cxp-empty-status"></span></div>`);
|
|
3127
3198
|
document.dispatchEvent(new CustomEvent('cdx-empty-rebuilt'));
|
|
3199
|
+
if (!emptyText) offerGreetingSoon();
|
|
3128
3200
|
_items.clear();
|
|
3129
3201
|
_requestCards.clear();
|
|
3130
3202
|
_blockingServerRequests = new Map();
|
|
@@ -3285,6 +3357,8 @@ export function resetThreadState({ tone = 'ready', preserveStatus = false } = {}
|
|
|
3285
3357
|
clearPostCompactionState(_boundTab, { updateTranscript: false });
|
|
3286
3358
|
setSessionLabel('New session', { persist: false });
|
|
3287
3359
|
if (!preserveStatus) setStatus(_project ? 'Fresh thread ready' : 'Select a project', tone);
|
|
3360
|
+
// A new thread in the same tab is a new opening for the greeting.
|
|
3361
|
+
if (_boundTab) { _boundTab.greetSeq = (_boundTab.greetSeq || 0) + 1; _boundTab.greeting = null; }
|
|
3288
3362
|
clearTranscript();
|
|
3289
3363
|
syncInputEnabled();
|
|
3290
3364
|
syncSessionControls();
|
|
@@ -4954,6 +5028,14 @@ export function dispatchPrompt(prompt, { tab = activeTab(), images = null, paths
|
|
|
4954
5028
|
};
|
|
4955
5029
|
if (tab?.model) msg.model = tab.model;
|
|
4956
5030
|
if (tab?.effort && tab.effort !== 'off') msg.effort = tab.effort;
|
|
5031
|
+
// A person's own turn: the greeting engine keeps when they were last here. The greeting this
|
|
5032
|
+
// tab opened with goes back once, with the first prompt of its new thread.
|
|
5033
|
+
msg.human = true;
|
|
5034
|
+
if (tab?.greeting?.id) {
|
|
5035
|
+
if (msg.fresh) msg.greetingId = tab.greeting.id;
|
|
5036
|
+
forgetGreeting('codex-panel', tab.greeting.session);
|
|
5037
|
+
tab.greeting = null;
|
|
5038
|
+
}
|
|
4957
5039
|
if (imageList.length) {
|
|
4958
5040
|
msg.images = imageList;
|
|
4959
5041
|
}
|
|
@@ -7929,6 +8011,7 @@ export function initContextBridge() {
|
|
|
7929
8011
|
withRequestTab: withTab,
|
|
7930
8012
|
sendSocket,
|
|
7931
8013
|
emit,
|
|
8014
|
+
fileLinkText,
|
|
7932
8015
|
activeTab,
|
|
7933
8016
|
isActiveTab,
|
|
7934
8017
|
dispatchPrompt,
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Pure library selection; saved command text and user ordering stay untouched.
|
|
2
|
+
const normalize = value => String(value ?? '').normalize('NFD').replace(/[\u0300-\u036f]/g, '').toLocaleLowerCase();
|
|
3
|
+
const byOrder = (a, b) => (a.order ?? 0) - (b.order ?? 0);
|
|
4
|
+
const lastRun = command => Number(command.lastRunAt) || 0;
|
|
5
|
+
|
|
6
|
+
export function selectCommandGroups(data, { query = '', categoryId = '', sort = 'saved' } = {}) {
|
|
7
|
+
const terms = normalize(query).trim().split(/\s+/).filter(Boolean);
|
|
8
|
+
const groups = [...data.categories].sort(byOrder)
|
|
9
|
+
.filter(category => !categoryId || category.id === categoryId)
|
|
10
|
+
.map(category => {
|
|
11
|
+
const commands = data.commands.filter(command => {
|
|
12
|
+
if (command.categoryId !== category.id) return false;
|
|
13
|
+
const text = normalize([command.name, command.command, command.cwd, category.name].join(' '));
|
|
14
|
+
return terms.every(term => text.includes(term));
|
|
15
|
+
}).sort(sort === 'recent' ? (a, b) => lastRun(b) - lastRun(a) || byOrder(a, b) : byOrder);
|
|
16
|
+
return { category, commands };
|
|
17
|
+
}).filter(group => !terms.length || group.commands.length);
|
|
18
|
+
if (sort === 'recent') groups.sort((a, b) =>
|
|
19
|
+
Math.max(0, ...b.commands.map(lastRun)) - Math.max(0, ...a.commands.map(lastRun)) || byOrder(a.category, b.category));
|
|
20
|
+
return groups;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function commandLaunchPayload(command) {
|
|
24
|
+
return { command: command.command, cwd: command.cwd || null, label: command.name };
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Internet connectivity does not gate commands served by the local workspace.
|
|
28
|
+
export function isCommandLaunchAvailable(online, hostname) {
|
|
29
|
+
return online !== false || ['localhost', '127.0.0.1', '[::1]', '::1'].includes(hostname);
|
|
30
|
+
}
|
|
@@ -64,6 +64,7 @@ export const KEYS = {
|
|
|
64
64
|
WORKSPACES: 'neural-workspaces',
|
|
65
65
|
ACTIVE_WORKSPACE: 'neural-active-workspace', // sessionStorage
|
|
66
66
|
GRID_SNAP: 'neural-grid-snap',
|
|
67
|
+
TOPRIGHT_TOOLS_HIDDEN: 'neural-topright-tools-hidden', // the workspace tools toggle is off ('true')
|
|
67
68
|
CATEGORIES_VISIBLE: 'neural-categories-visible',
|
|
68
69
|
WHITEBOARD: 'neural-whiteboard',
|
|
69
70
|
WHITEBOARD_RULESET_ALERT_DISMISSED: 'neural-whiteboard-ruleset-alert-dismissed',
|
|
@@ -85,6 +86,10 @@ export const KEYS = {
|
|
|
85
86
|
FILE_EXPLORER_SORT: 'neural-file-explorer-sort',
|
|
86
87
|
FILE_EXPLORER_PROJECT: 'neural-file-explorer-project',
|
|
87
88
|
FILE_EXPLORER_FOLDER_COLORS: 'neural-file-explorer-folder-colors',
|
|
89
|
+
// Per project: the open folders, the selection, the scroll position, "changed only" (shared/explorer/fx-main.js).
|
|
90
|
+
FILE_EXPLORER_TREE: 'neural-file-explorer-tree',
|
|
91
|
+
// Code editor — open tabs per project { v, projects: { [path]: { at, active, tabs: [{ path, pinned, anchor, head, top, dirty }] } } }
|
|
92
|
+
EDITOR_TABS: 'neural-editor-tabs',
|
|
88
93
|
ACTIVE_SKIN: 'neural-active-skin',
|
|
89
94
|
COST_WIDGET_POS: 'neural-cost-widget-pos',
|
|
90
95
|
COST_WIDGET_COLLAPSED: 'neural-cost-widget-collapsed',
|
|
@@ -97,6 +102,7 @@ export const KEYS = {
|
|
|
97
102
|
ASSISTANT_DOCK_OPEN: 'neural-assistant-dock-open',
|
|
98
103
|
ASSISTANT_DOCK_SHOW_ALL:'neural-assistant-dock-show-all',
|
|
99
104
|
ASSISTANT_ROUTE_MODE: 'neural-assistant-route-mode', // last-used route mode (always-ask|ask-unsure|never)
|
|
105
|
+
ASSISTANT_TEST_DENSITY: 'neural-assistant-test-density', // last-used test density (none|light|standard|thorough)
|
|
100
106
|
// Assistant sidepanel — open tabs {v:1, activeIdx, tabs:[{sessionId,label,userRenamed}]}
|
|
101
107
|
ASSISTANT_PANEL_TABS: 'synabun-assistant-panel-tabs',
|
|
102
108
|
};
|
|
@@ -141,7 +147,6 @@ export const KEYBIND_META = {
|
|
|
141
147
|
'toggle-explorer': { label: 'Toggle Explorer', group: 'Navigation' },
|
|
142
148
|
'toggle-focus-mode': { label: 'Toggle Focus Mode', group: 'Navigation' },
|
|
143
149
|
'toggle-minimap': { label: 'Toggle Minimap', group: 'View' },
|
|
144
|
-
'toggle-toolbar': { label: 'Hide All Toolbars', group: 'View' },
|
|
145
150
|
'open-settings': { label: 'Open Settings', group: 'Settings' },
|
|
146
151
|
'open-keybinds': { label: 'Open Keybinds', group: 'Settings' },
|
|
147
152
|
'launch-assistant': { label: 'Assistant', group: 'Launch App', icon: 'assistant' },
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
import { pagerState } from './cp-restore.js';
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
// (A worker's end card is drawn again from its run: ui-worker-end.js.)
|
|
18
|
+
const STALE_ROWS = '.thinking, .msg-permission-prompt, .post-plan-card, .worker-end-card';
|
|
18
19
|
const STALE_PROMPTS = '.cp-plan-approval-card.active-perm, .perm-card.active-perm, .cp-rewind-confirm';
|
|
19
20
|
const SELF_WIRED_CARDS = '.tool-card.cp-bash-card, .tool-card.cp-diff-card, .tool-card.cp-agent-card';
|
|
20
21
|
|
|
@@ -346,4 +346,19 @@ a.cp-chip:hover { text-decoration: underline; }
|
|
|
346
346
|
.cp-ctxpop-copy { padding: 0; border: none; background: none; font: inherit; line-height: 20px; cursor: pointer; }
|
|
347
347
|
.cp-ctxpop-copy:hover, .cp-ctxpop-copy.cp-ctxpop-copied { color: rgba(220,195,140,0.9); }
|
|
348
348
|
.cp-ctxpop-btn:focus-visible, .cp-ctxpop-link:focus-visible, .cp-ctxpop-copy:focus-visible { outline: 1px solid rgba(255,255,255,0.45); outline-offset: 2px; }
|
|
349
|
+
|
|
350
|
+
/* ═══ A dispatched worker's end (ui-worker-end.js) ═══
|
|
351
|
+
The post-plan card's frame, header and primary action, in the transcript column. The title says the state in
|
|
352
|
+
words; its colour is the panel's success / warning / error. */
|
|
353
|
+
.cp-messages .cp-worker-end { margin: 8px 14px 10px 48px; padding: 8px 10px; border: 1px solid rgba(255,255,255,0.07); border-radius: 8px; background: rgba(255,255,255,0.02); }
|
|
354
|
+
.cp-worker-end .post-plan-header { margin-bottom: 4px; }
|
|
355
|
+
.cp-worker-end[data-tone="ok"] .post-plan-header { color: #5fcf83; }
|
|
356
|
+
.cp-worker-end[data-tone="warn"] .post-plan-header { color: #e0a33e; }
|
|
357
|
+
.cp-worker-end[data-tone="err"] .post-plan-header { color: #ef7070; }
|
|
358
|
+
.cp-worker-end .worker-end-detail { font: 11.5px/1.55 Inter, sans-serif; color: var(--t-secondary); overflow-wrap: anywhere; }
|
|
359
|
+
.cp-worker-end .worker-end-meta { margin-top: 4px; font: 9.5px/1.5 'JetBrains Mono', monospace; color: rgba(255,255,255,0.28); }
|
|
360
|
+
.cp-worker-end .worker-end-note { margin-top: 4px; font: 10.5px/1.5 Inter, sans-serif; color: var(--t-muted); }
|
|
361
|
+
.cp-worker-end .post-plan-actions { margin-top: 8px; }
|
|
362
|
+
.cp-worker-end .post-plan-action:disabled { opacity: 0.45; cursor: default; }
|
|
363
|
+
.cp-worker-end .post-plan-action:focus-visible { outline: 1px solid rgba(255,255,255,0.45); outline-offset: 2px; }
|
|
349
364
|
`;
|