synabun 2.1.0 → 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 +121 -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 +501 -39
- package/neural-interface/i18n/pt-BR.json +501 -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-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 +207 -49
- 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 +13 -4
- 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 +420 -21
- package/neural-interface/lib/native-loop-runtime.js +23 -2
- package/neural-interface/lib/opencode-native-boundary.js +11 -2
- 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 +32 -2
- 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 +1 -1
- 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-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-panel.js +45 -8
- package/neural-interface/public/shared/assistant/asst-render.js +51 -12
- 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-scenes.js +54 -1
- 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-styles.js +34 -0
- 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-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/ocp-v2/ocp-v2-panel.js +27 -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 +7 -1
- package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +17 -0
- 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/streaming-markdown.js +58 -0
- package/neural-interface/public/shared/styles.css +354 -34
- 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 +299 -77
- 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-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 +644 -426
- 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
|
@@ -2,24 +2,25 @@
|
|
|
2
2
|
// SynaBun Neural Interface — Resume Sessions
|
|
3
3
|
// Toolbar dropdown for browsing and resuming
|
|
4
4
|
// past CLI sessions across projects.
|
|
5
|
-
// Supports: Claude Code, Codex CLI,
|
|
5
|
+
// Supports: Claude Code, Codex CLI, Antigravity CLI, OpenCode.
|
|
6
6
|
// ═══════════════════════════════════════════
|
|
7
7
|
|
|
8
8
|
import { emit, on } from './state.js';
|
|
9
|
-
import { fetchClaudeSessions, fetchCodexSessions, fetchOpencodeSessions,
|
|
9
|
+
import { fetchClaudeSessions, fetchCodexSessions, fetchOpencodeSessions, fetchAntigravitySessions, searchMemories, searchSessions, startSessionIndexing, cancelSessionIndexing, fetchIndexingStatus } from './api.js';
|
|
10
10
|
import { isGuest, hasPermission } from './ui-sync.js';
|
|
11
11
|
import { storage } from './storage.js';
|
|
12
12
|
import { getProviderMeta, PROVIDER_META } from './provider-icons.js';
|
|
13
|
+
import { migrateProviderId } from './agent-runtime-options.js';
|
|
13
14
|
|
|
14
15
|
const $ = (id) => document.getElementById(id);
|
|
15
16
|
|
|
16
17
|
// ── CLI providers for Resume ──
|
|
17
|
-
const RESUME_PROVIDERS = ['claude-code', 'codex', '
|
|
18
|
+
const RESUME_PROVIDERS = ['claude-code', 'codex', 'antigravity', 'opencode'];
|
|
18
19
|
const PROVIDER_FETCH = {
|
|
19
20
|
'claude-code': fetchClaudeSessions,
|
|
20
21
|
'codex': fetchCodexSessions,
|
|
21
22
|
'opencode': fetchOpencodeSessions,
|
|
22
|
-
'
|
|
23
|
+
'antigravity': fetchAntigravitySessions,
|
|
23
24
|
};
|
|
24
25
|
|
|
25
26
|
// ── State ──
|
|
@@ -28,7 +29,7 @@ let _searchDebounce = null;
|
|
|
28
29
|
let _currentSearch = '';
|
|
29
30
|
let _expandedProject = null; // path of currently expanded project
|
|
30
31
|
let _loading = false;
|
|
31
|
-
let _selectedProvider = storage.getItem('synabun-resume-provider') || 'claude-code';
|
|
32
|
+
let _selectedProvider = migrateProviderId(storage.getItem('synabun-resume-provider') || 'claude-code');
|
|
32
33
|
const _projectsByProvider = new Map();
|
|
33
34
|
const _loadPromises = new Map();
|
|
34
35
|
|
|
@@ -177,9 +178,10 @@ async function loadAllProjects(search = '') {
|
|
|
177
178
|
_loading = true;
|
|
178
179
|
try {
|
|
179
180
|
// When actively searching, route through the FTS5 + semantic hybrid endpoint
|
|
180
|
-
// so we match the full session body, not just the first prompt
|
|
181
|
+
// so we match the full session body, not just the first prompt (every provider,
|
|
182
|
+
// Antigravity's conversations too: lib/session-cache-builder.js).
|
|
181
183
|
let projects;
|
|
182
|
-
if (search && search.trim().length >= 2
|
|
184
|
+
if (search && search.trim().length >= 2) {
|
|
183
185
|
const data = await searchSessions({
|
|
184
186
|
q: search,
|
|
185
187
|
provider,
|
|
@@ -13,6 +13,7 @@ import { KEYS } from './constants.js';
|
|
|
13
13
|
import { isGuest, hasPermission, showGuestToast } from './ui-sync.js';
|
|
14
14
|
import { registerLaunchPrefetch } from './launch-prefetch.js';
|
|
15
15
|
import { sendToPanel } from './ui-claude-panel.js';
|
|
16
|
+
import { openAntigravityWithPrompt } from './ui-antigravity-panel.js';
|
|
16
17
|
import { getProviderMeta } from './provider-icons.js';
|
|
17
18
|
import {
|
|
18
19
|
getNativeLoopRouterClaimToken,
|
|
@@ -29,6 +30,9 @@ import {
|
|
|
29
30
|
getModelsForProfile,
|
|
30
31
|
formatModelOptionLabel,
|
|
31
32
|
isDynamicModelProfile,
|
|
33
|
+
migrateLaunchRecords,
|
|
34
|
+
migrateProviderId,
|
|
35
|
+
migrateProviderModel,
|
|
32
36
|
modelSelectorValue,
|
|
33
37
|
modelMatchesSelector,
|
|
34
38
|
normalizeEffortForProfile,
|
|
@@ -143,9 +147,9 @@ let _promptBackdrop = null;
|
|
|
143
147
|
let _promptKeyHandler = null;
|
|
144
148
|
const _modelLoadRequests = new Set();
|
|
145
149
|
|
|
146
|
-
let _launchProfile = storage.getItem('as-launch-profile') || 'claude-code';
|
|
150
|
+
let _launchProfile = migrateProviderId(storage.getItem('as-launch-profile') || 'claude-code');
|
|
147
151
|
const _storedLaunchSelection = normalizeAutomationSelection(
|
|
148
|
-
_launchProfile, storage.getItem('as-launch-model'), storage.getItem('as-launch-context-mode'),
|
|
152
|
+
_launchProfile, migrateProviderModel(_launchProfile, storage.getItem('as-launch-model')), storage.getItem('as-launch-context-mode'),
|
|
149
153
|
);
|
|
150
154
|
let _launchModel = _storedLaunchSelection.model;
|
|
151
155
|
let _launchContextMode = _storedLaunchSelection.contextMode || 'default';
|
|
@@ -583,16 +587,17 @@ async function loadData() {
|
|
|
583
587
|
]);
|
|
584
588
|
if (seq !== _loadSeq) return; // a newer load is under way: it finishes for both
|
|
585
589
|
const failed = [];
|
|
590
|
+
// A record still saved for the Gemini CLI reads as Antigravity's (migrateLaunchRecords).
|
|
586
591
|
if (schedules.status === 'fulfilled' && Array.isArray(schedules.value)) {
|
|
587
|
-
_schedules = schedules.value;
|
|
592
|
+
_schedules = migrateLaunchRecords(schedules.value);
|
|
588
593
|
_loaded.schedules = true;
|
|
589
594
|
} else failed.push(['schedules', failureReason(schedules)]);
|
|
590
595
|
if (templates.status === 'fulfilled' && Array.isArray(templates.value)) {
|
|
591
|
-
_templates = templates.value;
|
|
596
|
+
_templates = migrateLaunchRecords(templates.value);
|
|
592
597
|
_loaded.templates = true;
|
|
593
598
|
} else failed.push(['automations', failureReason(templates)]);
|
|
594
599
|
if (groups.status === 'fulfilled' && Array.isArray(groups.value)) {
|
|
595
|
-
_groups = groups.value;
|
|
600
|
+
_groups = migrateLaunchRecords(groups.value);
|
|
596
601
|
_loaded.groups = true;
|
|
597
602
|
if (groupIdOf(_scope) && !getGroup(groupIdOf(_scope))) setScope('all', { keepEditors: true });
|
|
598
603
|
} else failed.push(['groups', failureReason(groups)]);
|
|
@@ -633,7 +638,7 @@ async function loadTimers() {
|
|
|
633
638
|
const failed = [];
|
|
634
639
|
if (timers.status === 'fulfilled' && timers.value && typeof timers.value === 'object') _scheduleTimerData = timers.value;
|
|
635
640
|
else failed.push(failureReason(timers));
|
|
636
|
-
if (quick.status === 'fulfilled' && Array.isArray(quick.value)) _quickTimers = quick.value;
|
|
641
|
+
if (quick.status === 'fulfilled' && Array.isArray(quick.value)) _quickTimers = migrateLaunchRecords(quick.value);
|
|
637
642
|
else failed.push(failureReason(quick));
|
|
638
643
|
_timersLoaded = true;
|
|
639
644
|
_timersError = failed.length ? t('schedules.load.timersFailed', { reasons: [...new Set(failed)].join('; ') }) : null;
|
|
@@ -2880,6 +2885,7 @@ function openPromptScheduleModal() {
|
|
|
2880
2885
|
document.body.appendChild(_promptBackdrop);
|
|
2881
2886
|
|
|
2882
2887
|
const claudeMeta = getProviderMeta('claude-code');
|
|
2888
|
+
const antigravityMeta = getProviderMeta('antigravity');
|
|
2883
2889
|
const opencodeMeta = getProviderMeta('opencode');
|
|
2884
2890
|
const codexMeta = getProviderMeta('codex');
|
|
2885
2891
|
_promptModal = document.createElement('div');
|
|
@@ -2907,6 +2913,14 @@ function openPromptScheduleModal() {
|
|
|
2907
2913
|
</span>
|
|
2908
2914
|
<span class="sched-prompt-pill sched-prompt-pill--active">${te('schedules.prompt.ready')}</span>
|
|
2909
2915
|
</button>
|
|
2916
|
+
<button class="sched-prompt-tile" style="--provider-color:${antigravityMeta.color};" data-action="prompt-modal-pick" data-runtime="antigravity">
|
|
2917
|
+
<span class="sched-prompt-tile-logo" aria-hidden="true">${antigravityMeta.icon}</span>
|
|
2918
|
+
<span class="sched-prompt-tile-body">
|
|
2919
|
+
<span class="sched-prompt-tile-title">${antigravityMeta.label}</span>
|
|
2920
|
+
<span class="sched-prompt-tile-sub">Google</span>
|
|
2921
|
+
</span>
|
|
2922
|
+
<span class="sched-prompt-pill sched-prompt-pill--active">${te('schedules.prompt.ready')}</span>
|
|
2923
|
+
</button>
|
|
2910
2924
|
<button class="sched-prompt-tile disabled" style="--provider-color:${opencodeMeta.color};" disabled aria-disabled="true">
|
|
2911
2925
|
<span class="sched-prompt-tile-logo" aria-hidden="true">${opencodeMeta.icon}</span>
|
|
2912
2926
|
<span class="sched-prompt-tile-body">
|
|
@@ -2963,7 +2977,7 @@ function closePromptScheduleModal() {
|
|
|
2963
2977
|
}
|
|
2964
2978
|
|
|
2965
2979
|
async function handlePromptPick(runtime, triggerEl = null) {
|
|
2966
|
-
if (runtime !== 'claude-code') {
|
|
2980
|
+
if (runtime !== 'claude-code' && runtime !== 'antigravity') {
|
|
2967
2981
|
showToast(t('schedules.toast.comingSoon'));
|
|
2968
2982
|
return;
|
|
2969
2983
|
}
|
|
@@ -2972,14 +2986,31 @@ async function handlePromptPick(runtime, triggerEl = null) {
|
|
|
2972
2986
|
triggerEl.setAttribute('aria-busy', 'true');
|
|
2973
2987
|
}
|
|
2974
2988
|
try {
|
|
2975
|
-
|
|
2989
|
+
if (runtime === 'antigravity') {
|
|
2990
|
+
// The Antigravity panel reads `/synabun …` as the bundled skill only on a server whose panel bridge says so
|
|
2991
|
+
// (lib/antigravity/panel-bridge.js 'synabun-command'); an older one would send the words as they are.
|
|
2992
|
+
if (!(await antigravityTakesSynabunCommands())) { showToast(t('schedules.toast.restartForAntigravity')); return; }
|
|
2993
|
+
await openAntigravityWithPrompt('/synabun schedule', { newTab: true, send: true });
|
|
2994
|
+
} else {
|
|
2995
|
+
await sendToPanel('/synabun schedule', { newTab: true, tabLabel: t('schedules.prompt.tabLabel'), autoSubmit: true });
|
|
2996
|
+
}
|
|
2976
2997
|
} catch (err) {
|
|
2977
|
-
showToast(t('schedules.toast.panelFailed', { error: err.message }));
|
|
2998
|
+
showToast(t(runtime === 'antigravity' ? 'schedules.toast.antigravityPanelFailed' : 'schedules.toast.panelFailed', { error: err.message }));
|
|
2978
2999
|
} finally {
|
|
2979
3000
|
closePromptScheduleModal();
|
|
2980
3001
|
}
|
|
2981
3002
|
}
|
|
2982
3003
|
|
|
3004
|
+
/** Whether this server's Antigravity panel runs `/synabun …` (GET /api/antigravity/panel lists 'synabun-command'). */
|
|
3005
|
+
async function antigravityTakesSynabunCommands() {
|
|
3006
|
+
try {
|
|
3007
|
+
const res = await fetch('/api/antigravity/panel');
|
|
3008
|
+
if (!res.ok) return false;
|
|
3009
|
+
const body = await res.json();
|
|
3010
|
+
return Array.isArray(body?.capabilities) && body.capabilities.includes('synabun-command');
|
|
3011
|
+
} catch { return false; }
|
|
3012
|
+
}
|
|
3013
|
+
|
|
2983
3014
|
// ── Timers: writes ──
|
|
2984
3015
|
|
|
2985
3016
|
async function createQuickTimerFromForm(runNow) {
|
|
@@ -3166,7 +3197,7 @@ function setupSync() {
|
|
|
3166
3197
|
refresh();
|
|
3167
3198
|
});
|
|
3168
3199
|
on('sync:schedule-group:reordered', (data) => {
|
|
3169
|
-
if (Array.isArray(data?.groups)) _groups = data.groups;
|
|
3200
|
+
if (Array.isArray(data?.groups)) _groups = migrateLaunchRecords(data.groups);
|
|
3170
3201
|
refresh();
|
|
3171
3202
|
});
|
|
3172
3203
|
on('sync:quick-timer:set', (data) => {
|
|
@@ -129,24 +129,34 @@ export function createStickyScrollController(container, options = {}) {
|
|
|
129
129
|
|
|
130
130
|
const ResizeObserverCtor = view.ResizeObserver || globalThis.ResizeObserver;
|
|
131
131
|
const MutationObserverCtor = view.MutationObserver || globalThis.MutationObserver;
|
|
132
|
-
|
|
132
|
+
// ResizeObserver retains its targets, even after they leave the transcript.
|
|
133
|
+
// Keep only current rows: OpenCode replaces a row on every streaming update.
|
|
134
|
+
const observedChildren = new Set();
|
|
133
135
|
const resizeObserver = ResizeObserverCtor
|
|
134
136
|
? new ResizeObserverCtor(() => scrollToBottom())
|
|
135
137
|
: null;
|
|
136
138
|
const observeChildren = () => {
|
|
137
139
|
if (!resizeObserver) return;
|
|
138
|
-
|
|
139
|
-
for (const child of
|
|
140
|
+
const current = new Set(container.children);
|
|
141
|
+
for (const child of observedChildren) {
|
|
142
|
+
if (current.has(child)) continue;
|
|
143
|
+
resizeObserver.unobserve(child);
|
|
144
|
+
observedChildren.delete(child);
|
|
145
|
+
}
|
|
146
|
+
for (const child of current) {
|
|
140
147
|
if (observedChildren.has(child)) continue;
|
|
141
148
|
observedChildren.add(child);
|
|
142
149
|
resizeObserver.observe(child);
|
|
143
150
|
}
|
|
144
151
|
};
|
|
152
|
+
resizeObserver?.observe(container);
|
|
145
153
|
observeChildren();
|
|
146
154
|
|
|
147
155
|
const mutationObserver = MutationObserverCtor
|
|
148
|
-
? new MutationObserverCtor(() => {
|
|
149
|
-
|
|
156
|
+
? new MutationObserverCtor((records) => {
|
|
157
|
+
if (disposed) return;
|
|
158
|
+
// Nested text/class changes need scrolling, but cannot change row ownership.
|
|
159
|
+
if (records.some(record => record.type === 'childList' && record.target === container)) observeChildren();
|
|
150
160
|
scrollToBottom();
|
|
151
161
|
})
|
|
152
162
|
: null;
|
|
@@ -173,6 +183,7 @@ export function createStickyScrollController(container, options = {}) {
|
|
|
173
183
|
disposed = true;
|
|
174
184
|
cancelScheduled();
|
|
175
185
|
resizeObserver?.disconnect();
|
|
186
|
+
observedChildren.clear();
|
|
176
187
|
mutationObserver?.disconnect();
|
|
177
188
|
container.removeEventListener('scroll', onScroll);
|
|
178
189
|
container.removeEventListener('wheel', onWheel);
|
|
@@ -16,6 +16,8 @@ import { getProviderMeta } from './provider-icons.js';
|
|
|
16
16
|
import { sendToPanel as sendToClaudePanel, isClaudePanelOpen } from './ui-claude-panel.js';
|
|
17
17
|
import { toggleCodexPanel, isCodexPanelOpen } from './cdx/cdx-panel.js';
|
|
18
18
|
import { openOpencodeWithPrompt } from './ui-opencode-panel-v2.js';
|
|
19
|
+
import { openAntigravityWithPrompt } from './ui-antigravity-panel.js';
|
|
20
|
+
import { dropdownHTML, wireDropdowns } from './cc-dropdown.js';
|
|
19
21
|
import { fetchRulesStatus, installAllRules, ackRulesNotice } from './api.js';
|
|
20
22
|
import { centeredInFrame } from './app-frame.js';
|
|
21
23
|
|
|
@@ -34,7 +36,8 @@ let isVisible = false;
|
|
|
34
36
|
let _stalledTickerTimer = null;
|
|
35
37
|
|
|
36
38
|
// ── Pending-Remember picker state ──
|
|
37
|
-
const PROVIDER_LABELS = { claude: 'Claude Code', codex: 'Codex', opencode: 'OpenCode' };
|
|
39
|
+
const PROVIDER_LABELS = { claude: 'Claude Code', codex: 'Codex', opencode: 'OpenCode', antigravity: 'Antigravity' };
|
|
40
|
+
const PR_PROVIDERS = Object.keys(PROVIDER_LABELS);
|
|
38
41
|
let _prPicker = { open: false, provider: 'claude', model: '', modelsByProvider: {}, loading: null };
|
|
39
42
|
|
|
40
43
|
// ── Notifications state ──
|
|
@@ -45,7 +48,7 @@ const RULES_HOSTS = {
|
|
|
45
48
|
claude: { label: 'Claude Code', provider: 'claude-code', section: 'setup-claude' },
|
|
46
49
|
codex: { label: 'Codex', provider: 'codex', section: 'setup-codex' },
|
|
47
50
|
opencode: { label: 'OpenCode', provider: 'opencode', section: 'setup-opencode' },
|
|
48
|
-
|
|
51
|
+
antigravity: { label: 'Antigravity', provider: 'antigravity', section: 'setup-antigravity' },
|
|
49
52
|
};
|
|
50
53
|
// The host states that need the user: each one opens Settings > Setup.
|
|
51
54
|
const RULES_ATTENTION = { outdated: 'Update available', modified: 'Edited copy', conflict: 'Needs repair' };
|
|
@@ -976,20 +979,18 @@ function renderPendingRememberPicker() {
|
|
|
976
979
|
const models = _prPicker.modelsByProvider[provider] || [];
|
|
977
980
|
const loading = _prPicker.loading === provider;
|
|
978
981
|
|
|
979
|
-
const providerBtns =
|
|
982
|
+
const providerBtns = PR_PROVIDERS.map(p => `
|
|
980
983
|
<button class="sm-btn sm-pr-prov${p === provider ? ' active' : ''}" data-pr-provider="${p}">
|
|
981
984
|
${esc(PROVIDER_LABELS[p])}
|
|
982
985
|
</button>
|
|
983
986
|
`).join('');
|
|
984
987
|
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
else {
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
).join('');
|
|
992
|
-
}
|
|
988
|
+
// The app's styled dropdown (cc-dropdown.js), wired once on the drawer's body (openPanel).
|
|
989
|
+
let modelEntries = [{ value: '', label: '— select model —', selected: !_prPicker.model }];
|
|
990
|
+
if (loading) modelEntries = [{ value: '', label: 'Loading…', selected: true }];
|
|
991
|
+
else if (models.length === 0) modelEntries = [{ value: '', label: 'No models found', selected: true }];
|
|
992
|
+
else modelEntries = modelEntries.concat(models.map(m => ({ value: m.id, label: m.label || m.id, selected: m.id === _prPicker.model })));
|
|
993
|
+
const modelPicker = dropdownHTML('sm-pr-model', modelEntries, { label: 'Model', classes: 'sm-pr-dropdown', disabled: loading || models.length === 0 });
|
|
993
994
|
|
|
994
995
|
return `<div class="sm-cleanup-bar sm-pr-picker">
|
|
995
996
|
<div class="sm-pr-row">
|
|
@@ -998,7 +999,7 @@ function renderPendingRememberPicker() {
|
|
|
998
999
|
</div>
|
|
999
1000
|
<div class="sm-pr-row">
|
|
1000
1001
|
<span class="sm-pr-label">Model</span>
|
|
1001
|
-
|
|
1002
|
+
${modelPicker}
|
|
1002
1003
|
</div>
|
|
1003
1004
|
<div class="sm-pr-row sm-pr-actions">
|
|
1004
1005
|
<button class="sm-btn" id="sm-pr-cancel">Cancel</button>
|
|
@@ -1033,6 +1034,10 @@ async function loadProviderModels(provider) {
|
|
|
1033
1034
|
}
|
|
1034
1035
|
}
|
|
1035
1036
|
models = flat;
|
|
1037
|
+
} else if (provider === 'antigravity') {
|
|
1038
|
+
// What an Antigravity session offers (lib/antigravity/catalog.js: one row per model, its thinking levels apart).
|
|
1039
|
+
const r = await fetch('/api/antigravity/models').then(r => r.json()).catch(() => null);
|
|
1040
|
+
models = (Array.isArray(r?.models) ? r.models : []).filter(m => m && m.id).map(m => ({ id: String(m.id), label: String(m.label || m.id) }));
|
|
1036
1041
|
} else if (provider === 'codex') {
|
|
1037
1042
|
// Codex models come from the running CLI (WebSocket). Provide a sensible static list.
|
|
1038
1043
|
models = [
|
|
@@ -1101,6 +1106,9 @@ async function runPendingRemembers() {
|
|
|
1101
1106
|
} else if (provider === 'opencode') {
|
|
1102
1107
|
try { localStorage.setItem('ocp:lastModel', model); } catch {}
|
|
1103
1108
|
await openOpencodeWithPrompt(res.prompt, { autoSend: true });
|
|
1109
|
+
} else if (provider === 'antigravity') {
|
|
1110
|
+
// A tab of its own, on the chosen model when its session offers it, sent at once.
|
|
1111
|
+
await openAntigravityWithPrompt(res.prompt, { newTab: true, send: true, model });
|
|
1104
1112
|
} else if (provider === 'codex') {
|
|
1105
1113
|
try { localStorage.setItem('cxp:model', model); } catch {}
|
|
1106
1114
|
if (!isCodexPanelOpen()) await toggleCodexPanel();
|
|
@@ -1187,6 +1195,8 @@ function openPanel() {
|
|
|
1187
1195
|
// ESC key to close (removed with the panel, however it closes)
|
|
1188
1196
|
_panelLife?.abort();
|
|
1189
1197
|
_panelLife = new AbortController();
|
|
1198
|
+
// The styled dropdowns of whatever the body draws (the Pending-Remember model picker), once for the panel's life.
|
|
1199
|
+
wireDropdowns(_panel.querySelector('#sm-body'), { signal: _panelLife.signal });
|
|
1190
1200
|
const onEsc = (e) => {
|
|
1191
1201
|
if (e.key === 'Escape' && _panel) closePanel();
|
|
1192
1202
|
};
|