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
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { migrateStoredTools } from './tool-list-storage.js';
|
|
2
|
+
import { wireDropdowns } from './cc-dropdown.js';
|
|
3
|
+
import { configureToolPickerTranslation, toolPickerHTML, readToolPicker, updateToolPicker, taskToolHost as strictToolHost, toolWord } from './tool-list-picker.js';
|
|
1
4
|
// ═══════════════════════════════════════════
|
|
2
5
|
// SynaBun Neural Interface — Automation Studio
|
|
3
6
|
// Browse, configure, launch, and track loop automations.
|
|
@@ -18,12 +21,16 @@ import {
|
|
|
18
21
|
import {
|
|
19
22
|
CLI_PROFILES,
|
|
20
23
|
ensureModelsForProfile,
|
|
21
|
-
|
|
24
|
+
fetchToolCatalog,
|
|
25
|
+
getCachedToolCatalog,
|
|
22
26
|
fetchCodexAccounts,
|
|
23
27
|
getCachedCodexAccounts,
|
|
24
28
|
getEffortLevelsForProfile,
|
|
25
29
|
getModelsForProfile,
|
|
26
30
|
isDynamicModelProfile,
|
|
31
|
+
migrateLaunchRecords,
|
|
32
|
+
migrateProviderId,
|
|
33
|
+
migrateProviderModel,
|
|
27
34
|
modelSelectorValue,
|
|
28
35
|
modelMatchesSelector,
|
|
29
36
|
normalizeEffortForProfile,
|
|
@@ -68,6 +75,7 @@ import {
|
|
|
68
75
|
cancelQuickTimer,
|
|
69
76
|
triggerQuickTimerNow,
|
|
70
77
|
} from './api.js';
|
|
78
|
+
import { centeredInFrame, placementArea } from './app-frame.js';
|
|
71
79
|
|
|
72
80
|
const $ = (id) => document.getElementById(id);
|
|
73
81
|
|
|
@@ -179,8 +187,7 @@ const AS_ICONS = {
|
|
|
179
187
|
// External SVG logos (fill-based, from public/ directory)
|
|
180
188
|
claude: `<svg viewBox="0 0 24 24" width="14" height="14" fill="currentColor" fill-rule="evenodd"><path d="M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z"/></svg>`,
|
|
181
189
|
openai: `<svg viewBox="0 0 24 24" width="14" height="14" fill="currentColor" fill-rule="evenodd"><path d="M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z"/></svg>`,
|
|
182
|
-
|
|
183
|
-
leonardo: `<svg viewBox="0 0 24 24" width="14" height="14" fill="currentColor"><path d="M9.5 2l1.5 3.5L14.5 7l-3.5 1.5L9.5 12l-1.5-3.5L4.5 7l3.5-1.5L9.5 2zM19 10l1 2 2 1-2 1-1 2-1-2-2-1 2-1 1-2zM5 17l1 2 2 1-2 1-1 2-1-2-2-1 2-1 1-2z"/></svg>`,
|
|
190
|
+
antigravity: `<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4.5 20 12 4l7.5 16"/><path d="M8.2 20a3.8 3.8 0 0 1 7.6 0"/></svg>`,
|
|
184
191
|
pin: _s('<path d="M8 14v-3"/><path d="M4 11h8"/><path d="M10.5 2.5l3 3-2 2 .5 2-4.5.5.5-4.5 2-.5z"/>'),
|
|
185
192
|
|
|
186
193
|
// UI chrome
|
|
@@ -191,8 +198,8 @@ const AS_ICONS = {
|
|
|
191
198
|
export: _s('<path d="M8 2v8M4 6l4-4 4 4"/><path d="M2 11v2a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1v-2"/>'),
|
|
192
199
|
};
|
|
193
200
|
|
|
194
|
-
/** Resolve icon key → SVG HTML. Falls back to refresh icon for unknown keys. */
|
|
195
|
-
function icon(key) { return AS_ICONS[key] || AS_ICONS.refresh; }
|
|
201
|
+
/** Resolve icon key → SVG HTML. Falls back to refresh icon for unknown keys ('gemini' reads as 'antigravity'). */
|
|
202
|
+
function icon(key) { return AS_ICONS[migrateProviderId(key)] || AS_ICONS.refresh; }
|
|
196
203
|
|
|
197
204
|
/** Icon keys available for template selection (excludes UI-only icons). */
|
|
198
205
|
const ICON_KEYS = Object.keys(AS_ICONS).filter(k => !['back','forward','down','close','export','plus','bolt','blank'].includes(k));
|
|
@@ -201,20 +208,20 @@ const _modelLoadRequests = new Set();
|
|
|
201
208
|
const _modelLoadAttempts = new Set();
|
|
202
209
|
|
|
203
210
|
// Persistent launch preferences (remembered across launches in session)
|
|
204
|
-
let _launchProfile = storage.getItem('as-launch-profile') || 'claude-code';
|
|
211
|
+
let _launchProfile = migrateProviderId(storage.getItem('as-launch-profile') || 'claude-code');
|
|
205
212
|
const _initialLaunchSelection = normalizeAutomationSelection(
|
|
206
|
-
|
|
207
|
-
storage.getItem('as-launch-model'), storage.getItem('as-launch-context-mode'),
|
|
213
|
+
_launchProfile,
|
|
214
|
+
migrateProviderModel(_launchProfile, storage.getItem('as-launch-model')), storage.getItem('as-launch-context-mode'),
|
|
208
215
|
);
|
|
209
216
|
let _launchModel = _initialLaunchSelection.model;
|
|
210
217
|
let _launchContextMode = _initialLaunchSelection.contextMode || 'default';
|
|
211
218
|
storage.setItem('as-launch-model', _launchModel || '');
|
|
212
219
|
storage.setItem('as-launch-context-mode', _launchContextMode);
|
|
213
220
|
let _launchEffort = storage.getItem('as-launch-effort') || 'off';
|
|
214
|
-
let
|
|
221
|
+
let _launchTools = (() => { try { return JSON.parse(storage.getItem('as-launch-tools') || 'null'); } catch { return null; } })();
|
|
215
222
|
let _launchAccount = storage.getItem('as-launch-account') || 'default'; // Codex ChatGPT account (CODEX_HOME)
|
|
216
223
|
let _qtAccountsRequested = false; // lazy-fetch guard for quick-timer account chips
|
|
217
|
-
let
|
|
224
|
+
let _dropdownAbort = null;
|
|
218
225
|
|
|
219
226
|
// Render the Codex account selector chips (one button per saved ChatGPT account).
|
|
220
227
|
function renderAccountChips(selectedId) {
|
|
@@ -264,34 +271,17 @@ function loadLaunchAccounts(root) {
|
|
|
264
271
|
}).catch(() => {});
|
|
265
272
|
}
|
|
266
273
|
|
|
267
|
-
async function
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
function renderMcpProfileChips(presets, selected) {
|
|
280
|
-
const entries = Object.entries(presets);
|
|
281
|
-
if (entries.length > 5) {
|
|
282
|
-
const options = entries.map(([id, p]) => ({
|
|
283
|
-
id,
|
|
284
|
-
label: p.label || id,
|
|
285
|
-
desc: `${p.tools} tools`,
|
|
286
|
-
}));
|
|
287
|
-
return renderLaunchSelect('mcp', options, selected);
|
|
288
|
-
}
|
|
289
|
-
return entries.map(([id, p]) => `
|
|
290
|
-
<button class="as-launch-mcp-profile${id === selected ? ' active' : ''}" data-mcp-profile="${_escLaunch(id)}">
|
|
291
|
-
<span class="as-launch-mcp-profile-name">${_escLaunch(p.label || id)}</span>
|
|
292
|
-
<span class="as-launch-mcp-profile-tools">${_escLaunch(p.tools)} tools</span>
|
|
293
|
-
</button>
|
|
294
|
-
`).join('');
|
|
274
|
+
async function renderLaunchToolPicker(root, provider) {
|
|
275
|
+
let catalog = await fetchToolCatalog(false, { cwd: _pendingLaunchParams?.cwd || '' });
|
|
276
|
+
if (_launchMode === 'agent' && !root.querySelector('#as-agent-synabun')?.checked && catalog) catalog = { ...catalog, defaultTools: [] };
|
|
277
|
+
const container = root.querySelector('#as-launch-tools');
|
|
278
|
+
if (!container) return;
|
|
279
|
+
container.innerHTML = strictToolHost(provider) ? toolPickerHTML('as-launch-tool-list', _launchTools, { catalog, provider, inheritLabel: toolWord('default'), usesBrowser: !!_pendingLaunchParams?.usesBrowser }) : toolWord('focus');
|
|
280
|
+
container.querySelector('#as-launch-tool-list')?.addEventListener('change', (event) => {
|
|
281
|
+
_launchTools = readToolPicker(event.target);
|
|
282
|
+
storage.setItem('as-launch-tools', JSON.stringify(_launchTools));
|
|
283
|
+
updateToolPicker(event.target, _launchTools, { inheritLabel: toolWord('default'), usesBrowser: !!_pendingLaunchParams?.usesBrowser });
|
|
284
|
+
});
|
|
295
285
|
}
|
|
296
286
|
|
|
297
287
|
// ── Preset Templates with Wizard Steps ──
|
|
@@ -894,7 +884,7 @@ function showLaunchInline(params) {
|
|
|
894
884
|
if (params.usesBrowser && (!params.context || !params.context.includes('BROWSER REQUIRED'))) {
|
|
895
885
|
params.context = BROWSER_CONTEXT;
|
|
896
886
|
}
|
|
897
|
-
// Apply template-preset launch defaults (CLI / model / effort /
|
|
887
|
+
// Apply template-preset launch defaults (CLI / model / effort / tool list)
|
|
898
888
|
if (params.profile) {
|
|
899
889
|
if (params.profile !== _launchProfile && !params.model) {
|
|
900
890
|
_launchModel = null;
|
|
@@ -910,7 +900,7 @@ function showLaunchInline(params) {
|
|
|
910
900
|
storage.setItem('as-launch-model', _launchModel || '');
|
|
911
901
|
}
|
|
912
902
|
if (params.effort) { _launchEffort = params.effort; storage.setItem('as-launch-effort', _launchEffort); }
|
|
913
|
-
if (params.
|
|
903
|
+
if (params.tools !== undefined) { _launchTools = params.tools; storage.setItem('as-launch-tools', JSON.stringify(_launchTools)); }
|
|
914
904
|
if (params.codexAccountId) { _launchAccount = params.codexAccountId; storage.setItem('as-launch-account', _launchAccount); }
|
|
915
905
|
_pendingLaunchParams = params;
|
|
916
906
|
_launchPanelActive = true;
|
|
@@ -985,11 +975,9 @@ function showLaunchInline(params) {
|
|
|
985
975
|
${renderEffortChips(profile, _launchEffort)}
|
|
986
976
|
</div>
|
|
987
977
|
</div>
|
|
988
|
-
<div class="as-launch-section" id="as-launch-
|
|
989
|
-
<label class="as-launch-label"
|
|
990
|
-
<div
|
|
991
|
-
<span class="as-launch-mcp-loading">Loading profiles...</span>
|
|
992
|
-
</div>
|
|
978
|
+
<div class="as-launch-section" id="as-launch-tools-section">
|
|
979
|
+
<label class="as-launch-label">${toolWord('label')}</label>
|
|
980
|
+
<div id="as-launch-tools">${strictToolHost(profile) ? '' : toolWord('focus')}</div>
|
|
993
981
|
</div>
|
|
994
982
|
<div class="as-launch-section" id="as-launch-account-section" style="${profile === 'codex' ? '' : 'display:none'}">
|
|
995
983
|
<label class="as-launch-label">OpenAI Account</label>
|
|
@@ -1056,16 +1044,7 @@ function showLaunchInline(params) {
|
|
|
1056
1044
|
|
|
1057
1045
|
wireLaunchInline(contentEl);
|
|
1058
1046
|
|
|
1059
|
-
|
|
1060
|
-
if (profile !== 'claude-code') {
|
|
1061
|
-
fetchMcpProfiles().then(presets => {
|
|
1062
|
-
const container = contentEl.querySelector('#as-launch-mcp-profiles');
|
|
1063
|
-
if (container && presets && Object.keys(presets).length) {
|
|
1064
|
-
container.innerHTML = renderMcpProfileChips(presets, _launchMcpProfile);
|
|
1065
|
-
wireMcpProfileChips(contentEl);
|
|
1066
|
-
}
|
|
1067
|
-
});
|
|
1068
|
-
}
|
|
1047
|
+
void renderLaunchToolPicker(contentEl, profile);
|
|
1069
1048
|
|
|
1070
1049
|
// Async-load dynamic models and re-render chips when ready.
|
|
1071
1050
|
// Retries a couple of times in case OpenCode is still booting.
|
|
@@ -1138,6 +1117,11 @@ function dynamicModelEmptyText(profileId) {
|
|
|
1138
1117
|
? 'No Claude Code models found — check the Claude CLI install in Settings → Terminal.'
|
|
1139
1118
|
: 'Loading Claude Code models...';
|
|
1140
1119
|
}
|
|
1120
|
+
if (profileId === 'antigravity') {
|
|
1121
|
+
return loaded
|
|
1122
|
+
? 'No Antigravity models found — check the Antigravity CLI install in Settings → Terminal.'
|
|
1123
|
+
: 'Loading Antigravity models...';
|
|
1124
|
+
}
|
|
1141
1125
|
return 'No model selection available';
|
|
1142
1126
|
}
|
|
1143
1127
|
|
|
@@ -1347,6 +1331,7 @@ function wireLaunchInline(container) {
|
|
|
1347
1331
|
const root = container.querySelector('.as-launch-inline');
|
|
1348
1332
|
if (!root) return;
|
|
1349
1333
|
applyAgentModeGating(root, _launchProfile);
|
|
1334
|
+
root.querySelector('#as-agent-synabun')?.addEventListener('change', () => { void renderLaunchToolPicker(root, _launchProfile); });
|
|
1350
1335
|
|
|
1351
1336
|
// Mode toggle (Loop vs Agent)
|
|
1352
1337
|
root.querySelectorAll('.as-launch-mode').forEach(btn => {
|
|
@@ -1360,6 +1345,7 @@ function wireLaunchInline(container) {
|
|
|
1360
1345
|
if (agentFields) agentFields.style.display = _launchMode === 'agent' ? '' : 'none';
|
|
1361
1346
|
const confirmBtn = root.querySelector('#as-launch-confirm-btn');
|
|
1362
1347
|
if (confirmBtn) confirmBtn.textContent = _launchMode === 'agent' ? 'Launch Agent' : 'Launch';
|
|
1348
|
+
void renderLaunchToolPicker(root, _launchProfile);
|
|
1363
1349
|
});
|
|
1364
1350
|
});
|
|
1365
1351
|
|
|
@@ -1419,20 +1405,7 @@ function wireLaunchInline(container) {
|
|
|
1419
1405
|
}
|
|
1420
1406
|
}
|
|
1421
1407
|
applyAgentModeGating(root, profileId);
|
|
1422
|
-
|
|
1423
|
-
const mcpSection = root.querySelector('#as-launch-mcp-section');
|
|
1424
|
-
if (mcpSection) {
|
|
1425
|
-
mcpSection.style.display = profileId !== 'claude-code' ? '' : 'none';
|
|
1426
|
-
if (profileId !== 'claude-code') {
|
|
1427
|
-
fetchMcpProfiles().then(presets => {
|
|
1428
|
-
const container = root.querySelector('#as-launch-mcp-profiles');
|
|
1429
|
-
if (container && presets && Object.keys(presets).length) {
|
|
1430
|
-
container.innerHTML = renderMcpProfileChips(presets, _launchMcpProfile);
|
|
1431
|
-
wireMcpProfileChips(root);
|
|
1432
|
-
}
|
|
1433
|
-
});
|
|
1434
|
-
}
|
|
1435
|
-
}
|
|
1408
|
+
void renderLaunchToolPicker(root, profileId);
|
|
1436
1409
|
// Show/hide OpenAI account section (Codex only — selects which ChatGPT login the loop runs under)
|
|
1437
1410
|
const accountSection = root.querySelector('#as-launch-account-section');
|
|
1438
1411
|
if (accountSection) {
|
|
@@ -1496,21 +1469,6 @@ function wireEffortChips(container) {
|
|
|
1496
1469
|
});
|
|
1497
1470
|
}
|
|
1498
1471
|
|
|
1499
|
-
function wireMcpProfileChips(container) {
|
|
1500
|
-
container.querySelectorAll('.as-launch-mcp-profile').forEach(btn => {
|
|
1501
|
-
btn.addEventListener('click', () => {
|
|
1502
|
-
container.querySelectorAll('.as-launch-mcp-profile').forEach(b => b.classList.remove('active'));
|
|
1503
|
-
btn.classList.add('active');
|
|
1504
|
-
_launchMcpProfile = btn.dataset.mcpProfile;
|
|
1505
|
-
storage.setItem('as-launch-mcp-profile', _launchMcpProfile);
|
|
1506
|
-
});
|
|
1507
|
-
});
|
|
1508
|
-
wireLaunchSelect(container, 'mcp', (value) => {
|
|
1509
|
-
_launchMcpProfile = value;
|
|
1510
|
-
storage.setItem('as-launch-mcp-profile', _launchMcpProfile);
|
|
1511
|
-
});
|
|
1512
|
-
}
|
|
1513
|
-
|
|
1514
1472
|
function closeLaunchInline() {
|
|
1515
1473
|
_pendingLaunchParams = null;
|
|
1516
1474
|
_launchPanelActive = false;
|
|
@@ -1534,7 +1492,7 @@ async function confirmLaunch() {
|
|
|
1534
1492
|
return;
|
|
1535
1493
|
}
|
|
1536
1494
|
const effort = normalizeEffortForProfile(_launchProfile, _launchEffort) || undefined;
|
|
1537
|
-
const
|
|
1495
|
+
const tools = strictToolHost(_launchProfile) ? _launchTools : undefined;
|
|
1538
1496
|
const codexAccountId = _launchProfile === 'codex' ? (_launchAccount || 'default') : undefined;
|
|
1539
1497
|
const params = {
|
|
1540
1498
|
..._pendingLaunchParams,
|
|
@@ -1542,7 +1500,7 @@ async function confirmLaunch() {
|
|
|
1542
1500
|
model: _launchModel,
|
|
1543
1501
|
contextMode: _launchContextMode,
|
|
1544
1502
|
effort,
|
|
1545
|
-
|
|
1503
|
+
tools,
|
|
1546
1504
|
codexAccountId,
|
|
1547
1505
|
sidepanelWindowId: getNativeLoopRouterWindowId(),
|
|
1548
1506
|
sidepanelClaimToken: getNativeLoopRouterClaimToken(),
|
|
@@ -1571,6 +1529,7 @@ async function confirmLaunch() {
|
|
|
1571
1529
|
cwd: params.cwd || undefined,
|
|
1572
1530
|
maxTurns: params.usesBrowser ? 100 : 75,
|
|
1573
1531
|
withSynabun,
|
|
1532
|
+
tools: tools ?? (withSynabun ? getCachedToolCatalog()?.defaultTools ?? ['mcp:*'] : []),
|
|
1574
1533
|
browserProfile: (withSynabun && params.usesBrowser) ? true : undefined,
|
|
1575
1534
|
mode: agentSubmode,
|
|
1576
1535
|
iterations: agentSubmode === 'loop' ? agentIterations : 1,
|
|
@@ -1758,14 +1717,31 @@ async function openPanel(opts = {}) {
|
|
|
1758
1717
|
document.body.appendChild(_backdrop);
|
|
1759
1718
|
|
|
1760
1719
|
_panel = document.createElement('div');
|
|
1720
|
+
_dropdownAbort?.abort();
|
|
1721
|
+
_dropdownAbort = new AbortController();
|
|
1722
|
+
wireDropdowns(_panel, { signal: _dropdownAbort.signal });
|
|
1723
|
+
_panel.addEventListener('change', event => {
|
|
1724
|
+
if (event.target.id === 'as-qt-tools') {
|
|
1725
|
+
_launchTools = readToolPicker(event.target);
|
|
1726
|
+
storage.setItem('as-launch-tools', JSON.stringify(_launchTools));
|
|
1727
|
+
updateToolPicker(event.target, _launchTools, { inheritLabel: toolWord('templateDefault'), usesBrowser: !!$('as-qt-browser')?.checked });
|
|
1728
|
+
}
|
|
1729
|
+
if (['as-qt-browser', 'as-qt-template', 'as-f-browser'].includes(event.target.id)) queueMicrotask(() => {
|
|
1730
|
+
const detail = event.target.id === 'as-f-browser';
|
|
1731
|
+
const input = $(detail ? 'as-f-mcp' : 'as-qt-tools');
|
|
1732
|
+
updateToolPicker(input, readToolPicker(input, { requested: true }), { inheritLabel: toolWord(detail ? 'default' : 'templateDefault'), usesBrowser: !!$(detail ? 'as-f-browser' : 'as-qt-browser')?.checked });
|
|
1733
|
+
});
|
|
1734
|
+
}, { signal: _dropdownAbort.signal });
|
|
1735
|
+
void fetchToolCatalog();
|
|
1761
1736
|
_panel.className = 'automation-studio-panel glass resizable';
|
|
1762
1737
|
_panel.id = 'automation-studio-panel';
|
|
1763
1738
|
_panel.innerHTML = buildPanelHTML();
|
|
1764
1739
|
document.body.appendChild(_panel);
|
|
1765
1740
|
|
|
1766
|
-
// Always open centered at default size
|
|
1767
|
-
|
|
1768
|
-
_panel.style.
|
|
1741
|
+
// Always open centered at default size, in the app frame
|
|
1742
|
+
const at = centeredInFrame(900, 520);
|
|
1743
|
+
_panel.style.left = at.left + 'px';
|
|
1744
|
+
_panel.style.top = at.top + 'px';
|
|
1769
1745
|
|
|
1770
1746
|
wirePanel();
|
|
1771
1747
|
const kept = _keptData;
|
|
@@ -1815,6 +1791,7 @@ function closePanel() {
|
|
|
1815
1791
|
for (const [evt, fn] of _docListeners) document.removeEventListener(evt, fn);
|
|
1816
1792
|
_docListeners = [];
|
|
1817
1793
|
if (_backdrop) { _backdrop.remove(); _backdrop = null; }
|
|
1794
|
+
_dropdownAbort?.abort();
|
|
1818
1795
|
_panel.remove(); _panel = null;
|
|
1819
1796
|
_templates = []; _activeLoop = null;
|
|
1820
1797
|
_view = 'welcome'; _selected = null;
|
|
@@ -2178,11 +2155,12 @@ function positionFloating(el, x, y) {
|
|
|
2178
2155
|
el.style.left = `${x}px`;
|
|
2179
2156
|
el.style.top = `${y}px`;
|
|
2180
2157
|
el.style.zIndex = '300010';
|
|
2181
|
-
// Adjust after mounting to keep in
|
|
2158
|
+
// Adjust after mounting to keep in the app frame (the window for a point outside it)
|
|
2182
2159
|
requestAnimationFrame(() => {
|
|
2183
2160
|
const r = el.getBoundingClientRect();
|
|
2184
|
-
|
|
2185
|
-
if (r.
|
|
2161
|
+
const b = placementArea(x, y);
|
|
2162
|
+
if (r.right > b.right - 8) el.style.left = `${Math.max(b.left + 8, b.right - r.width - 8)}px`;
|
|
2163
|
+
if (r.bottom > b.bottom - 8) el.style.top = `${Math.max(b.top + 8, b.bottom - r.height - 8)}px`;
|
|
2186
2164
|
});
|
|
2187
2165
|
}
|
|
2188
2166
|
|
|
@@ -2364,9 +2342,11 @@ async function promptCreateFolder() {
|
|
|
2364
2342
|
// ═══════════════════════════════════════════
|
|
2365
2343
|
|
|
2366
2344
|
async function loadData() {
|
|
2345
|
+
_launchTools = await migrateStoredTools(storage, 'as-launch-tools', 'as-launch-mcp-profile');
|
|
2346
|
+
await fetchToolCatalog();
|
|
2367
2347
|
// One round trip for the three lists (they were asked one after another), then the agents.
|
|
2368
2348
|
const [templates, folders, active] = await Promise.allSettled([fetchLoopTemplates(), fetchLoopFolders(), fetchActiveLoop()]);
|
|
2369
|
-
_templates = templates.status === 'fulfilled' ? templates.value : [];
|
|
2349
|
+
_templates = templates.status === 'fulfilled' ? migrateLaunchRecords(templates.value) : [];
|
|
2370
2350
|
_folders = folders.status === 'fulfilled' ? folders.value : [];
|
|
2371
2351
|
_activeLoop = active.status === 'fulfilled' ? active.value : null;
|
|
2372
2352
|
await refreshAgents();
|
|
@@ -2721,7 +2701,7 @@ function buildDetailMeta(t, isPreset) {
|
|
|
2721
2701
|
const tModel = (t.model && tModelsList.some(m => modelMatchesSelector(m, t.model))) ? normalizeAutomationSelection(tProfile, t.model).model : (modelSelectorValue(tDefaultModel) || '');
|
|
2722
2702
|
const tContextMode = t.contextMode || normalizeAutomationSelection(tProfile, t.model).contextMode || 'default';
|
|
2723
2703
|
const tEffort = t.effort || 'off';
|
|
2724
|
-
const
|
|
2704
|
+
const tTools = t.tools ?? null;
|
|
2725
2705
|
return `
|
|
2726
2706
|
<div class="as-meta-section">
|
|
2727
2707
|
<div class="as-field">
|
|
@@ -2838,11 +2818,9 @@ function buildDetailMeta(t, isPreset) {
|
|
|
2838
2818
|
${getEffortLevelsForProfile(tProfile).map(e => `<option value="${esc(e.id)}"${e.id === tEffort ? ' selected' : ''}>${esc(e.label)} \u2014 ${esc(e.desc)}</option>`).join('')}
|
|
2839
2819
|
</select>
|
|
2840
2820
|
</div>
|
|
2841
|
-
<div class="as-runtime-field" id="as-f-mcp-field"
|
|
2842
|
-
<label
|
|
2843
|
-
|
|
2844
|
-
<option value="${esc(tMcp)}" selected>${esc(tMcp)} (loading\u2026)</option>
|
|
2845
|
-
</select>
|
|
2821
|
+
<div class="as-runtime-field" id="as-f-mcp-field">
|
|
2822
|
+
<label>${toolWord('label')}</label>
|
|
2823
|
+
${strictToolHost(tProfile) ? toolPickerHTML('as-f-mcp', tTools, { provider: tProfile, inheritLabel: toolWord('default'), usesBrowser: t.usesBrowser }) : toolWord('focus')}
|
|
2846
2824
|
</div>
|
|
2847
2825
|
</div>
|
|
2848
2826
|
</div>
|
|
@@ -2901,7 +2879,7 @@ function wireDetailView(isPreset) {
|
|
|
2901
2879
|
wireCategoryPicker(isPreset);
|
|
2902
2880
|
wireFolderPicker(isPreset);
|
|
2903
2881
|
|
|
2904
|
-
// Launch defaults (CLI profile / model / effort /
|
|
2882
|
+
// Launch defaults (CLI profile / model / effort / tool list)
|
|
2905
2883
|
wireLaunchDefaults(isPreset);
|
|
2906
2884
|
|
|
2907
2885
|
// Markdown toolbar
|
|
@@ -3050,7 +3028,7 @@ function wireLaunchDefaults(isPreset) {
|
|
|
3050
3028
|
const modelSel = $('as-f-model');
|
|
3051
3029
|
const contextSel = $('as-f-context');
|
|
3052
3030
|
const effortSel = $('as-f-effort');
|
|
3053
|
-
|
|
3031
|
+
let mcpSel = $('as-f-mcp');
|
|
3054
3032
|
const effortField = $('as-f-effort-field');
|
|
3055
3033
|
const mcpField = $('as-f-mcp-field');
|
|
3056
3034
|
const templateAccountId = _selected?.codexAccountId || 'default';
|
|
@@ -3058,23 +3036,14 @@ function wireLaunchDefaults(isPreset) {
|
|
|
3058
3036
|
|
|
3059
3037
|
effortSel?.addEventListener('change', () => { if (!isPreset) markDirty(); });
|
|
3060
3038
|
|
|
3061
|
-
const
|
|
3062
|
-
|
|
3063
|
-
const
|
|
3064
|
-
|
|
3065
|
-
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
|
|
3069
|
-
const sel = id === current ? ' selected' : '';
|
|
3070
|
-
return `<option value="${esc(id)}"${sel}>${esc(label)}${esc(tools)}</option>`;
|
|
3071
|
-
}).join('');
|
|
3072
|
-
mcpSel.innerHTML = opts;
|
|
3073
|
-
if (!presets[current]) {
|
|
3074
|
-
const first = Object.keys(presets)[0];
|
|
3075
|
-
if (first) mcpSel.value = first;
|
|
3076
|
-
}
|
|
3077
|
-
});
|
|
3039
|
+
const loadToolOptions = async () => {
|
|
3040
|
+
const tools = mcpSel ? readToolPicker(mcpSel) : _selected?.tools ?? null;
|
|
3041
|
+
const catalog = await fetchToolCatalog();
|
|
3042
|
+
if (!mcpField?.isConnected) return;
|
|
3043
|
+
const provider = profileSel.value;
|
|
3044
|
+
mcpField.innerHTML = `<label>${toolWord('label')}</label>${strictToolHost(provider) ? toolPickerHTML('as-f-mcp', tools, { catalog, provider, inheritLabel: toolWord('default'), usesBrowser: !!$('as-f-browser')?.checked }) : toolWord('focus')}`;
|
|
3045
|
+
mcpSel = $('as-f-mcp');
|
|
3046
|
+
mcpSel?.addEventListener('change', () => { if (!isPreset) markDirty(); updateToolPicker(mcpSel, readToolPicker(mcpSel), { inheritLabel: toolWord('default'), usesBrowser: !!$('as-f-browser')?.checked }); });
|
|
3078
3047
|
};
|
|
3079
3048
|
|
|
3080
3049
|
const renderModelOptions = (profileId, preferredId) => {
|
|
@@ -3124,8 +3093,7 @@ function wireLaunchDefaults(isPreset) {
|
|
|
3124
3093
|
renderEffortOptions(profileId, 'off');
|
|
3125
3094
|
if (effortField) effortField.style.display = profileSupportsEffort(profileId) ? '' : 'none';
|
|
3126
3095
|
if (mcpField) {
|
|
3127
|
-
|
|
3128
|
-
if (profileId !== 'claude-code') loadMcpOptions();
|
|
3096
|
+
void loadToolOptions();
|
|
3129
3097
|
}
|
|
3130
3098
|
if (!isPreset) markDirty();
|
|
3131
3099
|
});
|
|
@@ -3137,7 +3105,7 @@ function wireLaunchDefaults(isPreset) {
|
|
|
3137
3105
|
contextSel?.addEventListener('change', () => { if (!isPreset) markDirty(); });
|
|
3138
3106
|
mcpSel?.addEventListener('change', () => { if (!isPreset) markDirty(); });
|
|
3139
3107
|
|
|
3140
|
-
|
|
3108
|
+
void loadToolOptions();
|
|
3141
3109
|
renderEffortOptions(profileSel.value, effortSel?.value || 'off');
|
|
3142
3110
|
if (effortField) effortField.style.display = profileSupportsEffort(profileSel.value) ? '' : 'none';
|
|
3143
3111
|
refreshDynamicModelOptionsIfNeeded(profileSel.value, modelSel?.value || null);
|
|
@@ -3175,7 +3143,7 @@ async function saveCurrentTemplate() {
|
|
|
3175
3143
|
const model = $('as-f-model')?.value || null;
|
|
3176
3144
|
const contextMode = $('as-f-context')?.value || 'default';
|
|
3177
3145
|
const effort = normalizeEffortForProfile(profile || 'claude-code', $('as-f-effort')?.value || null);
|
|
3178
|
-
const
|
|
3146
|
+
const tools = strictToolHost(profile) ? ($('as-f-mcp') ? readToolPicker($('as-f-mcp')) : _selected?.tools ?? null) : null;
|
|
3179
3147
|
const folderIdRaw = $('as-f-folder')?.value;
|
|
3180
3148
|
const folderId = folderIdRaw ? folderIdRaw : null;
|
|
3181
3149
|
|
|
@@ -3188,12 +3156,12 @@ async function saveCurrentTemplate() {
|
|
|
3188
3156
|
showToast('This context window is unavailable for the selected model'); return;
|
|
3189
3157
|
}
|
|
3190
3158
|
|
|
3191
|
-
const payload = { name, icon: iconKey, category, task, context: '', description: description || task.slice(0, 120), iterations, maxMinutes, usesBrowser, profile, model, contextMode, effort,
|
|
3159
|
+
const payload = { name, icon: iconKey, category, task, context: '', description: description || task.slice(0, 120), iterations, maxMinutes, usesBrowser, profile, model, contextMode, effort, tools, folderId };
|
|
3192
3160
|
|
|
3193
3161
|
try {
|
|
3194
3162
|
if (_selected.id) { await updateLoopTemplate(_selected.id, payload); }
|
|
3195
3163
|
else { const result = await createLoopTemplate(payload); if (result?.id) _selected.id = result.id; }
|
|
3196
|
-
_templates = await fetchLoopTemplates();
|
|
3164
|
+
_templates = migrateLaunchRecords(await fetchLoopTemplates());
|
|
3197
3165
|
const updated = _templates.find(t => t.id === _selected.id);
|
|
3198
3166
|
if (updated) _selected = updated;
|
|
3199
3167
|
_originalContent = task;
|
|
@@ -3295,11 +3263,11 @@ async function customizePreset(preset) {
|
|
|
3295
3263
|
model: $('as-f-model')?.value || null,
|
|
3296
3264
|
contextMode: $('as-f-context')?.value || 'default',
|
|
3297
3265
|
effort: normalizeEffortForProfile($('as-f-profile')?.value || 'claude-code', $('as-f-effort')?.value || null),
|
|
3298
|
-
|
|
3266
|
+
tools: strictToolHost($('as-f-profile')?.value) ? readToolPicker($('as-f-mcp')) : null,
|
|
3299
3267
|
};
|
|
3300
3268
|
const result = await createLoopTemplate(payload);
|
|
3301
3269
|
if (result?.id) {
|
|
3302
|
-
_templates = await fetchLoopTemplates();
|
|
3270
|
+
_templates = migrateLaunchRecords(await fetchLoopTemplates());
|
|
3303
3271
|
const newTpl = _templates.find(t => t.id === result.id);
|
|
3304
3272
|
if (newTpl) {
|
|
3305
3273
|
showToast('Customized \u2014 edit and save your copy');
|
|
@@ -3322,13 +3290,13 @@ function handleTestRun() {
|
|
|
3322
3290
|
const model = $('as-f-model')?.value || _selected.model || null;
|
|
3323
3291
|
const contextMode = $('as-f-context')?.value || _selected.contextMode || 'default';
|
|
3324
3292
|
const effort = normalizeEffortForProfile(profile || 'claude-code', $('as-f-effort')?.value || _selected.effort || null);
|
|
3325
|
-
const
|
|
3293
|
+
const tools = strictToolHost(profile) ? ($('as-f-mcp') ? readToolPicker($('as-f-mcp')) : _selected?.tools ?? null) : null;
|
|
3326
3294
|
serverLaunchLoop({
|
|
3327
3295
|
task: cmd,
|
|
3328
3296
|
context: null,
|
|
3329
3297
|
iterations: 1, maxMinutes: 10,
|
|
3330
3298
|
usesBrowser,
|
|
3331
|
-
profile, model, contextMode, effort,
|
|
3299
|
+
profile, model, contextMode, effort, tools,
|
|
3332
3300
|
});
|
|
3333
3301
|
}
|
|
3334
3302
|
|
|
@@ -3357,12 +3325,12 @@ function proceedWithLaunch() {
|
|
|
3357
3325
|
const model = $('as-f-model')?.value || _selected.model || null;
|
|
3358
3326
|
const contextMode = $('as-f-context')?.value || _selected.contextMode || 'default';
|
|
3359
3327
|
const effort = normalizeEffortForProfile(profile || 'claude-code', $('as-f-effort')?.value || _selected.effort || null);
|
|
3360
|
-
const
|
|
3328
|
+
const tools = strictToolHost(profile) ? ($('as-f-mcp') ? readToolPicker($('as-f-mcp')) : _selected?.tools ?? null) : null;
|
|
3361
3329
|
serverLaunchLoop({
|
|
3362
3330
|
task: cmd,
|
|
3363
3331
|
context: null,
|
|
3364
3332
|
iterations, maxMinutes, usesBrowser,
|
|
3365
|
-
profile, model, contextMode, effort,
|
|
3333
|
+
profile, model, contextMode, effort, tools,
|
|
3366
3334
|
});
|
|
3367
3335
|
}
|
|
3368
3336
|
|
|
@@ -3960,7 +3928,7 @@ function setupScheduleWebSocket() {
|
|
|
3960
3928
|
// Quick timer events
|
|
3961
3929
|
on('sync:quick-timer:set', (data) => {
|
|
3962
3930
|
if (data?.timerId && !_quickTimers.some(t => t.id === data.timerId)) {
|
|
3963
|
-
_quickTimers.push({ id: data.timerId, templateName: data.templateName, firesAt: data.firesAt, minutes: data.minutes, profile: data.profile, model: data.model, contextMode: data.contextMode, effort: data.effort,
|
|
3931
|
+
_quickTimers.push({ id: data.timerId, templateName: data.templateName, firesAt: data.firesAt, minutes: data.minutes, profile: data.profile, model: data.model, contextMode: data.contextMode, effort: data.effort, tools: data.tools, usesBrowser: data.usesBrowser });
|
|
3964
3932
|
if (_view === 'schedules') renderSchedulesMain();
|
|
3965
3933
|
}
|
|
3966
3934
|
});
|
|
@@ -4419,13 +4387,13 @@ async function handlePanelClick(e) {
|
|
|
4419
4387
|
if (!automationContextAvailable(qtProfile, qtModel, qtContextMode)) { showToast('This context window is unavailable for the selected model and account'); break; }
|
|
4420
4388
|
const qtBrowser = !!$('as-qt-browser')?.checked;
|
|
4421
4389
|
const qtEffort = normalizeEffortForProfile(qtProfile, _launchEffort) || undefined;
|
|
4422
|
-
const
|
|
4390
|
+
const qtTools = strictToolHost(qtProfile) ? readToolPicker($('as-qt-tools')) : undefined;
|
|
4423
4391
|
const qtAccount = qtProfile === 'codex' ? (_launchAccount || 'default') : undefined;
|
|
4424
4392
|
try {
|
|
4425
|
-
const result = await createQuickTimer(templateId, mins, { profile: qtProfile, model: qtModel, contextMode: qtContextMode, usesBrowser: qtBrowser, effort: qtEffort,
|
|
4393
|
+
const result = await createQuickTimer(templateId, mins, { profile: qtProfile, model: qtModel, contextMode: qtContextMode, usesBrowser: qtBrowser, effort: qtEffort, tools: qtTools, codexAccountId: qtAccount });
|
|
4426
4394
|
// Guard: WebSocket sync:quick-timer:set may arrive before this HTTP response
|
|
4427
4395
|
if (!_quickTimers.some(t => t.id === result.timerId)) {
|
|
4428
|
-
_quickTimers.push({ id: result.timerId, templateId, templateName: result.templateName, firesAt: result.firesAt, minutes: result.minutes, profile: result.profile, model: result.model, contextMode: result.contextMode, effort: result.effort,
|
|
4396
|
+
_quickTimers.push({ id: result.timerId, templateId, templateName: result.templateName, firesAt: result.firesAt, minutes: result.minutes, profile: result.profile, model: result.model, contextMode: result.contextMode, effort: result.effort, tools: result.tools, usesBrowser: result.usesBrowser });
|
|
4429
4397
|
}
|
|
4430
4398
|
_selectedQtMinutes = null;
|
|
4431
4399
|
_qtUsesBrowser = null;
|
|
@@ -4446,7 +4414,7 @@ async function handlePanelClick(e) {
|
|
|
4446
4414
|
if (!automationContextAvailable(qtProfile, qtModel, qtContextMode)) { showToast('This context window is unavailable for the selected model and account'); break; }
|
|
4447
4415
|
const qtBrowser = !!$('as-qt-browser')?.checked;
|
|
4448
4416
|
const qtEffort = normalizeEffortForProfile(qtProfile, _launchEffort) || undefined;
|
|
4449
|
-
const
|
|
4417
|
+
const qtTools = strictToolHost(qtProfile) ? readToolPicker($('as-qt-tools')) : undefined;
|
|
4450
4418
|
const qtAccount = qtProfile === 'codex' ? (_launchAccount || 'default') : undefined;
|
|
4451
4419
|
try {
|
|
4452
4420
|
const result = await triggerQuickTimerNow(templateId, {
|
|
@@ -4455,7 +4423,7 @@ async function handlePanelClick(e) {
|
|
|
4455
4423
|
contextMode: qtContextMode,
|
|
4456
4424
|
usesBrowser: qtBrowser,
|
|
4457
4425
|
effort: qtEffort,
|
|
4458
|
-
|
|
4426
|
+
tools: qtTools,
|
|
4459
4427
|
codexAccountId: qtAccount,
|
|
4460
4428
|
sidepanelWindowId: getNativeLoopRouterWindowId(),
|
|
4461
4429
|
sidepanelClaimToken: getNativeLoopRouterClaimToken(),
|
|
@@ -4614,9 +4582,9 @@ function wireInputSync(container) {
|
|
|
4614
4582
|
// ═══════════════════════════════════════════
|
|
4615
4583
|
|
|
4616
4584
|
async function loadScheduleData() {
|
|
4617
|
-
try { _schedules = await fetchSchedules(); } catch { _schedules = []; }
|
|
4585
|
+
try { _schedules = migrateLaunchRecords(await fetchSchedules()); } catch { _schedules = []; }
|
|
4618
4586
|
try { _scheduleTimerData = await fetchScheduleTimers(); } catch { _scheduleTimerData = {}; }
|
|
4619
|
-
try { _quickTimers = await fetchQuickTimers(); } catch { _quickTimers = []; }
|
|
4587
|
+
try { _quickTimers = migrateLaunchRecords(await fetchQuickTimers()); } catch { _quickTimers = []; }
|
|
4620
4588
|
}
|
|
4621
4589
|
|
|
4622
4590
|
const CRON_PRESET_GROUPS = [
|
|
@@ -4728,7 +4696,7 @@ function renderSchedulesMain() {
|
|
|
4728
4696
|
const profileLabel = CLI_PROFILES.find(p => p.id === qt.profile)?.label || qt.profile || 'Claude Code';
|
|
4729
4697
|
const modelObj = qt.model ? getModelsForProfile(qt.profile || 'claude-code').find(m => modelMatchesSelector(m, qt.model)) : null;
|
|
4730
4698
|
const modelLabel = modelObj?.label || (qt.profile === 'opencode' ? qt.model : '');
|
|
4731
|
-
const metaParts = [profileLabel, modelLabel, qt.contextMode && qt.contextMode !== 'default' ? `context:${qt.contextMode}` : '', qt.effort ? `think:${qt.effort}` : '', qt.
|
|
4699
|
+
const metaParts = [profileLabel, modelLabel, qt.contextMode && qt.contextMode !== 'default' ? `context:${qt.contextMode}` : '', qt.effort ? `think:${qt.effort}` : '', qt.tools ? `${toolWord('label')}: ${qt.tools.join(', ')}` : '', qt.usesBrowser ? 'Browser' : ''].filter(Boolean);
|
|
4732
4700
|
timerCards += `
|
|
4733
4701
|
<div class="as-qt-active-card">
|
|
4734
4702
|
<div class="as-qt-active-pulse"></div>
|
|
@@ -4834,6 +4802,7 @@ function renderSchedulesMain() {
|
|
|
4834
4802
|
<span class="as-launch-label">Think</span>
|
|
4835
4803
|
<div class="as-launch-efforts" id="as-qt-efforts">${qtEffortChips}</div>
|
|
4836
4804
|
</div>
|
|
4805
|
+
<div class="as-qt-group"><label>${toolWord('label')}</label>${strictToolHost(qtProfile) ? toolPickerHTML('as-qt-tools', _launchTools, { provider: qtProfile, inheritLabel: toolWord('templateDefault'), usesBrowser: qtBrowserDefault }) : toolWord('focus')}</div>
|
|
4837
4806
|
<div class="as-qt-group" id="as-qt-account-section" style="${qtProfile === 'codex' ? '' : 'display:none'}">
|
|
4838
4807
|
<span class="as-launch-label">OpenAI Account</span>
|
|
4839
4808
|
<div class="as-launch-accounts" id="as-qt-accounts">${qtAccountChips}</div>
|
|
@@ -5134,7 +5103,7 @@ function triggerImport() {
|
|
|
5134
5103
|
showToast('Invalid file format'); return;
|
|
5135
5104
|
}
|
|
5136
5105
|
const result = await importLoopTemplates(data);
|
|
5137
|
-
_templates = await fetchLoopTemplates();
|
|
5106
|
+
_templates = migrateLaunchRecords(await fetchLoopTemplates());
|
|
5138
5107
|
renderView();
|
|
5139
5108
|
showToast(`Imported: ${result.added} added, ${result.updated} updated`);
|
|
5140
5109
|
} catch (err) { showToast('Import failed: ' + err.message); }
|
|
@@ -5143,3 +5112,5 @@ function triggerImport() {
|
|
|
5143
5112
|
document.body.appendChild(input);
|
|
5144
5113
|
input.click();
|
|
5145
5114
|
}
|
|
5115
|
+
|
|
5116
|
+
configureToolPickerTranslation(t);
|