synabun 2.1.0 → 2.2.1
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 +139 -0
- package/README.md +1 -1
- package/docs/whatsapp.md +11 -11
- package/lib/client-config-repair.js +13 -9
- package/lib/external-tools.js +6 -5
- package/lib/update-snapshot.js +77 -3
- package/lib/virustotal.mjs +12 -1
- package/mcp-server/dist/index.js +1 -1
- package/mcp-server/dist/index.js.map +1 -1
- package/mcp-server/dist/services/budget-judgments.d.ts +1 -1
- package/mcp-server/dist/services/budget-judgments.d.ts.map +1 -1
- package/mcp-server/dist/services/budget-judgments.js +5 -3
- package/mcp-server/dist/services/budget-judgments.js.map +1 -1
- package/mcp-server/dist/services/identity.d.ts +2 -2
- package/mcp-server/dist/services/identity.js +2 -2
- package/mcp-server/dist/services/memory-sessions.d.ts +1 -1
- package/mcp-server/dist/services/memory-sessions.d.ts.map +1 -1
- package/mcp-server/dist/services/memory-sessions.js +28 -2
- package/mcp-server/dist/services/memory-sessions.js.map +1 -1
- package/mcp-server/dist/services/neural-interface.d.ts +2 -1
- package/mcp-server/dist/services/neural-interface.d.ts.map +1 -1
- package/mcp-server/dist/services/neural-interface.js.map +1 -1
- package/mcp-server/dist/services/server-instructions.d.ts.map +1 -1
- package/mcp-server/dist/services/server-instructions.js +2 -1
- package/mcp-server/dist/services/server-instructions.js.map +1 -1
- package/mcp-server/dist/services/tool-catalog.js +1 -1
- package/mcp-server/dist/services/tool-catalog.js.map +1 -1
- package/mcp-server/dist/services/tool-list.d.ts +1 -1
- package/mcp-server/dist/services/tool-list.d.ts.map +1 -1
- package/mcp-server/dist/services/tool-runtime.d.ts +2 -2
- package/mcp-server/dist/services/tool-runtime.d.ts.map +1 -1
- package/mcp-server/dist/services/tool-runtime.js +1 -1
- package/mcp-server/dist/services/tool-runtime.js.map +1 -1
- package/mcp-server/dist/services/typesafe-config.js +1 -1
- package/mcp-server/dist/services/typesafe-config.js.map +1 -1
- package/mcp-server/dist/tools/agents.d.ts +8 -8
- package/mcp-server/dist/tools/agents.d.ts.map +1 -1
- package/mcp-server/dist/tools/agents.js +10 -9
- package/mcp-server/dist/tools/agents.js.map +1 -1
- package/mcp-server/dist/tools/choice.d.ts +6 -0
- package/mcp-server/dist/tools/choice.d.ts.map +1 -1
- package/mcp-server/dist/tools/choice.js +18 -13
- package/mcp-server/dist/tools/choice.js.map +1 -1
- package/mcp-server/dist/tools/git-tools.js +2 -2
- package/mcp-server/dist/tools/git-tools.js.map +1 -1
- package/mcp-server/dist/tools/morelogin.d.ts.map +1 -1
- package/mcp-server/dist/tools/morelogin.js +9 -6
- package/mcp-server/dist/tools/morelogin.js.map +1 -1
- package/mcp-server/dist/tools/skill-tools.d.ts +8 -8
- package/mcp-server/dist/tools/skill-tools.d.ts.map +1 -1
- package/mcp-server/dist/tools/skill-tools.js +11 -8
- package/mcp-server/dist/tools/skill-tools.js.map +1 -1
- package/mcp-server/package-lock.json +2 -2
- package/mcp-server/package.json +1 -1
- package/mcp-server/src/index.ts +1 -1
- package/mcp-server/src/services/budget-judgments.ts +5 -3
- package/mcp-server/src/services/identity.ts +2 -2
- package/mcp-server/src/services/memory-sessions.ts +24 -3
- package/mcp-server/src/services/neural-interface.ts +2 -1
- package/mcp-server/src/services/server-instructions.ts +2 -1
- package/mcp-server/src/services/tool-catalog.ts +1 -1
- package/mcp-server/src/services/tool-list.ts +1 -1
- package/mcp-server/src/services/tool-runtime.ts +2 -2
- package/mcp-server/src/services/typesafe-config.ts +1 -1
- package/mcp-server/src/tools/agents.ts +10 -9
- package/mcp-server/src/tools/choice.ts +17 -12
- package/mcp-server/src/tools/git-tools.ts +2 -2
- package/mcp-server/src/tools/morelogin.ts +6 -4
- package/mcp-server/src/tools/skill-tools.ts +11 -8
- package/neural-interface/i18n/en.json +504 -39
- package/neural-interface/i18n/pt-BR.json +504 -39
- package/neural-interface/lib/agent-sandbox-elevation.js +6 -0
- package/neural-interface/lib/antigravity/acp-client-host.js +554 -0
- package/neural-interface/lib/antigravity/acp-connection.js +299 -0
- package/neural-interface/lib/antigravity/bypass.js +100 -0
- package/neural-interface/lib/antigravity/catalog.js +273 -0
- package/neural-interface/lib/antigravity/home.js +260 -0
- package/neural-interface/lib/antigravity/migrate-gemini.js +139 -0
- package/neural-interface/lib/antigravity/panel-bridge.js +1058 -0
- package/neural-interface/lib/antigravity/policy-hook.mjs +78 -0
- package/neural-interface/lib/antigravity/policy.js +74 -0
- package/neural-interface/lib/antigravity/tool-call.js +178 -0
- package/neural-interface/lib/antigravity/transcripts.js +252 -0
- package/neural-interface/lib/antigravity/usage.js +43 -0
- package/neural-interface/lib/assistant-api.js +1 -0
- package/neural-interface/lib/assistant-brains/antigravity.js +423 -0
- package/neural-interface/lib/assistant-brains/codex.js +6 -1
- package/neural-interface/lib/assistant-budget-planner.js +7 -3
- package/neural-interface/lib/assistant-budget-split.js +42 -15
- package/neural-interface/lib/assistant-catalog.js +76 -9
- package/neural-interface/lib/assistant-config.js +6 -3
- package/neural-interface/lib/assistant-dispatch.js +211 -50
- package/neural-interface/lib/assistant-envelope.js +153 -1
- package/neural-interface/lib/assistant-evidence.js +80 -0
- package/neural-interface/lib/assistant-hidden-models.js +7 -5
- package/neural-interface/lib/assistant-persona.js +16 -11
- package/neural-interface/lib/assistant-plan-permissions.js +15 -0
- package/neural-interface/lib/assistant-router.js +237 -35
- package/neural-interface/lib/assistant-runtime.js +158 -12
- package/neural-interface/lib/assistant-task-prompt.js +10 -8
- package/neural-interface/lib/assistant-tools.js +2 -2
- package/neural-interface/lib/assistant-usage.js +29 -0
- package/neural-interface/lib/backup-service.js +6 -1
- package/neural-interface/lib/browser-guard-cdp.js +5 -4
- package/neural-interface/lib/browser-network-guard.js +274 -82
- package/neural-interface/lib/browser-tool-policy.js +12 -7
- package/neural-interface/lib/claude-agent-bridge.js +7 -0
- package/neural-interface/lib/claude-history-cache.js +210 -0
- package/neural-interface/lib/claude-model-catalog.js +5 -1
- package/neural-interface/lib/cli-install-api.js +1 -1
- package/neural-interface/lib/cli-install.js +160 -31
- package/neural-interface/lib/cli-resolver.js +9 -2
- package/neural-interface/lib/cli-update-planner.js +25 -15
- package/neural-interface/lib/codex-rollout-reader.js +52 -0
- package/neural-interface/lib/codex-worker-app-server.js +25 -6
- package/neural-interface/lib/editor-git-api.js +3 -20
- package/neural-interface/lib/exec-loop-command.js +9 -2
- package/neural-interface/lib/file-explorer-api.js +74 -40
- package/neural-interface/lib/file-explorer-watch.js +9 -3
- package/neural-interface/lib/git-bash/install.js +52 -6
- package/neural-interface/lib/git-bash/manager.js +59 -17
- package/neural-interface/lib/git-bash/pins.js +12 -0
- package/neural-interface/lib/git-read.js +2 -2
- package/neural-interface/lib/git-status-runner.js +390 -0
- package/neural-interface/lib/git-status-watchdog.js +40 -0
- package/neural-interface/lib/greeting/budgets.js +1 -0
- package/neural-interface/lib/greeting/engine.js +2 -2
- package/neural-interface/lib/greeting/sources.js +10 -12
- package/neural-interface/lib/greeting/writer.js +1 -1
- package/neural-interface/lib/mcp-client-config.js +37 -6
- package/neural-interface/lib/mcp-external-servers.js +40 -7
- package/neural-interface/lib/mcp-installer.js +2 -1
- package/neural-interface/lib/memory-session-capture.js +17 -3
- package/neural-interface/lib/morelogin.js +147 -25
- package/neural-interface/lib/native-loop-providers.js +423 -23
- package/neural-interface/lib/native-loop-runtime.js +23 -2
- package/neural-interface/lib/opencode-native-boundary.js +165 -22
- package/neural-interface/lib/owner-authority.js +1 -1
- package/neural-interface/lib/path-confine.js +12 -9
- package/neural-interface/lib/peer-identity.js +80 -6
- package/neural-interface/lib/pty-host/core.js +28 -1
- package/neural-interface/lib/pty-host/lifetime.js +12 -0
- package/neural-interface/lib/pty-host/manager.js +12 -1
- package/neural-interface/lib/remote-policy.js +1 -1
- package/neural-interface/lib/request-gate.js +3 -0
- package/neural-interface/lib/rulesets/api.js +6 -5
- package/neural-interface/lib/rulesets/fs-safe.js +1 -1
- package/neural-interface/lib/rulesets/installer.js +89 -10
- package/neural-interface/lib/rulesets/render.js +1 -1
- package/neural-interface/lib/session-cache-builder.js +64 -1
- package/neural-interface/lib/skills/catalog.js +5 -1
- package/neural-interface/lib/skills/creation-brief.js +1 -1
- package/neural-interface/lib/skills/creation-sources.js +19 -1
- package/neural-interface/lib/skills/deploy.js +9 -4
- package/neural-interface/lib/skills/draft-confinement.js +3 -1
- package/neural-interface/lib/skills/eval-confinement.js +3 -1
- package/neural-interface/lib/skills/eval-trace.js +16 -0
- package/neural-interface/lib/skills/export.js +5 -2
- package/neural-interface/lib/skills/known-bridge-digests.json +58 -4
- package/neural-interface/lib/skills/ownership.js +1 -1
- package/neural-interface/lib/skills/roots.js +10 -3
- package/neural-interface/lib/skills/runtime-checks.js +6 -3
- package/neural-interface/lib/skills/service.js +15 -7
- package/neural-interface/lib/skills/telemetry.js +6 -0
- package/neural-interface/lib/synabun-version.js +1 -1
- package/neural-interface/lib/system-activity.js +1 -1
- package/neural-interface/lib/whatsapp/brain.js +7 -3
- package/neural-interface/lib/whatsapp/cards.js +22 -9
- package/neural-interface/lib/whatsapp/config.js +1 -1
- package/neural-interface/lib/worker-confinement.js +77 -1
- package/neural-interface/lib/worker-question.js +74 -0
- package/neural-interface/lib/worker-resume.js +13 -4
- package/neural-interface/lib/worker-sandbox.js +46 -16
- package/neural-interface/package-lock.json +18 -2
- package/neural-interface/package.json +2 -1
- package/neural-interface/public/onboarding.html +1 -1
- package/neural-interface/public/shared/agent-runtime-options.js +89 -11
- package/neural-interface/public/shared/agy/agy-bypass.js +47 -0
- package/neural-interface/public/shared/agy/agy-client.js +266 -0
- package/neural-interface/public/shared/agy/agy-commands.js +120 -0
- package/neural-interface/public/shared/agy/agy-copy.js +326 -0
- package/neural-interface/public/shared/agy/agy-diff.js +161 -0
- package/neural-interface/public/shared/agy/agy-events.js +469 -0
- package/neural-interface/public/shared/agy/agy-greeting.js +26 -0
- package/neural-interface/public/shared/agy/agy-options.js +232 -0
- package/neural-interface/public/shared/agy/agy-panel.js +2543 -0
- package/neural-interface/public/shared/agy/agy-render.js +392 -0
- package/neural-interface/public/shared/agy/agy-setup.js +149 -0
- package/neural-interface/public/shared/agy/agy-styles.js +604 -0
- package/neural-interface/public/shared/agy/agy-tabs-logic.js +181 -0
- package/neural-interface/public/shared/api.js +4 -4
- package/neural-interface/public/shared/assistant/asst-agents-dock.js +3 -4
- package/neural-interface/public/shared/assistant/asst-api.js +15 -3
- package/neural-interface/public/shared/assistant/asst-brain-picker.js +56 -9
- package/neural-interface/public/shared/assistant/asst-budget.js +5 -4
- package/neural-interface/public/shared/assistant/asst-computer.js +26 -2
- package/neural-interface/public/shared/assistant/asst-control.js +48 -0
- package/neural-interface/public/shared/assistant/asst-hosts.js +16 -7
- package/neural-interface/public/shared/assistant/asst-limit-dock.js +6 -1
- package/neural-interface/public/shared/assistant/asst-limit-wait.js +38 -5
- package/neural-interface/public/shared/assistant/asst-motion-gate.js +80 -0
- package/neural-interface/public/shared/assistant/asst-panel.js +46 -9
- package/neural-interface/public/shared/assistant/asst-render.js +112 -18
- package/neural-interface/public/shared/assistant/asst-route.js +237 -57
- package/neural-interface/public/shared/assistant/asst-routes-editor.js +9 -8
- package/neural-interface/public/shared/assistant/asst-scene-styles.js +55 -23
- package/neural-interface/public/shared/assistant/asst-scenes.js +279 -80
- package/neural-interface/public/shared/assistant/asst-sidepanel-styles.js +4 -4
- package/neural-interface/public/shared/assistant/asst-sidepanel.js +51 -7
- package/neural-interface/public/shared/assistant/asst-slash.js +8 -2
- package/neural-interface/public/shared/assistant/asst-state.js +76 -9
- package/neural-interface/public/shared/assistant/asst-style-cache.js +44 -0
- package/neural-interface/public/shared/assistant/asst-styles.js +58 -4
- package/neural-interface/public/shared/assistant/asst-tool-kinds.js +34 -7
- package/neural-interface/public/shared/assistant/asst-usage.js +2 -1
- package/neural-interface/public/shared/cdx/cdx-output.js +26 -3
- package/neural-interface/public/shared/cdx/cdx-panel.js +14 -2
- package/neural-interface/public/shared/cdx/cdx-preview.js +12 -0
- package/neural-interface/public/shared/cdx/cdx-protocol.js +11 -10
- package/neural-interface/public/shared/cdx/cdx-render.js +10 -9
- package/neural-interface/public/shared/cdx/cdx-requests.js +11 -1
- package/neural-interface/public/shared/cdx/cdx-styles.js +4 -0
- package/neural-interface/public/shared/cdx/cdx-tabs.js +75 -5
- package/neural-interface/public/shared/cli-install-controller.js +218 -0
- package/neural-interface/public/shared/cli-install-view.js +7 -4
- package/neural-interface/public/shared/cli-status.js +9 -8
- package/neural-interface/public/shared/constants.js +3 -2
- package/neural-interface/public/shared/context-menu-model.js +1 -0
- package/neural-interface/public/shared/cp/cp-permissions.js +12 -0
- package/neural-interface/public/shared/cp/cp-restore.js +162 -0
- package/neural-interface/public/shared/cp/cp-tool-cards.js +10 -3
- package/neural-interface/public/shared/desktop-bridge.js +17 -0
- package/neural-interface/public/shared/desktop-titlebar-view.js +12 -0
- package/neural-interface/public/shared/desktop-titlebar.js +13 -4
- package/neural-interface/public/shared/desktop-update-view.js +1 -0
- package/neural-interface/public/shared/explorer/fx-api.js +4 -4
- package/neural-interface/public/shared/explorer/fx-links.js +3 -3
- package/neural-interface/public/shared/explorer/fx-logic.js +1 -1
- package/neural-interface/public/shared/explorer/fx-main.js +48 -16
- package/neural-interface/public/shared/explorer/fx-tree.js +1 -0
- package/neural-interface/public/shared/greeting/greeting-card.js +2 -2
- package/neural-interface/public/shared/greeting/greeting-view.js +1 -0
- package/neural-interface/public/shared/html-shell.js +21 -4
- package/neural-interface/public/shared/loading-teardown.js +34 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-childpanel.js +6 -1
- package/neural-interface/public/shared/ocp-v2/ocp-v2-panel.js +28 -7
- package/neural-interface/public/shared/ocp-v2/ocp-v2-rehydrate.js +13 -4
- package/neural-interface/public/shared/ocp-v2/ocp-v2-render.js +17 -1
- package/neural-interface/public/shared/ocp-v2/ocp-v2-send.js +6 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +101 -68
- package/neural-interface/public/shared/ocp-v2/ocp-v2-ws.js +46 -3
- package/neural-interface/public/shared/provider-icons.js +4 -2
- package/neural-interface/public/shared/settings/settings-rules.js +2 -2
- package/neural-interface/public/shared/settings/settings-skill-folders-pane.js +1 -1
- package/neural-interface/public/shared/settings/settings-skill-folders.js +2 -2
- package/neural-interface/public/shared/showcase-privacy.js +6 -1
- package/neural-interface/public/shared/sidepanel-session-status.js +3 -3
- package/neural-interface/public/shared/skills/ss-creation.js +6 -3
- package/neural-interface/public/shared/skills/ss-dialog.js +5 -2
- package/neural-interface/public/shared/skills/ss-lint.js +9 -1
- package/neural-interface/public/shared/skills/ss-profiles.js +44 -6
- package/neural-interface/public/shared/skills/ss-review-view.js +2 -2
- package/neural-interface/public/shared/skills/studio/sx-actions.js +1 -1
- package/neural-interface/public/shared/skills/studio/sx-create-ai-view.js +1 -1
- package/neural-interface/public/shared/skills/studio/sx-create-ai.js +2 -1
- package/neural-interface/public/shared/skills/studio/sx-dom.js +2 -1
- package/neural-interface/public/shared/skills/studio/sx-fixes-view.js +359 -0
- package/neural-interface/public/shared/skills/studio/sx-fixes.js +327 -0
- package/neural-interface/public/shared/skills/studio/sx-inspector.js +1 -1
- package/neural-interface/public/shared/skills/studio/sx-install-flow.js +9 -6
- package/neural-interface/public/shared/skills/studio/sx-install.js +20 -3
- package/neural-interface/public/shared/skills/studio/sx-library-view.js +144 -35
- package/neural-interface/public/shared/skills/studio/sx-library.js +6 -2
- package/neural-interface/public/shared/skills/studio/sx-main.js +11 -2
- package/neural-interface/public/shared/skills/studio/sx-review-view.js +1 -1
- package/neural-interface/public/shared/skills/studio/sx-subject.js +7 -6
- package/neural-interface/public/shared/skills/studio/sx-workspace-view.js +6 -5
- package/neural-interface/public/shared/state.js +1 -1
- package/neural-interface/public/shared/storage-retry.js +47 -0
- package/neural-interface/public/shared/storage.js +25 -4
- package/neural-interface/public/shared/streaming-markdown.js +58 -0
- package/neural-interface/public/shared/styles.css +362 -35
- package/neural-interface/public/shared/synabun-mascot.js +27 -8
- package/neural-interface/public/shared/synabun-ticker.js +147 -12
- package/neural-interface/public/shared/text-cache.js +29 -0
- package/neural-interface/public/shared/tool-list-picker.js +2 -2
- package/neural-interface/public/shared/tool-list-view.js +2 -2
- package/neural-interface/public/shared/topright-overflow-logic.js +54 -0
- package/neural-interface/public/shared/ui-antigravity-panel.js +19 -0
- package/neural-interface/public/shared/ui-assistant.js +2 -0
- package/neural-interface/public/shared/ui-automation-studio.js +20 -12
- package/neural-interface/public/shared/ui-claude-panel.js +374 -134
- package/neural-interface/public/shared/ui-cli-banner.js +23 -167
- package/neural-interface/public/shared/ui-file-explorer.js +48 -6
- package/neural-interface/public/shared/ui-file-links.js +2 -2
- package/neural-interface/public/shared/ui-games.js +2 -2
- package/neural-interface/public/shared/ui-judgments.js +1 -1
- package/neural-interface/public/shared/ui-keybinds.js +8 -2
- package/neural-interface/public/shared/ui-link.js +3 -3
- package/neural-interface/public/shared/ui-loading.js +5 -4
- package/neural-interface/public/shared/ui-menubar.js +2 -2
- package/neural-interface/public/shared/ui-native-loop-router.js +4 -0
- package/neural-interface/public/shared/ui-navbar.js +45 -0
- package/neural-interface/public/shared/ui-notifications.js +1 -0
- package/neural-interface/public/shared/ui-resume.js +9 -7
- package/neural-interface/public/shared/ui-schedules-studio.js +41 -10
- package/neural-interface/public/shared/ui-scroll-follow.js +16 -5
- package/neural-interface/public/shared/ui-sessions.js +22 -12
- package/neural-interface/public/shared/ui-settings.js +90 -65
- package/neural-interface/public/shared/ui-sidepanel-session-entry.js +9 -2
- package/neural-interface/public/shared/ui-sidepanel-sessions.js +3 -3
- package/neural-interface/public/shared/ui-sidepanel-tray.js +48 -7
- package/neural-interface/public/shared/ui-sidepanel-windows.js +3 -3
- package/neural-interface/public/shared/ui-terminal.js +146 -10
- package/neural-interface/public/shared/ui-tool-updates.js +3 -3
- package/neural-interface/public/shared/ui-tooltip.js +71 -46
- package/neural-interface/public/shared/ui-topright-overflow.js +233 -0
- package/neural-interface/public/shared/ui-whiteboard.js +1 -1
- package/neural-interface/public/shared/ui-worker-end.js +1 -1
- package/neural-interface/public/shared/whatsapp/wa-view.js +2 -2
- package/neural-interface/public/shared/worker-questions.js +34 -0
- package/neural-interface/public/sidepanel-session.html +1 -1
- package/neural-interface/server.js +731 -466
- package/neural-interface/templates/rulesets/README.md +1 -1
- package/neural-interface/templates/rulesets/legacy-hashes.json +5 -5
- package/neural-interface/templates/rulesets/manifest.json +1 -1
- package/npm-shrinkwrap.json +18 -2
- package/package.json +2 -1
- package/skills/skill-forge/SKILL.md +4 -4
- package/skills/synabun/SKILL.md +1 -1
- package/skills/synabun/modules/schedule.md +3 -3
- /package/neural-interface/templates/rulesets/{gemini.md → antigravity.md} +0 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Promote complete Markdown blocks once; only the unfinished tail is rebuilt.
|
|
2
|
+
// A final whole-document parse resolves cross-block constructs (link references,
|
|
3
|
+
// loose lists). The conservative boundary follows the Claude panel's live path.
|
|
4
|
+
export function findStableMarkdownBoundary(text, from = 0, minTail = 120) {
|
|
5
|
+
let best = from, pos = from, prevBlank = false;
|
|
6
|
+
let fenceChar = '', fenceLen = 0;
|
|
7
|
+
const limit = text.length - minTail;
|
|
8
|
+
while (pos < limit) {
|
|
9
|
+
const nl = text.indexOf('\n', pos);
|
|
10
|
+
if (nl === -1) break;
|
|
11
|
+
const line = text.slice(pos, nl);
|
|
12
|
+
const trimmed = line.replace(/^[ \t]+/, '');
|
|
13
|
+
const fence = /^(`{3,}|~{3,})/.exec(trimmed);
|
|
14
|
+
if (fence) {
|
|
15
|
+
if (!fenceChar) { fenceChar = fence[1][0]; fenceLen = fence[1].length; }
|
|
16
|
+
else if (fence[1][0] === fenceChar && fence[1].length >= fenceLen && /^\s*$/.test(trimmed.slice(fence[1].length))) fenceChar = '';
|
|
17
|
+
}
|
|
18
|
+
const lineStart = pos;
|
|
19
|
+
const blank = trimmed === '';
|
|
20
|
+
pos = nl + 1;
|
|
21
|
+
if (fenceChar) { prevBlank = false; continue; }
|
|
22
|
+
if (prevBlank && !blank && lineStart <= limit) {
|
|
23
|
+
if (!/^[ \t]/.test(line) && !/^([-*+] |\d{1,9}[.)] |>|\|)/.test(trimmed)) best = lineStart;
|
|
24
|
+
}
|
|
25
|
+
prevBlank = blank;
|
|
26
|
+
}
|
|
27
|
+
return best;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const prefixes = new WeakMap();
|
|
31
|
+
|
|
32
|
+
// `render` sanitizes into its destination, exactly as for a finished message.
|
|
33
|
+
export function renderStreamingMarkdown(body, text, render, { streaming = false } = {}) {
|
|
34
|
+
if (!streaming) { prefixes.delete(body); render(body, text); return; }
|
|
35
|
+
let state = prefixes.get(body);
|
|
36
|
+
if (!state || text.length < state.length) {
|
|
37
|
+
state = { length: 0, nodes: 0 };
|
|
38
|
+
prefixes.set(body, state);
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const boundary = findStableMarkdownBoundary(text, state.length);
|
|
42
|
+
while (body.childNodes.length > state.nodes) body.lastChild.remove();
|
|
43
|
+
const fragment = body.ownerDocument.createElement('div');
|
|
44
|
+
if (boundary > state.length) {
|
|
45
|
+
render(fragment, text.slice(state.length, boundary));
|
|
46
|
+
body.append(...fragment.childNodes);
|
|
47
|
+
state.nodes = body.childNodes.length;
|
|
48
|
+
state.length = boundary;
|
|
49
|
+
}
|
|
50
|
+
if (text.length > state.length) {
|
|
51
|
+
render(fragment, text.slice(state.length));
|
|
52
|
+
body.append(...fragment.childNodes);
|
|
53
|
+
}
|
|
54
|
+
} catch {
|
|
55
|
+
prefixes.delete(body);
|
|
56
|
+
render(body, text);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -1799,6 +1799,12 @@
|
|
|
1799
1799
|
0 8px 20px rgba(0,0,0,0.25),
|
|
1800
1800
|
0 24px 48px rgba(0,0,0,0.18);
|
|
1801
1801
|
}
|
|
1802
|
+
html.platform-win32 .menubar-dropdown,
|
|
1803
|
+
html.platform-win32 .menubar-submenu {
|
|
1804
|
+
background: rgba(28, 28, 32, 0.98);
|
|
1805
|
+
backdrop-filter: none;
|
|
1806
|
+
-webkit-backdrop-filter: none;
|
|
1807
|
+
}
|
|
1802
1808
|
|
|
1803
1809
|
/* Arrow caret — seamless extension of the container */
|
|
1804
1810
|
.menubar-dropdown::before {
|
|
@@ -3165,7 +3171,7 @@
|
|
|
3165
3171
|
}
|
|
3166
3172
|
.kb-cli-claude { color: #D4A27F; }
|
|
3167
3173
|
.kb-cli-codex { color: #74c7a5; }
|
|
3168
|
-
.kb-cli-
|
|
3174
|
+
.kb-cli-antigravity { color: #669DF6; }
|
|
3169
3175
|
|
|
3170
3176
|
/* Keycap-style buttons */
|
|
3171
3177
|
.kb-key-btn {
|
|
@@ -4448,7 +4454,7 @@
|
|
|
4448
4454
|
|
|
4449
4455
|
/* Setup tab: provider icon accents when section expanded */
|
|
4450
4456
|
#setup-claude:not(.collapsed) .gfx-group-title .cc-provider-icon { color: #d97757; }
|
|
4451
|
-
#setup-
|
|
4457
|
+
#setup-antigravity:not(.collapsed) .gfx-group-title .cc-provider-icon { color: #4285f4; }
|
|
4452
4458
|
#setup-codex:not(.collapsed) .gfx-group-title .cc-provider-icon { color: #10a37f; }
|
|
4453
4459
|
|
|
4454
4460
|
/* Setup tab: status badge */
|
|
@@ -6118,7 +6124,8 @@
|
|
|
6118
6124
|
html.sp-resizing .claude-panel,
|
|
6119
6125
|
html.sp-resizing .codex-panel,
|
|
6120
6126
|
html.sp-resizing .ocp-panel,
|
|
6121
|
-
html.sp-resizing .ocpv2-panel
|
|
6127
|
+
html.sp-resizing .ocpv2-panel,
|
|
6128
|
+
html.sp-resizing .agy-panel {
|
|
6122
6129
|
backdrop-filter: none !important;
|
|
6123
6130
|
-webkit-backdrop-filter: none !important;
|
|
6124
6131
|
background: rgba(18, 18, 20, 0.985) !important;
|
|
@@ -6130,18 +6137,18 @@
|
|
|
6130
6137
|
top: calc(var(--navbar-height, 48px) + 20px);
|
|
6131
6138
|
right: calc(20px + var(--right-panel-width, var(--claude-panel-width, 0px)));
|
|
6132
6139
|
/* One row in the band between the left panels (Memory Explorer, File Explorer) and the right one, 20px clear of
|
|
6133
|
-
each, never over a left panel: where the band is narrower than the row, the
|
|
6134
|
-
the
|
|
6140
|
+
each, never over a left panel: where the band is narrower than the row, the lowest-priority buttons leave it
|
|
6141
|
+
for the ⋯ menu (ui-topright-overflow.js; see "Fit" below), so the row never wraps. What still reaches left of the
|
|
6135
6142
|
band (no band at all between wide panels, a dropdown that opens leftwards) is cut off at the band's edge:
|
|
6136
6143
|
nothing of the toolbar is drawn, or takes a click, over a left panel. */
|
|
6137
|
-
max-width: var(--topright-band);
|
|
6144
|
+
max-width: calc(var(--topright-band) - var(--topright-tray-inset));
|
|
6138
6145
|
min-height: 40px; /* the dock's height: the buttons and the pills stay where they are when it hides */
|
|
6139
6146
|
justify-content: flex-end;
|
|
6140
6147
|
clip-path: inset(-100vh -100vw -200vh calc(var(--sidebar-total-width, 0px) + var(--right-panel-width, var(--claude-panel-width, 0px)) + 40px + 100% - 100vw));
|
|
6141
6148
|
transition: right 0.3s cubic-bezier(0.22, 1, 0.36, 1);
|
|
6142
6149
|
z-index: 400;
|
|
6143
6150
|
display: flex;
|
|
6144
|
-
flex-wrap:
|
|
6151
|
+
flex-wrap: nowrap;
|
|
6145
6152
|
align-items: center;
|
|
6146
6153
|
gap: 6px;
|
|
6147
6154
|
font-family: inherit;
|
|
@@ -6172,6 +6179,8 @@
|
|
|
6172
6179
|
display: flex;
|
|
6173
6180
|
align-items: center;
|
|
6174
6181
|
flex-shrink: 0;
|
|
6182
|
+
/* One line, always: what does not fit the band goes into the ⋯ menu (ui-topright-overflow.js). */
|
|
6183
|
+
flex-wrap: nowrap;
|
|
6175
6184
|
gap: 2px;
|
|
6176
6185
|
overflow: visible;
|
|
6177
6186
|
background: rgba(18, 18, 22, 0.65);
|
|
@@ -6189,13 +6198,123 @@
|
|
|
6189
6198
|
box-shadow: var(--shadow-lg), var(--shadow-highlight);
|
|
6190
6199
|
}
|
|
6191
6200
|
|
|
6192
|
-
/* The tools toggle and the agent side panels: one row
|
|
6201
|
+
/* The ⋯, the tools toggle and the agent side panels: one row at the bar's right edge that never wraps. */
|
|
6193
6202
|
#topright-buttons {
|
|
6203
|
+
position: relative;
|
|
6194
6204
|
display: flex;
|
|
6195
6205
|
align-items: center;
|
|
6196
6206
|
flex-shrink: 0;
|
|
6207
|
+
flex-wrap: nowrap;
|
|
6197
6208
|
gap: 6px;
|
|
6198
|
-
min-height: 40px; /* the dock's height:
|
|
6209
|
+
min-height: 40px; /* the dock's height: the buttons stay where they are when it hides */
|
|
6210
|
+
}
|
|
6211
|
+
|
|
6212
|
+
/* ── Overflow: a button that does not fit the band leaves the row for the ⋯ menu (ui-topright-overflow.js) ── */
|
|
6213
|
+
#topright-controls .tr-overflowed {
|
|
6214
|
+
display: none !important;
|
|
6215
|
+
}
|
|
6216
|
+
#topright-overflow-btn {
|
|
6217
|
+
display: none;
|
|
6218
|
+
}
|
|
6219
|
+
#topright-controls.has-overflow #topright-overflow-btn {
|
|
6220
|
+
display: flex;
|
|
6221
|
+
}
|
|
6222
|
+
/* The menu hangs from the bar's right edge, over the session pills (z-index inside the row's stacking context),
|
|
6223
|
+
opaque like the dock's other menus since its blur cannot reach the pills. */
|
|
6224
|
+
#topright-overflow-menu {
|
|
6225
|
+
position: absolute;
|
|
6226
|
+
top: calc(100% + 6px);
|
|
6227
|
+
right: 0;
|
|
6228
|
+
z-index: 3;
|
|
6229
|
+
min-width: 200px;
|
|
6230
|
+
max-width: calc(var(--topright-band) - var(--topright-tray-inset));
|
|
6231
|
+
max-height: calc(100vh - var(--navbar-height, 48px) - 90px);
|
|
6232
|
+
overflow-y: auto;
|
|
6233
|
+
display: flex;
|
|
6234
|
+
flex-direction: column;
|
|
6235
|
+
gap: 2px;
|
|
6236
|
+
padding: 4px;
|
|
6237
|
+
box-sizing: border-box;
|
|
6238
|
+
background: rgb(18, 18, 22);
|
|
6239
|
+
border: 1px solid var(--b-subtle, rgba(255, 255, 255, 0.06));
|
|
6240
|
+
border-radius: 10px;
|
|
6241
|
+
box-shadow: var(--shadow-lg), var(--shadow-highlight);
|
|
6242
|
+
}
|
|
6243
|
+
#topright-overflow-menu[hidden] {
|
|
6244
|
+
display: none;
|
|
6245
|
+
}
|
|
6246
|
+
.topright-overflow-item {
|
|
6247
|
+
position: relative;
|
|
6248
|
+
display: flex;
|
|
6249
|
+
align-items: center;
|
|
6250
|
+
gap: 8px;
|
|
6251
|
+
width: 100%;
|
|
6252
|
+
min-height: 30px;
|
|
6253
|
+
padding: 0 10px 0 8px;
|
|
6254
|
+
background: transparent;
|
|
6255
|
+
border: none;
|
|
6256
|
+
border-radius: 5px;
|
|
6257
|
+
color: var(--t-muted);
|
|
6258
|
+
font: 400 13px/1.45 inherit;
|
|
6259
|
+
font-family: inherit;
|
|
6260
|
+
text-align: left;
|
|
6261
|
+
cursor: pointer;
|
|
6262
|
+
white-space: nowrap;
|
|
6263
|
+
}
|
|
6264
|
+
.topright-overflow-item:hover,
|
|
6265
|
+
.topright-overflow-item:focus-visible {
|
|
6266
|
+
background: rgba(255, 255, 255, 0.08);
|
|
6267
|
+
color: var(--t-bright);
|
|
6268
|
+
outline: none;
|
|
6269
|
+
}
|
|
6270
|
+
.topright-overflow-item.active {
|
|
6271
|
+
color: var(--t-bright);
|
|
6272
|
+
}
|
|
6273
|
+
.topright-overflow-item.active::before {
|
|
6274
|
+
content: '';
|
|
6275
|
+
position: absolute;
|
|
6276
|
+
left: 2px;
|
|
6277
|
+
top: 50%;
|
|
6278
|
+
transform: translateY(-50%);
|
|
6279
|
+
width: 2.5px;
|
|
6280
|
+
height: 12px;
|
|
6281
|
+
border-radius: 2px;
|
|
6282
|
+
background: var(--accent-blue);
|
|
6283
|
+
}
|
|
6284
|
+
.topright-overflow-icon {
|
|
6285
|
+
display: flex;
|
|
6286
|
+
align-items: center;
|
|
6287
|
+
justify-content: center;
|
|
6288
|
+
width: 16px;
|
|
6289
|
+
flex-shrink: 0;
|
|
6290
|
+
}
|
|
6291
|
+
.topright-overflow-icon svg {
|
|
6292
|
+
width: 14px;
|
|
6293
|
+
height: 14px;
|
|
6294
|
+
stroke: currentColor;
|
|
6295
|
+
stroke-width: 1.7;
|
|
6296
|
+
fill: none;
|
|
6297
|
+
}
|
|
6298
|
+
.topright-overflow-icon svg[fill="currentColor"] {
|
|
6299
|
+
fill: currentColor;
|
|
6300
|
+
stroke: none;
|
|
6301
|
+
}
|
|
6302
|
+
.topright-overflow-label {
|
|
6303
|
+
flex: 1;
|
|
6304
|
+
min-width: 0;
|
|
6305
|
+
overflow: hidden;
|
|
6306
|
+
text-overflow: ellipsis;
|
|
6307
|
+
}
|
|
6308
|
+
.topright-overflow-item .topright-overflow-badge {
|
|
6309
|
+
position: static;
|
|
6310
|
+
font-size: 10px;
|
|
6311
|
+
min-width: 16px;
|
|
6312
|
+
height: 16px;
|
|
6313
|
+
line-height: 16px;
|
|
6314
|
+
padding: 0 4px;
|
|
6315
|
+
border-radius: 8px;
|
|
6316
|
+
text-align: center;
|
|
6317
|
+
font-weight: 600;
|
|
6199
6318
|
}
|
|
6200
6319
|
|
|
6201
6320
|
/* Hidden by the tools toggle (#topright-tools-btn, ui-navbar.js): the buttons and the pills stay where they are. */
|
|
@@ -6203,14 +6322,82 @@
|
|
|
6203
6322
|
display: none;
|
|
6204
6323
|
}
|
|
6205
6324
|
|
|
6206
|
-
/* ──
|
|
6325
|
+
/* ── The whiteboard rail toggle (ui-navbar.js): #wb-hide-btn at the rail's foot hides the rail (#wb-toolbar,
|
|
6326
|
+
pickers included: they are its children); the SynaBun logo button (#toolbar-show-btn) above the console button
|
|
6327
|
+
(#term-peek-dock) brings it back. Shown only while the whiteboard is (#static-bg.visible, Focus Mode). The
|
|
6328
|
+
workspace toolbar and the session pills are never touched. ── */
|
|
6329
|
+
#wb-toolbar {
|
|
6330
|
+
transition: opacity 0.22s ease, translate 0.22s cubic-bezier(0.22, 1, 0.36, 1), visibility 0s linear 0s;
|
|
6331
|
+
}
|
|
6332
|
+
#wb-toolbar.wb-rail-hidden {
|
|
6333
|
+
opacity: 0;
|
|
6334
|
+
visibility: hidden;
|
|
6335
|
+
pointer-events: none;
|
|
6336
|
+
translate: -12px 0;
|
|
6337
|
+
transition: opacity 0.22s ease, translate 0.22s cubic-bezier(0.22, 1, 0.36, 1), visibility 0s linear 0.22s;
|
|
6338
|
+
}
|
|
6339
|
+
#toolbar-show-btn {
|
|
6340
|
+
position: fixed;
|
|
6341
|
+
left: calc(var(--sidebar-total-width, 0px) + 16px);
|
|
6342
|
+
bottom: 64px; /* directly above the console button (#term-peek-dock: 40px at bottom 16px), 8px between */
|
|
6343
|
+
z-index: 149;
|
|
6344
|
+
display: flex;
|
|
6345
|
+
align-items: center;
|
|
6346
|
+
justify-content: center;
|
|
6347
|
+
width: 40px;
|
|
6348
|
+
height: 40px;
|
|
6349
|
+
padding: 0;
|
|
6350
|
+
background: rgba(18, 18, 20, 0.85);
|
|
6351
|
+
backdrop-filter: blur(var(--blur-heavy)) saturate(1.4);
|
|
6352
|
+
-webkit-backdrop-filter: blur(var(--blur-heavy)) saturate(1.4);
|
|
6353
|
+
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
6354
|
+
border-radius: 10px;
|
|
6355
|
+
box-shadow: var(--shadow-md), var(--shadow-highlight);
|
|
6356
|
+
cursor: pointer;
|
|
6357
|
+
animation: toolbar-show-in 0.22s cubic-bezier(0.22, 1, 0.36, 1);
|
|
6358
|
+
transition: background 0.2s, border-color 0.2s;
|
|
6359
|
+
}
|
|
6360
|
+
#toolbar-show-btn[hidden],
|
|
6361
|
+
body:not(:has(#static-bg.visible)) #toolbar-show-btn,
|
|
6362
|
+
body.fe-editor-open #toolbar-show-btn {
|
|
6363
|
+
display: none;
|
|
6364
|
+
}
|
|
6365
|
+
#toolbar-show-btn img {
|
|
6366
|
+
width: 22px;
|
|
6367
|
+
height: 22px;
|
|
6368
|
+
object-fit: contain;
|
|
6369
|
+
opacity: 0.75;
|
|
6370
|
+
pointer-events: none;
|
|
6371
|
+
transition: opacity 0.2s;
|
|
6372
|
+
}
|
|
6373
|
+
#toolbar-show-btn:hover {
|
|
6374
|
+
background: rgba(24, 24, 28, 0.95);
|
|
6375
|
+
border-color: rgba(255, 255, 255, 0.16);
|
|
6376
|
+
}
|
|
6377
|
+
#toolbar-show-btn:hover img,
|
|
6378
|
+
#toolbar-show-btn:focus-visible img {
|
|
6379
|
+
opacity: 1;
|
|
6380
|
+
}
|
|
6381
|
+
#toolbar-show-btn:focus-visible {
|
|
6382
|
+
outline: 1px solid rgba(255, 255, 255, 0.4);
|
|
6383
|
+
outline-offset: 2px;
|
|
6384
|
+
}
|
|
6385
|
+
@keyframes toolbar-show-in {
|
|
6386
|
+
from { opacity: 0; transform: translateY(6px) scale(0.92); }
|
|
6387
|
+
to { opacity: 1; transform: none; }
|
|
6388
|
+
}
|
|
6389
|
+
#wb-hide-btn svg {
|
|
6390
|
+
stroke-width: 2;
|
|
6391
|
+
}
|
|
6392
|
+
|
|
6393
|
+
/* ── Fit: one row in any band, nothing out of reach, nothing over a left panel ──
|
|
6207
6394
|
--topright-row is the row at its widest without the workspace name: the dock (the switcher with its save button,
|
|
6208
6395
|
50px; seven tools of 30px and the update button; two dividers; the dock's gaps and edges: 298px in all, 266px
|
|
6209
6396
|
while the update button is hidden), then --topright-buttons, the tools toggle and the four agent buttons with
|
|
6210
|
-
the gaps before them (
|
|
6397
|
+
the gaps before them (222px: six 32px buttons, five 6px gaps). Below row + 45px of band the workspace name goes into the switcher's tooltip
|
|
6211
6398
|
(--topright-compact; it shows from 40px on, up to 120px, and takes what the band leaves it). Below the row itself
|
|
6212
|
-
|
|
6213
|
-
|
|
6399
|
+
nothing wraps: the buttons that do not fit leave the row for the ⋯ menu, lowest priority first
|
|
6400
|
+
(ui-topright-overflow.js OVERFLOW_ORDER, measured live). --topright-compact is
|
|
6214
6401
|
1 below its width and 0 from it up (tan(atan2()) divides a length by a length); it lives on :root so that a
|
|
6215
6402
|
style query reaches the name. Change --topright-row (or --topright-buttons) with the controls of the row. */
|
|
6216
6403
|
@property --topright-compact {
|
|
@@ -6220,7 +6407,7 @@
|
|
|
6220
6407
|
}
|
|
6221
6408
|
:root {
|
|
6222
6409
|
--topright-band: calc(100vw - var(--sidebar-total-width, 0px) - var(--right-panel-width, var(--claude-panel-width, 0px)) - 40px);
|
|
6223
|
-
--topright-buttons:
|
|
6410
|
+
--topright-buttons: 222px;
|
|
6224
6411
|
--topright-row: calc(298px + var(--topright-buttons));
|
|
6225
6412
|
--topright-compact: clamp(0, tan(atan2(calc(var(--topright-row) + 45px - var(--topright-band)), 0.01px)), 1);
|
|
6226
6413
|
}
|
|
@@ -6267,6 +6454,7 @@
|
|
|
6267
6454
|
#topright-controls > #term-minimized-tray > .term-minimized-pill .term-minimized-pill-label,
|
|
6268
6455
|
#topright-controls > #term-minimized-tray > .term-minimized-pill:hover .term-minimized-pill-label {
|
|
6269
6456
|
max-width: clamp(28px, calc(var(--topright-band) - var(--topright-tray-inset) - 62px), 100px);
|
|
6457
|
+
transition: none;
|
|
6270
6458
|
}
|
|
6271
6459
|
|
|
6272
6460
|
/* ── Thin divider between groups ── */
|
|
@@ -6389,11 +6577,13 @@
|
|
|
6389
6577
|
}
|
|
6390
6578
|
|
|
6391
6579
|
/* ── Standalone buttons outside the unified bar (the tools toggle, the side panels) ── */
|
|
6580
|
+
#topright-overflow-btn,
|
|
6392
6581
|
#topright-tools-btn,
|
|
6393
6582
|
#topright-assistant-panel-btn,
|
|
6394
6583
|
#topright-claude-panel-btn,
|
|
6395
6584
|
#topright-codex-panel-btn,
|
|
6396
|
-
#topright-opencode-panel-btn
|
|
6585
|
+
#topright-opencode-panel-btn,
|
|
6586
|
+
#topright-antigravity-panel-btn {
|
|
6397
6587
|
background: rgba(18, 18, 22, 0.65);
|
|
6398
6588
|
backdrop-filter: blur(var(--blur-heavy)) saturate(1.3);
|
|
6399
6589
|
-webkit-backdrop-filter: blur(var(--blur-heavy)) saturate(1.3);
|
|
@@ -6403,11 +6593,13 @@
|
|
|
6403
6593
|
width: 32px;
|
|
6404
6594
|
height: 32px;
|
|
6405
6595
|
}
|
|
6596
|
+
#topright-overflow-btn:hover,
|
|
6406
6597
|
#topright-tools-btn:hover,
|
|
6407
6598
|
#topright-assistant-panel-btn:hover,
|
|
6408
6599
|
#topright-claude-panel-btn:hover,
|
|
6409
6600
|
#topright-codex-panel-btn:hover,
|
|
6410
|
-
#topright-opencode-panel-btn:hover
|
|
6601
|
+
#topright-opencode-panel-btn:hover,
|
|
6602
|
+
#topright-antigravity-panel-btn:hover {
|
|
6411
6603
|
background: rgba(24, 24, 30, 0.8);
|
|
6412
6604
|
border-color: rgba(255, 255, 255, 0.1);
|
|
6413
6605
|
}
|
|
@@ -7666,7 +7858,7 @@
|
|
|
7666
7858
|
.ocpv2-session-pill, .ocpv2-part-tool, .ocpv2-input-wrap, .ocpv2-compose-btn,
|
|
7667
7859
|
.ocp-session-pill, .ocp-tool-card, .ocp-input-shell, .term-minimized-pill-label)::before,
|
|
7668
7860
|
body.ui-interacting :is(.wb-tool.locked, .cp-session-pill,
|
|
7669
|
-
.cxp-session-pill, .ocpv2-session-pill,
|
|
7861
|
+
.cxp-session-pill, .ocpv2-session-pill, .agy-session-pill,
|
|
7670
7862
|
.ocp-session-pill, .term-minimized-pill-label)::after { animation-play-state: paused !important; }
|
|
7671
7863
|
|
|
7672
7864
|
/* Hidden tab: freeze the 30+ infinite glow/pulse animations so a background
|
|
@@ -8520,9 +8712,8 @@
|
|
|
8520
8712
|
z-index: 500000;
|
|
8521
8713
|
padding: 5px 10px;
|
|
8522
8714
|
border-radius: 6px;
|
|
8523
|
-
background: rgba(
|
|
8715
|
+
background: rgba(26, 30, 40, 0.96);
|
|
8524
8716
|
border: 1px solid rgba(255,255,255,0.08);
|
|
8525
|
-
backdrop-filter: blur(12px);
|
|
8526
8717
|
color: rgba(255,255,255,0.85);
|
|
8527
8718
|
font-size: 12.5px;
|
|
8528
8719
|
font-family: inherit;
|
|
@@ -9789,8 +9980,15 @@
|
|
|
9789
9980
|
.sm-backdrop.backdrop-hidden,
|
|
9790
9981
|
.ig-backdrop.backdrop-hidden {
|
|
9791
9982
|
opacity: 0 !important;
|
|
9983
|
+
backdrop-filter: none !important;
|
|
9984
|
+
-webkit-backdrop-filter: none !important;
|
|
9792
9985
|
pointer-events: none;
|
|
9793
9986
|
}
|
|
9987
|
+
html.platform-win32 .studio-backdrop {
|
|
9988
|
+
background: rgba(5, 5, 8, 0.62);
|
|
9989
|
+
backdrop-filter: none;
|
|
9990
|
+
-webkit-backdrop-filter: none;
|
|
9991
|
+
}
|
|
9794
9992
|
|
|
9795
9993
|
/* ── Settings Panel (draggable/pinnable) ── */
|
|
9796
9994
|
.settings-panel {
|
|
@@ -14011,8 +14209,8 @@
|
|
|
14011
14209
|
.settings-panel .stg-card .stg-mcp-form-grid .stg-field { margin-bottom: 0; }
|
|
14012
14210
|
/* a field of the Add-a-server form is half the form wide: a popup or a number stacks under its label like the text
|
|
14013
14211
|
fields beside it, instead of taking the label's line and squeezing the label and the help into what is left */
|
|
14014
|
-
.settings-panel .stg-card .stg-mcp-form-grid .stg-field:has(> :is(select, input[type="number"])) { display: block; }
|
|
14015
|
-
.settings-panel .stg-card .stg-mcp-form-grid .stg-field:has(> :is(select, input[type="number"])) > label { margin: 0 0 6px; }
|
|
14212
|
+
.settings-panel .stg-card .stg-mcp-form-grid .stg-field:has(> :is(select, .cc-dropdown, input[type="number"])) { display: block; }
|
|
14213
|
+
.settings-panel .stg-card .stg-mcp-form-grid .stg-field:has(> :is(select, .cc-dropdown, input[type="number"])) > label { margin: 0 0 6px; }
|
|
14016
14214
|
.settings-panel .stg-card .stg-mcp-form-label { font-size: 12px; color: var(--stg-help); }
|
|
14017
14215
|
.settings-panel .stg-card .stg-mcp-env-add { font-size: 12px; color: var(--stg-body); }
|
|
14018
14216
|
.settings-panel .stg-card .stg-mcp-gh-optrun { font-size: 13px; color: var(--stg-text); }
|
|
@@ -16514,6 +16712,28 @@
|
|
|
16514
16712
|
flex-shrink: 0;
|
|
16515
16713
|
}
|
|
16516
16714
|
.fe-branch-btn-badge:empty { display: none; }
|
|
16715
|
+
/* Scan state: a dot in the corner, out of the flow, so no state moves the row (words: tooltip, label, popover). */
|
|
16716
|
+
.fe-branch-btn-state {
|
|
16717
|
+
position: absolute;
|
|
16718
|
+
top: 2px;
|
|
16719
|
+
right: 2px;
|
|
16720
|
+
width: 4px;
|
|
16721
|
+
height: 4px;
|
|
16722
|
+
border-radius: 50%;
|
|
16723
|
+
background: transparent;
|
|
16724
|
+
pointer-events: none;
|
|
16725
|
+
}
|
|
16726
|
+
.fe-branch-btn[data-scan-state="scanning"] .fe-branch-btn-state { background: var(--t-secondary); }
|
|
16727
|
+
.fe-branch-btn[data-scan-state="timed-out"] .fe-branch-btn-state { background: var(--fe-git-modified); }
|
|
16728
|
+
.fe-branch-btn[data-scan-state="failed"] .fe-branch-btn-state { background: var(--fe-git-deleted); }
|
|
16729
|
+
.fe-branch-btn[data-scan-state="scanning"] > svg { opacity: 0.5; }
|
|
16730
|
+
.fe-branch-btn--placeholder .fe-branch-btn-name { color: var(--t-secondary); }
|
|
16731
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
16732
|
+
.fe-branch-btn[data-scan-state="scanning"] .fe-branch-btn-state { animation: fe-git-scan-pulse 1.2s ease-in-out infinite; }
|
|
16733
|
+
}
|
|
16734
|
+
@keyframes fe-git-scan-pulse { 50% { opacity: 0.3; } }
|
|
16735
|
+
/* Read out by screen readers only; takes no room in the row. */
|
|
16736
|
+
.fe-git-scan-live { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
|
|
16517
16737
|
|
|
16518
16738
|
/* ── Git popover ── */
|
|
16519
16739
|
.fe-git-popover {
|
|
@@ -16524,7 +16744,9 @@
|
|
|
16524
16744
|
border: 1px solid var(--fe-menu-border);
|
|
16525
16745
|
border-radius: var(--r-card);
|
|
16526
16746
|
box-shadow: var(--fe-menu-shadow);
|
|
16527
|
-
|
|
16747
|
+
/* Same tier as .fe-ctx-flyout: a float anchored to the panel, appended to body to escape it, must still
|
|
16748
|
+
outrank what is drawn beside it (#topright-controls at 400) and above it (a floating terminal at 10000). */
|
|
16749
|
+
z-index: 100010;
|
|
16528
16750
|
padding: 10px;
|
|
16529
16751
|
opacity: 0;
|
|
16530
16752
|
transform: translateX(-8px) scale(0.96);
|
|
@@ -16668,6 +16890,15 @@
|
|
|
16668
16890
|
line-height: 1.5;
|
|
16669
16891
|
}
|
|
16670
16892
|
.fe-git-summary:empty { display: none; }
|
|
16893
|
+
.fe-git-scan-state {
|
|
16894
|
+
font-size: 10.5px;
|
|
16895
|
+
font-family: var(--ff-mono);
|
|
16896
|
+
color: var(--t-secondary);
|
|
16897
|
+
line-height: 1.5;
|
|
16898
|
+
}
|
|
16899
|
+
.fe-git-scan-state[hidden] { display: none; }
|
|
16900
|
+
.fe-git-scan-state[data-tone="timed-out"] { color: var(--fe-git-modified); }
|
|
16901
|
+
.fe-git-scan-state[data-tone="failed"] { color: var(--fe-git-deleted); }
|
|
16671
16902
|
.fe-git-summary .gs-m { color: var(--fe-git-modified); }
|
|
16672
16903
|
.fe-git-summary .gs-a { color: var(--fe-git-new); }
|
|
16673
16904
|
.fe-git-summary .gs-d { color: var(--fe-git-deleted); }
|
|
@@ -18345,6 +18576,11 @@
|
|
|
18345
18576
|
opacity: 0;
|
|
18346
18577
|
pointer-events: none;
|
|
18347
18578
|
}
|
|
18579
|
+
/* Faded out: nothing inside keeps animating (loading-teardown.js adds `gone` once the fade ends). */
|
|
18580
|
+
#loading-overlay.hidden #loading-text,
|
|
18581
|
+
#loading-overlay.hidden #loading-mascot,
|
|
18582
|
+
#loading-overlay.hidden #loading-mascot * { animation: none !important; }
|
|
18583
|
+
#loading-overlay.gone { display: none !important; }
|
|
18348
18584
|
|
|
18349
18585
|
.loading-logo {
|
|
18350
18586
|
height: 28px;
|
|
@@ -19463,7 +19699,7 @@
|
|
|
19463
19699
|
.sx .sx-menu-item--danger:hover { color: var(--sx-err); }
|
|
19464
19700
|
|
|
19465
19701
|
/* ── Workspace ── */
|
|
19466
|
-
.sx-ws-head { flex: none; padding:
|
|
19702
|
+
.sx-ws-head { flex: none; padding: 12px 16px 0; display: grid; gap: 8px; position: relative; }
|
|
19467
19703
|
.sx-crumb { display: flex; align-items: center; gap: 6px; font-size: var(--fs-xs); color: var(--t-secondary); }
|
|
19468
19704
|
.sx-ws-title { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
|
|
19469
19705
|
.sx-ws-name { margin: 0; font: 600 calc(18px * var(--font-scale, 1))/1.3 var(--ff-heading); color: var(--t-bright); overflow-wrap: anywhere; }
|
|
@@ -19739,7 +19975,14 @@
|
|
|
19739
19975
|
.sx .sx-status--review, .sx .sx-status--changes { color: var(--sx-info); border-color: var(--b-visible); }
|
|
19740
19976
|
.sx .sx-status--draft { color: var(--sx-gold); border-color: color-mix(in oklab, var(--sx-gold) 40%, transparent); }
|
|
19741
19977
|
.sx .sx-status--none { color: var(--t-secondary); }
|
|
19742
|
-
|
|
19978
|
+
/* One pill box for every pill of the Studio (kind tag, status, health): the same height as a small button, so a
|
|
19979
|
+
row of pills and buttons lines up in the Library cell and in the workspace head. */
|
|
19980
|
+
.sx .sx-tag, .sx .sx-status, .sx .sx-health {
|
|
19981
|
+
display: inline-flex; align-items: center; gap: 6px; box-sizing: border-box;
|
|
19982
|
+
min-height: 24px; padding: 2px 8px; border-radius: 6px; line-height: 1.3;
|
|
19983
|
+
}
|
|
19984
|
+
.sx .sx-tag { display: inline-block; line-height: 18px; }
|
|
19985
|
+
.sx-health-cell { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 6px; max-width: 100%; }
|
|
19743
19986
|
.sx-health-cell .sx-status { white-space: normal; }
|
|
19744
19987
|
.sx-health-cell .sx-status > span { white-space: normal; overflow: visible; }
|
|
19745
19988
|
.sx .sx-banner-lines { display: grid; gap: 2px; margin-top: 4px; color: var(--t-primary); }
|
|
@@ -20157,6 +20400,87 @@
|
|
|
20157
20400
|
.ss-dlg-error { margin: 4px 0 0; min-height: 1em; color: hsla(0, 70%, 72%, 1); font-size: var(--fs-xs); }
|
|
20158
20401
|
.ss-dlg-error:empty { display: none; }
|
|
20159
20402
|
|
|
20403
|
+
/* ── A delete that is typed to confirm (sx-library-view.js deleteConfirmBox) ──
|
|
20404
|
+
One row per item, the consequence, then the field; Delete stays off until the word matches. */
|
|
20405
|
+
.ss-dlg.ss-dlg--confirm { width: min(480px, calc(100% - 32px)); max-height: calc(100% - 40px); padding: 20px 20px 16px; }
|
|
20406
|
+
.ss-dlg--confirm .ss-dlg-title { font-size: var(--fs-md, 15px); margin-bottom: 12px; }
|
|
20407
|
+
.ss-dlg--confirm .ss-dlg-actions { margin-top: 16px; gap: 8px; align-items: stretch; }
|
|
20408
|
+
.ss-dlg--confirm .ss-dlg-btn { min-width: 88px; height: 30px; padding: 0 14px; display: inline-flex; align-items: center; justify-content: center; }
|
|
20409
|
+
.ss-dlg--confirm .ss-dlg-btn--danger:disabled { opacity: 0.45; }
|
|
20410
|
+
.sx-del { display: flex; flex-direction: column; gap: 12px; }
|
|
20411
|
+
.sx-del-list {
|
|
20412
|
+
list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column;
|
|
20413
|
+
border: 1px solid var(--b-subtle); border-radius: 9px; background: var(--s-light); overflow: hidden;
|
|
20414
|
+
}
|
|
20415
|
+
.sx-del-item {
|
|
20416
|
+
display: grid; grid-template-columns: 18px minmax(0, 1fr) auto auto; align-items: center; gap: 4px 10px;
|
|
20417
|
+
padding: 8px 12px; min-height: 40px; box-sizing: border-box;
|
|
20418
|
+
}
|
|
20419
|
+
.sx-del-item + .sx-del-item, .sx-del-more { border-top: 1px solid var(--b-subtle); }
|
|
20420
|
+
.sx-del-icon { display: inline-grid; place-items: center; color: var(--t-secondary); }
|
|
20421
|
+
.sx-del-icon svg { width: 15px; height: 15px; }
|
|
20422
|
+
.sx-del-main { display: flex; flex-direction: column; min-width: 0; }
|
|
20423
|
+
.sx-del-name { color: var(--t-bright); font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
20424
|
+
.sx-del-path {
|
|
20425
|
+
color: var(--t-secondary); font: 400 var(--sx-meta, 11px)/1.4 var(--ff-mono, 'JetBrains Mono', monospace);
|
|
20426
|
+
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
20427
|
+
}
|
|
20428
|
+
.sx-del-kind, .sx-del-effect {
|
|
20429
|
+
font-size: var(--sx-meta, 11px); line-height: 1; padding: 4px 7px; border-radius: 5px; white-space: nowrap;
|
|
20430
|
+
border: 1px solid var(--b-light); color: var(--t-primary);
|
|
20431
|
+
}
|
|
20432
|
+
.sx-del-effect--disk { color: var(--sx-err); border-color: color-mix(in oklab, var(--sx-err) 35%, transparent); background: color-mix(in oklab, var(--sx-err) 8%, transparent); }
|
|
20433
|
+
.sx-del-effect--library { color: var(--t-primary); background: var(--s-medium); }
|
|
20434
|
+
.sx-del-more { padding: 6px 12px 8px 40px; color: var(--t-secondary); font-size: var(--sx-meta, 11px); }
|
|
20435
|
+
.ss-dlg-body p.sx-del-note { display: flex; gap: 8px; align-items: flex-start; margin: 0; color: var(--t-primary); }
|
|
20436
|
+
.sx-del-note svg { flex: none; width: 14px; height: 14px; margin-top: 2px; color: var(--t-secondary); }
|
|
20437
|
+
.sx-del-note--danger svg { color: var(--sx-err); }
|
|
20438
|
+
.sx-del-field { display: flex; flex-direction: column; gap: 6px; padding-top: 4px; }
|
|
20439
|
+
.sx-del-label { color: var(--t-primary); }
|
|
20440
|
+
.sx-del-word {
|
|
20441
|
+
font: 500 var(--fs-xs)/1 var(--ff-mono, 'JetBrains Mono', monospace); color: var(--t-bright);
|
|
20442
|
+
padding: 2px 6px; margin: 0 2px; border-radius: 4px; background: var(--s-medium); border: 1px solid var(--b-light);
|
|
20443
|
+
}
|
|
20444
|
+
.sx-del-input {
|
|
20445
|
+
width: 100%; height: 32px; padding: 0 10px; box-sizing: border-box;
|
|
20446
|
+
background: var(--sx-field, rgba(255,255,255,0.04)); border: 1px solid var(--b-light); border-radius: 5px;
|
|
20447
|
+
color: var(--t-bright); font: 400 var(--fs-xs)/1 var(--ff-mono, 'JetBrains Mono', monospace);
|
|
20448
|
+
transition: border-color 0.12s, box-shadow 0.12s;
|
|
20449
|
+
}
|
|
20450
|
+
.sx-del-input:hover { border-color: var(--b-visible); }
|
|
20451
|
+
.sx-del-input:focus { outline: none; border-color: color-mix(in oklab, var(--sx-err) 55%, transparent); box-shadow: 0 0 0 3px color-mix(in oklab, var(--sx-err) 14%, transparent); }
|
|
20452
|
+
@media (max-width: 520px) {
|
|
20453
|
+
.sx-del-item { grid-template-columns: 18px minmax(0, 1fr) auto; }
|
|
20454
|
+
.sx-del-kind { display: none; }
|
|
20455
|
+
}
|
|
20456
|
+
|
|
20457
|
+
/* ── The fix panel (sx-fixes-view.js): a card per problem, its meaning and its buttons ── */
|
|
20458
|
+
.sx .sx-health--fix { cursor: pointer; font-family: inherit; transition: filter 0.12s, border-color 0.12s; }
|
|
20459
|
+
.sx .sx-health--fix:hover { filter: brightness(1.15); border-color: currentColor; }
|
|
20460
|
+
.sx .sx-health--fix:focus-visible { outline: 2px solid var(--sx-focus); outline-offset: 1px; }
|
|
20461
|
+
.sx-fix-panel { display: flex; flex-direction: column; gap: 8px; margin-top: 4px; }
|
|
20462
|
+
.sx-fix-card { padding: 10px 12px; border: 1px solid var(--b-subtle); border-left-width: 3px; border-radius: 9px; background: var(--s-light); }
|
|
20463
|
+
.sx-fix-card--err { border-left-color: var(--sx-err); }
|
|
20464
|
+
.sx-fix-card--warn { border-left-color: var(--sx-warn); }
|
|
20465
|
+
.sx-fix-card--info { border-left-color: var(--b-visible); }
|
|
20466
|
+
.sx-fix-card-head { display: flex; align-items: center; gap: 8px; color: var(--t-bright); }
|
|
20467
|
+
.sx-fix-card-head svg { width: 14px; height: 14px; flex: none; }
|
|
20468
|
+
.sx-fix-card--err .sx-fix-card-head svg { color: var(--sx-err); }
|
|
20469
|
+
.sx-fix-card--warn .sx-fix-card-head svg { color: var(--sx-warn); }
|
|
20470
|
+
.sx-fix-mode { margin-left: auto; font-size: var(--sx-meta, 11px); line-height: 1; padding: 4px 7px; border-radius: 5px; border: 1px solid var(--b-light); color: var(--t-secondary); white-space: nowrap; }
|
|
20471
|
+
.sx-fix-mode--auto { color: var(--sx-ok); border-color: color-mix(in oklab, var(--sx-ok) 35%, transparent); }
|
|
20472
|
+
.ss-dlg-body p.sx-fix-explain { margin: 6px 0 8px; color: var(--t-primary); }
|
|
20473
|
+
.sx-fix-actions { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
20474
|
+
.sx-fix-actions .sx-dim { margin: 0; }
|
|
20475
|
+
.sx-fix-preview { margin: 4px 0 0; padding: 0; list-style: none; border: 1px solid var(--b-subtle); border-radius: 9px; background: var(--s-light); }
|
|
20476
|
+
.sx-fix-preview-row { padding: 7px 12px; color: var(--t-primary); }
|
|
20477
|
+
.sx-fix-preview-row + .sx-fix-preview-row { border-top: 1px solid var(--b-subtle); }
|
|
20478
|
+
.sx-fix-choose { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; }
|
|
20479
|
+
.sx-fix-choice { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border: 1px solid var(--b-subtle); border-radius: 9px; cursor: pointer; }
|
|
20480
|
+
.sx-fix-choice:has(input:checked) { border-color: var(--b-visible); background: var(--s-light); }
|
|
20481
|
+
.sx-fix-choice:has(input:disabled) { opacity: 0.5; cursor: default; }
|
|
20482
|
+
.sx .sx-fix-notice .sx-btn { flex: none; }
|
|
20483
|
+
|
|
20160
20484
|
/* ── An import's review ── */
|
|
20161
20485
|
.ss-review { display: flex; flex-direction: column; gap: 8px; }
|
|
20162
20486
|
.ss-review-row { display: flex; gap: 10px; align-items: baseline; }
|
|
@@ -22009,7 +22333,7 @@
|
|
|
22009
22333
|
.as-launch-profile[data-profile="codex"].active .as-launch-profile-name {
|
|
22010
22334
|
color: hsla(160, 45%, 72%, 0.95);
|
|
22011
22335
|
}
|
|
22012
|
-
.as-launch-profile[data-profile="
|
|
22336
|
+
.as-launch-profile[data-profile="antigravity"].active .as-launch-profile-name {
|
|
22013
22337
|
color: hsla(210, 55%, 78%, 0.95);
|
|
22014
22338
|
}
|
|
22015
22339
|
.as-launch-profile-name {
|
|
@@ -24571,6 +24895,16 @@
|
|
|
24571
24895
|
transition: none !important;
|
|
24572
24896
|
}
|
|
24573
24897
|
}
|
|
24898
|
+
html.platform-win32 .term-minimized-pill,
|
|
24899
|
+
html.desktop-titlebar--win32 .term-minimized-pill {
|
|
24900
|
+
background: rgba(20, 20, 26, 0.94);
|
|
24901
|
+
backdrop-filter: none;
|
|
24902
|
+
-webkit-backdrop-filter: none;
|
|
24903
|
+
}
|
|
24904
|
+
html.platform-win32 .term-minimized-pill:hover,
|
|
24905
|
+
html.desktop-titlebar--win32 .term-minimized-pill:hover {
|
|
24906
|
+
background: rgba(30, 30, 38, 0.96);
|
|
24907
|
+
}
|
|
24574
24908
|
|
|
24575
24909
|
/* Genie minimize/restore animation on floating tabs (class toggled by
|
|
24576
24910
|
ui-terminal.js minimizeTab/restoreTab only while it runs) */
|
|
@@ -28029,16 +28363,8 @@
|
|
|
28029
28363
|
color: #000;
|
|
28030
28364
|
border-color: var(--c-accent, #6aa9ff);
|
|
28031
28365
|
}
|
|
28032
|
-
.
|
|
28033
|
-
|
|
28034
|
-
background: var(--s-subtle, rgba(255,255,255,0.04));
|
|
28035
|
-
color: var(--t-primary, #fff);
|
|
28036
|
-
border: 1px solid var(--b-subtle, rgba(255,255,255,0.1));
|
|
28037
|
-
border-radius: var(--r-small, 6px);
|
|
28038
|
-
padding: 6px 8px;
|
|
28039
|
-
font-size: 11px;
|
|
28040
|
-
}
|
|
28041
|
-
.sm-pr-select:disabled { opacity: 0.5; }
|
|
28366
|
+
/* The model list is the app's styled dropdown (cc-dropdown.js): it takes the row's width. */
|
|
28367
|
+
.sm-pr-row > .cc-dropdown.sm-pr-dropdown { flex: 1; min-width: 0; }
|
|
28042
28368
|
|
|
28043
28369
|
/* ── Section labels ── */
|
|
28044
28370
|
.sm-section-label {
|
|
@@ -29204,3 +29530,4 @@ body .styleguide-panel {
|
|
|
29204
29530
|
.ocpv2-tools-picker .cc-dropdown-trigger { min-width: 0; max-width: 160px; border: none; background: transparent; color: var(--t-primary); font-family: inherit; }
|
|
29205
29531
|
|
|
29206
29532
|
.ocpv2-tools-picker .tool-list-picker .cc-dropdown-menu { background: rgba(22,22,26,0.98); }
|
|
29533
|
+
|