synabun 2.0.10 → 2.2.0
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 +207 -0
- package/README.md +25 -2
- package/THIRD-PARTY-LICENSES.md +22 -0
- package/bin/synabun.js +71 -24
- package/docs/whatsapp.md +13 -13
- package/hooks/claude-code/pre-websearch.mjs +12 -1
- package/hooks/claude-code/shared.mjs +5 -0
- package/hooks/claude-code/stop.mjs +1 -1
- package/lib/claude-hooks.js +172 -18
- package/lib/client-config-repair.js +30 -17
- package/lib/desktop-app.js +7 -1
- package/lib/external-tools.js +7 -6
- package/lib/first-launch-protection.js +57 -12
- package/lib/mcp-dist.js +176 -0
- package/lib/release-npm-ci.mjs +138 -0
- package/lib/release-publish.mjs +91 -0
- package/lib/release-scan.mjs +50 -0
- package/lib/server-crash-record.js +123 -0
- package/lib/server-exit.js +318 -0
- package/lib/server-supervisor.js +508 -0
- package/lib/start-launcher.js +37 -4
- package/lib/tools-cli.js +45 -0
- package/lib/update-snapshot.js +302 -0
- package/lib/virustotal.mjs +203 -0
- package/lib/windows-crash-event.js +269 -0
- package/mcp-server/dist/http.d.ts +20 -1
- package/mcp-server/dist/http.d.ts.map +1 -1
- package/mcp-server/dist/http.js +59 -12
- package/mcp-server/dist/http.js.map +1 -1
- package/mcp-server/dist/index.d.ts +33 -27
- package/mcp-server/dist/index.d.ts.map +1 -1
- package/mcp-server/dist/index.js +128 -143
- package/mcp-server/dist/index.js.map +1 -1
- package/mcp-server/dist/preload.js +1 -1
- package/mcp-server/dist/preload.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/codex-config-heal.d.ts +6 -2
- package/mcp-server/dist/services/codex-config-heal.d.ts.map +1 -1
- package/mcp-server/dist/services/codex-config-heal.js +81 -28
- package/mcp-server/dist/services/codex-config-heal.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-judge-backfill.d.ts +6 -0
- package/mcp-server/dist/services/memory-judge-backfill.d.ts.map +1 -1
- package/mcp-server/dist/services/memory-judge-backfill.js +7 -1
- package/mcp-server/dist/services/memory-judge-backfill.js.map +1 -1
- 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 +18 -11
- package/mcp-server/dist/services/neural-interface.d.ts.map +1 -1
- package/mcp-server/dist/services/neural-interface.js +67 -11
- package/mcp-server/dist/services/neural-interface.js.map +1 -1
- package/mcp-server/dist/services/server-instructions.d.ts +7 -2
- package/mcp-server/dist/services/server-instructions.d.ts.map +1 -1
- package/mcp-server/dist/services/server-instructions.js +22 -63
- package/mcp-server/dist/services/server-instructions.js.map +1 -1
- package/mcp-server/dist/services/tool-catalog.d.ts +120 -0
- package/mcp-server/dist/services/tool-catalog.d.ts.map +1 -0
- package/mcp-server/dist/services/tool-catalog.js +339 -0
- package/mcp-server/dist/services/tool-catalog.js.map +1 -0
- package/mcp-server/dist/services/tool-list-refresh-barrier.d.ts +12 -0
- package/mcp-server/dist/services/tool-list-refresh-barrier.d.ts.map +1 -0
- package/mcp-server/dist/services/tool-list-refresh-barrier.js +40 -0
- package/mcp-server/dist/services/tool-list-refresh-barrier.js.map +1 -0
- package/mcp-server/dist/services/tool-list.d.ts +108 -0
- package/mcp-server/dist/services/tool-list.d.ts.map +1 -0
- package/mcp-server/dist/services/tool-list.js +334 -0
- package/mcp-server/dist/services/tool-list.js.map +1 -0
- package/mcp-server/dist/services/tool-runtime.d.ts +161 -0
- package/mcp-server/dist/services/tool-runtime.d.ts.map +1 -0
- package/mcp-server/dist/services/tool-runtime.js +400 -0
- package/mcp-server/dist/services/tool-runtime.js.map +1 -0
- 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/services/whiteboard-geometry.d.ts +26 -2
- package/mcp-server/dist/services/whiteboard-geometry.d.ts.map +1 -1
- package/mcp-server/dist/services/whiteboard-geometry.js +91 -8
- package/mcp-server/dist/services/whiteboard-geometry.js.map +1 -1
- package/mcp-server/dist/tools/agents.d.ts +14 -14
- package/mcp-server/dist/tools/agents.d.ts.map +1 -1
- package/mcp-server/dist/tools/agents.js +29 -19
- package/mcp-server/dist/tools/agents.js.map +1 -1
- package/mcp-server/dist/tools/browser-batch.d.ts +3 -3
- 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/image-tools.d.ts +1 -1
- package/mcp-server/dist/tools/image-tools.js +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 +505 -0
- package/mcp-server/dist/tools/skill-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/skill-tools.js +642 -0
- package/mcp-server/dist/tools/skill-tools.js.map +1 -0
- package/mcp-server/dist/tools/skill.d.ts +7 -0
- package/mcp-server/dist/tools/skill.d.ts.map +1 -0
- package/mcp-server/dist/tools/skill.js +11 -0
- package/mcp-server/dist/tools/skill.js.map +1 -0
- package/mcp-server/dist/tools/tool-groups.d.ts +68 -0
- package/mcp-server/dist/tools/tool-groups.d.ts.map +1 -0
- package/mcp-server/dist/tools/tool-groups.js +147 -0
- package/mcp-server/dist/tools/tool-groups.js.map +1 -0
- package/mcp-server/dist/tools/whiteboard-format.d.ts.map +1 -1
- package/mcp-server/dist/tools/whiteboard-format.js +7 -4
- package/mcp-server/dist/tools/whiteboard-format.js.map +1 -1
- package/mcp-server/dist/tools/whiteboard-tools.d.ts +64 -13
- package/mcp-server/dist/tools/whiteboard-tools.d.ts.map +1 -1
- package/mcp-server/dist/tools/whiteboard-tools.js +30 -5
- package/mcp-server/dist/tools/whiteboard-tools.js.map +1 -1
- package/mcp-server/package-lock.json +2 -2
- package/mcp-server/package.json +1 -1
- package/mcp-server/src/http.ts +75 -12
- package/mcp-server/src/index.ts +147 -154
- package/mcp-server/src/preload.ts +12 -12
- package/mcp-server/src/services/budget-judgments.ts +5 -3
- package/mcp-server/src/services/codex-config-heal.ts +80 -29
- package/mcp-server/src/services/identity.ts +2 -2
- package/mcp-server/src/services/memory-judge-backfill.ts +7 -1
- package/mcp-server/src/services/memory-sessions.ts +24 -3
- package/mcp-server/src/services/neural-interface.ts +81 -21
- package/mcp-server/src/services/server-instructions.ts +29 -64
- package/mcp-server/src/services/tool-catalog.ts +403 -0
- package/mcp-server/src/services/tool-list-refresh-barrier.ts +33 -0
- package/mcp-server/src/services/tool-list.ts +410 -0
- package/mcp-server/src/services/tool-runtime.ts +457 -0
- package/mcp-server/src/services/typesafe-config.ts +1 -1
- package/mcp-server/src/services/whiteboard-geometry.ts +94 -9
- package/mcp-server/src/tools/agents.ts +29 -20
- package/mcp-server/src/tools/choice.ts +17 -12
- package/mcp-server/src/tools/git-tools.ts +2 -2
- package/mcp-server/src/tools/image-tools.ts +1 -1
- package/mcp-server/src/tools/morelogin.ts +6 -4
- package/mcp-server/src/tools/skill-tools.ts +592 -0
- package/mcp-server/src/tools/skill.ts +13 -0
- package/mcp-server/src/tools/tool-groups.ts +164 -0
- package/mcp-server/src/tools/whiteboard-format.ts +9 -3
- package/mcp-server/src/tools/whiteboard-tools.ts +39 -5
- package/neural-interface/i18n/en.json +3953 -228
- package/neural-interface/i18n/pt-BR.json +3901 -179
- 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 +128 -28
- package/neural-interface/lib/assistant-brains/antigravity.js +423 -0
- package/neural-interface/lib/assistant-brains/claude.js +4 -3
- package/neural-interface/lib/assistant-brains/codex-browser-policy-hook.mjs +12 -2
- package/neural-interface/lib/assistant-brains/codex-route-gate-hook.mjs +32 -9
- package/neural-interface/lib/assistant-brains/codex.js +9 -5
- package/neural-interface/lib/assistant-brains/opencode.js +120 -54
- package/neural-interface/lib/assistant-brains/opencode2-browser-policy/index.js +28 -13
- package/neural-interface/lib/assistant-brains/opencode2-route-gate/index.js +59 -19
- 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 +81 -15
- package/neural-interface/lib/assistant-config.js +6 -3
- package/neural-interface/lib/assistant-dispatch.js +1073 -200
- package/neural-interface/lib/assistant-envelope.js +156 -2
- 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 +93 -19
- package/neural-interface/lib/assistant-plan-permissions.js +25 -9
- package/neural-interface/lib/assistant-route-gate-codex.js +3 -0
- package/neural-interface/lib/assistant-route-gate.js +6 -4
- package/neural-interface/lib/assistant-router.js +245 -38
- package/neural-interface/lib/assistant-runtime.js +214 -30
- package/neural-interface/lib/assistant-task-prompt.js +87 -21
- package/neural-interface/lib/assistant-tools.js +51 -0
- package/neural-interface/lib/assistant-usage.js +29 -0
- package/neural-interface/lib/backup-service.js +626 -4
- package/neural-interface/lib/backup-zip-reader.js +10 -5
- package/neural-interface/lib/backup-zip-writer.js +257 -0
- package/neural-interface/lib/browser-execution.js +10 -2
- package/neural-interface/lib/browser-guard-cdp.js +84 -0
- package/neural-interface/lib/browser-network-guard.js +476 -0
- package/neural-interface/lib/browser-policy-roots.js +64 -0
- package/neural-interface/lib/browser-tool-policy.js +198 -38
- package/neural-interface/lib/claude-agent-bridge.js +11 -2
- package/neural-interface/lib/claude-history-cache.js +210 -0
- package/neural-interface/lib/claude-hooks-status.js +103 -0
- package/neural-interface/lib/claude-model-catalog.js +5 -1
- package/neural-interface/lib/claude-temporary.js +5 -11
- package/neural-interface/lib/cli-install-api.js +1 -1
- package/neural-interface/lib/cli-install.js +163 -154
- package/neural-interface/lib/cli-resolver.js +13 -3
- package/neural-interface/lib/cli-update-planner.js +52 -41
- package/neural-interface/lib/cloudflared/tunnel.js +42 -2
- package/neural-interface/lib/codex-mcp-approvals.js +11 -0
- package/neural-interface/lib/codex-rollout-reader.js +52 -0
- package/neural-interface/lib/codex-worker-app-server.js +191 -0
- package/neural-interface/lib/confined-fs.js +30 -3
- package/neural-interface/lib/crash-notice-api.js +98 -0
- package/neural-interface/lib/editor-completion-opencode.js +68 -68
- package/neural-interface/lib/editor-git-api.js +3 -20
- package/neural-interface/lib/exec-loop-command.js +13 -10
- 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/http-guards.js +8 -2
- package/neural-interface/lib/install-details.js +4 -1
- package/neural-interface/lib/mcp-agent-servers.js +67 -0
- package/neural-interface/lib/mcp-client-config.js +35 -33
- package/neural-interface/lib/mcp-external-servers.js +332 -0
- package/neural-interface/lib/mcp-installer.js +2 -1
- package/neural-interface/lib/{mcp-profile-refresh-coordinator.js → mcp-tools-refresh-coordinator.js} +4 -4
- package/neural-interface/lib/memory-session-capture.js +17 -3
- package/neural-interface/lib/morelogin.js +177 -25
- package/neural-interface/lib/native-loop-providers.js +965 -66
- package/neural-interface/lib/native-loop-runtime.js +290 -42
- package/neural-interface/lib/opencode-config.js +557 -0
- package/neural-interface/lib/opencode-db-schema.js +17 -34
- package/neural-interface/lib/opencode-history.js +48 -218
- package/neural-interface/lib/opencode-mcp-ready.js +108 -0
- package/neural-interface/lib/opencode-native-boundary.js +53 -0
- package/neural-interface/lib/opencode-protocol.js +249 -112
- package/neural-interface/lib/opencode-runtime-config.js +32 -22
- package/neural-interface/lib/opencode-serve-records.js +39 -21
- package/neural-interface/lib/opencode-v2-client.js +48 -153
- package/neural-interface/lib/opencode-v2-ws-requests.js +36 -210
- package/neural-interface/lib/opencode-worker-data.js +27 -0
- package/neural-interface/lib/opencode2-client.js +73 -37
- package/neural-interface/lib/opencode2-proxy.js +23 -63
- package/neural-interface/lib/opencode2-translate.js +51 -2
- package/neural-interface/lib/owner-authority.js +249 -0
- package/neural-interface/lib/page-session.js +275 -0
- package/neural-interface/lib/path-confine.js +12 -9
- package/neural-interface/lib/peer-identity.js +793 -0
- 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 +20 -2
- package/neural-interface/lib/rulesets/api.js +7 -6
- package/neural-interface/lib/rulesets/fs-safe.js +1 -1
- package/neural-interface/lib/rulesets/installer.js +180 -36
- package/neural-interface/lib/rulesets/json-edit.js +1 -1
- package/neural-interface/lib/rulesets/render.js +1 -1
- package/neural-interface/lib/session-cache-builder.js +81 -31
- package/neural-interface/lib/session-title-generator.js +58 -36
- package/neural-interface/lib/skills/api-v2.js +495 -0
- package/neural-interface/lib/skills/bundle.js +418 -0
- package/neural-interface/lib/skills/catalog.js +298 -0
- package/neural-interface/lib/skills/creation-api.js +191 -0
- package/neural-interface/lib/skills/creation-brief.js +247 -0
- package/neural-interface/lib/skills/creation-sources.js +285 -0
- package/neural-interface/lib/skills/creation.js +843 -0
- package/neural-interface/lib/skills/deploy.js +569 -0
- package/neural-interface/lib/skills/digest.js +119 -0
- package/neural-interface/lib/skills/discover.js +111 -0
- package/neural-interface/lib/skills/draft-confinement.js +216 -0
- package/neural-interface/lib/skills/eval-confinement.js +399 -0
- package/neural-interface/lib/skills/eval-sandbox.js +280 -0
- package/neural-interface/lib/skills/eval-trace.js +135 -0
- package/neural-interface/lib/skills/evals-api.js +212 -0
- package/neural-interface/lib/skills/evals.js +1573 -0
- package/neural-interface/lib/skills/export.js +203 -0
- package/neural-interface/lib/skills/frontmatter.js +64 -0
- package/neural-interface/lib/skills/health.js +75 -0
- package/neural-interface/lib/skills/json-edit.js +165 -0
- package/neural-interface/lib/skills/known-bridge-digests.json +441 -0
- package/neural-interface/lib/skills/known-bridges.js +96 -0
- package/neural-interface/lib/skills/library.js +823 -0
- package/neural-interface/lib/skills/local-store.js +21 -0
- package/neural-interface/lib/skills/migration.js +433 -0
- package/neural-interface/lib/skills/operations.js +45 -0
- package/neural-interface/lib/skills/ownership.js +427 -0
- package/neural-interface/lib/skills/packages.js +88 -0
- package/neural-interface/lib/skills/reviews.js +212 -0
- package/neural-interface/lib/skills/revision.js +80 -0
- package/neural-interface/lib/skills/roots.js +269 -0
- package/neural-interface/lib/skills/runtime-checks.js +358 -0
- package/neural-interface/lib/skills/scan-assets.js +252 -0
- package/neural-interface/lib/skills/scan-context.js +26 -0
- package/neural-interface/lib/skills/scan-shell.js +324 -0
- package/neural-interface/lib/skills/scan.js +364 -0
- package/neural-interface/lib/skills/scanners.js +54 -0
- package/neural-interface/lib/skills/service.js +530 -0
- package/neural-interface/lib/skills/telemetry.js +119 -0
- package/neural-interface/lib/sqlite-integrity-worker.js +22 -0
- package/neural-interface/lib/synabun-version.js +1 -1
- package/neural-interface/lib/system-activity.js +1 -1
- package/neural-interface/lib/tool-lists.js +124 -0
- package/neural-interface/lib/whatsapp/brain.js +7 -3
- package/neural-interface/lib/whatsapp/bridge.js +6 -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 +1268 -0
- package/neural-interface/lib/worker-guard-setting.js +56 -0
- package/neural-interface/lib/worker-mcp-channel.js +175 -0
- package/neural-interface/lib/worker-question.js +74 -0
- package/neural-interface/lib/worker-relay-ports.js +227 -0
- package/neural-interface/lib/worker-resume.js +238 -0
- package/neural-interface/lib/worker-sandbox.js +329 -0
- package/neural-interface/package-lock.json +34 -12
- package/neural-interface/package.json +3 -2
- package/neural-interface/public/index.html +3 -1
- package/neural-interface/public/index2d.html +19 -11
- package/neural-interface/public/onboarding.html +3 -3
- package/neural-interface/public/shared/account-menu.js +8 -5
- package/neural-interface/public/shared/agent-runtime-options.js +125 -31
- 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 +1527 -1336
- package/neural-interface/public/shared/app-frame.js +192 -0
- package/neural-interface/public/shared/assistant/asst-agents-dock.js +36 -6
- package/neural-interface/public/shared/assistant/asst-api.js +1 -1
- package/neural-interface/public/shared/assistant/asst-ask-styles.js +270 -0
- package/neural-interface/public/shared/assistant/asst-ask-tail.js +118 -0
- package/neural-interface/public/shared/assistant/asst-ask.js +397 -0
- package/neural-interface/public/shared/assistant/asst-brain-picker.js +105 -44
- package/neural-interface/public/shared/assistant/asst-budget.js +5 -4
- package/neural-interface/public/shared/assistant/asst-control.js +205 -26
- package/neural-interface/public/shared/assistant/asst-followups-card.js +383 -0
- package/neural-interface/public/shared/assistant/asst-followups.js +417 -0
- package/neural-interface/public/shared/assistant/asst-hosts.js +16 -7
- package/neural-interface/public/shared/assistant/asst-limit-dock.js +45 -0
- package/neural-interface/public/shared/assistant/asst-limit-wait.js +327 -0
- package/neural-interface/public/shared/assistant/asst-limit.js +168 -0
- package/neural-interface/public/shared/assistant/asst-mascot.js +49 -12
- package/neural-interface/public/shared/assistant/asst-menu.js +7 -6
- package/neural-interface/public/shared/assistant/asst-panel.js +151 -19
- package/neural-interface/public/shared/assistant/asst-rack-styles.js +66 -49
- package/neural-interface/public/shared/assistant/asst-render.js +445 -82
- package/neural-interface/public/shared/assistant/asst-route.js +304 -53
- package/neural-interface/public/shared/assistant/asst-routes-editor.js +9 -8
- package/neural-interface/public/shared/assistant/asst-scenes.js +56 -1
- package/neural-interface/public/shared/assistant/asst-sidepanel.js +117 -10
- package/neural-interface/public/shared/assistant/asst-slash.js +17 -9
- package/neural-interface/public/shared/assistant/asst-state.js +87 -24
- package/neural-interface/public/shared/assistant/asst-stop.js +127 -0
- package/neural-interface/public/shared/assistant/asst-styles.js +93 -21
- package/neural-interface/public/shared/assistant/asst-tool-kinds.js +190 -23
- package/neural-interface/public/shared/assistant/asst-usage.js +2 -1
- package/neural-interface/public/shared/automation-context.js +5 -2
- package/neural-interface/public/shared/cc-dropdown.js +89 -19
- package/neural-interface/public/shared/cdx/cdx-context-menu.js +10 -9
- package/neural-interface/public/shared/cdx/cdx-copy.js +16 -0
- package/neural-interface/public/shared/cdx/cdx-output-model.js +22 -1
- package/neural-interface/public/shared/cdx/cdx-output.js +34 -10
- package/neural-interface/public/shared/cdx/cdx-panel.js +59 -151
- package/neural-interface/public/shared/cdx/cdx-preview.js +12 -0
- package/neural-interface/public/shared/cdx/cdx-protocol.js +39 -11
- package/neural-interface/public/shared/cdx/cdx-render.js +57 -38
- package/neural-interface/public/shared/cdx/cdx-requests.js +14 -4
- package/neural-interface/public/shared/cdx/cdx-skill-hints.js +54 -0
- package/neural-interface/public/shared/cdx/cdx-styles.js +15 -3
- package/neural-interface/public/shared/cdx/cdx-tabs.js +127 -44
- package/neural-interface/public/shared/cdx/cdx-ws.js +0 -1
- package/neural-interface/public/shared/cli-install-controller.js +218 -0
- package/neural-interface/public/shared/cli-install-view.js +11 -12
- package/neural-interface/public/shared/cli-status.js +11 -10
- package/neural-interface/public/shared/constants.js +5 -4
- package/neural-interface/public/shared/context-menu-areas.js +34 -0
- package/neural-interface/public/shared/context-menu-logic.js +243 -0
- package/neural-interface/public/shared/context-menu-model.js +367 -0
- package/neural-interface/public/shared/context-menu.js +372 -0
- package/neural-interface/public/shared/cp/cp-context-menu.js +10 -9
- 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/crash-notice-view.js +168 -0
- 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 +21 -0
- package/neural-interface/public/shared/editor/editor-panel-logic.js +2 -2
- 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 +30 -15
- package/neural-interface/public/shared/i18n.js +2 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-approvals.js +7 -7
- package/neural-interface/public/shared/ocp-v2/ocp-v2-binding.js +4 -4
- package/neural-interface/public/shared/ocp-v2/ocp-v2-changes-logic.js +3 -101
- package/neural-interface/public/shared/ocp-v2/ocp-v2-childpanel.js +2 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-compact-button.js +1 -3
- package/neural-interface/public/shared/ocp-v2/ocp-v2-composer-logic.js +2 -6
- package/neural-interface/public/shared/ocp-v2/ocp-v2-context-menu.js +11 -11
- package/neural-interface/public/shared/ocp-v2/ocp-v2-context-model.js +0 -3
- package/neural-interface/public/shared/ocp-v2/ocp-v2-events.js +8 -4
- package/neural-interface/public/shared/ocp-v2/ocp-v2-manager.js +7 -7
- package/neural-interface/public/shared/ocp-v2/ocp-v2-outcome-notifications.js +16 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-panel.js +74 -259
- package/neural-interface/public/shared/ocp-v2/ocp-v2-plan.js +1 -2
- package/neural-interface/public/shared/ocp-v2/ocp-v2-projectbar.js +95 -202
- package/neural-interface/public/shared/ocp-v2/ocp-v2-rehydrate.js +13 -4
- package/neural-interface/public/shared/ocp-v2/ocp-v2-render.js +13 -22
- package/neural-interface/public/shared/ocp-v2/ocp-v2-send.js +4 -4
- package/neural-interface/public/shared/ocp-v2/ocp-v2-session-actions.js +8 -61
- package/neural-interface/public/shared/ocp-v2/ocp-v2-sessions-logic.js +2 -91
- package/neural-interface/public/shared/ocp-v2/ocp-v2-slash-hints.js +16 -15
- package/neural-interface/public/shared/ocp-v2/ocp-v2-state.js +8 -21
- package/neural-interface/public/shared/ocp-v2/ocp-v2-status-logic.js +1 -99
- package/neural-interface/public/shared/ocp-v2/ocp-v2-status.js +5 -35
- package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +17 -21
- package/neural-interface/public/shared/ocp-v2/{ocp-v2-profile-inheritance.js → ocp-v2-tools-inheritance.js} +16 -16
- package/neural-interface/public/shared/ocp-v2/ocp-v2-ws.js +60 -50
- package/neural-interface/public/shared/page-session.js +96 -0
- package/neural-interface/public/shared/provider-icons.js +4 -2
- package/neural-interface/public/shared/registry.js +5 -3
- package/neural-interface/public/shared/retired-2d.js +3 -0
- package/neural-interface/public/shared/schedules-view.js +195 -61
- package/neural-interface/public/shared/settings/settings-claude-hooks.js +135 -0
- package/neural-interface/public/shared/settings/settings-data.js +3 -1
- package/neural-interface/public/shared/settings/settings-ia.js +6 -6
- package/neural-interface/public/shared/settings/settings-opencode.js +89 -0
- package/neural-interface/public/shared/settings/settings-rules.js +2 -2
- package/neural-interface/public/shared/settings/settings-skill-folders-pane.js +265 -0
- package/neural-interface/public/shared/settings/settings-skill-folders.js +130 -0
- package/neural-interface/public/shared/settings/settings-worker-guard.js +72 -0
- 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-args.js +96 -0
- package/neural-interface/public/shared/skills/ss-creation.js +222 -0
- package/neural-interface/public/shared/skills/ss-dialog.js +133 -0
- package/neural-interface/public/shared/skills/ss-doc.js +173 -0
- package/neural-interface/public/shared/skills/ss-eval-adapters.js +269 -0
- package/neural-interface/public/shared/skills/ss-eval-grade.js +359 -0
- package/neural-interface/public/shared/skills/ss-eval-optimise.js +153 -0
- package/neural-interface/public/shared/skills/ss-eval-plan.js +315 -0
- package/neural-interface/public/shared/skills/ss-evals.js +417 -0
- package/neural-interface/public/shared/skills/ss-form.js +159 -0
- package/neural-interface/public/shared/skills/ss-frontmatter.js +376 -0
- package/neural-interface/public/shared/skills/ss-ids.js +32 -0
- package/neural-interface/public/shared/skills/ss-lint.js +149 -0
- package/neural-interface/public/shared/skills/ss-presets.js +117 -0
- package/neural-interface/public/shared/skills/ss-profiles.js +513 -0
- package/neural-interface/public/shared/skills/ss-resources.js +165 -0
- package/neural-interface/public/shared/skills/ss-review-view.js +190 -0
- package/neural-interface/public/shared/skills/ss-tabs.js +79 -0
- package/neural-interface/public/shared/skills/ss-unicode.js +135 -0
- package/neural-interface/public/shared/skills/studio/sx-actions.js +222 -0
- package/neural-interface/public/shared/skills/studio/sx-cm.js +101 -0
- package/neural-interface/public/shared/skills/studio/sx-create-ai-view.js +749 -0
- package/neural-interface/public/shared/skills/studio/sx-create-ai.js +237 -0
- package/neural-interface/public/shared/skills/studio/sx-create-view.js +254 -0
- package/neural-interface/public/shared/skills/studio/sx-create.js +126 -0
- package/neural-interface/public/shared/skills/studio/sx-diff-view.js +43 -0
- package/neural-interface/public/shared/skills/studio/sx-diff.js +133 -0
- package/neural-interface/public/shared/skills/studio/sx-docs.js +480 -0
- package/neural-interface/public/shared/skills/studio/sx-dom.js +230 -0
- package/neural-interface/public/shared/skills/studio/sx-edit-view.js +848 -0
- package/neural-interface/public/shared/skills/studio/sx-editor-model.js +193 -0
- package/neural-interface/public/shared/skills/studio/sx-errors.js +22 -0
- 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-geometry.js +82 -0
- package/neural-interface/public/shared/skills/studio/sx-import.js +262 -0
- package/neural-interface/public/shared/skills/studio/sx-inspector.js +308 -0
- package/neural-interface/public/shared/skills/studio/sx-install-flow.js +282 -0
- package/neural-interface/public/shared/skills/studio/sx-install.js +313 -0
- package/neural-interface/public/shared/skills/studio/sx-library-view.js +748 -0
- package/neural-interface/public/shared/skills/studio/sx-library.js +479 -0
- package/neural-interface/public/shared/skills/studio/sx-main.js +690 -0
- package/neural-interface/public/shared/skills/studio/sx-operations-view.js +98 -0
- package/neural-interface/public/shared/skills/studio/sx-operations.js +11 -0
- package/neural-interface/public/shared/skills/studio/sx-plan.js +158 -0
- package/neural-interface/public/shared/skills/studio/sx-publish-view.js +621 -0
- package/neural-interface/public/shared/skills/studio/sx-review-view.js +369 -0
- package/neural-interface/public/shared/skills/studio/sx-review.js +148 -0
- package/neural-interface/public/shared/skills/studio/sx-scan.js +35 -0
- package/neural-interface/public/shared/skills/studio/sx-snippets.js +96 -0
- package/neural-interface/public/shared/skills/studio/sx-subject.js +249 -0
- package/neural-interface/public/shared/skills/studio/sx-test-view.js +994 -0
- package/neural-interface/public/shared/skills/studio/sx-test.js +328 -0
- package/neural-interface/public/shared/skills/studio/sx-versions-view.js +241 -0
- package/neural-interface/public/shared/skills/studio/sx-workspace-view.js +426 -0
- package/neural-interface/public/shared/state.js +1 -1
- package/neural-interface/public/shared/streaming-markdown.js +58 -0
- package/neural-interface/public/shared/styleguide/sg-panel.js +4 -2
- package/neural-interface/public/shared/styles.css +1822 -1756
- package/neural-interface/public/shared/synabun-mascot.js +1115 -9
- package/neural-interface/public/shared/text-cache.js +29 -0
- package/neural-interface/public/shared/tool-list-picker.js +55 -0
- package/neural-interface/public/shared/tool-list-storage.js +24 -0
- package/neural-interface/public/shared/tool-list-view.js +112 -0
- package/neural-interface/public/shared/topright-overflow-logic.js +54 -0
- package/neural-interface/public/shared/tour/tour-actor.js +268 -0
- package/neural-interface/public/shared/tour/tour-beats.js +336 -0
- package/neural-interface/public/shared/tour/tour-engine.js +884 -0
- package/neural-interface/public/shared/tour/tour-ink.js +390 -0
- package/neural-interface/public/shared/tour/tour-stage.js +440 -0
- package/neural-interface/public/shared/tour/tour-state.js +40 -0
- package/neural-interface/public/shared/tour/tour-tips.js +99 -0
- package/neural-interface/public/shared/tour/tour.css +144 -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 +111 -140
- package/neural-interface/public/shared/ui-claude-panel.js +376 -82
- package/neural-interface/public/shared/ui-cli-banner.js +23 -167
- package/neural-interface/public/shared/ui-command-runner.js +6 -3
- package/neural-interface/public/shared/ui-context-menu.js +295 -0
- package/neural-interface/public/shared/ui-cost-widget.js +57 -59
- package/neural-interface/public/shared/ui-crash-notice.js +187 -0
- package/neural-interface/public/shared/ui-detail.js +15 -3
- 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-image-gallery.js +50 -47
- package/neural-interface/public/shared/ui-judgments.js +1 -1
- package/neural-interface/public/shared/ui-keybinds.js +33 -2
- package/neural-interface/public/shared/ui-link.js +3 -3
- package/neural-interface/public/shared/ui-menubar.js +10 -20
- package/neural-interface/public/shared/ui-native-loop-router-state.js +5 -0
- package/neural-interface/public/shared/ui-native-loop-router.js +11 -1
- package/neural-interface/public/shared/ui-navbar.js +49 -24
- package/neural-interface/public/shared/ui-notifications.js +1 -0
- package/neural-interface/public/shared/ui-panels.js +96 -65
- package/neural-interface/public/shared/ui-resume.js +9 -7
- package/neural-interface/public/shared/ui-schedules-studio.js +546 -431
- package/neural-interface/public/shared/ui-scroll-follow.js +16 -5
- package/neural-interface/public/shared/ui-sessions.js +27 -15
- package/neural-interface/public/shared/ui-settings.js +683 -526
- package/neural-interface/public/shared/ui-sidepanel-session-entry.js +9 -2
- package/neural-interface/public/shared/ui-sidepanel-sessions.js +4 -4
- package/neural-interface/public/shared/ui-sidepanel-state.js +23 -12
- package/neural-interface/public/shared/ui-sidepanel-tray.js +48 -7
- package/neural-interface/public/shared/ui-sidepanel-windows.js +18 -13
- package/neural-interface/public/shared/ui-skills.js +33 -2830
- package/neural-interface/public/shared/ui-styleguide.js +5 -2
- package/neural-interface/public/shared/ui-sync.js +15 -5
- package/neural-interface/public/shared/ui-terminal.js +270 -190
- package/neural-interface/public/shared/ui-tool-updates.js +6 -4
- package/neural-interface/public/shared/ui-tooltip.js +81 -51
- package/neural-interface/public/shared/ui-topright-overflow.js +233 -0
- package/neural-interface/public/shared/ui-trash.js +6 -4
- package/neural-interface/public/shared/ui-tutorial-layout.js +3 -117
- package/neural-interface/public/shared/ui-tutorial-preview.js +103 -0
- package/neural-interface/public/shared/ui-tutorial-steps.js +3 -65
- package/neural-interface/public/shared/ui-tutorial.css +47 -100
- package/neural-interface/public/shared/ui-tutorial.js +285 -509
- package/neural-interface/public/shared/ui-update.js +38 -2
- package/neural-interface/public/shared/ui-whiteboard.js +312 -59
- package/neural-interface/public/shared/ui-worker-end.js +5 -1
- package/neural-interface/public/shared/ui-workspaces.js +3 -2
- package/neural-interface/public/shared/view-variant.js +66 -0
- package/neural-interface/public/shared/whatsapp/wa-view.js +3 -3
- package/neural-interface/public/shared/whiteboard-list.js +172 -0
- package/neural-interface/public/shared/worker-end.js +10 -3
- package/neural-interface/public/shared/worker-questions.js +34 -0
- package/neural-interface/public/shared/worker-restart.js +12 -0
- package/neural-interface/public/sidepanel-session.html +2 -2
- package/neural-interface/public/variant/2d/background.js +2 -1
- package/neural-interface/public/variant/2d/context-menu.js +8 -2
- package/neural-interface/public/variant/2d/graph.js +42 -20
- package/neural-interface/public/variant/2d/hulls.js +14 -9
- package/neural-interface/public/variant/2d/lasso.js +11 -7
- package/neural-interface/public/variant/2d/main.js +32 -1
- package/neural-interface/public/variant/2d/minimap.js +11 -13
- package/neural-interface/public/variant/3d/main.js +69 -6
- package/neural-interface/public/variant/3d/map-controls.js +24 -9
- package/neural-interface/public/vendor/caveat/OFL.txt +93 -0
- package/neural-interface/public/vendor/caveat/caveat-latin-400-normal.woff2 +0 -0
- package/neural-interface/public/vendor/caveat/caveat-latin-700-normal.woff2 +0 -0
- package/neural-interface/public/vendor/caveat/caveat.css +17 -0
- package/neural-interface/public/vendor/caveat/manifest.json +12 -0
- package/neural-interface/public/vendor/yaml/LICENSE +13 -0
- package/neural-interface/public/vendor/yaml/manifest.json +4 -0
- package/neural-interface/public/vendor/yaml/yaml-2.9.1.min.js +137 -0
- package/neural-interface/scripts/build-vendor.mjs +32 -0
- package/neural-interface/server.js +4553 -2855
- package/neural-interface/templates/rulesets/README.md +1 -1
- package/neural-interface/templates/rulesets/core.md +1 -1
- package/neural-interface/templates/rulesets/legacy-hashes.json +23 -5
- package/neural-interface/templates/rulesets/manifest.json +8 -8
- package/npm-shrinkwrap.json +34 -12
- package/package.json +17 -3
- package/postinstall.js +9 -4
- package/preuninstall.js +1 -1
- package/setup.js +97 -322
- package/skills/skill-forge/SKILL.md +177 -0
- package/skills/skill-forge/evals/evals.json +54 -0
- package/skills/skill-forge/references/package.md +105 -0
- package/skills/skill-forge/references/review-and-recovery.md +63 -0
- package/skills/skill-forge/references/runtime-profiles.md +20 -0
- package/skills/skill-forge/references/sources-and-capabilities.md +51 -0
- package/skills/synabun/SKILL.md +10 -7
- package/skills/synabun/modules/audit.md +1 -5
- package/skills/synabun/modules/changelog.md +1 -5
- package/skills/synabun/modules/idea.md +1 -1
- package/skills/synabun/modules/memorize.md +6 -9
- package/skills/synabun/modules/schedule.md +6 -6
- package/mcp-server/dist/services/profiles.d.ts +0 -120
- package/mcp-server/dist/services/profiles.d.ts.map +0 -1
- package/mcp-server/dist/services/profiles.js +0 -387
- package/mcp-server/dist/services/profiles.js.map +0 -1
- package/mcp-server/dist/tools/leonardo-browser-tools.d.ts +0 -97
- package/mcp-server/dist/tools/leonardo-browser-tools.d.ts.map +0 -1
- package/mcp-server/dist/tools/leonardo-browser-tools.js +0 -228
- package/mcp-server/dist/tools/leonardo-browser-tools.js.map +0 -1
- package/mcp-server/dist/tools/leonardo.d.ts +0 -13
- package/mcp-server/dist/tools/leonardo.d.ts.map +0 -1
- package/mcp-server/dist/tools/leonardo.js +0 -21
- package/mcp-server/dist/tools/leonardo.js.map +0 -1
- package/mcp-server/dist/tools/profile.d.ts +0 -17
- package/mcp-server/dist/tools/profile.d.ts.map +0 -1
- package/mcp-server/dist/tools/profile.js +0 -114
- package/mcp-server/dist/tools/profile.js.map +0 -1
- package/mcp-server/src/services/profiles.ts +0 -428
- package/mcp-server/src/tools/leonardo-browser-tools.ts +0 -291
- package/mcp-server/src/tools/leonardo.ts +0 -30
- package/mcp-server/src/tools/profile.ts +0 -122
- package/neural-interface/lib/assistant-brains/opencode-browser-policy.js +0 -47
- package/neural-interface/lib/assistant-brains/opencode-route-gate.js +0 -62
- package/neural-interface/lib/mcp-profile-servers.js +0 -120
- package/neural-interface/public/shared/ui-tutorial-draw.js +0 -311
- package/skills/leonardo/SKILL.md +0 -168
- package/skills/leonardo/icon.svg +0 -1
- package/skills/leonardo/modules/browser-guide.md +0 -378
- package/skills/leonardo/modules/image-prompter.md +0 -283
- package/skills/leonardo/modules/model-advisor.md +0 -100
- package/skills/leonardo/modules/prompt-library.md +0 -110
- package/skills/leonardo/modules/style-guide.md +0 -186
- package/skills/leonardo/modules/video-prompter.md +0 -317
- /package/neural-interface/templates/rulesets/{gemini.md → antigravity.md} +0 -0
|
@@ -8,9 +8,23 @@
|
|
|
8
8
|
import { KEYS } from '../constants.js';
|
|
9
9
|
import { isNewerRunDescriptor } from '../ui-native-loop-router-state.js';
|
|
10
10
|
import { modelEffortIds } from '../agent-runtime-options.js';
|
|
11
|
+
import { getProviderMeta } from '../provider-icons.js';
|
|
11
12
|
import { usagePacketIsStale } from './asst-usage.js';
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
// The providers the Assistant itself can run on (its brain): the brain picker, /model and /new.
|
|
15
|
+
// Antigravity runs over ACP (lib/assistant-brains/antigravity.js), like a worker.
|
|
16
|
+
export const BRAIN_PROVIDERS = ['claude-code', 'codex', 'opencode', 'antigravity'];
|
|
17
|
+
// Providers that only ever run dispatched work. None any more (Antigravity became a brain too); kept so a module
|
|
18
|
+
// or a test that still imports the list reads it as empty.
|
|
19
|
+
export const WORKER_ONLY_PROVIDERS = [];
|
|
20
|
+
// Every provider the Assistant lists models for and can route a task to.
|
|
21
|
+
export const PROVIDERS = [...BRAIN_PROVIDERS, ...WORKER_ONLY_PROVIDERS];
|
|
22
|
+
// Providers that report tokens and no prices (Antigravity bills through its Google sign-in): a budget gives them no
|
|
23
|
+
// share, so a dry share never names them (asst-route.js), and their rows read "unpriced".
|
|
24
|
+
export const UNPRICED_PROVIDERS = ['antigravity'];
|
|
25
|
+
// Providers an older server may not list in its catalog yet: a model section without rows and without an archive
|
|
26
|
+
// for them stays hidden rather than showing an empty provider.
|
|
27
|
+
export const OPTIONAL_PROVIDERS = ['antigravity'];
|
|
14
28
|
|
|
15
29
|
export const PROVIDER_ALIASES = {
|
|
16
30
|
'claude-code': 'claude-code',
|
|
@@ -22,24 +36,38 @@ export const PROVIDER_ALIASES = {
|
|
|
22
36
|
openai: 'codex',
|
|
23
37
|
opencode: 'opencode',
|
|
24
38
|
oc: 'opencode',
|
|
39
|
+
antigravity: 'antigravity',
|
|
40
|
+
agy: 'antigravity',
|
|
41
|
+
'google antigravity': 'antigravity',
|
|
42
|
+
// Antigravity's CLI took the place of Gemini CLI: an old name or saved route means it.
|
|
43
|
+
gemini: 'antigravity',
|
|
25
44
|
};
|
|
26
45
|
|
|
27
46
|
export const PROVIDER_SHORT_LABELS = {
|
|
28
47
|
'claude-code': 'Claude',
|
|
29
48
|
codex: 'Codex',
|
|
30
49
|
opencode: 'OpenCode',
|
|
50
|
+
antigravity: 'Antigravity',
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export const PROVIDER_LABELS = {
|
|
54
|
+
'claude-code': 'Claude Code',
|
|
55
|
+
codex: 'Codex',
|
|
56
|
+
opencode: 'OpenCode',
|
|
57
|
+
antigravity: 'Antigravity',
|
|
31
58
|
};
|
|
32
59
|
|
|
33
60
|
// Providers whose brain carries an account profile picker.
|
|
34
61
|
export const ACCOUNT_PROVIDERS = new Set(['claude-code', 'codex']);
|
|
35
62
|
|
|
36
63
|
// Approval modes are sent as `permissionMode` (`set_permission_mode {mode}` /
|
|
37
|
-
// `query.permissionMode`). Claude uses the SDK enum; Codex/OpenCode
|
|
38
|
-
// distinguish "ask me" from "auto-approve". Plan mode is a separate
|
|
39
|
-
// (`planMode`) that combines with any approval mode, each provider in its
|
|
40
|
-
// way: Claude runs the SDK 'plan' mode and returns to the approval mode once
|
|
64
|
+
// `query.permissionMode`). Claude uses the SDK enum; Codex/OpenCode/Antigravity
|
|
65
|
+
// brains only distinguish "ask me" from "auto-approve". Plan mode is a separate
|
|
66
|
+
// flag (`planMode`) that combines with any approval mode, each provider in its
|
|
67
|
+
// own way: Claude runs the SDK 'plan' mode and returns to the approval mode once
|
|
41
68
|
// the plan is approved; Codex runs its native plan collaboration mode (read-only
|
|
42
|
-
// sandbox); OpenCode runs its own `plan` agent
|
|
69
|
+
// sandbox); OpenCode runs its own `plan` agent; Antigravity refuses code changes
|
|
70
|
+
// through SynaBun's hook and proposes the plan in a <proposed_plan> block.
|
|
43
71
|
export const PERMISSION_MODES = {
|
|
44
72
|
'claude-code': [
|
|
45
73
|
{ id: 'default', label: 'Default' },
|
|
@@ -54,9 +82,13 @@ export const PERMISSION_MODES = {
|
|
|
54
82
|
{ id: 'default', label: 'Default' },
|
|
55
83
|
{ id: 'auto', label: 'Auto-accept' },
|
|
56
84
|
],
|
|
85
|
+
antigravity: [
|
|
86
|
+
{ id: 'default', label: 'Default' },
|
|
87
|
+
{ id: 'auto', label: 'Auto-accept' },
|
|
88
|
+
],
|
|
57
89
|
};
|
|
58
90
|
|
|
59
|
-
export const PLAN_MODE_PROVIDERS = new Set(['claude-code', 'codex', 'opencode']);
|
|
91
|
+
export const PLAN_MODE_PROVIDERS = new Set(['claude-code', 'codex', 'opencode', 'antigravity']);
|
|
60
92
|
|
|
61
93
|
export const DEFAULT_BRAIN = Object.freeze({
|
|
62
94
|
provider: 'claude-code',
|
|
@@ -64,7 +96,7 @@ export const DEFAULT_BRAIN = Object.freeze({
|
|
|
64
96
|
effort: null,
|
|
65
97
|
agent: null,
|
|
66
98
|
project: null,
|
|
67
|
-
|
|
99
|
+
tools: Object.freeze(['all']),
|
|
68
100
|
accountId: null,
|
|
69
101
|
permissionMode: 'default',
|
|
70
102
|
planMode: false,
|
|
@@ -80,10 +112,42 @@ export function normalizeProvider(value, fallback = null) {
|
|
|
80
112
|
return PROVIDER_ALIASES[key] || fallback;
|
|
81
113
|
}
|
|
82
114
|
|
|
115
|
+
/** Can the Assistant itself run on `provider` (a canonical id)? */
|
|
116
|
+
export function isBrainProvider(provider) {
|
|
117
|
+
return BRAIN_PROVIDERS.includes(provider);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** Does `provider` report tokens and no prices (Antigravity)? */
|
|
121
|
+
export function isUnpricedProvider(provider) {
|
|
122
|
+
return UNPRICED_PROVIDERS.includes(provider);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** `value` as a brain provider, else `fallback`: an unknown name (or a worker-only provider) is never a brain. */
|
|
126
|
+
export function normalizeBrainProvider(value, fallback = null) {
|
|
127
|
+
const provider = normalizeProvider(value);
|
|
128
|
+
return provider && isBrainProvider(provider) ? provider : fallback;
|
|
129
|
+
}
|
|
130
|
+
|
|
83
131
|
export function providerShortLabel(provider) {
|
|
84
132
|
return PROVIDER_SHORT_LABELS[provider] || String(provider || '');
|
|
85
133
|
}
|
|
86
134
|
|
|
135
|
+
/** "Claude Code", "Antigravity": a provider's full name ('' for none). */
|
|
136
|
+
export function providerLabel(provider) {
|
|
137
|
+
return PROVIDER_LABELS[provider] || String(provider || '');
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* The icon, colour and name of a provider (provider-icons.js). A provider that file does not know
|
|
142
|
+
* yet keeps its own name and shows no icon, never another provider's (getProviderMeta falls back to
|
|
143
|
+
* Claude Code's for an unknown id).
|
|
144
|
+
*/
|
|
145
|
+
export function providerMeta(provider) {
|
|
146
|
+
const meta = getProviderMeta(provider || undefined);
|
|
147
|
+
if (!provider || meta?.id === provider) return meta;
|
|
148
|
+
return { id: provider, label: providerLabel(provider), shortLabel: providerShortLabel(provider), icon: '', color: '' };
|
|
149
|
+
}
|
|
150
|
+
|
|
87
151
|
function str(value) {
|
|
88
152
|
if (value == null) return '';
|
|
89
153
|
return String(value).trim();
|
|
@@ -93,19 +157,22 @@ function str(value) {
|
|
|
93
157
|
export function normalizeBrain(raw, fallback = DEFAULT_BRAIN) {
|
|
94
158
|
const base = { ...DEFAULT_BRAIN, ...(fallback || {}) };
|
|
95
159
|
const src = raw && typeof raw === 'object' ? raw : {};
|
|
96
|
-
|
|
160
|
+
// A provider that cannot be the brain (an unknown name) falls back like any unknown one.
|
|
161
|
+
const provider = normalizeBrainProvider(src.provider ?? src.brain, normalizeBrainProvider(base.provider)) || 'claude-code';
|
|
97
162
|
const modes = PERMISSION_MODES[provider] || PERMISSION_MODES['claude-code'];
|
|
98
163
|
const rawMode = str(src.permissionMode);
|
|
99
164
|
// 'plan' used to be one of Claude's permission modes: it is the plan flag now.
|
|
100
165
|
const legacyPlan = rawMode === 'plan';
|
|
101
166
|
const mode = legacyPlan ? 'default' : rawMode;
|
|
167
|
+
const effort = str(src.effort) || null;
|
|
102
168
|
return {
|
|
103
169
|
provider,
|
|
104
170
|
model: str(src.model),
|
|
105
|
-
|
|
171
|
+
// Antigravity's thinking levels have no "off": no level is the model's own default (null).
|
|
172
|
+
effort: provider === 'antigravity' && effort === 'off' ? null : effort,
|
|
106
173
|
agent: provider === 'opencode' ? (str(src.agent) || null) : null,
|
|
107
174
|
project: str(src.project ?? src.cwd) || null,
|
|
108
|
-
|
|
175
|
+
tools: provider === 'opencode' ? (Array.isArray(src.tools) ? [...src.tools] : null) : ['all'],
|
|
109
176
|
accountId: ACCOUNT_PROVIDERS.has(provider) ? (str(src.accountId) || null) : null,
|
|
110
177
|
permissionMode: modes.some(m => m.id === mode) ? mode : 'default',
|
|
111
178
|
planMode: PLAN_MODE_PROVIDERS.has(provider) && (src.planMode === true || legacyPlan),
|
|
@@ -145,7 +212,7 @@ function pickDefault(list) {
|
|
|
145
212
|
* efforts: { [provider]: [{ id, tier? }] },
|
|
146
213
|
* accounts: { [provider]: [{ id, label }] },
|
|
147
214
|
* agents: [{ name, mode? }], // OpenCode
|
|
148
|
-
*
|
|
215
|
+
* toolCatalog: { default, groups },
|
|
149
216
|
* projects: [{ path, label }],
|
|
150
217
|
* }
|
|
151
218
|
*/
|
|
@@ -188,14 +255,8 @@ export function resolveBrainDefaults(brain, catalog = {}) {
|
|
|
188
255
|
b.accountId = null;
|
|
189
256
|
}
|
|
190
257
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
const ids = Object.keys(profiles);
|
|
194
|
-
if (ids.length && !ids.includes(b.mcpProfile)) {
|
|
195
|
-
b.mcpProfile = ids.includes(catalog.defaultMcpProfile) ? catalog.defaultMcpProfile : (ids.includes('full') ? 'full' : ids[0]);
|
|
196
|
-
}
|
|
197
|
-
} else if (!b.mcpProfile && catalog.defaultMcpProfile) {
|
|
198
|
-
b.mcpProfile = catalog.defaultMcpProfile;
|
|
258
|
+
if (b.provider === 'opencode' && b.tools == null && catalog.toolCatalog) {
|
|
259
|
+
b.tools = [...new Set([...(catalog.toolCatalog.default || []).filter(id => id !== 'git'), 'browser'])];
|
|
199
260
|
}
|
|
200
261
|
|
|
201
262
|
if (!b.project && Array.isArray(catalog.projects) && catalog.projects.length === 1) {
|
|
@@ -285,7 +346,7 @@ export function emptyProjectView(project, projects = [], tr = (_key, fallback, p
|
|
|
285
346
|
export function brainRequiresSwitch(a, b) {
|
|
286
347
|
const x = normalizeBrain(a);
|
|
287
348
|
const y = normalizeBrain(b);
|
|
288
|
-
return x.provider !== y.provider || x.accountId !== y.accountId || x.
|
|
349
|
+
return x.provider !== y.provider || x.accountId !== y.accountId || JSON.stringify(x.tools) !== JSON.stringify(y.tools);
|
|
289
350
|
}
|
|
290
351
|
|
|
291
352
|
// ── Runs ────────────────────────────────────────────────────────────────────
|
|
@@ -295,9 +356,11 @@ export function isTerminalRunStatus(status) {
|
|
|
295
356
|
}
|
|
296
357
|
|
|
297
358
|
// Dispatcher views carry `state` (queued, awaiting_route, starting, running,
|
|
298
|
-
// idle, awaiting_permission, completed, failed, stopped,
|
|
299
|
-
// descriptors (sidepanel:run-*) carry `status`. The tray
|
|
300
|
-
|
|
359
|
+
// idle, awaiting_permission, suspended, resuming, completed, failed, stopped,
|
|
360
|
+
// interrupted); runtime descriptors (sidepanel:run-*) carry `status`. The tray
|
|
361
|
+
// reads `status`. A run a server restart suspended is still running; one being
|
|
362
|
+
// resumed is starting.
|
|
363
|
+
const STATE_STATUS = { queued: 'queued', awaiting_route: 'queued', starting: 'starting', running: 'running', idle: 'running', awaiting_permission: 'running', suspended: 'running', resuming: 'starting' };
|
|
301
364
|
|
|
302
365
|
export function runStatusFromState(state) {
|
|
303
366
|
const value = str(state);
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// ═══════════════════════════════════════════
|
|
2
|
+
// SynaBun Assistant — what a stop names
|
|
3
|
+
// ═══════════════════════════════════════════
|
|
4
|
+
// Pure module (no DOM, no i18n import) so node:test can exercise it.
|
|
5
|
+
//
|
|
6
|
+
// A stop ends the work the user named and nothing else:
|
|
7
|
+
// resolveStopTarget `/stop <target>`: the one run of this session the target names (its id, the
|
|
8
|
+
// start of its id, its title or the words of its title), or why it names none.
|
|
9
|
+
// Two candidates stop nothing: the user picks one.
|
|
10
|
+
// createConfirmGate the agents tray's "Stop all": the first press arms it, a second press inside
|
|
11
|
+
// the window stops every run of the session at once. A single stray click, a
|
|
12
|
+
// double click or a held key never does (2026-10-24: one "Stop all" press
|
|
13
|
+
// ended both runs of a session while the user meant one of them).
|
|
14
|
+
// Words the user types to stop everything ("stop", "cancel") go to the brain, which stops runs
|
|
15
|
+
// with agent_stop (assistant-persona.js): nothing here reads a message.
|
|
16
|
+
|
|
17
|
+
import { isTerminalRunStatus } from './asst-state.js';
|
|
18
|
+
|
|
19
|
+
/** How long an armed "Stop all" waits for its second press, and the least time between the two. */
|
|
20
|
+
export const STOP_ALL_CONFIRM_MS = 4000;
|
|
21
|
+
export const STOP_ALL_MIN_GAP_MS = 300;
|
|
22
|
+
|
|
23
|
+
// Words that say "a run" without saying which one: "/stop the OpenCode settings run" names it by the rest.
|
|
24
|
+
const FILLER = new Set(['the', 'a', 'an', 'that', 'this', 'my', 'our', 'one', 'run', 'runs', 'agent', 'agents', 'worker', 'workers', 'task', 'job', 'please', 'o', 'os', 'as', 'do', 'da', 'de']);
|
|
25
|
+
const FULL_RUN_ID = /^[0-9a-f]{32}$/i;
|
|
26
|
+
const ID_PREFIX = /^[0-9a-f][0-9a-f-]{3,}$/i;
|
|
27
|
+
|
|
28
|
+
function words(text) {
|
|
29
|
+
return String(text ?? '').toLowerCase().split(/[^\p{L}\p{N}]+/u).filter(Boolean);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function unquote(text) {
|
|
33
|
+
const s = String(text ?? '').trim();
|
|
34
|
+
const m = s.match(/^(["'“‘])([\s\S]*)(["'”’])$/);
|
|
35
|
+
return m ? m[2].trim() : s;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* The run `/stop <target>` names among `runs` (the tray's runs of this session).
|
|
40
|
+
* → { run, by: 'id' | 'prefix' | 'title' | 'words' }
|
|
41
|
+
* | { error: 'empty' | 'none' | 'finished' | 'ambiguous', matches?: run[], run? }
|
|
42
|
+
* An exact id names that run whatever its state (the server says when it already ended). Every
|
|
43
|
+
* other way names a run that still works; one that ended is `finished`. A full id the tray does not
|
|
44
|
+
* know is handed on as `{ error: 'none', passthrough: id }`: the server knows more runs than a tray.
|
|
45
|
+
*/
|
|
46
|
+
export function resolveStopTarget(target, runs = []) {
|
|
47
|
+
const raw = unquote(target);
|
|
48
|
+
if (!raw) return { error: 'empty' };
|
|
49
|
+
const list = (Array.isArray(runs) ? runs : []).filter((run) => run && run.runId && run.removed !== true);
|
|
50
|
+
const live = list.filter((run) => !isTerminalRunStatus(run.status));
|
|
51
|
+
const one = (matches, by) => {
|
|
52
|
+
if (matches.length === 1) return isTerminalRunStatus(matches[0].status) ? { error: 'finished', run: matches[0] } : { run: matches[0], by };
|
|
53
|
+
if (matches.length > 1) return { error: 'ambiguous', matches };
|
|
54
|
+
return null;
|
|
55
|
+
};
|
|
56
|
+
const lower = raw.toLowerCase();
|
|
57
|
+
|
|
58
|
+
const exact = list.find((run) => String(run.runId).toLowerCase() === lower);
|
|
59
|
+
if (exact) return { run: exact, by: 'id' };
|
|
60
|
+
if (ID_PREFIX.test(raw)) {
|
|
61
|
+
const byPrefix = one(list.filter((run) => String(run.runId).toLowerCase().startsWith(lower)), 'prefix');
|
|
62
|
+
if (byPrefix) return byPrefix;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const title = (run) => words(run.title || run.task || '').join(' ');
|
|
66
|
+
const wanted = words(raw).join(' ');
|
|
67
|
+
if (wanted) {
|
|
68
|
+
const byTitle = one(live.filter((run) => title(run) === wanted), 'title');
|
|
69
|
+
if (byTitle) return byTitle;
|
|
70
|
+
}
|
|
71
|
+
// The words that say which run: each one is a word of its title, or the start of one.
|
|
72
|
+
const keys = words(raw).filter((word) => !FILLER.has(word));
|
|
73
|
+
if (keys.length) {
|
|
74
|
+
const fits = (run) => { const have = words(run.title || run.task || ''); return keys.every((key) => have.some((word) => word === key || (key.length >= 3 && word.startsWith(key)))); };
|
|
75
|
+
const byWords = one(live.filter(fits), 'words');
|
|
76
|
+
if (byWords) return byWords;
|
|
77
|
+
const ended = list.filter((run) => isTerminalRunStatus(run.status) && (title(run) === wanted || fits(run)));
|
|
78
|
+
if (ended.length === 1) return { error: 'finished', run: ended[0] };
|
|
79
|
+
}
|
|
80
|
+
return FULL_RUN_ID.test(raw) ? { error: 'none', passthrough: raw } : { error: 'none' };
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* A press that only counts as the second of two. `press()` → 'armed' (the first: `onChange(true)`),
|
|
85
|
+
* 'confirmed' (the second, inside `windowMs` and at least `minGapMs` after the first:
|
|
86
|
+
* `onChange(false)`, the caller stops everything) or 'ignored' (too soon after the first: a double
|
|
87
|
+
* click, a held key). The arm lapses after `windowMs` by itself (`onChange(false)`).
|
|
88
|
+
*/
|
|
89
|
+
export function createConfirmGate({
|
|
90
|
+
windowMs = STOP_ALL_CONFIRM_MS,
|
|
91
|
+
minGapMs = STOP_ALL_MIN_GAP_MS,
|
|
92
|
+
now = Date.now,
|
|
93
|
+
setTimer = (fn, ms) => setTimeout(fn, ms),
|
|
94
|
+
clearTimer = (id) => clearTimeout(id),
|
|
95
|
+
onChange = () => {},
|
|
96
|
+
} = {}) {
|
|
97
|
+
let armedAt = null;
|
|
98
|
+
let timer = null;
|
|
99
|
+
const notify = (armed) => { try { onChange(armed); } catch { /* the button is gone */ } };
|
|
100
|
+
function reset() {
|
|
101
|
+
if (timer !== null) { clearTimer(timer); timer = null; }
|
|
102
|
+
if (armedAt === null) return false;
|
|
103
|
+
armedAt = null;
|
|
104
|
+
notify(false);
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
function press() {
|
|
108
|
+
const at = now();
|
|
109
|
+
// An arm whose timer never ran (a throttled background tab) has lapsed all the same.
|
|
110
|
+
if (armedAt !== null && at - armedAt > windowMs) reset();
|
|
111
|
+
if (armedAt === null) {
|
|
112
|
+
armedAt = at;
|
|
113
|
+
timer = setTimer(() => { timer = null; reset(); }, windowMs);
|
|
114
|
+
notify(true);
|
|
115
|
+
return 'armed';
|
|
116
|
+
}
|
|
117
|
+
if (at - armedAt < minGapMs) return 'ignored';
|
|
118
|
+
reset();
|
|
119
|
+
return 'confirmed';
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
press,
|
|
123
|
+
reset,
|
|
124
|
+
isArmed: () => armedAt !== null,
|
|
125
|
+
destroy() { if (timer !== null) { clearTimer(timer); timer = null; } armedAt = null; },
|
|
126
|
+
};
|
|
127
|
+
}
|
|
@@ -345,32 +345,62 @@ export function injectAssistantStyles() {
|
|
|
345
345
|
.asst-transcript > .asst-status + .asst-status,
|
|
346
346
|
.asst-transcript > .asst-route-line + .asst-route-line { margin-top: 4px; }
|
|
347
347
|
.asst-transcript > .asst-working { margin-top: 8px; }
|
|
348
|
+
/* The open card waits at the bottom (asst-ask-tail.js): under every row that arrives after it,
|
|
349
|
+
above the "Working…" row, until it is answered and goes back under its message. */
|
|
350
|
+
.asst-ask-tail { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
|
|
351
|
+
.asst-ask-tail > * { margin-top: 0; }
|
|
352
|
+
/* The card sheet is injected after this one: restate its own gap margin at its specificity. */
|
|
353
|
+
.asst-ask-tail > .asst-followups.asst-ask,
|
|
354
|
+
.asst-ask-tail > .asst-control.asst-ask { margin-top: 0; }
|
|
348
355
|
|
|
349
|
-
/* ── Empty state
|
|
356
|
+
/* ── Empty state ────────────────────────────────────────────────────
|
|
357
|
+
One column, one hierarchy: the character and the heading, then the
|
|
358
|
+
starters as ghost rows (a prop glyph and a label, no capsule and no
|
|
359
|
+
seam: a faint fill with the md corners only while hovered or
|
|
360
|
+
focused), then the context line (Project · Budget) as quiet sm text
|
|
361
|
+
controls that open the toolbar's own menus (an open menu alone
|
|
362
|
+
wears the gold on-state). The rows and the line come in staggered
|
|
363
|
+
(--i, 40 ms apart), recede while the composer holds a draft, and
|
|
364
|
+
the picked starter keeps the gold on-state until the draft is
|
|
365
|
+
cleared. All of it static under reduced motion (the blanket at the
|
|
366
|
+
end). */
|
|
350
367
|
.asst-empty {
|
|
351
368
|
display: flex;
|
|
352
369
|
flex-direction: column;
|
|
353
370
|
align-items: center;
|
|
354
371
|
justify-content: center;
|
|
355
|
-
gap:
|
|
372
|
+
gap: 6px;
|
|
356
373
|
min-height: 100%;
|
|
357
374
|
padding: 16px 4px;
|
|
358
375
|
text-align: center;
|
|
359
376
|
}
|
|
360
|
-
|
|
361
|
-
.asst-empty-
|
|
362
|
-
/* The greeting (public/shared/greeting/)
|
|
377
|
+
@keyframes asst-empty-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
|
|
378
|
+
.asst-empty-title { margin-bottom: 8px; color: var(--asst-text); font-family: var(--ff-heading, inherit); font-size: 20px; font-weight: 600; letter-spacing: -.01em; animation: asst-empty-in var(--asst-dur-moderate) var(--asst-ease-enter) backwards; }
|
|
379
|
+
/* The greeting (public/shared/greeting/) sits between the heading and the starters. */
|
|
363
380
|
.asst-empty-greet { display: contents; }
|
|
364
|
-
.asst-
|
|
365
|
-
.asst-
|
|
366
|
-
.asst-chip.asst-suggestion
|
|
381
|
+
.asst-suggestions { display: flex; flex-direction: column; align-items: stretch; gap: 2px; width: min(100%, 380px); margin-top: 2px; }
|
|
382
|
+
.asst-chip.asst-suggestion { --cap-h: var(--asst-pill-h-md); --cap-r: var(--asst-pill-r-md); --cap-px: var(--asst-pill-px-md); --cap-fs: 12.5px; --cap-gap: 10px; justify-content: flex-start; max-width: none; height: auto; min-height: var(--cap-h); padding: 5px var(--cap-px); background: transparent; box-shadow: none; color: var(--asst-text-2); text-align: left; white-space: normal; line-height: 1.3; animation: asst-empty-in var(--asst-dur-moderate) var(--asst-ease-enter) backwards; animation-delay: calc(var(--i, 0) * 40ms); }
|
|
383
|
+
.asst-chip.asst-suggestion .asst-chip-text { white-space: normal; overflow: visible; text-overflow: clip; }
|
|
367
384
|
.asst-chip.asst-suggestion > .asst-icon svg { width: 20px; height: 14px; }
|
|
368
|
-
.asst-chip.asst-suggestion > .asst-icon { color: var(--asst-text-3); }
|
|
369
|
-
.asst-chip.asst-suggestion:is(:hover, :focus-visible)
|
|
370
|
-
|
|
371
|
-
.asst-
|
|
372
|
-
.asst-
|
|
373
|
-
.asst-empty-
|
|
385
|
+
.asst-suggestions .asst-chip.asst-suggestion > .asst-icon:not([hidden]) { margin: 0; padding: 0; box-shadow: none; color: var(--asst-text-3); }
|
|
386
|
+
.asst-suggestions .asst-chip.asst-suggestion:is(:hover, :focus-visible) { background: var(--asst-fill-1); box-shadow: none; color: var(--asst-text); }
|
|
387
|
+
.asst-suggestions .asst-chip.asst-suggestion:is(:hover, :focus-visible) > .asst-icon { box-shadow: none; color: var(--asst-text); }
|
|
388
|
+
.asst-suggestions .asst-chip.asst-suggestion.is-picked { background: var(--asst-pill-on-fill); box-shadow: inset 0 0 0 1px var(--asst-pill-on-ring); color: var(--asst-text); }
|
|
389
|
+
.asst-suggestions .asst-chip.asst-suggestion.is-picked > .asst-icon { color: var(--asst-brand); }
|
|
390
|
+
.asst-empty.is-drafting .asst-chip.asst-suggestion:not(.is-picked):not(:hover):not(:focus-visible) { opacity: .55; }
|
|
391
|
+
/* A starter's quiet aside (the Workspace tour's "· 2 min"): the row's own font, the faint tone. */
|
|
392
|
+
.asst-suggestions .asst-chip.asst-suggestion .asst-chip-meta { flex-shrink: 0; margin-left: 2px; color: var(--asst-text-4); font: inherit; font-size: 11.5px; white-space: nowrap; }
|
|
393
|
+
.asst-suggestions .asst-chip.asst-suggestion .asst-chip-meta::before { content: '· '; }
|
|
394
|
+
/* The context line: the toolbar's Project field drawn once more, and Budget, as quiet sm text controls. */
|
|
395
|
+
.asst-empty-project { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 2px 8px; max-width: 100%; margin-top: 10px; animation: asst-empty-in var(--asst-dur-moderate) var(--asst-ease-enter) backwards; animation-delay: calc(var(--i, 0) * 40ms); }
|
|
396
|
+
.asst-empty-project .asst-dd.asst-empty-control-btn { --cap-h: var(--asst-pill-h-sm); --cap-r: var(--asst-pill-r-sm); --cap-px: var(--asst-pill-px-xs); --cap-gap: 4px; --cap-icon: 12px; --cap-fs: 11.5px; isolation: isolate; max-width: min(100%, 320px); color: var(--asst-text-2); }
|
|
397
|
+
.asst-empty-project .asst-dd.asst-empty-control-btn::after { content: ''; position: absolute; inset: -2px; z-index: -1; border-radius: inherit; }
|
|
398
|
+
.asst-empty-project .asst-dd.asst-empty-control-btn:not([aria-expanded="true"]) { background: transparent; box-shadow: none; }
|
|
399
|
+
.asst-empty-project .asst-dd.asst-empty-control-btn:hover:not([aria-expanded="true"]) { background: var(--asst-fill-1); color: var(--asst-text); }
|
|
400
|
+
.asst-empty-project .asst-dd.asst-empty-control-btn[aria-expanded="true"] { color: var(--asst-text); }
|
|
401
|
+
.asst-empty-project .asst-dd.asst-empty-control-btn > .asst-icon:not([hidden]) { margin: 0; padding: 0; box-shadow: none; color: var(--asst-text-3); }
|
|
402
|
+
.asst-empty-project .asst-dd.asst-empty-control-btn:is(:hover, [aria-expanded="true"]) > .asst-icon:not([hidden]) { box-shadow: none; }
|
|
403
|
+
.asst-empty-project .asst-dd.asst-empty-control-btn .asst-dd-label { max-width: 24ch; }
|
|
374
404
|
.asst-empty-project-key { flex-shrink: 0; color: var(--asst-text-3); font-weight: 400; }
|
|
375
405
|
|
|
376
406
|
/* ── Messages ───────────────────────────────────────────────────── */
|
|
@@ -998,6 +1028,12 @@ export function injectAssistantStyles() {
|
|
|
998
1028
|
.asst-usage-run-tokens { color: var(--asst-text-3); font-family: var(--asst-mono); font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
999
1029
|
|
|
1000
1030
|
/* The provider's usage limit: one line under the gauge, replaced in place (never a transcript row). */
|
|
1031
|
+
.asst-route-fields { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
|
|
1032
|
+
.asst-route-fields .asst-dd { min-width: 0; max-width: 100%; }
|
|
1033
|
+
.asst-route-fields .asst-dd-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
|
|
1034
|
+
.asst-limit-dock { position: sticky; bottom: 0; flex: none; z-index: 2; background: var(--asst-bg); }
|
|
1035
|
+
.asst-limit-dock[hidden] { display: none; }
|
|
1036
|
+
.asst-limit-dock .asst-limit-wait { margin: 8px 12px; }
|
|
1001
1037
|
.asst-limit {
|
|
1002
1038
|
flex: 0 0 auto;
|
|
1003
1039
|
display: flex;
|
|
@@ -1327,9 +1363,45 @@ export function injectAssistantStyles() {
|
|
|
1327
1363
|
.asst-control-plan-body { min-width: 0; }
|
|
1328
1364
|
.asst-control-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
|
|
1329
1365
|
|
|
1366
|
+
/* Follow-ups and the question cards are drawn by the mascot: their sheet is asst-ask-styles.js. */
|
|
1367
|
+
|
|
1330
1368
|
/* Route card */
|
|
1331
1369
|
.asst-route-summary { color: var(--asst-text); }
|
|
1332
1370
|
.asst-route-reasons { margin-top: -4px; color: var(--asst-text-3); font-size: 11.5px; }
|
|
1371
|
+
/* Here / Dispatch: a segmented choice of where the task runs; the list, the model menu and Run follow it.
|
|
1372
|
+
sm capsules in one xs-padded track; the pick takes the gold "on" pair, like the option's key. */
|
|
1373
|
+
.asst-route-sides {
|
|
1374
|
+
display: inline-flex;
|
|
1375
|
+
align-self: flex-start;
|
|
1376
|
+
gap: 2px;
|
|
1377
|
+
padding: 2px;
|
|
1378
|
+
border-radius: var(--asst-pill-r-md);
|
|
1379
|
+
background: var(--asst-fill-1);
|
|
1380
|
+
box-shadow: inset 0 0 0 1px var(--asst-line);
|
|
1381
|
+
}
|
|
1382
|
+
.asst-route-side {
|
|
1383
|
+
display: inline-flex;
|
|
1384
|
+
align-items: center;
|
|
1385
|
+
justify-content: center;
|
|
1386
|
+
min-width: 76px;
|
|
1387
|
+
height: var(--asst-pill-h-sm);
|
|
1388
|
+
padding: 0 var(--asst-pill-px-sm);
|
|
1389
|
+
border: 0;
|
|
1390
|
+
border-radius: var(--asst-pill-r-sm);
|
|
1391
|
+
background: transparent;
|
|
1392
|
+
color: var(--asst-text-2);
|
|
1393
|
+
font: inherit;
|
|
1394
|
+
font-size: 12px;
|
|
1395
|
+
font-weight: 500;
|
|
1396
|
+
white-space: nowrap;
|
|
1397
|
+
cursor: pointer;
|
|
1398
|
+
transition: background-color var(--asst-dur-fast) var(--asst-ease-standard), box-shadow var(--asst-dur-fast) var(--asst-ease-standard), color var(--asst-dur-fast) var(--asst-ease-standard);
|
|
1399
|
+
}
|
|
1400
|
+
.asst-route-side:hover { background: var(--asst-fill-2); color: var(--asst-text); }
|
|
1401
|
+
.asst-route-side.selected { background: var(--asst-pill-on-fill); box-shadow: inset 0 0 0 1px var(--asst-pill-on-ring); color: var(--asst-text); }
|
|
1402
|
+
.asst-route-side[aria-disabled="true"] { opacity: .45; cursor: not-allowed; }
|
|
1403
|
+
.asst-route-side[aria-disabled="true"]:not(.selected):hover { background: transparent; color: var(--asst-text-2); }
|
|
1404
|
+
.asst-route-side-note { margin-top: -6px; color: var(--asst-text-3); font-size: 11.5px; }
|
|
1333
1405
|
.asst-route-options { display: flex; flex-direction: column; gap: 4px; }
|
|
1334
1406
|
.asst-route-option {
|
|
1335
1407
|
display: flex;
|
|
@@ -1399,6 +1471,8 @@ export function injectAssistantStyles() {
|
|
|
1399
1471
|
/* Deny / Decline: a neutral ghost with ✕ (red only ever means failed). */
|
|
1400
1472
|
.asst-btn-danger { background: transparent; box-shadow: inset 0 0 0 1px var(--asst-line-2); color: var(--asst-text-2); }
|
|
1401
1473
|
.asst-btn-danger:hover:not(:disabled) { background: var(--asst-fill-1); box-shadow: inset 0 0 0 1px var(--asst-text-3); color: var(--asst-text); }
|
|
1474
|
+
/* "Stop all" armed: it waits for a second press (asst-agents-dock.js), in the attention tone. */
|
|
1475
|
+
.asst-dock-stopall[data-armed="true"], .asst-dock-stopall[data-armed="true"]:hover:not(:disabled) { background: var(--asst-fill-1); box-shadow: inset 0 0 0 1px var(--asst-pill-warn-ring); color: var(--asst-warn); }
|
|
1402
1476
|
.asst-btn-icon { display: inline-flex; margin-left: -2px; }
|
|
1403
1477
|
.asst-btn-icon svg { width: 12px; height: 12px; }
|
|
1404
1478
|
|
|
@@ -1412,7 +1486,7 @@ export function injectAssistantStyles() {
|
|
|
1412
1486
|
.assistant-panel :is(.asp-header, .asp-body) :is(button, [role="button"], [tabindex]):focus-visible,
|
|
1413
1487
|
.asp-session-pill:focus-visible,
|
|
1414
1488
|
.asp-session-pill .term-minimized-pill-close:focus-visible,
|
|
1415
|
-
:is(.asst-control-cmd, .asst-control-deny-msg, .asst-control-custom):focus-visible {
|
|
1489
|
+
:is(.asst-control-cmd, .asst-control-deny-msg, .asst-control-custom, .asst-ask-input):focus-visible {
|
|
1416
1490
|
outline: 2px solid var(--asst-focus);
|
|
1417
1491
|
outline-offset: 1px;
|
|
1418
1492
|
}
|
|
@@ -1959,11 +2033,9 @@ export function injectAssistantStyles() {
|
|
|
1959
2033
|
@container asst (max-width: 400px) {
|
|
1960
2034
|
.asst-root > * { --asst-inline: 6px; }
|
|
1961
2035
|
:is(.asst-cost, .asst-bar-group[data-group="context"]) { display: none !important; }
|
|
1962
|
-
.asst-
|
|
1963
|
-
.asst-
|
|
1964
|
-
.asst-empty-project { width: 100%; }
|
|
1965
|
-
.asst-dd.asst-empty-control-btn { flex: 1 1 auto; justify-content: flex-start; max-width: none; }
|
|
1966
|
-
.asst-empty-control-btn .asst-dd-label { flex: 1 1 auto; max-width: none; text-align: start; }
|
|
2036
|
+
.asst-empty { padding-inline: 0; }
|
|
2037
|
+
.asst-suggestions { width: 100%; }
|
|
2038
|
+
.asst-empty-project .asst-dd.asst-empty-control-btn { max-width: 100%; }
|
|
1967
2039
|
.asst-msg.msg-user .asst-msg-content { max-width: 92%; }
|
|
1968
2040
|
.asst-route-opt-sub { display: none; }
|
|
1969
2041
|
.asst-run-main { flex-wrap: wrap; row-gap: 2px; }
|
|
@@ -1978,7 +2050,7 @@ export function injectAssistantStyles() {
|
|
|
1978
2050
|
}
|
|
1979
2051
|
@container asst (max-height: 260px) {
|
|
1980
2052
|
/* the toolbar stays: it carries the controls */
|
|
1981
|
-
:is(.asst-empty-
|
|
2053
|
+
:is(.asst-empty-mascot, .asst-empty-project, .asst-suggestions, .asst-empty-greet) { display: none !important; }
|
|
1982
2054
|
.asst-empty { gap: 4px; padding: 4px; }
|
|
1983
2055
|
.asst-empty-title { font-size: 14px; }
|
|
1984
2056
|
.asst-bottom { margin-top: 6px; }
|