synabun 2.0.0 → 2.0.7
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 +97 -0
- package/NOTICE +5 -0
- package/README.md +2 -1
- package/THIRD-PARTY-LICENSES.md +59 -0
- package/benchmarks/fixtures/browser/README.md +1 -1
- package/benchmarks/fixtures/desktop/README.md +1 -1
- package/docs/whatsapp.md +153 -18
- 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 +26 -3
- package/hooks/claude-code/stop.mjs +5 -5
- package/lib/child-path.js +303 -0
- package/lib/claude-hooks.js +2 -1
- package/lib/data-home-migration.js +2 -0
- package/lib/desktop-app.js +265 -0
- package/lib/external-tools.js +7 -3
- package/lib/log-redact.js +102 -0
- package/lib/packaged-runtime.js +138 -11
- package/lib/start-launcher.js +88 -1
- package/mcp-server/dist/http.d.ts +3 -1
- package/mcp-server/dist/http.d.ts.map +1 -1
- package/mcp-server/dist/http.js +15 -4
- package/mcp-server/dist/http.js.map +1 -1
- package/mcp-server/dist/index.d.ts.map +1 -1
- package/mcp-server/dist/index.js +9 -6
- package/mcp-server/dist/index.js.map +1 -1
- package/mcp-server/dist/services/budget-judgments.d.ts +108 -0
- package/mcp-server/dist/services/budget-judgments.d.ts.map +1 -0
- package/mcp-server/dist/services/budget-judgments.js +153 -0
- package/mcp-server/dist/services/budget-judgments.js.map +1 -0
- package/mcp-server/dist/services/codex-config-heal.d.ts +5 -1
- package/mcp-server/dist/services/codex-config-heal.d.ts.map +1 -1
- package/mcp-server/dist/services/codex-config-heal.js +41 -4
- package/mcp-server/dist/services/codex-config-heal.js.map +1 -1
- package/mcp-server/dist/services/identity.d.ts +11 -0
- package/mcp-server/dist/services/identity.d.ts.map +1 -1
- package/mcp-server/dist/services/identity.js +24 -0
- package/mcp-server/dist/services/identity.js.map +1 -1
- package/mcp-server/dist/services/neural-interface.d.ts +13 -0
- package/mcp-server/dist/services/neural-interface.d.ts.map +1 -1
- package/mcp-server/dist/services/neural-interface.js +34 -2
- package/mcp-server/dist/services/neural-interface.js.map +1 -1
- package/mcp-server/dist/services/typesafe-config.d.ts +1 -1
- package/mcp-server/dist/services/typesafe-config.d.ts.map +1 -1
- package/mcp-server/dist/services/typesafe-config.js +4 -1
- package/mcp-server/dist/services/typesafe-config.js.map +1 -1
- package/mcp-server/dist/tools/agents.d.ts +10 -7
- package/mcp-server/dist/tools/agents.d.ts.map +1 -1
- package/mcp-server/dist/tools/agents.js +34 -13
- package/mcp-server/dist/tools/agents.js.map +1 -1
- package/mcp-server/dist/tools/whatsapp-send-file.d.ts +17 -0
- package/mcp-server/dist/tools/whatsapp-send-file.d.ts.map +1 -0
- package/mcp-server/dist/tools/whatsapp-send-file.js +44 -0
- package/mcp-server/dist/tools/whatsapp-send-file.js.map +1 -0
- package/mcp-server/dist/tui.js +2 -1
- package/mcp-server/dist/tui.js.map +1 -1
- package/mcp-server/dist/version.d.ts +5 -0
- package/mcp-server/dist/version.d.ts.map +1 -0
- package/mcp-server/dist/version.js +21 -0
- package/mcp-server/dist/version.js.map +1 -0
- package/mcp-server/package-lock.json +2 -2
- package/mcp-server/package.json +1 -3
- package/mcp-server/run.mjs +15 -9
- package/mcp-server/src/http.ts +18 -3
- package/mcp-server/src/index.ts +9 -6
- package/mcp-server/src/services/budget-judgments.ts +183 -0
- package/mcp-server/src/services/codex-config-heal.ts +35 -4
- package/mcp-server/src/services/identity.ts +27 -0
- package/mcp-server/src/services/neural-interface.ts +34 -2
- package/mcp-server/src/services/typesafe-config.ts +4 -1
- package/mcp-server/src/tools/agents.ts +33 -14
- package/mcp-server/src/tools/whatsapp-send-file.ts +51 -0
- package/mcp-server/src/tui.ts +2 -1
- package/mcp-server/src/version.ts +22 -0
- package/neural-interface/i18n/en.json +2126 -209
- package/neural-interface/i18n/pt-BR.json +2123 -207
- package/neural-interface/lib/account-usage.js +163 -0
- package/neural-interface/lib/assistant-api.js +316 -57
- package/neural-interface/lib/assistant-brains/claude.js +19 -2
- package/neural-interface/lib/assistant-brains/codex.js +3 -0
- package/neural-interface/lib/assistant-brains/opencode.js +17 -4
- package/neural-interface/lib/assistant-budget-planner.js +390 -0
- package/neural-interface/lib/assistant-budget-split.js +408 -0
- package/neural-interface/lib/assistant-budget.js +94 -95
- package/neural-interface/lib/assistant-catalog.js +179 -27
- package/neural-interface/lib/assistant-config.js +91 -14
- package/neural-interface/lib/assistant-dispatch.js +494 -138
- package/neural-interface/lib/assistant-hidden-models.js +393 -66
- package/neural-interface/lib/assistant-jev.js +26 -3
- package/neural-interface/lib/assistant-memory.js +24 -10
- package/neural-interface/lib/assistant-persona.js +73 -12
- package/neural-interface/lib/assistant-plan-permissions.js +8 -1
- package/neural-interface/lib/assistant-pricing.js +21 -6
- package/neural-interface/lib/assistant-route-accounts.js +14 -0
- package/neural-interface/lib/assistant-route-gate.js +19 -3
- package/neural-interface/lib/assistant-router.js +373 -42
- package/neural-interface/lib/assistant-runtime.js +488 -59
- 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 +183 -0
- package/neural-interface/lib/augmented-path.js +317 -53
- package/neural-interface/lib/browser-background-tab.js +134 -0
- package/neural-interface/lib/browser-screenshot.js +678 -61
- package/neural-interface/lib/claude-accounts.js +342 -31
- package/neural-interface/lib/claude-agent-bridge.js +123 -9
- package/neural-interface/lib/claude-executable.js +6 -1
- package/neural-interface/lib/claude-model-catalog.js +33 -5
- package/neural-interface/lib/claude-panel-auth.js +221 -0
- package/neural-interface/lib/claude-profile-api-key.js +62 -0
- package/neural-interface/lib/claude-temporary.js +46 -7
- package/neural-interface/lib/cli-install-api.js +137 -0
- package/neural-interface/lib/cli-install.js +797 -0
- package/neural-interface/lib/cli-path.js +130 -0
- package/neural-interface/lib/cli-resolver.js +744 -0
- package/neural-interface/lib/cli-update-planner.js +143 -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/codex-account-auth.js +178 -0
- package/neural-interface/lib/codex-accounts.js +489 -0
- package/neural-interface/lib/codex-capabilities.js +2 -1
- package/neural-interface/lib/codex-compat-rpc.js +8 -2
- package/neural-interface/lib/codex-mcp-approvals.js +5 -1
- package/neural-interface/lib/codex-panel-auth.js +62 -0
- package/neural-interface/lib/codex-session-settings.js +1 -1
- package/neural-interface/lib/codex-settings-schema.js +120 -0
- package/neural-interface/lib/desktop/config.js +3 -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-bash/bzip2.js +339 -0
- package/neural-interface/lib/git-bash/claude-settings.js +73 -0
- package/neural-interface/lib/git-bash/extract-worker.js +34 -0
- package/neural-interface/lib/git-bash/install.js +529 -0
- package/neural-interface/lib/git-bash/licenses/COPYING +360 -0
- package/neural-interface/lib/git-bash/licenses/LGPL-2.1 +511 -0
- package/neural-interface/lib/git-bash/manager.js +268 -0
- package/neural-interface/lib/git-bash/pins.js +206 -0
- package/neural-interface/lib/git-bash/pins.json +34 -0
- package/neural-interface/lib/git-bash/resolver.js +194 -0
- package/neural-interface/lib/git-diff-api.js +103 -0
- package/neural-interface/lib/git-read.js +234 -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/install-details.js +145 -0
- package/neural-interface/lib/machine-names.js +88 -0
- package/neural-interface/lib/mcp-installer.js +14 -2
- package/neural-interface/lib/memory-api.js +31 -7
- package/neural-interface/lib/native-loop-providers.js +26 -8
- package/neural-interface/lib/native-loop-runtime.js +9 -4
- package/neural-interface/lib/os-path.js +319 -0
- package/neural-interface/lib/plugin-installer.js +4 -2
- package/neural-interface/lib/project-storage.js +5 -7
- package/neural-interface/lib/provider-panel-api-key-auth.js +92 -0
- package/neural-interface/lib/provider-panel-terminal-auth.js +95 -0
- package/neural-interface/lib/pty-host/core.js +2 -1
- package/neural-interface/lib/pty-host/manager.js +27 -2
- package/neural-interface/lib/remote-policy.js +20 -11
- package/neural-interface/lib/request-gate.js +589 -0
- package/neural-interface/lib/session-title-generator.js +4 -3
- package/neural-interface/lib/system-about.js +340 -0
- package/neural-interface/lib/system-activity.js +66 -0
- package/neural-interface/lib/terminal-env.js +11 -3
- package/neural-interface/lib/terminal-path.js +55 -0
- package/neural-interface/lib/ui-blob-api.js +108 -0
- package/neural-interface/lib/ui-blob-store.js +68 -0
- package/neural-interface/lib/virtual-socket.js +12 -1
- package/neural-interface/lib/whatsapp/baileys-adapter.js +165 -45
- package/neural-interface/lib/whatsapp/bridge.js +78 -34
- package/neural-interface/lib/whatsapp/commands.js +13 -14
- package/neural-interface/lib/whatsapp/config.js +134 -20
- package/neural-interface/lib/whatsapp/fake-baileys.js +99 -14
- package/neural-interface/lib/whatsapp/host-core.js +168 -35
- package/neural-interface/lib/whatsapp/inbound.js +5 -3
- package/neural-interface/lib/whatsapp/local-file.js +524 -0
- package/neural-interface/lib/whatsapp/manager.js +92 -32
- package/neural-interface/lib/whatsapp/paths.js +11 -1
- package/neural-interface/lib/whatsapp/protocol.js +65 -5
- package/neural-interface/lib/whatsapp/redact.js +63 -0
- package/neural-interface/lib/whatsapp/service.js +343 -91
- package/neural-interface/lib/whatsapp/transcription.js +463 -0
- package/neural-interface/package-lock.json +701 -2
- package/neural-interface/package.json +13 -2
- package/neural-interface/public/index.html +2 -0
- package/neural-interface/public/index2d.html +2 -0
- package/neural-interface/public/install-app.html +9 -6
- package/neural-interface/public/offline.html +19 -3
- package/neural-interface/public/onboarding.html +107 -2
- package/neural-interface/public/shared/account-i18n.js +7 -0
- package/neural-interface/public/shared/account-menu.js +539 -0
- package/neural-interface/public/shared/account-usage.js +19 -0
- package/neural-interface/public/shared/account-view.js +335 -0
- package/neural-interface/public/shared/agent-runtime-options.js +50 -14
- package/neural-interface/public/shared/assistant/asst-accounts.js +182 -184
- package/neural-interface/public/shared/assistant/asst-api.js +32 -2
- package/neural-interface/public/shared/assistant/asst-automation.js +286 -0
- package/neural-interface/public/shared/assistant/asst-brain-picker.js +430 -81
- package/neural-interface/public/shared/assistant/asst-budget.js +259 -303
- package/neural-interface/public/shared/assistant/asst-composer.js +11 -1
- package/neural-interface/public/shared/assistant/asst-mascot.js +140 -61
- package/neural-interface/public/shared/assistant/asst-menu.js +27 -11
- package/neural-interface/public/shared/assistant/asst-panel.js +198 -42
- package/neural-interface/public/shared/assistant/asst-render.js +197 -23
- package/neural-interface/public/shared/assistant/asst-route-models.js +108 -0
- package/neural-interface/public/shared/assistant/asst-route.js +95 -343
- package/neural-interface/public/shared/assistant/asst-routes-editor.js +534 -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-slash.js +1 -1
- package/neural-interface/public/shared/assistant/asst-state.js +186 -2
- package/neural-interface/public/shared/assistant/asst-styles.js +247 -11
- package/neural-interface/public/shared/blob-store.js +111 -22
- package/neural-interface/public/shared/cdx/cdx-commands.js +4 -1
- package/neural-interface/public/shared/cdx/cdx-features.js +22 -14
- package/neural-interface/public/shared/cdx/cdx-icons.js +2 -0
- package/neural-interface/public/shared/cdx/cdx-panel.js +80 -118
- package/neural-interface/public/shared/cdx/cdx-render.js +25 -89
- package/neural-interface/public/shared/cdx/cdx-settings.js +231 -0
- package/neural-interface/public/shared/cdx/cdx-styles.js +164 -107
- package/neural-interface/public/shared/cdx/cdx-tabs.js +348 -668
- package/neural-interface/public/shared/cdx/cdx-ws.js +2 -0
- package/neural-interface/public/shared/claude-account-view.js +3 -0
- package/neural-interface/public/shared/cli-install-view.js +392 -0
- package/neural-interface/public/shared/cli-status.js +282 -22
- package/neural-interface/public/shared/constants.js +6 -1
- package/neural-interface/public/shared/cp/cp-events.js +2 -1
- package/neural-interface/public/shared/cp/cp-rehydrate.js +2 -1
- package/neural-interface/public/shared/cp/cp-styles.js +61 -0
- package/neural-interface/public/shared/desktop-bridge.js +39 -0
- package/neural-interface/public/shared/desktop-titlebar-page.js +59 -0
- package/neural-interface/public/shared/desktop-titlebar-view.js +122 -0
- package/neural-interface/public/shared/desktop-titlebar.js +153 -0
- package/neural-interface/public/shared/desktop-update-view.js +462 -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/git-bash-view.js +145 -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 +161 -165
- package/neural-interface/public/shared/i18n.js +19 -1
- package/neural-interface/public/shared/install-details-view.js +86 -0
- 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 +131 -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 +22 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +158 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-ws.js +3 -2
- package/neural-interface/public/shared/pwa-install-page.js +32 -2
- 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-about-pane.js +271 -0
- package/neural-interface/public/shared/settings/settings-about.js +254 -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 +33 -4
- package/neural-interface/public/shared/settings/settings-user-context.js +154 -0
- package/neural-interface/public/shared/showcase-privacy.js +489 -0
- package/neural-interface/public/shared/start-bridge.js +238 -19
- package/neural-interface/public/shared/storage.js +30 -3
- package/neural-interface/public/shared/styles.css +1710 -770
- package/neural-interface/public/shared/synabun-mascot.js +68 -58
- package/neural-interface/public/shared/tunnel-view.js +167 -0
- package/neural-interface/public/shared/ui-claude-panel.js +369 -229
- package/neural-interface/public/shared/ui-cli-banner.js +355 -0
- 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-git-bash.js +124 -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 +10 -1
- package/neural-interface/public/shared/ui-keybinds.js +4 -0
- package/neural-interface/public/shared/ui-loading.js +187 -19
- package/neural-interface/public/shared/ui-menubar.js +25 -33
- 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 +48 -22
- package/neural-interface/public/shared/ui-provider-auth.js +104 -0
- package/neural-interface/public/shared/ui-provider-terminal-auth.js +223 -0
- package/neural-interface/public/shared/ui-sessions.js +9 -3
- package/neural-interface/public/shared/ui-settings.js +509 -490
- package/neural-interface/public/shared/ui-sidepanel-runtime.js +2 -1
- package/neural-interface/public/shared/ui-sidepanel-sessions.js +3 -1
- package/neural-interface/public/shared/ui-sync.js +22 -0
- package/neural-interface/public/shared/ui-terminal.js +40 -5
- package/neural-interface/public/shared/ui-tool-updates.js +5 -0
- 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-update.js +594 -5
- package/neural-interface/public/shared/ui-whatsapp.js +21 -6
- 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/whatsapp/wa-view.js +51 -8
- package/neural-interface/public/shared/worker-end.js +253 -0
- package/neural-interface/public/sw.js +2 -2
- package/neural-interface/public/variant/2d/main.js +10 -1
- package/neural-interface/public/variant/3d/main.js +10 -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/vendor-codemirror-entry.js +121 -0
- package/neural-interface/server.js +2085 -1629
- package/neural-interface/templates/rulesets/README.md +1 -1
- package/package.json +5 -8
- package/setup.js +53 -15
- 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
|
@@ -11,7 +11,8 @@ export function routeSidepanelEvent(event, data) {
|
|
|
11
11
|
const host = sidepanelHost();
|
|
12
12
|
if (!host) return false;
|
|
13
13
|
if (hostedSidepanelId) {
|
|
14
|
-
|
|
14
|
+
// The code editor lives in the main window: what opens it from a detached session goes there.
|
|
15
|
+
if (!['open-plan-editor', 'open-changelog-editor', 'open-file-editor', 'browser:reconnect'].includes(event)) return false;
|
|
15
16
|
host.emitFromSession(hostedSidepanelId, event, data);
|
|
16
17
|
return true;
|
|
17
18
|
}
|
|
@@ -99,7 +99,9 @@ function show(entry) {
|
|
|
99
99
|
entry.unregister = registerSidepanel({ owner: entry.id, layoutKey: entry.id, provider: entry.provider,
|
|
100
100
|
element, header, actions, buttonClass: 'sp-session-button', applyVisibility: () => renderPill(entry) });
|
|
101
101
|
if (!storage.getItem(`synabun-sidepanel-layout-${entry.id}`)) detachSidepanel(entry.id);
|
|
102
|
-
|
|
102
|
+
// A language the page address forces (?lang=, showcase captures) holds in the session's frame too.
|
|
103
|
+
const lang = new URLSearchParams(window.location.search).get('lang');
|
|
104
|
+
frame.src = `/sidepanel-session.html?provider=${entry.provider}${lang ? `&lang=${encodeURIComponent(lang)}` : ''}`;
|
|
103
105
|
}
|
|
104
106
|
setSidepanelVisible(entry.id, true);
|
|
105
107
|
}
|
|
@@ -74,6 +74,18 @@ const SYNC_HANDLERS = {
|
|
|
74
74
|
// Assistant → Models toggles (every provider): the Assistant's model menus,
|
|
75
75
|
// Routes editor and Models manager reload their lists.
|
|
76
76
|
'assistant:hidden-models-changed': (msg) => emit('sync:assistant:hidden-models-changed', msg),
|
|
77
|
+
// A provider lists other models than before (CLI update, account change, OpenCode
|
|
78
|
+
// provider connected): the same menus reload.
|
|
79
|
+
'assistant:catalog-changed': (msg) => emit('sync:assistant:catalog-changed', msg),
|
|
80
|
+
|
|
81
|
+
// Settings → Automation behavior switched in another window: an open Settings follows.
|
|
82
|
+
'assistant:user-context-changed': (msg) => emit('sync:assistant:user-context-changed', msg),
|
|
83
|
+
|
|
84
|
+
// Code editor preferences saved in another window (word wrap, font size…): the editor follows.
|
|
85
|
+
'editor:config-changed': (msg) => emit('sync:editor:config-changed', msg),
|
|
86
|
+
|
|
87
|
+
// Settings → Greeting switched in another window: an open Settings follows.
|
|
88
|
+
'greeting:changed': (msg) => emit('sync:greeting:changed', msg),
|
|
77
89
|
|
|
78
90
|
// Card sync (relayed from other clients)
|
|
79
91
|
'card:opened': (msg) => emit('sync:card:opened', msg),
|
|
@@ -106,7 +118,13 @@ const SYNC_HANDLERS = {
|
|
|
106
118
|
'assistant:permission-resolved': (msg) => emit('sync:assistant:permission-resolved', msg),
|
|
107
119
|
'assistant:focus': (msg) => emit('sync:assistant:focus', msg),
|
|
108
120
|
'assistant:accounts-changed': (msg) => emit('sync:assistant:accounts-changed', msg),
|
|
121
|
+
// Claude accounts (lib/claude-accounts.js): any account's state changed — signed in or out, a key saved or removed, its mode, renamed, added, removed
|
|
122
|
+
'claude:accounts-changed': (msg) => emit('sync:claude:accounts-changed', msg),
|
|
123
|
+
// Codex accounts (lib/codex-accounts.js): the same, for every Codex account
|
|
124
|
+
'codex:accounts-changed': (msg) => emit('sync:codex:accounts-changed', msg),
|
|
109
125
|
'assistant:mailbox': (msg) => emit('sync:assistant:mailbox', msg),
|
|
126
|
+
'assistant:budget': (msg) => emit('sync:assistant:budget', msg),
|
|
127
|
+
'assistant:budget-changed': (msg) => emit('sync:assistant:budget-changed', msg),
|
|
110
128
|
'assistant:cost': (msg) => emit('sync:assistant:cost', msg),
|
|
111
129
|
'assistant:desktop': (msg) => emit('sync:assistant:desktop', msg),
|
|
112
130
|
'assistant:desktop-setup': (msg) => emit('sync:assistant:desktop-setup', msg),
|
|
@@ -178,6 +196,10 @@ const SYNC_HANDLERS = {
|
|
|
178
196
|
// Skin change sync
|
|
179
197
|
'skin:changed': (msg) => emit('sync:skin:changed', msg),
|
|
180
198
|
|
|
199
|
+
// The server says it is restarting, before it goes: every window shows the
|
|
200
|
+
// restart, not only the one that asked for it (ui-loading.js).
|
|
201
|
+
'server:restarting': (msg) => emit('server:restarting', msg),
|
|
202
|
+
|
|
181
203
|
// Session indexing progress
|
|
182
204
|
'indexing:started': (msg) => emit('ws:message', msg),
|
|
183
205
|
'indexing:session-started': (msg) => emit('ws:message', msg),
|
|
@@ -20,7 +20,7 @@ import { readinessKind, typeWhenReady } from './term-ready.js';
|
|
|
20
20
|
import { initRendererManager, acquireRenderer, disposeRenderer, hasWebgl, noteFocus, adoptRenderer, rendererState, rendererStats } from './term-renderer.js';
|
|
21
21
|
import { mountAssistant } from './assistant/asst-panel.js';
|
|
22
22
|
import { getAssistantSession } from './assistant/asst-api.js';
|
|
23
|
-
import { brainLabel, normalizeBrain, readStoredBrain } from './assistant/asst-state.js';
|
|
23
|
+
import { brainLabel, normalizeBrain, readStoredBrain, restoredSessionName, sessionNameGivenUp } from './assistant/asst-state.js';
|
|
24
24
|
import { initAssistant, registerAssistantHost, openAssistant, assistantOwnerOf, fetchLiveAssistantSessions, isAssistantSessionLive } from './ui-assistant.js';
|
|
25
25
|
|
|
26
26
|
const $ = (id) => document.getElementById(id);
|
|
@@ -3467,7 +3467,7 @@ function _updateAssistantBrainChip(session) {
|
|
|
3467
3467
|
chip.hidden = !label;
|
|
3468
3468
|
}
|
|
3469
3469
|
|
|
3470
|
-
/** After a tab/float rename, push the new label into the panel (marks it user-renamed). */
|
|
3470
|
+
/** After a tab/float rename, push the new label into the panel (marks it user-renamed; the panel writes it to the session record). */
|
|
3471
3471
|
function _syncAssistantLabel(session) {
|
|
3472
3472
|
if (!session?._isAssistant || !session._assistant) return;
|
|
3473
3473
|
if (session._assistant.getTitle() !== session.label) session._assistant.setTitle(session.label);
|
|
@@ -3484,6 +3484,11 @@ function _mountAssistantSession(sessionId, { meta = null, saved = null, brain =
|
|
|
3484
3484
|
if (existing) { if (!_restoringLayout) _focusAssistantTab(existing); return existing; }
|
|
3485
3485
|
|
|
3486
3486
|
const resolvedBrain = normalizeBrain(brain || meta?.brain || saved?.brain || readStoredBrain(storage));
|
|
3487
|
+
// A renamed session comes back under its name: the session record's (a rename made in either
|
|
3488
|
+
// host, the one the Sessions menu lists), else the rename saved with this tab. A record whose
|
|
3489
|
+
// name was given up says so: the label and the renamed flag saved with a tab are stale.
|
|
3490
|
+
const named = restoredSessionName(meta, label);
|
|
3491
|
+
const givenUp = sessionNameGivenUp(meta);
|
|
3487
3492
|
const viewport = document.createElement('div');
|
|
3488
3493
|
viewport.className = 'term-viewport assistant-viewport';
|
|
3489
3494
|
viewport.dataset.sessionId = sessionId;
|
|
@@ -3495,13 +3500,13 @@ function _mountAssistantSession(sessionId, { meta = null, saved = null, brain =
|
|
|
3495
3500
|
id: sessionId,
|
|
3496
3501
|
profile: 'assistant',
|
|
3497
3502
|
cwd: resolvedBrain.project || null,
|
|
3498
|
-
label:
|
|
3503
|
+
label: named || (givenUp ? '' : saved?.label) || meta?.title || profileDef?.label || 'Assistant',
|
|
3499
3504
|
term: null, fitAddon: null, searchAddon: null,
|
|
3500
3505
|
ws: null, // no PTY socket — the panel owns /ws/assistant/:id
|
|
3501
3506
|
viewport, ro: null, renderer: null,
|
|
3502
3507
|
dead: false,
|
|
3503
3508
|
pinned: saved?.pinned || false,
|
|
3504
|
-
_userRenamed: saved?.userRenamed || !!
|
|
3509
|
+
_userRenamed: !givenUp && (saved?.userRenamed || !!named),
|
|
3505
3510
|
_floatColor: saved?.floatColor || null,
|
|
3506
3511
|
_isAssistant: true, // flag for tab-type-specific logic
|
|
3507
3512
|
_assistant: null, // controller (set right after mount)
|
|
@@ -3525,6 +3530,19 @@ function _mountAssistantSession(sessionId, { meta = null, saved = null, brain =
|
|
|
3525
3530
|
if (titleEl && titleEl.contentEditable !== 'true') titleEl.textContent = next;
|
|
3526
3531
|
saveSessionRegistry();
|
|
3527
3532
|
},
|
|
3533
|
+
// A rename the panel could not save: the tab and its saved label go back to the record's name.
|
|
3534
|
+
setName(text, renamed) {
|
|
3535
|
+
const s = live();
|
|
3536
|
+
const next = String(text || '').trim();
|
|
3537
|
+
if (!next) return;
|
|
3538
|
+
s.label = next;
|
|
3539
|
+
s._userRenamed = !!renamed;
|
|
3540
|
+
renderTabBar();
|
|
3541
|
+
const titleEl = _detachedTabs.get(sessionId)?.el?.querySelector('.term-float-tab-title');
|
|
3542
|
+
if (titleEl && titleEl.contentEditable !== 'true') titleEl.textContent = next;
|
|
3543
|
+
saveSessionRegistry();
|
|
3544
|
+
saveTerminalLayout();
|
|
3545
|
+
},
|
|
3528
3546
|
setStatus(status) { setSessionStatusBadge(sessionId, status); },
|
|
3529
3547
|
setBrain(b) {
|
|
3530
3548
|
const s = live();
|
|
@@ -3539,7 +3557,7 @@ function _mountAssistantSession(sessionId, { meta = null, saved = null, brain =
|
|
|
3539
3557
|
requestDetach() { const idx = _sessions.findIndex(s => s.id === sessionId); if (idx >= 0 && !_detachedTabs.has(sessionId)) detachTab(idx); },
|
|
3540
3558
|
};
|
|
3541
3559
|
session._assistant = mountAssistant(viewport, { sessionId, brain: resolvedBrain, host, session: meta, label: session.label, reattach });
|
|
3542
|
-
if (session._userRenamed && session.label) session._assistant.setTitle(session.label);
|
|
3560
|
+
if (session._userRenamed && session.label) session._assistant.setTitle(session.label, { restored: true });
|
|
3543
3561
|
|
|
3544
3562
|
renderTabBar();
|
|
3545
3563
|
if (_restoringLayout) {
|
|
@@ -6271,6 +6289,23 @@ export function openTerminalPanel(profile) {
|
|
|
6271
6289
|
emit('terminal:open', { profile });
|
|
6272
6290
|
}
|
|
6273
6291
|
|
|
6292
|
+
// Attach only: the guarded provider-auth route has already chosen and started
|
|
6293
|
+
// the CLI. No command text is accepted from either panel.
|
|
6294
|
+
export async function openProviderLoginTerminal(sessionId, label) {
|
|
6295
|
+
if (!/^[a-f0-9]{32}$/.test(sessionId || '')) throw new Error('Invalid sign-in terminal session.');
|
|
6296
|
+
await _whenOpenIdle();
|
|
6297
|
+
let session = _sessions.find(s => s.id === sessionId);
|
|
6298
|
+
if (!session) session = await openSession('shell', null, sessionId, { label });
|
|
6299
|
+
if (!session) throw new Error('Could not attach the sign-in terminal. Try again.');
|
|
6300
|
+
showPanel();
|
|
6301
|
+
const index = _sessions.indexOf(session);
|
|
6302
|
+
if (_detachedTabs.has(sessionId)) {
|
|
6303
|
+
bringTabToFront(sessionId);
|
|
6304
|
+
} else if (index >= 0) switchToSession(index);
|
|
6305
|
+
session.term?.focus();
|
|
6306
|
+
return session;
|
|
6307
|
+
}
|
|
6308
|
+
|
|
6274
6309
|
// ── Diagnostics (no UI) ──
|
|
6275
6310
|
// window.__synabunTermStats(): keystroke → echo-parsed latency, bytes handed
|
|
6276
6311
|
// to xterm but not yet parsed, flow-control acks pending, renderer state and
|
|
@@ -52,6 +52,11 @@ const SOURCE_LABELS = {
|
|
|
52
52
|
'winget': 'winget',
|
|
53
53
|
'scoop': 'Scoop',
|
|
54
54
|
'choco': 'Chocolatey',
|
|
55
|
+
'mise': 'mise',
|
|
56
|
+
'asdf': 'asdf',
|
|
57
|
+
'cargo': 'Cargo',
|
|
58
|
+
'snap': 'Snap',
|
|
59
|
+
'system': 'your system package manager',
|
|
55
60
|
};
|
|
56
61
|
|
|
57
62
|
function sourceLabel(src) {
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// ═══════════════════════════════════════════
|
|
2
|
+
// SynaBun Neural Interface — the public address: the page side
|
|
3
|
+
// ═══════════════════════════════════════════
|
|
4
|
+
//
|
|
5
|
+
// What the two cards that start the Cloudflare tunnel share (the Share menu's
|
|
6
|
+
// Connection block in ui-invite.js, Settings → Automations → Online access in
|
|
7
|
+
// ui-settings.js): asking the server, starting and stopping, asking again
|
|
8
|
+
// while something is on its way (a download, the wait for an address), and
|
|
9
|
+
// the reading of each answer in the page's language. What an answer means is
|
|
10
|
+
// tunnel-view.js; how it is drawn is each card's own.
|
|
11
|
+
//
|
|
12
|
+
// The requests are sent with fetch as they are: same origin, no body. The
|
|
13
|
+
// server takes a start or a stop from the app's own pages only
|
|
14
|
+
// (lib/http-guards.js ownerRouteGuard), and a refusal is shown in the card
|
|
15
|
+
// like any other failure, not as the app-wide "forbidden" notice.
|
|
16
|
+
|
|
17
|
+
import { getLocale, t } from './i18n.js';
|
|
18
|
+
import { tunnelView } from './tunnel-view.js';
|
|
19
|
+
|
|
20
|
+
const POLL_MS = 1000;
|
|
21
|
+
/** How long a card keeps asking by itself. A download or a start that takes longer is shown again on the next look. */
|
|
22
|
+
const POLL_LIMIT_MS = 20 * 60 * 1000;
|
|
23
|
+
|
|
24
|
+
const translate = (key, params) => t(`tunnel.${key}`, params);
|
|
25
|
+
function number(value, digits) {
|
|
26
|
+
try { return value.toLocaleString(getLocale(), { minimumFractionDigits: digits, maximumFractionDigits: digits }); } catch { return value.toFixed(digits); }
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** tunnel-view.js tunnelView() in the page's language. */
|
|
30
|
+
export function readTunnel(status) {
|
|
31
|
+
return tunnelView(status, { t: translate, number });
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** The sentence a card shows where it offers the remote MCP address and no access key exists. */
|
|
35
|
+
export function mcpKeyNeededText() {
|
|
36
|
+
return translate('mcpKeyNeeded');
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async function ask(path, method = 'GET') {
|
|
40
|
+
const res = await fetch(path, { method });
|
|
41
|
+
let body = null;
|
|
42
|
+
try { body = await res.json(); } catch { body = null; }
|
|
43
|
+
return { status: res.status, ok: res.ok, body };
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* One card's hold on the tunnel.
|
|
48
|
+
*
|
|
49
|
+
* @param {object} [o]
|
|
50
|
+
* @param {(view: object, status: object | null) => void} [o.onChange] called with every new reading
|
|
51
|
+
* @param {() => boolean} [o.alive] false once the card is gone: the asking-again stops
|
|
52
|
+
* @returns {{ view: () => object, status: () => (object | null), show: (status: object) => object,
|
|
53
|
+
* refresh: () => Promise<object>, start: () => Promise<object>, stop: () => Promise<object>, dispose: () => void }}
|
|
54
|
+
*/
|
|
55
|
+
export function createTunnelCard({ onChange = () => {}, alive = () => true } = {}) {
|
|
56
|
+
let status = null;
|
|
57
|
+
let timer = null;
|
|
58
|
+
let since = 0;
|
|
59
|
+
let disposed = false;
|
|
60
|
+
|
|
61
|
+
function schedule(view) {
|
|
62
|
+
clearTimeout(timer);
|
|
63
|
+
timer = null;
|
|
64
|
+
if (disposed || !view.poll || !alive()) { since = 0; return; }
|
|
65
|
+
if (!since) since = Date.now();
|
|
66
|
+
if (Date.now() - since > POLL_LIMIT_MS) return;
|
|
67
|
+
timer = setTimeout(refresh, POLL_MS);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** Take an answer as the state of things, tell the card, and ask again later when it will change by itself. */
|
|
71
|
+
function show(next) {
|
|
72
|
+
status = next && typeof next === 'object' ? next : null;
|
|
73
|
+
const view = readTunnel(status);
|
|
74
|
+
if (!disposed) { try { onChange(view, status); } catch (error) { console.warn('[tunnel] The card could not be drawn:', error); } }
|
|
75
|
+
schedule(view);
|
|
76
|
+
return view;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async function refresh() {
|
|
80
|
+
if (disposed) return readTunnel(status);
|
|
81
|
+
try {
|
|
82
|
+
const got = await ask('/api/tunnel/status');
|
|
83
|
+
if (got.ok && got.body) return show(got.body);
|
|
84
|
+
} catch { /* the server is away for a moment: what is shown stays, and the next look asks again */ }
|
|
85
|
+
const view = readTunnel(status);
|
|
86
|
+
schedule(view);
|
|
87
|
+
return view;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** A start or a stop that the server did not take: shown in the card, with what the card knew before. */
|
|
91
|
+
function refused(got, error) {
|
|
92
|
+
// A server from before the tunnel program came with SynaBun answers a start with 400 when no cloudflared is
|
|
93
|
+
// installed, and its words tell the user to install one. What is missing is a restart: the card says that.
|
|
94
|
+
if (got?.status === 400 && !status?.cloudflared) return show({ ok: true, available: false, running: false, starting: false, url: null });
|
|
95
|
+
const failure = got?.status === 403
|
|
96
|
+
? { code: 'refused', message: got.body?.error || '' }
|
|
97
|
+
: { code: 'unknown', message: got?.body?.error || error?.message || '' };
|
|
98
|
+
return show({ ...(status || {}), ok: true, running: false, starting: false, url: null, state: 'failed', error: failure, cloudflared: status?.cloudflared || { state: 'missing' } });
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
async function send(path) {
|
|
102
|
+
let got = null;
|
|
103
|
+
try { got = await ask(path, 'POST'); } catch (error) { return refused(null, error); }
|
|
104
|
+
if (!got.ok || got.body?.ok === false) return refused(got);
|
|
105
|
+
return refresh();
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
view: () => readTunnel(status),
|
|
110
|
+
status: () => status,
|
|
111
|
+
show,
|
|
112
|
+
refresh,
|
|
113
|
+
start: () => send('/api/tunnel/start'),
|
|
114
|
+
stop: () => send('/api/tunnel/stop'),
|
|
115
|
+
dispose() { disposed = true; clearTimeout(timer); timer = null; },
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Put new markup into a card's block without disturbing the person using it: nothing happens when the markup is
|
|
121
|
+
* what is there already, and a button that had the keyboard's focus has it again afterwards (by its id).
|
|
122
|
+
*/
|
|
123
|
+
export function drawInto(container, html) {
|
|
124
|
+
if (!container || container.__tunnelHtml === html) return false;
|
|
125
|
+
const focused = container.contains(document.activeElement) ? document.activeElement?.id : '';
|
|
126
|
+
container.innerHTML = html;
|
|
127
|
+
container.__tunnelHtml = html;
|
|
128
|
+
if (focused) { try { container.querySelector(`#${CSS.escape(focused)}`)?.focus({ preventScroll: true }); } catch { /* the button is gone with its state */ } }
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
@@ -82,11 +82,15 @@ const ASSISTANT_BUTTON = ['#topright-assistant-panel-btn', 'closed'];
|
|
|
82
82
|
const ACTIVE_TAB = '#assistant-panel.open .asp-viewport.active';
|
|
83
83
|
const ACTIVE_BAR = '#assistant-panel.open .asp-tab-bar.active';
|
|
84
84
|
|
|
85
|
+
// With the workspace tools hidden (the toolbar's toggle) their controls are off screen, and the step outlines the
|
|
86
|
+
// toggle that shows them.
|
|
87
|
+
const TOOLS_TOGGLE = ['#topright-tools-btn'];
|
|
88
|
+
|
|
85
89
|
export const FEATURE_STEPS = [
|
|
86
|
-
{ id: 'explain-memory-explorer', chapter: 'memory', targets: [['#topright-memory-explorer-btn']] },
|
|
90
|
+
{ id: 'explain-memory-explorer', chapter: 'memory', targets: [['#topright-memory-explorer-btn'], TOOLS_TOGGLE] },
|
|
87
91
|
{ id: 'explain-graph', chapter: 'memory', copy: { '2d': 'body2d' }, targets: [['[data-menu="graph"] > .menubar-label']] },
|
|
88
92
|
{ id: 'explain-focus', chapter: 'workspace', targets: [['#wb-toolbar'], ['#titlebar-viz-toggle', 'graph']] },
|
|
89
|
-
{ id: 'explain-workspaces', chapter: 'workspace', targets: [['#ws-indicator']] },
|
|
93
|
+
{ id: 'explain-workspaces', chapter: 'workspace', targets: [['#ws-indicator'], TOOLS_TOGGLE] },
|
|
90
94
|
{ id: 'explain-terminals', chapter: 'tools', menu: 'apps', targets: [['#menu-terminal-claude', 'body', '#menu-terminal-opencode']] },
|
|
91
95
|
{ id: 'explain-browser', chapter: 'tools', menu: 'apps', targets: [['#menu-terminal-browser']] },
|
|
92
96
|
{ id: 'explain-side-panel', chapter: 'tools', targets: [['#topright-claude-panel-btn', 'body', '#topright-opencode-panel-btn']] },
|