synabun 2.0.9 → 2.1.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 +115 -0
- package/README.md +25 -2
- package/THIRD-PARTY-LICENSES.md +68 -4
- package/bin/synabun.js +71 -24
- package/docs/whatsapp.md +2 -2
- 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/launcher.mjs +9 -3
- package/lib/claude-hooks.js +172 -18
- package/lib/client-config-repair.js +17 -8
- package/lib/desktop-app.js +7 -1
- package/lib/external-tools.js +1 -1
- 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 +43 -5
- package/lib/tools-cli.js +45 -0
- package/lib/update-snapshot.js +228 -0
- package/lib/virustotal.mjs +192 -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/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/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/neural-interface.d.ts +16 -10
- 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 +20 -62
- 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/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 +10 -10
- package/mcp-server/dist/tools/agents.d.ts.map +1 -1
- package/mcp-server/dist/tools/agents.js +22 -13
- 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/image-tools.d.ts +1 -1
- package/mcp-server/dist/tools/image-tools.js +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 +639 -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/codex-config-heal.ts +80 -29
- package/mcp-server/src/services/memory-judge-backfill.ts +7 -1
- package/mcp-server/src/services/neural-interface.ts +79 -20
- package/mcp-server/src/services/server-instructions.ts +27 -63
- 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/whiteboard-geometry.ts +94 -9
- package/mcp-server/src/tools/agents.ts +22 -14
- package/mcp-server/src/tools/image-tools.ts +1 -1
- package/mcp-server/src/tools/skill-tools.ts +589 -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 +3680 -206
- package/neural-interface/i18n/pt-BR.json +3628 -157
- package/neural-interface/lib/account-usage.js +5 -3
- package/neural-interface/lib/app-controls-api.js +161 -0
- package/neural-interface/lib/assistant-api.js +148 -35
- 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 +122 -44
- package/neural-interface/lib/assistant-brains/opencode2-browser-policy/index.js +59 -0
- package/neural-interface/lib/assistant-brains/opencode2-route-gate/index.js +97 -0
- package/neural-interface/lib/assistant-catalog.js +23 -9
- package/neural-interface/lib/assistant-dispatch.js +874 -156
- package/neural-interface/lib/assistant-envelope.js +22 -2
- package/neural-interface/lib/assistant-persona.js +80 -11
- package/neural-interface/lib/assistant-plan-permissions.js +10 -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 +13 -8
- package/neural-interface/lib/assistant-runtime.js +183 -26
- package/neural-interface/lib/assistant-task-prompt.js +78 -14
- package/neural-interface/lib/assistant-tools.js +51 -0
- package/neural-interface/lib/backup-service.js +620 -3
- 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 +83 -0
- package/neural-interface/lib/browser-network-guard.js +284 -0
- package/neural-interface/lib/browser-policy-roots.js +64 -0
- package/neural-interface/lib/browser-tool-policy.js +186 -31
- package/neural-interface/lib/claude-agent-bridge.js +4 -2
- package/neural-interface/lib/claude-hooks-status.js +103 -0
- package/neural-interface/lib/claude-model-catalog.js +64 -14
- package/neural-interface/lib/claude-temporary.js +5 -11
- package/neural-interface/lib/cli-install.js +18 -138
- package/neural-interface/lib/cli-resolver.js +4 -1
- package/neural-interface/lib/cli-update-planner.js +32 -31
- package/neural-interface/lib/cloudflared/tunnel.js +42 -2
- package/neural-interface/lib/codex-mcp-approvals.js +11 -0
- package/neural-interface/lib/codex-settings-schema.js +109 -47
- package/neural-interface/lib/codex-worker-app-server.js +172 -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 +164 -67
- package/neural-interface/lib/exec-loop-command.js +4 -1
- package/neural-interface/lib/http-guards.js +8 -2
- package/neural-interface/lib/install-details.js +4 -1
- package/neural-interface/lib/launch-cache.js +293 -0
- package/neural-interface/lib/login-start.js +524 -0
- package/neural-interface/lib/mcp-agent-servers.js +67 -0
- package/neural-interface/lib/mcp-client-config.js +0 -29
- package/neural-interface/lib/mcp-external-servers.js +323 -0
- package/neural-interface/lib/{mcp-profile-refresh-coordinator.js → mcp-tools-refresh-coordinator.js} +4 -4
- package/neural-interface/lib/morelogin.js +30 -0
- package/neural-interface/lib/native-loop-providers.js +565 -50
- package/neural-interface/lib/native-loop-runtime.js +287 -41
- package/neural-interface/lib/opencode-config.js +557 -0
- package/neural-interface/lib/opencode-db-schema.js +58 -0
- package/neural-interface/lib/opencode-history.js +49 -204
- package/neural-interface/lib/opencode-mcp-ready.js +108 -0
- package/neural-interface/lib/opencode-native-boundary.js +44 -0
- package/neural-interface/lib/opencode-protocol.js +310 -0
- package/neural-interface/lib/opencode-provider-view.js +81 -0
- package/neural-interface/lib/opencode-runtime-config.js +32 -15
- package/neural-interface/lib/opencode-serve-records.js +624 -0
- package/neural-interface/lib/opencode-v2-client.js +53 -131
- package/neural-interface/lib/opencode-v2-ws-requests.js +35 -195
- package/neural-interface/lib/opencode-worker-activity.js +229 -0
- package/neural-interface/lib/opencode-worker-data.js +27 -0
- package/neural-interface/lib/opencode2-client.js +796 -0
- package/neural-interface/lib/opencode2-proxy.js +76 -0
- package/neural-interface/lib/opencode2-translate.js +1057 -0
- package/neural-interface/lib/owner-authority.js +249 -0
- package/neural-interface/lib/page-session.js +275 -0
- package/neural-interface/lib/peer-identity.js +763 -0
- package/neural-interface/lib/process-identity.js +361 -0
- package/neural-interface/lib/request-gate.js +17 -2
- package/neural-interface/lib/rulesets/api.js +1 -1
- package/neural-interface/lib/rulesets/fs-safe.js +1 -1
- package/neural-interface/lib/rulesets/installer.js +92 -27
- package/neural-interface/lib/rulesets/json-edit.js +1 -1
- package/neural-interface/lib/session-cache-builder.js +18 -10
- package/neural-interface/lib/session-title-generator.js +58 -18
- 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 +294 -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 +267 -0
- package/neural-interface/lib/skills/creation.js +843 -0
- package/neural-interface/lib/skills/deploy.js +564 -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 +214 -0
- package/neural-interface/lib/skills/eval-confinement.js +397 -0
- package/neural-interface/lib/skills/eval-sandbox.js +280 -0
- package/neural-interface/lib/skills/eval-trace.js +119 -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 +200 -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 +387 -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 +262 -0
- package/neural-interface/lib/skills/runtime-checks.js +355 -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 +522 -0
- package/neural-interface/lib/skills/telemetry.js +113 -0
- package/neural-interface/lib/sqlite-integrity-worker.js +22 -0
- package/neural-interface/lib/style-guide/api.js +4 -3
- package/neural-interface/lib/tool-lists.js +124 -0
- package/neural-interface/lib/untrusted-file-headers.js +27 -0
- package/neural-interface/lib/whatsapp/bridge.js +6 -3
- package/neural-interface/lib/worker-confinement.js +1192 -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-relay-ports.js +227 -0
- package/neural-interface/lib/worker-resume.js +229 -0
- package/neural-interface/lib/worker-sandbox.js +299 -0
- package/neural-interface/package-lock.json +1354 -50
- package/neural-interface/package.json +6 -2
- package/neural-interface/public/index.html +5 -3
- package/neural-interface/public/index2d.html +19 -11
- package/neural-interface/public/onboarding.html +2 -2
- package/neural-interface/public/shared/account-menu.js +8 -5
- package/neural-interface/public/shared/agent-runtime-options.js +76 -16
- 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 +205 -19
- package/neural-interface/public/shared/assistant/asst-api.js +11 -3
- 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 +241 -112
- package/neural-interface/public/shared/assistant/asst-composer.js +1 -1
- package/neural-interface/public/shared/assistant/asst-control.js +157 -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 +49 -2
- package/neural-interface/public/shared/assistant/asst-limit-dock.js +40 -0
- package/neural-interface/public/shared/assistant/asst-limit-wait.js +294 -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 +84 -12
- package/neural-interface/public/shared/assistant/asst-panel.js +303 -44
- package/neural-interface/public/shared/assistant/asst-rack-styles.js +93 -58
- package/neural-interface/public/shared/assistant/asst-redact.js +186 -0
- package/neural-interface/public/shared/assistant/asst-render.js +770 -100
- package/neural-interface/public/shared/assistant/asst-route.js +83 -12
- package/neural-interface/public/shared/assistant/asst-run-stage.js +231 -0
- package/neural-interface/public/shared/assistant/asst-sanitize.js +193 -3
- package/neural-interface/public/shared/assistant/asst-scene-styles.js +273 -0
- package/neural-interface/public/shared/assistant/asst-scenes.js +530 -0
- package/neural-interface/public/shared/assistant/asst-sidepanel-styles.js +3 -15
- package/neural-interface/public/shared/assistant/asst-sidepanel.js +67 -4
- package/neural-interface/public/shared/assistant/asst-slash.js +9 -7
- package/neural-interface/public/shared/assistant/asst-state.js +25 -15
- package/neural-interface/public/shared/assistant/asst-stop.js +127 -0
- package/neural-interface/public/shared/assistant/asst-styles.js +102 -21
- package/neural-interface/public/shared/assistant/asst-tool-kinds.js +165 -13
- package/neural-interface/public/shared/automation-context.js +5 -2
- package/neural-interface/public/shared/cc-dropdown.js +550 -0
- 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 +8 -7
- package/neural-interface/public/shared/cdx/cdx-panel.js +58 -150
- package/neural-interface/public/shared/cdx/cdx-protocol.js +28 -1
- package/neural-interface/public/shared/cdx/cdx-render.js +62 -32
- package/neural-interface/public/shared/cdx/cdx-requests.js +3 -3
- 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 +201 -74
- package/neural-interface/public/shared/cdx/cdx-ws.js +0 -1
- package/neural-interface/public/shared/cli-install-view.js +4 -8
- package/neural-interface/public/shared/cli-status.js +2 -2
- package/neural-interface/public/shared/constants.js +2 -2
- 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 +366 -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-markdown.js +4 -57
- package/neural-interface/public/shared/crash-notice-view.js +168 -0
- package/neural-interface/public/shared/data-cache.js +223 -0
- package/neural-interface/public/shared/desktop-bridge.js +11 -0
- package/neural-interface/public/shared/desktop-titlebar-view.js +78 -1
- package/neural-interface/public/shared/desktop-titlebar.js +214 -28
- package/neural-interface/public/shared/desktop-update-view.js +35 -5
- package/neural-interface/public/shared/editor/editor-panel-logic.js +2 -2
- package/neural-interface/public/shared/file-links.js +73 -8
- package/neural-interface/public/shared/html-shell.js +78 -86
- package/neural-interface/public/shared/i18n.js +2 -0
- package/neural-interface/public/shared/launch-prefetch.js +59 -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-caps.js +3 -2
- 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 +9 -2
- 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-modelpicker.js +54 -17
- 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 +140 -254
- package/neural-interface/public/shared/ocp-v2/ocp-v2-plan.js +1 -2
- package/neural-interface/public/shared/ocp-v2/ocp-v2-projectbar.js +97 -203
- package/neural-interface/public/shared/ocp-v2/ocp-v2-providers.js +11 -9
- package/neural-interface/public/shared/ocp-v2/ocp-v2-rehydrate.js +15 -4
- package/neural-interface/public/shared/ocp-v2/ocp-v2-render.js +7 -22
- package/neural-interface/public/shared/ocp-v2/ocp-v2-send-logic.js +401 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-send.js +20 -13
- 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 +53 -82
- 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 +48 -40
- 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 +205 -62
- package/neural-interface/public/shared/opencode-providers.js +39 -0
- package/neural-interface/public/shared/page-session.js +96 -0
- 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 +452 -0
- package/neural-interface/public/shared/settings/settings-app-pane.js +335 -0
- package/neural-interface/public/shared/settings/settings-app.js +243 -0
- package/neural-interface/public/shared/settings/settings-claude-hooks.js +135 -0
- package/neural-interface/public/shared/settings/settings-data.js +90 -0
- package/neural-interface/public/shared/settings/settings-ia.js +23 -6
- package/neural-interface/public/shared/settings/settings-opencode.js +89 -0
- 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/sidepanel-session-status.js +49 -0
- package/neural-interface/public/shared/skills/ss-args.js +96 -0
- package/neural-interface/public/shared/skills/ss-creation.js +219 -0
- package/neural-interface/public/shared/skills/ss-dialog.js +130 -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 +141 -0
- package/neural-interface/public/shared/skills/ss-presets.js +117 -0
- package/neural-interface/public/shared/skills/ss-profiles.js +475 -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 +236 -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 +229 -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-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 +279 -0
- package/neural-interface/public/shared/skills/studio/sx-install.js +296 -0
- package/neural-interface/public/shared/skills/studio/sx-library-view.js +639 -0
- package/neural-interface/public/shared/skills/studio/sx-library.js +475 -0
- package/neural-interface/public/shared/skills/studio/sx-main.js +681 -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 +248 -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 +425 -0
- package/neural-interface/public/shared/styleguide/sg-panel.js +4 -2
- package/neural-interface/public/shared/styles.css +2065 -2150
- package/neural-interface/public/shared/synabun-mascot.js +1115 -9
- 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/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-assistant.js +27 -5
- package/neural-interface/public/shared/ui-automation-studio.js +155 -152
- package/neural-interface/public/shared/ui-bookmarks.js +2 -1
- package/neural-interface/public/shared/ui-claude-panel.js +153 -13
- package/neural-interface/public/shared/ui-codex-panel.js +1 -0
- 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 +21 -9
- package/neural-interface/public/shared/ui-file-links.js +1 -0
- package/neural-interface/public/shared/ui-image-gallery.js +56 -52
- package/neural-interface/public/shared/ui-invite.js +18 -2
- package/neural-interface/public/shared/ui-keybinds.js +26 -1
- package/neural-interface/public/shared/ui-link.js +9 -9
- package/neural-interface/public/shared/ui-menubar.js +229 -40
- package/neural-interface/public/shared/ui-native-loop-router-state.js +5 -0
- package/neural-interface/public/shared/ui-native-loop-router.js +9 -1
- package/neural-interface/public/shared/ui-navbar.js +4 -24
- package/neural-interface/public/shared/ui-opencode-panel-v2.js +1 -0
- package/neural-interface/public/shared/ui-panels.js +96 -65
- package/neural-interface/public/shared/ui-schedules-studio.js +2267 -953
- package/neural-interface/public/shared/ui-sessions.js +20 -7
- package/neural-interface/public/shared/ui-settings.js +679 -496
- package/neural-interface/public/shared/ui-sidebar.js +4 -4
- package/neural-interface/public/shared/ui-sidepanel-session-entry.js +13 -0
- package/neural-interface/public/shared/ui-sidepanel-sessions.js +56 -5
- package/neural-interface/public/shared/ui-sidepanel-state.js +23 -12
- package/neural-interface/public/shared/ui-sidepanel-tray.js +84 -8
- package/neural-interface/public/shared/ui-sidepanel-windows.js +16 -11
- package/neural-interface/public/shared/ui-skills.js +42 -2781
- package/neural-interface/public/shared/ui-styleguide.js +5 -2
- package/neural-interface/public/shared/ui-sync.js +22 -5
- package/neural-interface/public/shared/ui-terminal.js +159 -199
- package/neural-interface/public/shared/ui-tool-updates.js +3 -1
- package/neural-interface/public/shared/ui-tooltip.js +10 -5
- package/neural-interface/public/shared/ui-trash.js +14 -5
- 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 -61
- package/neural-interface/public/shared/ui-tutorial.css +47 -100
- package/neural-interface/public/shared/ui-tutorial.js +285 -499
- package/neural-interface/public/shared/ui-update.js +121 -16
- package/neural-interface/public/shared/ui-whiteboard.js +313 -59
- package/neural-interface/public/shared/ui-worker-end.js +4 -0
- 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 +1 -1
- 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-restart.js +12 -0
- package/neural-interface/public/sidepanel-session.html +1 -1
- 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 +36 -2
- package/neural-interface/public/variant/2d/minimap.js +11 -13
- package/neural-interface/public/variant/3d/main.js +72 -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/highlight/LICENSE +29 -0
- package/neural-interface/public/vendor/highlight/github-dark-dimmed-11.12.0.min.css +9 -0
- package/neural-interface/public/vendor/highlight/highlight-11.12.0.min.js +1262 -0
- package/neural-interface/public/vendor/highlight/manifest.json +5 -0
- package/neural-interface/public/vendor/html2canvas/LICENSE +22 -0
- package/neural-interface/public/vendor/html2canvas/html2canvas-1.4.1.min.js +20 -0
- package/neural-interface/public/vendor/html2canvas/manifest.json +4 -0
- package/neural-interface/public/vendor/marked/LICENSE.md +44 -0
- package/neural-interface/public/vendor/marked/manifest.json +4 -0
- package/neural-interface/public/vendor/marked/marked-14.1.4.esm.js +2502 -0
- package/neural-interface/public/vendor/mermaid/LICENSE +21 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/abnfDiagram-PAR5IXJI.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/architecture-7GRP2DOG-M7G3SWCO.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/architectureDiagram-2PNWDENW.mjs +36 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/blockDiagram-PUWGUBOA.mjs +129 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/c4Diagram-3NLNHZP5.mjs +38 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-2NMSUPJH.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-32MCUW2P.mjs +206 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-3NPNU5GP.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-3SMGFRGC.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-4CAJECRU.mjs +14 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-4OADUZ5Q.mjs +10 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-5IMINLNL.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-5IQCK5RY.mjs +3 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-5MVFYWFU.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-AQ6EADP3.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-AZZRMDJM.mjs +15 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-CLS4B6BI.mjs +168 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-DZP67EKU.mjs +70 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-EICP7K5X.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-GDY2UAB4.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-H7VHZCWX.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-IJBDOHL6.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-JFFVMJIA.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-JQRUD6KW.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-JZGDI5JK.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-KD6SPIPN.mjs +2 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-NF366YI6.mjs +231 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-NUDPKBEF.mjs +32 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-OJINMHTS.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-Q6NGPIAH.mjs +2 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-QJSWEUOL.mjs +132 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-R7JDMUKV.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-RCXAM2GK.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-RT4MAWR3.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-SFMINX4W.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-SLDQ463B.mjs +88 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-STOV2HOB.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-T5OCTHI4.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-TCEHX7R3.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-VQC2EELJ.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-VRZKL3EH.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-VTHDQ7BV.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-VY2OSTJR.mjs +2 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-WUBWJARI.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-YBMQ5JGJ.mjs +2 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-YDMLL4PJ.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-Z6V44ARX.mjs +62 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-ZJJ7VQJP.mjs +339 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-ZNLK7HRR.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-ZQN7UHIL.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-ZS6VBONO.mjs +174 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-ZUNWM646.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/classDiagram-FGAMPOII.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/classDiagram-v2-AI5RJEK4.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/cose-bilkent-Q72C2OJ3.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/cynefin-OW5HDTMX-6OCTWOGG.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/cynefinDiagram-2OOWUY4M.mjs +62 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/dagre-MPVFI544.mjs +4 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/diagram-AE4NWXFW.mjs +24 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/diagram-BUJID5UG.mjs +41 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/diagram-C44CZ5NI.mjs +24 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/diagram-EYOLEXXS.mjs +30 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/diagram-P7B6PWOJ.mjs +3 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/ebnfDiagram-FTPZ3PV6.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/erDiagram-H3ERR26V.mjs +99 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/eventmodeling-NTZA5JFV-WKSWQHFS.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/flowDiagram-YHGXBVSY.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/ganttDiagram-RWFTB7ED.mjs +292 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/gitGraph-4MIJSDKK-JH2HKYUO.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/gitGraphDiagram-MAR6GKOP.mjs +106 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/info-A6RAGUB7-3TX3OFWW.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/infoDiagram-LV547AFH.mjs +2 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/ishikawaDiagram-PUJQGNDS.mjs +70 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/journeyDiagram-EW5QJT4W.mjs +139 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/kanban-definition-JSQERAZB.mjs +89 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/katex-CZ4GXH2S.mjs +257 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/mindmap-definition-VBJCLQLM.mjs +96 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/packet-AYTQ26CC-MKII6P3Y.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/pegDiagram-7WILOQTJ.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/pie-WAS4IAKB-6B4OPMJ5.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/pieDiagram-EFA7CBSB.mjs +39 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/quadrantDiagram-WARVYA7P.mjs +7 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/radar-RG4KPBEZ-UPTR3XUL.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/railroad-74A4TZTK-MEFUPFMS.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/railroad-abnf-HS5TGJTU-R5YG2S5D.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/railroad-ebnf-LZEXJU2U-G5QEX2L6.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/railroad-peg-WCYAUIDC-H5I2ZRY2.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/railroadDiagram-5NIQVNLQ.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/requirementDiagram-SXREGOKZ.mjs +84 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/sankeyDiagram-VV74M2VP.mjs +40 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/sequenceDiagram-52ZFIFDL.mjs +162 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/sizeCapture-FGA5AGYP.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/stateDiagram-3QAKPIVI.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/stateDiagram-v2-HN2P4RDZ.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/swimlanes-QLVP42QD.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/swimlanesDiagram-JKPDBFCN.mjs +8 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/timeline-definition-GS45XAXW.mjs +120 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/treeView-Q6P3EWNA-ZRJGANNQ.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/treemap-WGGIJYW6-K64VN5AS.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/vennDiagram-QIQU2ZRJ.mjs +34 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/wardley-WFR3VGLG-D67OWCCH.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/wardleyDiagram-U6YNM66N.mjs +78 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/xychartDiagram-XJAZEDNM.mjs +7 -0
- package/neural-interface/public/vendor/mermaid/manifest.json +4 -0
- package/neural-interface/public/vendor/mermaid/mermaid-11.17.2.esm.min.mjs +14 -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 +116 -3
- package/neural-interface/server.js +4834 -2541
- package/neural-interface/templates/rulesets/core.md +1 -1
- package/neural-interface/templates/rulesets/legacy-hashes.json +18 -0
- package/neural-interface/templates/rulesets/manifest.json +8 -8
- package/npm-shrinkwrap.json +18 -12
- package/package.json +16 -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 +5 -5
- 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
|
@@ -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.
|
|
@@ -9,6 +12,7 @@ import { storage } from './storage.js';
|
|
|
9
12
|
import { initI18n, isReady as i18nReady, t } from './i18n.js';
|
|
10
13
|
import { fetchStyleGuideProjects, fetchStyleGuideSummary } from './api.js';
|
|
11
14
|
import { isGuest, hasPermission, showGuestToast } from './ui-sync.js';
|
|
15
|
+
import { registerLaunchPrefetch } from './launch-prefetch.js';
|
|
12
16
|
import {
|
|
13
17
|
getNativeLoopRouterClaimToken,
|
|
14
18
|
getNativeLoopRouterWindowId,
|
|
@@ -17,7 +21,8 @@ import {
|
|
|
17
21
|
import {
|
|
18
22
|
CLI_PROFILES,
|
|
19
23
|
ensureModelsForProfile,
|
|
20
|
-
|
|
24
|
+
fetchToolCatalog,
|
|
25
|
+
getCachedToolCatalog,
|
|
21
26
|
fetchCodexAccounts,
|
|
22
27
|
getCachedCodexAccounts,
|
|
23
28
|
getEffortLevelsForProfile,
|
|
@@ -67,6 +72,7 @@ import {
|
|
|
67
72
|
cancelQuickTimer,
|
|
68
73
|
triggerQuickTimerNow,
|
|
69
74
|
} from './api.js';
|
|
75
|
+
import { centeredInFrame, placementArea } from './app-frame.js';
|
|
70
76
|
|
|
71
77
|
const $ = (id) => document.getElementById(id);
|
|
72
78
|
|
|
@@ -90,6 +96,9 @@ let _prevLoopActive = false;
|
|
|
90
96
|
|
|
91
97
|
// Cleanup: stored references for document-level listeners so closePanel() can remove them
|
|
92
98
|
let _docListeners = [];
|
|
99
|
+
// What the last read found (templates, folders, the active loop, agents): a later open paints from it at once
|
|
100
|
+
// and reads it again behind it.
|
|
101
|
+
let _keptData = null;
|
|
93
102
|
|
|
94
103
|
// Detail/editor state
|
|
95
104
|
let _metaDirty = false;
|
|
@@ -176,7 +185,6 @@ const AS_ICONS = {
|
|
|
176
185
|
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>`,
|
|
177
186
|
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>`,
|
|
178
187
|
gemini: `<svg viewBox="0 0 24 24" width="14" height="14" fill="currentColor" fill-rule="evenodd"><path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z"/></svg>`,
|
|
179
|
-
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>`,
|
|
180
188
|
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"/>'),
|
|
181
189
|
|
|
182
190
|
// UI chrome
|
|
@@ -207,10 +215,10 @@ let _launchContextMode = _initialLaunchSelection.contextMode || 'default';
|
|
|
207
215
|
storage.setItem('as-launch-model', _launchModel || '');
|
|
208
216
|
storage.setItem('as-launch-context-mode', _launchContextMode);
|
|
209
217
|
let _launchEffort = storage.getItem('as-launch-effort') || 'off';
|
|
210
|
-
let
|
|
218
|
+
let _launchTools = (() => { try { return JSON.parse(storage.getItem('as-launch-tools') || 'null'); } catch { return null; } })();
|
|
211
219
|
let _launchAccount = storage.getItem('as-launch-account') || 'default'; // Codex ChatGPT account (CODEX_HOME)
|
|
212
220
|
let _qtAccountsRequested = false; // lazy-fetch guard for quick-timer account chips
|
|
213
|
-
let
|
|
221
|
+
let _dropdownAbort = null;
|
|
214
222
|
|
|
215
223
|
// Render the Codex account selector chips (one button per saved ChatGPT account).
|
|
216
224
|
function renderAccountChips(selectedId) {
|
|
@@ -260,34 +268,17 @@ function loadLaunchAccounts(root) {
|
|
|
260
268
|
}).catch(() => {});
|
|
261
269
|
}
|
|
262
270
|
|
|
263
|
-
async function
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
function renderMcpProfileChips(presets, selected) {
|
|
276
|
-
const entries = Object.entries(presets);
|
|
277
|
-
if (entries.length > 5) {
|
|
278
|
-
const options = entries.map(([id, p]) => ({
|
|
279
|
-
id,
|
|
280
|
-
label: p.label || id,
|
|
281
|
-
desc: `${p.tools} tools`,
|
|
282
|
-
}));
|
|
283
|
-
return renderLaunchSelect('mcp', options, selected);
|
|
284
|
-
}
|
|
285
|
-
return entries.map(([id, p]) => `
|
|
286
|
-
<button class="as-launch-mcp-profile${id === selected ? ' active' : ''}" data-mcp-profile="${id}">
|
|
287
|
-
<span class="as-launch-mcp-profile-name">${p.label || id}</span>
|
|
288
|
-
<span class="as-launch-mcp-profile-tools">${p.tools} tools</span>
|
|
289
|
-
</button>
|
|
290
|
-
`).join('');
|
|
271
|
+
async function renderLaunchToolPicker(root, provider) {
|
|
272
|
+
let catalog = await fetchToolCatalog(false, { cwd: _pendingLaunchParams?.cwd || '' });
|
|
273
|
+
if (_launchMode === 'agent' && !root.querySelector('#as-agent-synabun')?.checked && catalog) catalog = { ...catalog, defaultTools: [] };
|
|
274
|
+
const container = root.querySelector('#as-launch-tools');
|
|
275
|
+
if (!container) return;
|
|
276
|
+
container.innerHTML = strictToolHost(provider) ? toolPickerHTML('as-launch-tool-list', _launchTools, { catalog, provider, inheritLabel: toolWord('default'), usesBrowser: !!_pendingLaunchParams?.usesBrowser }) : toolWord('focus');
|
|
277
|
+
container.querySelector('#as-launch-tool-list')?.addEventListener('change', (event) => {
|
|
278
|
+
_launchTools = readToolPicker(event.target);
|
|
279
|
+
storage.setItem('as-launch-tools', JSON.stringify(_launchTools));
|
|
280
|
+
updateToolPicker(event.target, _launchTools, { inheritLabel: toolWord('default'), usesBrowser: !!_pendingLaunchParams?.usesBrowser });
|
|
281
|
+
});
|
|
291
282
|
}
|
|
292
283
|
|
|
293
284
|
// ── Preset Templates with Wizard Steps ──
|
|
@@ -890,7 +881,7 @@ function showLaunchInline(params) {
|
|
|
890
881
|
if (params.usesBrowser && (!params.context || !params.context.includes('BROWSER REQUIRED'))) {
|
|
891
882
|
params.context = BROWSER_CONTEXT;
|
|
892
883
|
}
|
|
893
|
-
// Apply template-preset launch defaults (CLI / model / effort /
|
|
884
|
+
// Apply template-preset launch defaults (CLI / model / effort / tool list)
|
|
894
885
|
if (params.profile) {
|
|
895
886
|
if (params.profile !== _launchProfile && !params.model) {
|
|
896
887
|
_launchModel = null;
|
|
@@ -906,7 +897,7 @@ function showLaunchInline(params) {
|
|
|
906
897
|
storage.setItem('as-launch-model', _launchModel || '');
|
|
907
898
|
}
|
|
908
899
|
if (params.effort) { _launchEffort = params.effort; storage.setItem('as-launch-effort', _launchEffort); }
|
|
909
|
-
if (params.
|
|
900
|
+
if (params.tools !== undefined) { _launchTools = params.tools; storage.setItem('as-launch-tools', JSON.stringify(_launchTools)); }
|
|
910
901
|
if (params.codexAccountId) { _launchAccount = params.codexAccountId; storage.setItem('as-launch-account', _launchAccount); }
|
|
911
902
|
_pendingLaunchParams = params;
|
|
912
903
|
_launchPanelActive = true;
|
|
@@ -981,11 +972,9 @@ function showLaunchInline(params) {
|
|
|
981
972
|
${renderEffortChips(profile, _launchEffort)}
|
|
982
973
|
</div>
|
|
983
974
|
</div>
|
|
984
|
-
<div class="as-launch-section" id="as-launch-
|
|
985
|
-
<label class="as-launch-label"
|
|
986
|
-
<div
|
|
987
|
-
<span class="as-launch-mcp-loading">Loading profiles...</span>
|
|
988
|
-
</div>
|
|
975
|
+
<div class="as-launch-section" id="as-launch-tools-section">
|
|
976
|
+
<label class="as-launch-label">${toolWord('label')}</label>
|
|
977
|
+
<div id="as-launch-tools">${strictToolHost(profile) ? '' : toolWord('focus')}</div>
|
|
989
978
|
</div>
|
|
990
979
|
<div class="as-launch-section" id="as-launch-account-section" style="${profile === 'codex' ? '' : 'display:none'}">
|
|
991
980
|
<label class="as-launch-label">OpenAI Account</label>
|
|
@@ -1052,16 +1041,7 @@ function showLaunchInline(params) {
|
|
|
1052
1041
|
|
|
1053
1042
|
wireLaunchInline(contentEl);
|
|
1054
1043
|
|
|
1055
|
-
|
|
1056
|
-
if (profile !== 'claude-code') {
|
|
1057
|
-
fetchMcpProfiles().then(presets => {
|
|
1058
|
-
const container = contentEl.querySelector('#as-launch-mcp-profiles');
|
|
1059
|
-
if (container && presets && Object.keys(presets).length) {
|
|
1060
|
-
container.innerHTML = renderMcpProfileChips(presets, _launchMcpProfile);
|
|
1061
|
-
wireMcpProfileChips(contentEl);
|
|
1062
|
-
}
|
|
1063
|
-
});
|
|
1064
|
-
}
|
|
1044
|
+
void renderLaunchToolPicker(contentEl, profile);
|
|
1065
1045
|
|
|
1066
1046
|
// Async-load dynamic models and re-render chips when ready.
|
|
1067
1047
|
// Retries a couple of times in case OpenCode is still booting.
|
|
@@ -1187,9 +1167,9 @@ function renderModelChips(profileId, selectedModel) {
|
|
|
1187
1167
|
return renderLaunchSelect('model', models, selectedModel, { groupByDesc: profileId === 'opencode' });
|
|
1188
1168
|
}
|
|
1189
1169
|
return models.map(m => `
|
|
1190
|
-
<button class="as-launch-model${modelMatchesSelector(m, selectedModel) ? ' active' : ''}${m.tier ? ` as-launch-model--${m.tier}` : ''}" data-model="${modelSelectorValue(m)}">
|
|
1191
|
-
<span class="as-launch-model-name">${m.label}</span>
|
|
1192
|
-
<span class="as-launch-model-desc">${m.desc}</span>
|
|
1170
|
+
<button class="as-launch-model${modelMatchesSelector(m, selectedModel) ? ' active' : ''}${m.tier ? ` as-launch-model--${m.tier}` : ''}" data-model="${_escLaunch(modelSelectorValue(m))}">
|
|
1171
|
+
<span class="as-launch-model-name">${_escLaunch(m.label)}</span>
|
|
1172
|
+
<span class="as-launch-model-desc">${_escLaunch(m.desc)}</span>
|
|
1193
1173
|
</button>
|
|
1194
1174
|
`).join('');
|
|
1195
1175
|
}
|
|
@@ -1299,7 +1279,10 @@ function wireLaunchSelect(root, type, onChange) {
|
|
|
1299
1279
|
});
|
|
1300
1280
|
});
|
|
1301
1281
|
|
|
1302
|
-
|
|
1282
|
+
// Outside click closes it; removed with the panel (closePanel) like the studio's other document listeners.
|
|
1283
|
+
const onOutside = e => { if (!sel.contains(e.target)) close(); };
|
|
1284
|
+
document.addEventListener('click', onOutside);
|
|
1285
|
+
_docListeners.push(['click', onOutside]);
|
|
1303
1286
|
});
|
|
1304
1287
|
}
|
|
1305
1288
|
|
|
@@ -1340,6 +1323,7 @@ function wireLaunchInline(container) {
|
|
|
1340
1323
|
const root = container.querySelector('.as-launch-inline');
|
|
1341
1324
|
if (!root) return;
|
|
1342
1325
|
applyAgentModeGating(root, _launchProfile);
|
|
1326
|
+
root.querySelector('#as-agent-synabun')?.addEventListener('change', () => { void renderLaunchToolPicker(root, _launchProfile); });
|
|
1343
1327
|
|
|
1344
1328
|
// Mode toggle (Loop vs Agent)
|
|
1345
1329
|
root.querySelectorAll('.as-launch-mode').forEach(btn => {
|
|
@@ -1353,6 +1337,7 @@ function wireLaunchInline(container) {
|
|
|
1353
1337
|
if (agentFields) agentFields.style.display = _launchMode === 'agent' ? '' : 'none';
|
|
1354
1338
|
const confirmBtn = root.querySelector('#as-launch-confirm-btn');
|
|
1355
1339
|
if (confirmBtn) confirmBtn.textContent = _launchMode === 'agent' ? 'Launch Agent' : 'Launch';
|
|
1340
|
+
void renderLaunchToolPicker(root, _launchProfile);
|
|
1356
1341
|
});
|
|
1357
1342
|
});
|
|
1358
1343
|
|
|
@@ -1412,20 +1397,7 @@ function wireLaunchInline(container) {
|
|
|
1412
1397
|
}
|
|
1413
1398
|
}
|
|
1414
1399
|
applyAgentModeGating(root, profileId);
|
|
1415
|
-
|
|
1416
|
-
const mcpSection = root.querySelector('#as-launch-mcp-section');
|
|
1417
|
-
if (mcpSection) {
|
|
1418
|
-
mcpSection.style.display = profileId !== 'claude-code' ? '' : 'none';
|
|
1419
|
-
if (profileId !== 'claude-code') {
|
|
1420
|
-
fetchMcpProfiles().then(presets => {
|
|
1421
|
-
const container = root.querySelector('#as-launch-mcp-profiles');
|
|
1422
|
-
if (container && presets && Object.keys(presets).length) {
|
|
1423
|
-
container.innerHTML = renderMcpProfileChips(presets, _launchMcpProfile);
|
|
1424
|
-
wireMcpProfileChips(root);
|
|
1425
|
-
}
|
|
1426
|
-
});
|
|
1427
|
-
}
|
|
1428
|
-
}
|
|
1400
|
+
void renderLaunchToolPicker(root, profileId);
|
|
1429
1401
|
// Show/hide OpenAI account section (Codex only — selects which ChatGPT login the loop runs under)
|
|
1430
1402
|
const accountSection = root.querySelector('#as-launch-account-section');
|
|
1431
1403
|
if (accountSection) {
|
|
@@ -1489,21 +1461,6 @@ function wireEffortChips(container) {
|
|
|
1489
1461
|
});
|
|
1490
1462
|
}
|
|
1491
1463
|
|
|
1492
|
-
function wireMcpProfileChips(container) {
|
|
1493
|
-
container.querySelectorAll('.as-launch-mcp-profile').forEach(btn => {
|
|
1494
|
-
btn.addEventListener('click', () => {
|
|
1495
|
-
container.querySelectorAll('.as-launch-mcp-profile').forEach(b => b.classList.remove('active'));
|
|
1496
|
-
btn.classList.add('active');
|
|
1497
|
-
_launchMcpProfile = btn.dataset.mcpProfile;
|
|
1498
|
-
storage.setItem('as-launch-mcp-profile', _launchMcpProfile);
|
|
1499
|
-
});
|
|
1500
|
-
});
|
|
1501
|
-
wireLaunchSelect(container, 'mcp', (value) => {
|
|
1502
|
-
_launchMcpProfile = value;
|
|
1503
|
-
storage.setItem('as-launch-mcp-profile', _launchMcpProfile);
|
|
1504
|
-
});
|
|
1505
|
-
}
|
|
1506
|
-
|
|
1507
1464
|
function closeLaunchInline() {
|
|
1508
1465
|
_pendingLaunchParams = null;
|
|
1509
1466
|
_launchPanelActive = false;
|
|
@@ -1527,7 +1484,7 @@ async function confirmLaunch() {
|
|
|
1527
1484
|
return;
|
|
1528
1485
|
}
|
|
1529
1486
|
const effort = normalizeEffortForProfile(_launchProfile, _launchEffort) || undefined;
|
|
1530
|
-
const
|
|
1487
|
+
const tools = strictToolHost(_launchProfile) ? _launchTools : undefined;
|
|
1531
1488
|
const codexAccountId = _launchProfile === 'codex' ? (_launchAccount || 'default') : undefined;
|
|
1532
1489
|
const params = {
|
|
1533
1490
|
..._pendingLaunchParams,
|
|
@@ -1535,7 +1492,7 @@ async function confirmLaunch() {
|
|
|
1535
1492
|
model: _launchModel,
|
|
1536
1493
|
contextMode: _launchContextMode,
|
|
1537
1494
|
effort,
|
|
1538
|
-
|
|
1495
|
+
tools,
|
|
1539
1496
|
codexAccountId,
|
|
1540
1497
|
sidepanelWindowId: getNativeLoopRouterWindowId(),
|
|
1541
1498
|
sidepanelClaimToken: getNativeLoopRouterClaimToken(),
|
|
@@ -1564,6 +1521,7 @@ async function confirmLaunch() {
|
|
|
1564
1521
|
cwd: params.cwd || undefined,
|
|
1565
1522
|
maxTurns: params.usesBrowser ? 100 : 75,
|
|
1566
1523
|
withSynabun,
|
|
1524
|
+
tools: tools ?? (withSynabun ? getCachedToolCatalog()?.defaultTools ?? ['mcp:*'] : []),
|
|
1567
1525
|
browserProfile: (withSynabun && params.usesBrowser) ? true : undefined,
|
|
1568
1526
|
mode: agentSubmode,
|
|
1569
1527
|
iterations: agentSubmode === 'loop' ? agentIterations : 1,
|
|
@@ -1721,6 +1679,8 @@ function buildTemplateCommand(template) {
|
|
|
1721
1679
|
// ═══════════════════════════════════════════
|
|
1722
1680
|
|
|
1723
1681
|
export function initAutomationStudio() {
|
|
1682
|
+
// Launch: the studio's lists are read once the page has painted (launch-prefetch.js), so the first open paints at once.
|
|
1683
|
+
registerLaunchPrefetch('automation-studio', prefetchAutomationStudio, { order: 72 });
|
|
1724
1684
|
on('automations:open', (opts) => openPanel(opts || {}));
|
|
1725
1685
|
on('automations:open-wizard', () => { openPanel(); });
|
|
1726
1686
|
on('automations:import', () => { openPanel().then(() => triggerImport()); });
|
|
@@ -1749,25 +1709,71 @@ async function openPanel(opts = {}) {
|
|
|
1749
1709
|
document.body.appendChild(_backdrop);
|
|
1750
1710
|
|
|
1751
1711
|
_panel = document.createElement('div');
|
|
1712
|
+
_dropdownAbort?.abort();
|
|
1713
|
+
_dropdownAbort = new AbortController();
|
|
1714
|
+
wireDropdowns(_panel, { signal: _dropdownAbort.signal });
|
|
1715
|
+
_panel.addEventListener('change', event => {
|
|
1716
|
+
if (event.target.id === 'as-qt-tools') {
|
|
1717
|
+
_launchTools = readToolPicker(event.target);
|
|
1718
|
+
storage.setItem('as-launch-tools', JSON.stringify(_launchTools));
|
|
1719
|
+
updateToolPicker(event.target, _launchTools, { inheritLabel: toolWord('templateDefault'), usesBrowser: !!$('as-qt-browser')?.checked });
|
|
1720
|
+
}
|
|
1721
|
+
if (['as-qt-browser', 'as-qt-template', 'as-f-browser'].includes(event.target.id)) queueMicrotask(() => {
|
|
1722
|
+
const detail = event.target.id === 'as-f-browser';
|
|
1723
|
+
const input = $(detail ? 'as-f-mcp' : 'as-qt-tools');
|
|
1724
|
+
updateToolPicker(input, readToolPicker(input, { requested: true }), { inheritLabel: toolWord(detail ? 'default' : 'templateDefault'), usesBrowser: !!$(detail ? 'as-f-browser' : 'as-qt-browser')?.checked });
|
|
1725
|
+
});
|
|
1726
|
+
}, { signal: _dropdownAbort.signal });
|
|
1727
|
+
void fetchToolCatalog();
|
|
1752
1728
|
_panel.className = 'automation-studio-panel glass resizable';
|
|
1753
1729
|
_panel.id = 'automation-studio-panel';
|
|
1754
1730
|
_panel.innerHTML = buildPanelHTML();
|
|
1755
1731
|
document.body.appendChild(_panel);
|
|
1756
1732
|
|
|
1757
|
-
// Always open centered at default size
|
|
1758
|
-
|
|
1759
|
-
_panel.style.
|
|
1733
|
+
// Always open centered at default size, in the app frame
|
|
1734
|
+
const at = centeredInFrame(900, 520);
|
|
1735
|
+
_panel.style.left = at.left + 'px';
|
|
1736
|
+
_panel.style.top = at.top + 'px';
|
|
1760
1737
|
|
|
1761
1738
|
wirePanel();
|
|
1762
|
-
|
|
1739
|
+
const kept = _keptData;
|
|
1740
|
+
if (kept) {
|
|
1741
|
+
// The studio as last read paints at once; it is read again behind it and the sidebar follows in place.
|
|
1742
|
+
_templates = kept.templates; _folders = kept.folders; _activeLoop = kept.activeLoop; _agents = kept.agents;
|
|
1743
|
+
updateSidebarFooter();
|
|
1744
|
+
} else {
|
|
1745
|
+
await loadData();
|
|
1746
|
+
}
|
|
1763
1747
|
if (opts.templateId) {
|
|
1764
1748
|
const tpl = _templates.find(t => t.id === opts.templateId);
|
|
1765
1749
|
if (tpl) switchToDetail(tpl); else renderView();
|
|
1766
1750
|
} else {
|
|
1767
1751
|
renderView();
|
|
1768
1752
|
}
|
|
1769
|
-
requestAnimationFrame(() => { _backdrop
|
|
1753
|
+
requestAnimationFrame(() => { _backdrop?.classList.add('open'); _panel?.classList.add('open'); });
|
|
1770
1754
|
startPolling();
|
|
1755
|
+
if (kept) refreshDataInPlace();
|
|
1756
|
+
}
|
|
1757
|
+
|
|
1758
|
+
// The data read again behind a studio painted from the kept one: the sidebar list is redrawn when the templates
|
|
1759
|
+
// or folders changed (an open template, the wizard and the editors keep what the user is doing).
|
|
1760
|
+
async function refreshDataInPlace() {
|
|
1761
|
+
const before = JSON.stringify([_templates, _folders]);
|
|
1762
|
+
await loadData();
|
|
1763
|
+
if (!_panel) return;
|
|
1764
|
+
if (JSON.stringify([_templates, _folders]) === before) return;
|
|
1765
|
+
const list = $('as-template-list');
|
|
1766
|
+
const scroll = list ? list.scrollTop : 0;
|
|
1767
|
+
renderSidebar();
|
|
1768
|
+
const count = $('as-total-count');
|
|
1769
|
+
if (count) count.textContent = `${PRESET_TEMPLATES.length + _templates.length}`;
|
|
1770
|
+
if (list && list.isConnected) list.scrollTop = scroll;
|
|
1771
|
+
}
|
|
1772
|
+
|
|
1773
|
+
/** Launch prefetch: the studio's data read once, so the first open paints at once (nothing is drawn here). */
|
|
1774
|
+
export function prefetchAutomationStudio() {
|
|
1775
|
+
if (_keptData || _panel || (isGuest() && !hasPermission('automations'))) return Promise.resolve();
|
|
1776
|
+
return loadData().catch(() => {});
|
|
1771
1777
|
}
|
|
1772
1778
|
|
|
1773
1779
|
function closePanel() {
|
|
@@ -1777,6 +1783,7 @@ function closePanel() {
|
|
|
1777
1783
|
for (const [evt, fn] of _docListeners) document.removeEventListener(evt, fn);
|
|
1778
1784
|
_docListeners = [];
|
|
1779
1785
|
if (_backdrop) { _backdrop.remove(); _backdrop = null; }
|
|
1786
|
+
_dropdownAbort?.abort();
|
|
1780
1787
|
_panel.remove(); _panel = null;
|
|
1781
1788
|
_templates = []; _activeLoop = null;
|
|
1782
1789
|
_view = 'welcome'; _selected = null;
|
|
@@ -2140,11 +2147,12 @@ function positionFloating(el, x, y) {
|
|
|
2140
2147
|
el.style.left = `${x}px`;
|
|
2141
2148
|
el.style.top = `${y}px`;
|
|
2142
2149
|
el.style.zIndex = '300010';
|
|
2143
|
-
// Adjust after mounting to keep in
|
|
2150
|
+
// Adjust after mounting to keep in the app frame (the window for a point outside it)
|
|
2144
2151
|
requestAnimationFrame(() => {
|
|
2145
2152
|
const r = el.getBoundingClientRect();
|
|
2146
|
-
|
|
2147
|
-
if (r.
|
|
2153
|
+
const b = placementArea(x, y);
|
|
2154
|
+
if (r.right > b.right - 8) el.style.left = `${Math.max(b.left + 8, b.right - r.width - 8)}px`;
|
|
2155
|
+
if (r.bottom > b.bottom - 8) el.style.top = `${Math.max(b.top + 8, b.bottom - r.height - 8)}px`;
|
|
2148
2156
|
});
|
|
2149
2157
|
}
|
|
2150
2158
|
|
|
@@ -2326,11 +2334,17 @@ async function promptCreateFolder() {
|
|
|
2326
2334
|
// ═══════════════════════════════════════════
|
|
2327
2335
|
|
|
2328
2336
|
async function loadData() {
|
|
2329
|
-
|
|
2330
|
-
|
|
2331
|
-
|
|
2337
|
+
_launchTools = await migrateStoredTools(storage, 'as-launch-tools', 'as-launch-mcp-profile');
|
|
2338
|
+
await fetchToolCatalog();
|
|
2339
|
+
// One round trip for the three lists (they were asked one after another), then the agents.
|
|
2340
|
+
const [templates, folders, active] = await Promise.allSettled([fetchLoopTemplates(), fetchLoopFolders(), fetchActiveLoop()]);
|
|
2341
|
+
_templates = templates.status === 'fulfilled' ? templates.value : [];
|
|
2342
|
+
_folders = folders.status === 'fulfilled' ? folders.value : [];
|
|
2343
|
+
_activeLoop = active.status === 'fulfilled' ? active.value : null;
|
|
2332
2344
|
await refreshAgents();
|
|
2333
|
-
updateSidebarFooter();
|
|
2345
|
+
if (_panel) updateSidebarFooter();
|
|
2346
|
+
// Kept only when the templates answered (a failed read must not paint an empty studio next time).
|
|
2347
|
+
if (templates.status === 'fulfilled') _keptData = { templates: _templates, folders: _folders, activeLoop: _activeLoop, agents: _agents };
|
|
2334
2348
|
}
|
|
2335
2349
|
|
|
2336
2350
|
function startPolling() {
|
|
@@ -2679,7 +2693,7 @@ function buildDetailMeta(t, isPreset) {
|
|
|
2679
2693
|
const tModel = (t.model && tModelsList.some(m => modelMatchesSelector(m, t.model))) ? normalizeAutomationSelection(tProfile, t.model).model : (modelSelectorValue(tDefaultModel) || '');
|
|
2680
2694
|
const tContextMode = t.contextMode || normalizeAutomationSelection(tProfile, t.model).contextMode || 'default';
|
|
2681
2695
|
const tEffort = t.effort || 'off';
|
|
2682
|
-
const
|
|
2696
|
+
const tTools = t.tools ?? null;
|
|
2683
2697
|
return `
|
|
2684
2698
|
<div class="as-meta-section">
|
|
2685
2699
|
<div class="as-field">
|
|
@@ -2796,11 +2810,9 @@ function buildDetailMeta(t, isPreset) {
|
|
|
2796
2810
|
${getEffortLevelsForProfile(tProfile).map(e => `<option value="${esc(e.id)}"${e.id === tEffort ? ' selected' : ''}>${esc(e.label)} \u2014 ${esc(e.desc)}</option>`).join('')}
|
|
2797
2811
|
</select>
|
|
2798
2812
|
</div>
|
|
2799
|
-
<div class="as-runtime-field" id="as-f-mcp-field"
|
|
2800
|
-
<label
|
|
2801
|
-
|
|
2802
|
-
<option value="${esc(tMcp)}" selected>${esc(tMcp)} (loading\u2026)</option>
|
|
2803
|
-
</select>
|
|
2813
|
+
<div class="as-runtime-field" id="as-f-mcp-field">
|
|
2814
|
+
<label>${toolWord('label')}</label>
|
|
2815
|
+
${strictToolHost(tProfile) ? toolPickerHTML('as-f-mcp', tTools, { provider: tProfile, inheritLabel: toolWord('default'), usesBrowser: t.usesBrowser }) : toolWord('focus')}
|
|
2804
2816
|
</div>
|
|
2805
2817
|
</div>
|
|
2806
2818
|
</div>
|
|
@@ -2859,7 +2871,7 @@ function wireDetailView(isPreset) {
|
|
|
2859
2871
|
wireCategoryPicker(isPreset);
|
|
2860
2872
|
wireFolderPicker(isPreset);
|
|
2861
2873
|
|
|
2862
|
-
// Launch defaults (CLI profile / model / effort /
|
|
2874
|
+
// Launch defaults (CLI profile / model / effort / tool list)
|
|
2863
2875
|
wireLaunchDefaults(isPreset);
|
|
2864
2876
|
|
|
2865
2877
|
// Markdown toolbar
|
|
@@ -3008,7 +3020,7 @@ function wireLaunchDefaults(isPreset) {
|
|
|
3008
3020
|
const modelSel = $('as-f-model');
|
|
3009
3021
|
const contextSel = $('as-f-context');
|
|
3010
3022
|
const effortSel = $('as-f-effort');
|
|
3011
|
-
|
|
3023
|
+
let mcpSel = $('as-f-mcp');
|
|
3012
3024
|
const effortField = $('as-f-effort-field');
|
|
3013
3025
|
const mcpField = $('as-f-mcp-field');
|
|
3014
3026
|
const templateAccountId = _selected?.codexAccountId || 'default';
|
|
@@ -3016,23 +3028,14 @@ function wireLaunchDefaults(isPreset) {
|
|
|
3016
3028
|
|
|
3017
3029
|
effortSel?.addEventListener('change', () => { if (!isPreset) markDirty(); });
|
|
3018
3030
|
|
|
3019
|
-
const
|
|
3020
|
-
|
|
3021
|
-
const
|
|
3022
|
-
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
|
|
3026
|
-
|
|
3027
|
-
const sel = id === current ? ' selected' : '';
|
|
3028
|
-
return `<option value="${esc(id)}"${sel}>${esc(label)}${esc(tools)}</option>`;
|
|
3029
|
-
}).join('');
|
|
3030
|
-
mcpSel.innerHTML = opts;
|
|
3031
|
-
if (!presets[current]) {
|
|
3032
|
-
const first = Object.keys(presets)[0];
|
|
3033
|
-
if (first) mcpSel.value = first;
|
|
3034
|
-
}
|
|
3035
|
-
});
|
|
3031
|
+
const loadToolOptions = async () => {
|
|
3032
|
+
const tools = mcpSel ? readToolPicker(mcpSel) : _selected?.tools ?? null;
|
|
3033
|
+
const catalog = await fetchToolCatalog();
|
|
3034
|
+
if (!mcpField?.isConnected) return;
|
|
3035
|
+
const provider = profileSel.value;
|
|
3036
|
+
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')}`;
|
|
3037
|
+
mcpSel = $('as-f-mcp');
|
|
3038
|
+
mcpSel?.addEventListener('change', () => { if (!isPreset) markDirty(); updateToolPicker(mcpSel, readToolPicker(mcpSel), { inheritLabel: toolWord('default'), usesBrowser: !!$('as-f-browser')?.checked }); });
|
|
3036
3039
|
};
|
|
3037
3040
|
|
|
3038
3041
|
const renderModelOptions = (profileId, preferredId) => {
|
|
@@ -3082,8 +3085,7 @@ function wireLaunchDefaults(isPreset) {
|
|
|
3082
3085
|
renderEffortOptions(profileId, 'off');
|
|
3083
3086
|
if (effortField) effortField.style.display = profileSupportsEffort(profileId) ? '' : 'none';
|
|
3084
3087
|
if (mcpField) {
|
|
3085
|
-
|
|
3086
|
-
if (profileId !== 'claude-code') loadMcpOptions();
|
|
3088
|
+
void loadToolOptions();
|
|
3087
3089
|
}
|
|
3088
3090
|
if (!isPreset) markDirty();
|
|
3089
3091
|
});
|
|
@@ -3095,7 +3097,7 @@ function wireLaunchDefaults(isPreset) {
|
|
|
3095
3097
|
contextSel?.addEventListener('change', () => { if (!isPreset) markDirty(); });
|
|
3096
3098
|
mcpSel?.addEventListener('change', () => { if (!isPreset) markDirty(); });
|
|
3097
3099
|
|
|
3098
|
-
|
|
3100
|
+
void loadToolOptions();
|
|
3099
3101
|
renderEffortOptions(profileSel.value, effortSel?.value || 'off');
|
|
3100
3102
|
if (effortField) effortField.style.display = profileSupportsEffort(profileSel.value) ? '' : 'none';
|
|
3101
3103
|
refreshDynamicModelOptionsIfNeeded(profileSel.value, modelSel?.value || null);
|
|
@@ -3133,7 +3135,7 @@ async function saveCurrentTemplate() {
|
|
|
3133
3135
|
const model = $('as-f-model')?.value || null;
|
|
3134
3136
|
const contextMode = $('as-f-context')?.value || 'default';
|
|
3135
3137
|
const effort = normalizeEffortForProfile(profile || 'claude-code', $('as-f-effort')?.value || null);
|
|
3136
|
-
const
|
|
3138
|
+
const tools = strictToolHost(profile) ? ($('as-f-mcp') ? readToolPicker($('as-f-mcp')) : _selected?.tools ?? null) : null;
|
|
3137
3139
|
const folderIdRaw = $('as-f-folder')?.value;
|
|
3138
3140
|
const folderId = folderIdRaw ? folderIdRaw : null;
|
|
3139
3141
|
|
|
@@ -3146,7 +3148,7 @@ async function saveCurrentTemplate() {
|
|
|
3146
3148
|
showToast('This context window is unavailable for the selected model'); return;
|
|
3147
3149
|
}
|
|
3148
3150
|
|
|
3149
|
-
const payload = { name, icon: iconKey, category, task, context: '', description: description || task.slice(0, 120), iterations, maxMinutes, usesBrowser, profile, model, contextMode, effort,
|
|
3151
|
+
const payload = { name, icon: iconKey, category, task, context: '', description: description || task.slice(0, 120), iterations, maxMinutes, usesBrowser, profile, model, contextMode, effort, tools, folderId };
|
|
3150
3152
|
|
|
3151
3153
|
try {
|
|
3152
3154
|
if (_selected.id) { await updateLoopTemplate(_selected.id, payload); }
|
|
@@ -3253,7 +3255,7 @@ async function customizePreset(preset) {
|
|
|
3253
3255
|
model: $('as-f-model')?.value || null,
|
|
3254
3256
|
contextMode: $('as-f-context')?.value || 'default',
|
|
3255
3257
|
effort: normalizeEffortForProfile($('as-f-profile')?.value || 'claude-code', $('as-f-effort')?.value || null),
|
|
3256
|
-
|
|
3258
|
+
tools: strictToolHost($('as-f-profile')?.value) ? readToolPicker($('as-f-mcp')) : null,
|
|
3257
3259
|
};
|
|
3258
3260
|
const result = await createLoopTemplate(payload);
|
|
3259
3261
|
if (result?.id) {
|
|
@@ -3280,13 +3282,13 @@ function handleTestRun() {
|
|
|
3280
3282
|
const model = $('as-f-model')?.value || _selected.model || null;
|
|
3281
3283
|
const contextMode = $('as-f-context')?.value || _selected.contextMode || 'default';
|
|
3282
3284
|
const effort = normalizeEffortForProfile(profile || 'claude-code', $('as-f-effort')?.value || _selected.effort || null);
|
|
3283
|
-
const
|
|
3285
|
+
const tools = strictToolHost(profile) ? ($('as-f-mcp') ? readToolPicker($('as-f-mcp')) : _selected?.tools ?? null) : null;
|
|
3284
3286
|
serverLaunchLoop({
|
|
3285
3287
|
task: cmd,
|
|
3286
3288
|
context: null,
|
|
3287
3289
|
iterations: 1, maxMinutes: 10,
|
|
3288
3290
|
usesBrowser,
|
|
3289
|
-
profile, model, contextMode, effort,
|
|
3291
|
+
profile, model, contextMode, effort, tools,
|
|
3290
3292
|
});
|
|
3291
3293
|
}
|
|
3292
3294
|
|
|
@@ -3315,12 +3317,12 @@ function proceedWithLaunch() {
|
|
|
3315
3317
|
const model = $('as-f-model')?.value || _selected.model || null;
|
|
3316
3318
|
const contextMode = $('as-f-context')?.value || _selected.contextMode || 'default';
|
|
3317
3319
|
const effort = normalizeEffortForProfile(profile || 'claude-code', $('as-f-effort')?.value || _selected.effort || null);
|
|
3318
|
-
const
|
|
3320
|
+
const tools = strictToolHost(profile) ? ($('as-f-mcp') ? readToolPicker($('as-f-mcp')) : _selected?.tools ?? null) : null;
|
|
3319
3321
|
serverLaunchLoop({
|
|
3320
3322
|
task: cmd,
|
|
3321
3323
|
context: null,
|
|
3322
3324
|
iterations, maxMinutes, usesBrowser,
|
|
3323
|
-
profile, model, contextMode, effort,
|
|
3325
|
+
profile, model, contextMode, effort, tools,
|
|
3324
3326
|
});
|
|
3325
3327
|
}
|
|
3326
3328
|
|
|
@@ -3754,16 +3756,14 @@ async function refreshAgents() {
|
|
|
3754
3756
|
try {
|
|
3755
3757
|
const data = await fetchAgents();
|
|
3756
3758
|
_agents = data?.agents || [];
|
|
3757
|
-
// Update local output buffers with any text we haven't captured via WebSocket
|
|
3758
|
-
|
|
3759
|
-
|
|
3760
|
-
|
|
3761
|
-
|
|
3762
|
-
|
|
3763
|
-
|
|
3764
|
-
|
|
3765
|
-
}
|
|
3766
|
-
}
|
|
3759
|
+
// Update local output buffers with any text we haven't captured via WebSocket (together, not one by one)
|
|
3760
|
+
await Promise.all(_agents.filter(a => !_agentOutputs[a.id] && a.textLength > 0).map(async (a) => {
|
|
3761
|
+
// Fetch full details to get textOutput
|
|
3762
|
+
try {
|
|
3763
|
+
const full = await fetchAgent(a.id);
|
|
3764
|
+
if (full?.textOutput) _agentOutputs[a.id] = full.textOutput;
|
|
3765
|
+
} catch {}
|
|
3766
|
+
}));
|
|
3767
3767
|
} catch {}
|
|
3768
3768
|
}
|
|
3769
3769
|
|
|
@@ -3920,7 +3920,7 @@ function setupScheduleWebSocket() {
|
|
|
3920
3920
|
// Quick timer events
|
|
3921
3921
|
on('sync:quick-timer:set', (data) => {
|
|
3922
3922
|
if (data?.timerId && !_quickTimers.some(t => t.id === data.timerId)) {
|
|
3923
|
-
_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,
|
|
3923
|
+
_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 });
|
|
3924
3924
|
if (_view === 'schedules') renderSchedulesMain();
|
|
3925
3925
|
}
|
|
3926
3926
|
});
|
|
@@ -4379,13 +4379,13 @@ async function handlePanelClick(e) {
|
|
|
4379
4379
|
if (!automationContextAvailable(qtProfile, qtModel, qtContextMode)) { showToast('This context window is unavailable for the selected model and account'); break; }
|
|
4380
4380
|
const qtBrowser = !!$('as-qt-browser')?.checked;
|
|
4381
4381
|
const qtEffort = normalizeEffortForProfile(qtProfile, _launchEffort) || undefined;
|
|
4382
|
-
const
|
|
4382
|
+
const qtTools = strictToolHost(qtProfile) ? readToolPicker($('as-qt-tools')) : undefined;
|
|
4383
4383
|
const qtAccount = qtProfile === 'codex' ? (_launchAccount || 'default') : undefined;
|
|
4384
4384
|
try {
|
|
4385
|
-
const result = await createQuickTimer(templateId, mins, { profile: qtProfile, model: qtModel, contextMode: qtContextMode, usesBrowser: qtBrowser, effort: qtEffort,
|
|
4385
|
+
const result = await createQuickTimer(templateId, mins, { profile: qtProfile, model: qtModel, contextMode: qtContextMode, usesBrowser: qtBrowser, effort: qtEffort, tools: qtTools, codexAccountId: qtAccount });
|
|
4386
4386
|
// Guard: WebSocket sync:quick-timer:set may arrive before this HTTP response
|
|
4387
4387
|
if (!_quickTimers.some(t => t.id === result.timerId)) {
|
|
4388
|
-
_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,
|
|
4388
|
+
_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 });
|
|
4389
4389
|
}
|
|
4390
4390
|
_selectedQtMinutes = null;
|
|
4391
4391
|
_qtUsesBrowser = null;
|
|
@@ -4406,7 +4406,7 @@ async function handlePanelClick(e) {
|
|
|
4406
4406
|
if (!automationContextAvailable(qtProfile, qtModel, qtContextMode)) { showToast('This context window is unavailable for the selected model and account'); break; }
|
|
4407
4407
|
const qtBrowser = !!$('as-qt-browser')?.checked;
|
|
4408
4408
|
const qtEffort = normalizeEffortForProfile(qtProfile, _launchEffort) || undefined;
|
|
4409
|
-
const
|
|
4409
|
+
const qtTools = strictToolHost(qtProfile) ? readToolPicker($('as-qt-tools')) : undefined;
|
|
4410
4410
|
const qtAccount = qtProfile === 'codex' ? (_launchAccount || 'default') : undefined;
|
|
4411
4411
|
try {
|
|
4412
4412
|
const result = await triggerQuickTimerNow(templateId, {
|
|
@@ -4415,7 +4415,7 @@ async function handlePanelClick(e) {
|
|
|
4415
4415
|
contextMode: qtContextMode,
|
|
4416
4416
|
usesBrowser: qtBrowser,
|
|
4417
4417
|
effort: qtEffort,
|
|
4418
|
-
|
|
4418
|
+
tools: qtTools,
|
|
4419
4419
|
codexAccountId: qtAccount,
|
|
4420
4420
|
sidepanelWindowId: getNativeLoopRouterWindowId(),
|
|
4421
4421
|
sidepanelClaimToken: getNativeLoopRouterClaimToken(),
|
|
@@ -4688,7 +4688,7 @@ function renderSchedulesMain() {
|
|
|
4688
4688
|
const profileLabel = CLI_PROFILES.find(p => p.id === qt.profile)?.label || qt.profile || 'Claude Code';
|
|
4689
4689
|
const modelObj = qt.model ? getModelsForProfile(qt.profile || 'claude-code').find(m => modelMatchesSelector(m, qt.model)) : null;
|
|
4690
4690
|
const modelLabel = modelObj?.label || (qt.profile === 'opencode' ? qt.model : '');
|
|
4691
|
-
const metaParts = [profileLabel, modelLabel, qt.contextMode && qt.contextMode !== 'default' ? `context:${qt.contextMode}` : '', qt.effort ? `think:${qt.effort}` : '', qt.
|
|
4691
|
+
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);
|
|
4692
4692
|
timerCards += `
|
|
4693
4693
|
<div class="as-qt-active-card">
|
|
4694
4694
|
<div class="as-qt-active-pulse"></div>
|
|
@@ -4742,9 +4742,9 @@ function renderSchedulesMain() {
|
|
|
4742
4742
|
? (qtModels.length > LAUNCH_CHIP_MAX
|
|
4743
4743
|
? renderLaunchSelect('qt-model', qtModels, qtCurrentModel, { groupByDesc: qtProfile === 'opencode' })
|
|
4744
4744
|
: qtModels.map(m => `
|
|
4745
|
-
<button class="as-launch-model${modelMatchesSelector(m, qtCurrentModel) ? ' active' : ''}${m.tier ? ` as-launch-model--${m.tier}` : ''}" data-action="qt-model" data-model="${modelSelectorValue(m)}">
|
|
4746
|
-
<span class="as-launch-model-name">${m.label}</span>
|
|
4747
|
-
<span class="as-launch-model-desc">${m.desc}</span>
|
|
4745
|
+
<button class="as-launch-model${modelMatchesSelector(m, qtCurrentModel) ? ' active' : ''}${m.tier ? ` as-launch-model--${m.tier}` : ''}" data-action="qt-model" data-model="${_escLaunch(modelSelectorValue(m))}">
|
|
4746
|
+
<span class="as-launch-model-name">${_escLaunch(m.label)}</span>
|
|
4747
|
+
<span class="as-launch-model-desc">${_escLaunch(m.desc)}</span>
|
|
4748
4748
|
</button>
|
|
4749
4749
|
`).join(''))
|
|
4750
4750
|
: `<span class="as-launch-no-models">${esc(dynamicModelEmptyText(qtProfile))}</span>`;
|
|
@@ -4794,6 +4794,7 @@ function renderSchedulesMain() {
|
|
|
4794
4794
|
<span class="as-launch-label">Think</span>
|
|
4795
4795
|
<div class="as-launch-efforts" id="as-qt-efforts">${qtEffortChips}</div>
|
|
4796
4796
|
</div>
|
|
4797
|
+
<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>
|
|
4797
4798
|
<div class="as-qt-group" id="as-qt-account-section" style="${qtProfile === 'codex' ? '' : 'display:none'}">
|
|
4798
4799
|
<span class="as-launch-label">OpenAI Account</span>
|
|
4799
4800
|
<div class="as-launch-accounts" id="as-qt-accounts">${qtAccountChips}</div>
|
|
@@ -4942,7 +4943,7 @@ function renderScheduleEditorMain() {
|
|
|
4942
4943
|
</div>`).join('');
|
|
4943
4944
|
|
|
4944
4945
|
const templateOptions = allTemplates.map(t =>
|
|
4945
|
-
`<option value="${t.id}"${(s?.templateId === t.id) ? ' selected' : ''}>${esc(t.name)} (${t.category})</option>`
|
|
4946
|
+
`<option value="${esc(t.id)}"${(s?.templateId === t.id) ? ' selected' : ''}>${esc(t.name)} (${esc(t.category)})</option>`
|
|
4946
4947
|
).join('');
|
|
4947
4948
|
|
|
4948
4949
|
// Reorder: Mon(1)–Sat(6) then Sun(0) so 2-column grid pairs weekdays nicely
|
|
@@ -5103,3 +5104,5 @@ function triggerImport() {
|
|
|
5103
5104
|
document.body.appendChild(input);
|
|
5104
5105
|
input.click();
|
|
5105
5106
|
}
|
|
5107
|
+
|
|
5108
|
+
configureToolPickerTranslation(t);
|