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
|
@@ -39,14 +39,15 @@ export function createCapabilities() {
|
|
|
39
39
|
/**
|
|
40
40
|
* Send `payload` only when the server lists its type; otherwise resolve the
|
|
41
41
|
* reply a failed request would have produced, without touching the socket.
|
|
42
|
+
* `options` go to `send` as they are (ocp-v2-ws.js: `turnOf`).
|
|
42
43
|
*/
|
|
43
|
-
export function gatedRequest(caps, send, payload, timeoutMs) {
|
|
44
|
+
export function gatedRequest(caps, send, payload, timeoutMs, options) {
|
|
44
45
|
if (!caps.has(payload?.type)) {
|
|
45
46
|
return Promise.resolve({
|
|
46
47
|
type: `${payload?.type}:result`, ok: false, unsupported: true, status: 501, error: UNSUPPORTED_MESSAGE,
|
|
47
48
|
});
|
|
48
49
|
}
|
|
49
|
-
return send(payload, timeoutMs);
|
|
50
|
+
return options === undefined ? send(payload, timeoutMs) : send(payload, timeoutMs, options);
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
/** True when a reply is a failure: transport error, ok:false, or HTTP >= 400. */
|
|
@@ -59,113 +59,15 @@ export function changesTabs(supports = () => false) {
|
|
|
59
59
|
return tabs;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
// ── Worktrees ───────────────────────────────────────────────────────────────
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Watch one worktree creation from request to ready.
|
|
66
|
-
*
|
|
67
|
-
* Subscribe before asking OpenCode to create the worktree (worktree.ready can
|
|
68
|
-
* beat the reply), then call `identify(name)` with the name the reply carries.
|
|
69
|
-
* Until then events are kept, not acted on: `worktree.ready` names its
|
|
70
|
-
* worktree, so only the one for `name` counts, and another window's or
|
|
71
|
-
* project's creation finishing first changes nothing.
|
|
72
|
-
*
|
|
73
|
-
* The outcome is decided by that ready event and nothing else. `worktree.failed`
|
|
74
|
-
* carries a message and no name (1.18.34: `{ message }`), so a failure cannot
|
|
75
|
-
* be told apart from the failure of another creation on the same serve
|
|
76
|
-
* (another window, another project). It therefore never ends this creation:
|
|
77
|
-
* the message is kept, the wait goes on, and a ready for `name` still wins. If
|
|
78
|
-
* no ready arrives before `timeoutMs`, the last resort, the result says so and
|
|
79
|
-
* quotes the failure that was seen, as what it is: possibly this creation's,
|
|
80
|
-
* possibly not. What this costs: a creation that really failed is reported
|
|
81
|
-
* after the timeout instead of at once.
|
|
82
|
-
*
|
|
83
|
-
* subscribe(listener) raw event subscription, returns unsubscribe
|
|
84
|
-
* returns { result, identify(name), cancel(error?) }
|
|
85
|
-
* result resolves { ok: true } or { ok: false, error, failureSeen? }
|
|
86
|
-
*/
|
|
87
|
-
export function watchWorktree(subscribe, {
|
|
88
|
-
timeoutMs = 60_000, setTimer = setTimeout, clearTimer = clearTimeout,
|
|
89
|
-
} = {}) {
|
|
90
|
-
let name = '';
|
|
91
|
-
let done = false;
|
|
92
|
-
let unsubscribe = () => {};
|
|
93
|
-
let timer = null;
|
|
94
|
-
let failure = ''; // the last unattributable worktree.failed message
|
|
95
|
-
const readyNames = new Set(); // worktree.ready seen before identify()
|
|
96
|
-
let resolveResult;
|
|
97
|
-
const result = new Promise((resolve) => { resolveResult = resolve; });
|
|
98
|
-
|
|
99
|
-
const finish = (outcome) => {
|
|
100
|
-
if (done) return;
|
|
101
|
-
done = true;
|
|
102
|
-
if (timer) clearTimer(timer);
|
|
103
|
-
try { unsubscribe(); } catch { /* already gone */ }
|
|
104
|
-
resolveResult(outcome);
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
unsubscribe = subscribe((eventType, ev) => {
|
|
108
|
-
if (done) return;
|
|
109
|
-
if (eventType === 'worktree.ready') {
|
|
110
|
-
const readyName = typeof ev?.name === 'string' ? ev.name : '';
|
|
111
|
-
if (!readyName) return;
|
|
112
|
-
if (!name) readyNames.add(readyName);
|
|
113
|
-
else if (readyName === name) finish({ ok: true });
|
|
114
|
-
} else if (eventType === 'worktree.failed') {
|
|
115
|
-
failure = ev?.message || 'OpenCode could not prepare a worktree.';
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
timer = setTimer(() => finish(worktreeTimeoutOutcome(failure)), timeoutMs);
|
|
119
|
-
|
|
120
|
-
return {
|
|
121
|
-
result,
|
|
122
|
-
/** The create reply named the worktree: act on what was seen so far. */
|
|
123
|
-
identify(worktreeName) {
|
|
124
|
-
if (done || name) return;
|
|
125
|
-
name = String(worktreeName || '');
|
|
126
|
-
if (!name) { finish({ ok: false, error: 'OpenCode did not name the new worktree.' }); return; }
|
|
127
|
-
if (readyNames.has(name)) finish({ ok: true });
|
|
128
|
-
},
|
|
129
|
-
cancel(error = 'Worktree creation was cancelled.') { finish({ ok: false, error }); },
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/** What the wait reports when no ready event for the worktree came in time. */
|
|
134
|
-
export function worktreeTimeoutOutcome(failure) {
|
|
135
|
-
if (!failure) return { ok: false, error: 'The worktree was not ready in time.' };
|
|
136
|
-
return {
|
|
137
|
-
ok: false,
|
|
138
|
-
failureSeen: failure,
|
|
139
|
-
error: `The worktree was not ready in time. OpenCode reported a worktree failure meanwhile, which may or may not be this one (the report names no worktree): ${failure}`,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Wait for the worktree called `name` (already known) to be ready.
|
|
145
|
-
* Resolves { ok: true } on its worktree.ready, { ok: false, error } on a
|
|
146
|
-
* failure or after `timeoutMs`.
|
|
147
|
-
*/
|
|
148
|
-
export function waitForWorktree(subscribe, name, options = {}) {
|
|
149
|
-
const watch = watchWorktree(subscribe, options);
|
|
150
|
-
watch.identify(name);
|
|
151
|
-
return watch.result;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
62
|
// ── New-session dialog ──────────────────────────────────────────────────────
|
|
155
63
|
|
|
156
64
|
/**
|
|
157
65
|
* What "Save" in the new-session dialog does.
|
|
158
|
-
* { project, branch, currentBranch,
|
|
159
|
-
* → { worktree, checkout, projectChanged }
|
|
160
|
-
* A session in a new worktree never touches the project's own checkout: the
|
|
161
|
-
* worktree is created from what the project has checked out now (OpenCode's
|
|
162
|
-
* worktree.create takes no base), so no branch is switched for it.
|
|
66
|
+
* { project, branch, currentBranch, cwd } → { checkout, projectChanged }
|
|
163
67
|
*/
|
|
164
|
-
export function newSessionPlan({ project = '', branch = '', currentBranch = '',
|
|
165
|
-
const
|
|
166
|
-
const switchBranch = !worktree && !!project && !!branch && !!currentBranch && branch !== currentBranch;
|
|
68
|
+
export function newSessionPlan({ project = '', branch = '', currentBranch = '', cwd = '' } = {}) {
|
|
69
|
+
const switchBranch = !!project && !!branch && !!currentBranch && branch !== currentBranch;
|
|
167
70
|
return {
|
|
168
|
-
worktree,
|
|
169
71
|
checkout: switchBranch ? { path: project, branch } : null,
|
|
170
72
|
projectChanged: !!project && project !== (cwd || ''),
|
|
171
73
|
};
|
|
@@ -20,6 +20,7 @@ import { state, emit } from '../state.js';
|
|
|
20
20
|
import { injectStyles } from './ocp-v2-styles.js';
|
|
21
21
|
import { getDefaultStore } from './ocp-v2-state.js';
|
|
22
22
|
import { wireFileLinks } from '../ui-file-links.js';
|
|
23
|
+
import { frameRect } from '../app-frame.js';
|
|
23
24
|
import { mountRenderer } from './ocp-v2-render.js';
|
|
24
25
|
import { mountCompose } from './ocp-v2-send.js';
|
|
25
26
|
import { trackContextGauge } from './ocp-v2-context-gauge.js';
|
|
@@ -117,7 +118,8 @@ export function createChildPanel({
|
|
|
117
118
|
|
|
118
119
|
// The chain of parents (replaces the session-menu dropdown — a sub-agent
|
|
119
120
|
// panel has only one session). The first crumb is the session in the main
|
|
120
|
-
// panel
|
|
121
|
+
// panel (the way back, on screen at every width); one after it is a
|
|
122
|
+
// sub-agent that has this one as its sub-agent.
|
|
121
123
|
_crumbsEl = document.createElement('div');
|
|
122
124
|
_crumbsEl.className = 'ocpv2-child-crumbs';
|
|
123
125
|
header.appendChild(_crumbsEl);
|
|
@@ -204,6 +206,7 @@ export function createChildPanel({
|
|
|
204
206
|
_contextGauge = trackContextGauge(store);
|
|
205
207
|
_compactControl = createCompactControl(store);
|
|
206
208
|
_contextMenu = mountContextMenu(actions, panel, store, {
|
|
209
|
+
bounds: frameRect, // the popover stays in the app frame
|
|
207
210
|
compact: _compactControl,
|
|
208
211
|
agent: () => _taskInfo?.subagentType || '',
|
|
209
212
|
});
|
|
@@ -361,10 +364,14 @@ export function createChildPanel({
|
|
|
361
364
|
// (The first crumb keeps the class the single parent link had.)
|
|
362
365
|
crumb.className = index ? 'ocpv2-child-crumb' : 'ocpv2-child-crumb ocpv2-child-parent-link';
|
|
363
366
|
crumb.dataset.sessionId = String(parent.sessionId || '');
|
|
364
|
-
|
|
367
|
+
// Named by what it does: in a narrow header the way back is its arrow alone.
|
|
368
|
+
const name = index ? `Open sub-agent ${title}` : `Back to ${title}`;
|
|
369
|
+
crumb.setAttribute('data-tooltip', name);
|
|
370
|
+
crumb.setAttribute('aria-label', name);
|
|
365
371
|
if (!index) {
|
|
366
372
|
const arrow = document.createElement('span');
|
|
367
373
|
arrow.className = 'ocpv2-child-parent-arrow';
|
|
374
|
+
arrow.setAttribute('aria-hidden', 'true');
|
|
368
375
|
arrow.textContent = '↳';
|
|
369
376
|
crumb.appendChild(arrow);
|
|
370
377
|
}
|
|
@@ -40,9 +40,7 @@ export function createCompactControl(store = getDefaultStore()) {
|
|
|
40
40
|
const res = await api.compact({
|
|
41
41
|
sessionId: at.sessionId,
|
|
42
42
|
cwd: s.cwd || undefined,
|
|
43
|
-
|
|
44
|
-
// OpenCode 1.18 compacts through session.summarize, which needs a model.
|
|
45
|
-
model: s.model || undefined,
|
|
43
|
+
tools: s.tools || undefined,
|
|
46
44
|
});
|
|
47
45
|
if (at.isCurrent() && (res?.error || res?.ok === false)) {
|
|
48
46
|
const msg = res?.error || res?.data?.error || 'Compact failed';
|
|
@@ -20,8 +20,6 @@ export const LOCAL_SLASH_COMMANDS = Object.freeze([
|
|
|
20
20
|
{ name: 'compact', description: 'Compact context', action: 'compact', aliases: ['summarize'] },
|
|
21
21
|
{ name: 'undo', description: 'Undo the last prompt', action: 'undo', needs: ['session:revert'] },
|
|
22
22
|
{ name: 'redo', description: 'Restore what was undone', action: 'redo', needs: ['session:unrevert'] },
|
|
23
|
-
{ name: 'share', description: 'Share this session (public link)', action: 'share', needs: ['session:share', 'session:unshare'] },
|
|
24
|
-
{ name: 'unshare', description: 'Stop sharing this session', action: 'unshare', needs: ['session:share', 'session:unshare'] },
|
|
25
23
|
{ name: 'export', description: 'Export the transcript as JSON', action: 'export' },
|
|
26
24
|
{ name: 'fork', description: 'Fork this session', action: 'fork', needs: ['session:fork'] },
|
|
27
25
|
{ name: 'models', description: 'Pick a model', action: 'models' },
|
|
@@ -49,9 +47,8 @@ const SERVER_SOURCES = new Set(['command', 'skill', 'mcp']);
|
|
|
49
47
|
* legacy { skills, userCommands } from the pre-SDK REST lists, used
|
|
50
48
|
* only when serverCommands is null
|
|
51
49
|
* supports(type) capability check
|
|
52
|
-
* sharePolicy OpenCode's `share` setting; 'disabled' removes /share and /unshare
|
|
53
50
|
*/
|
|
54
|
-
export function buildSlashCatalog({ serverCommands = null, legacy = null, supports = () => false
|
|
51
|
+
export function buildSlashCatalog({ serverCommands = null, legacy = null, supports = () => false } = {}) {
|
|
55
52
|
const out = [];
|
|
56
53
|
const seen = new Set();
|
|
57
54
|
const add = (entry) => {
|
|
@@ -62,7 +59,6 @@ export function buildSlashCatalog({ serverCommands = null, legacy = null, suppor
|
|
|
62
59
|
};
|
|
63
60
|
for (const cmd of LOCAL_SLASH_COMMANDS) {
|
|
64
61
|
if ((cmd.needs || []).some((type) => !supports(type))) continue;
|
|
65
|
-
if (sharePolicy === 'disabled' && (cmd.action === 'share' || cmd.action === 'unshare')) continue;
|
|
66
62
|
add({ name: cmd.name, description: cmd.description, aliases: cmd.aliases || [], source: 'builtin', kind: 'local', action: cmd.action });
|
|
67
63
|
}
|
|
68
64
|
const canRun = supports('command:run');
|
|
@@ -153,7 +149,7 @@ export function helpCardView({ catalog = [], supports = () => false, canAct = tr
|
|
|
153
149
|
name: 'Enter',
|
|
154
150
|
text: 'While a turn runs, Enter queues the prompt. The queue is listed above the box and sent in order when the turn ends; after a failed turn it waits for Resume.',
|
|
155
151
|
}] });
|
|
156
|
-
const mine = ['Copy', canAct && supports('session:revert') && 'Undo to here', canAct && supports('session:fork') && 'Fork from here'
|
|
152
|
+
const mine = ['Copy', canAct && supports('session:revert') && 'Undo to here', canAct && supports('session:fork') && 'Fork from here'].filter(Boolean);
|
|
157
153
|
const replies = ['Copy', canAct && supports('session:revert') && 'Retry'].filter(Boolean);
|
|
158
154
|
sections.push({ title: 'Message actions', rows: [
|
|
159
155
|
{ name: 'Your prompts', text: `Hover one: ${mine.join(', ')}.` },
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// every render reads the store again.
|
|
13
13
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
14
14
|
|
|
15
|
-
import { api, supports, onEvent
|
|
15
|
+
import { api, supports, onEvent } from './ocp-v2-ws.js';
|
|
16
16
|
import { getDefaultStore } from './ocp-v2-state.js';
|
|
17
17
|
import { replyFailed, replyError } from './ocp-v2-caps.js';
|
|
18
18
|
import { boundReader, onRebind } from './ocp-v2-binding.js';
|
|
@@ -199,6 +199,7 @@ function turnsOf(s) {
|
|
|
199
199
|
* opts.onManage() opens the MCP manager; without it there is no "Manage"
|
|
200
200
|
* opts.onOpen() the popover is about to open (the panel closes its other menus)
|
|
201
201
|
* opts.agent() the agent this panel's session runs as, when the panel knows better than the store
|
|
202
|
+
* opts.bounds() the area the popover stays in ({ left, top, right, bottom }: the app frame); the window without it
|
|
202
203
|
* Returns { element, open(), close({ focus }), isOpen(), sync(), destroy() }.
|
|
203
204
|
*/
|
|
204
205
|
export function mountContextMenu(actionsEl, panelEl, store = getDefaultStore(), opts = {}) {
|
|
@@ -244,7 +245,6 @@ export function mountContextMenu(actionsEl, panelEl, store = getDefaultStore(),
|
|
|
244
245
|
// A sub-agent's store hears the version only on a status change; the
|
|
245
246
|
// main one has it from init, and there is one OpenCode behind both.
|
|
246
247
|
serverVersion: s.serverVersion || getDefaultStore().getState().serverVersion || '',
|
|
247
|
-
sdkVersion: sdkVersion(),
|
|
248
248
|
updateAvailable: updateAvailableVersion(),
|
|
249
249
|
sessionId: s.sessionId || '',
|
|
250
250
|
folder: s.cwd || s.sessionInfo?.directory || '',
|
|
@@ -278,23 +278,23 @@ export function mountContextMenu(actionsEl, panelEl, store = getDefaultStore(),
|
|
|
278
278
|
}
|
|
279
279
|
|
|
280
280
|
// Below the cog, its right edge on the cog's; above it when there is more room
|
|
281
|
-
// there; always inside the
|
|
281
|
+
// there; always inside the app frame, scrolling inside when it is taller.
|
|
282
282
|
function place() {
|
|
283
283
|
if (!open || !pop) return;
|
|
284
284
|
const r = cog.getBoundingClientRect();
|
|
285
|
-
|
|
286
|
-
const
|
|
287
|
-
const width = Math.max(0, Math.min(WIDTH,
|
|
285
|
+
// Inside the area the panel names (the app frame), else the window
|
|
286
|
+
const f = opts.bounds?.() || { left: 0, top: 0, right: window.innerWidth, bottom: window.innerHeight, width: window.innerWidth };
|
|
287
|
+
const width = Math.max(0, Math.min(WIDTH, f.width - MARGIN * 2));
|
|
288
288
|
pop.style.width = `${width}px`;
|
|
289
|
-
const below =
|
|
290
|
-
const above = r.top - GAP - MARGIN;
|
|
289
|
+
const below = f.bottom - r.bottom - GAP - MARGIN;
|
|
290
|
+
const above = r.top - f.top - GAP - MARGIN;
|
|
291
291
|
const up = below < 220 && above > below;
|
|
292
292
|
pop.style.maxHeight = `${Math.max(120, up ? above : below)}px`;
|
|
293
293
|
const height = pop.offsetHeight;
|
|
294
|
-
const left = Math.max(MARGIN, Math.min(r.right - width,
|
|
294
|
+
const left = Math.max(f.left + MARGIN, Math.min(r.right - width, f.right - width - MARGIN));
|
|
295
295
|
const top = up
|
|
296
|
-
? Math.max(MARGIN, r.top - GAP - height)
|
|
297
|
-
: Math.max(MARGIN, Math.min(r.bottom + GAP,
|
|
296
|
+
? Math.max(f.top + MARGIN, r.top - GAP - height)
|
|
297
|
+
: Math.max(f.top + MARGIN, Math.min(r.bottom + GAP, f.bottom - MARGIN - height));
|
|
298
298
|
pop.style.left = `${Math.round(left)}px`;
|
|
299
299
|
pop.style.top = `${Math.round(top)}px`;
|
|
300
300
|
// Once it has its width: only now is a cut value known.
|
|
@@ -143,9 +143,6 @@ export function contextMenuModel(d = {}) {
|
|
|
143
143
|
const notice = updateNoticeText(d.updateAvailable, d.serverVersion);
|
|
144
144
|
const versions = [['OpenCode', d.serverVersion ? String(d.serverVersion) : NOT_REPORTED]];
|
|
145
145
|
if (notice) versions.push(['Update', `${String(d.updateAvailable).replace(/^v/i, '')} available`, notice]);
|
|
146
|
-
versions.push(d.sdkVersion
|
|
147
|
-
? ['OpenCode SDK', String(d.sdkVersion), '@opencode-ai/sdk, the client SynaBun talks to OpenCode through']
|
|
148
|
-
: ['OpenCode SDK', NOT_REPORTED, d.serverVersion ? 'Restart SynaBun to see the SDK version here.' : '']);
|
|
149
146
|
|
|
150
147
|
const sessionId = d.sessionId ? String(d.sessionId) : '';
|
|
151
148
|
const sessionRows = [
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { toolWord } from '../tool-list-picker.js';
|
|
1
2
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
3
|
// OpenCode V2 — events → store (no DOM, no socket)
|
|
3
4
|
// One function per concern so node:test can drive them with a real store:
|
|
@@ -188,12 +189,15 @@ export function applyEvent(store, eventType, ev = {}, hooks = {}) {
|
|
|
188
189
|
case 'session.diff':
|
|
189
190
|
store.setSessionDiff(ev.diff);
|
|
190
191
|
break;
|
|
191
|
-
case 'mcp.
|
|
192
|
-
store.
|
|
192
|
+
case 'synabun.mcp.status':
|
|
193
|
+
if (ev.text) store.pushError({ message: ev.text, notice: true });
|
|
193
194
|
break;
|
|
194
|
-
case 'mcp.
|
|
195
|
+
case 'mcp.tools.changed':
|
|
196
|
+
store.setTools(ev.tools ?? null);
|
|
197
|
+
break;
|
|
198
|
+
case 'mcp.tools.refresh.failed':
|
|
195
199
|
store.pushError({
|
|
196
|
-
message: ev.error ||
|
|
200
|
+
message: ev.error || toolWord('reloadFailed'),
|
|
197
201
|
raw: ev,
|
|
198
202
|
});
|
|
199
203
|
break;
|
|
@@ -28,7 +28,7 @@ import { on } from '../state.js';
|
|
|
28
28
|
import { setSidepanelVisible } from '../ui-sidepanel-windows.js';
|
|
29
29
|
import { createPanelStore } from './ocp-v2-state.js';
|
|
30
30
|
import { createChildPanel } from './ocp-v2-childpanel.js';
|
|
31
|
-
import {
|
|
31
|
+
import { inheritChildPanelTools } from './ocp-v2-tools-inheritance.js';
|
|
32
32
|
import { notify as uiNotify, NOTIF_TYPE } from '../ui-notifications.js';
|
|
33
33
|
import {
|
|
34
34
|
isAutomationSession, onAutomationSessionRegistered, shouldMaterializeChildPanel,
|
|
@@ -513,12 +513,12 @@ function parentTitleFor(reg, parentSid) {
|
|
|
513
513
|
} catch { return 'parent'; }
|
|
514
514
|
}
|
|
515
515
|
|
|
516
|
-
// The tool
|
|
516
|
+
// The tool list the user chose for a session (the project bar saves it
|
|
517
517
|
// under this key): what a sub-agent of a session that is not on screen inherits.
|
|
518
|
-
const
|
|
519
|
-
function
|
|
518
|
+
const MCP_SESSION_TOOLS_KEY = 'synabun-opencode-session-tools';
|
|
519
|
+
function savedSessionTools(sessionId) {
|
|
520
520
|
try {
|
|
521
|
-
const parsed = JSON.parse(storage.getItem(
|
|
521
|
+
const parsed = JSON.parse(storage.getItem(MCP_SESSION_TOOLS_KEY) || '{}');
|
|
522
522
|
return (parsed && typeof parsed === 'object' && parsed[sessionId]) || null;
|
|
523
523
|
} catch { return null; }
|
|
524
524
|
}
|
|
@@ -529,8 +529,8 @@ function spawnChildPanel({ childSessionId, childInfo, parentPanelId, parentSessi
|
|
|
529
529
|
store.setSession(childSessionId, childInfo || null);
|
|
530
530
|
store.setParentSession(parentSessionId, parentPanelId);
|
|
531
531
|
// The parent's profile: the primary store's only while it is bound to that
|
|
532
|
-
// parent (see
|
|
533
|
-
|
|
532
|
+
// parent (see inheritChildPanelTools).
|
|
533
|
+
inheritChildPanelTools(store, _primary?.store, childInfo, { parentSessionId, savedTools: savedSessionTools });
|
|
534
534
|
|
|
535
535
|
const wsUnsub = subscribeSession(childSessionId, store);
|
|
536
536
|
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
7
7
|
|
|
8
8
|
import { fetchProvidersFull } from './ocp-v2-providers.js';
|
|
9
|
+
import { opencodeProviders } from '../opencode-providers.js';
|
|
9
10
|
import { modelRowMeta } from './ocp-v2-status-logic.js';
|
|
10
11
|
import { openProviderSettings } from './ocp-v2-settings-link.js';
|
|
11
12
|
import { getDefaultStore } from './ocp-v2-state.js';
|
|
@@ -49,6 +50,7 @@ let _unsubscribe = null;
|
|
|
49
50
|
let _outsideHandler = null;
|
|
50
51
|
let _providersChangedHandler = null;
|
|
51
52
|
let _hiddenModelsChangedHandler = null;
|
|
53
|
+
let _providersCacheStop = null;
|
|
52
54
|
|
|
53
55
|
let _providers = []; // [{ id, name, models: [...] }]
|
|
54
56
|
let _connected = new Set();
|
|
@@ -88,7 +90,15 @@ export function mountModelPicker(rootEl, store = getDefaultStore()) {
|
|
|
88
90
|
_dd.addEventListener('click', async (event) => {
|
|
89
91
|
if (event.target.closest('.ocpv2-dd-menu')) return;
|
|
90
92
|
if (_dd.classList.contains('open')) { closeMenu(); return; }
|
|
91
|
-
|
|
93
|
+
// The kept list opens the menu at once; only a list never read shows "Loading…" until it arrives.
|
|
94
|
+
if (!_loaded) adoptKeptProviders();
|
|
95
|
+
if (!_loaded) {
|
|
96
|
+
paintMenu('');
|
|
97
|
+
openMenu();
|
|
98
|
+
try { await ensureLoaded(); } catch {}
|
|
99
|
+
repaintOpenMenu();
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
92
102
|
paintMenu('');
|
|
93
103
|
openMenu();
|
|
94
104
|
});
|
|
@@ -101,11 +111,11 @@ export function mountModelPicker(rootEl, store = getDefaultStore()) {
|
|
|
101
111
|
document.addEventListener('mousedown', _outsideHandler);
|
|
102
112
|
|
|
103
113
|
_providersChangedHandler = () => { refreshProviders(); };
|
|
104
|
-
_hiddenModelsChangedHandler = () => {
|
|
105
|
-
if (_dd?.classList.contains('open')) paintMenu(_searchInput?.value || '');
|
|
106
|
-
};
|
|
114
|
+
_hiddenModelsChangedHandler = () => { repaintOpenMenu(); };
|
|
107
115
|
document.addEventListener('ocp-providers-changed', _providersChangedHandler);
|
|
108
116
|
document.addEventListener('ocp-hidden-models-changed', _hiddenModelsChangedHandler);
|
|
117
|
+
// A background read of the kept list brought another one: the open menu follows in place.
|
|
118
|
+
_providersCacheStop = opencodeProviders.subscribe(() => { refreshProviders(); });
|
|
109
119
|
|
|
110
120
|
_unsubscribe = subscribe((event) => {
|
|
111
121
|
if (event?.type === 'config:model') applyLabelFromState();
|
|
@@ -120,6 +130,8 @@ export function unmountModelPicker() {
|
|
|
120
130
|
if (_outsideHandler) document.removeEventListener('mousedown', _outsideHandler);
|
|
121
131
|
if (_providersChangedHandler) document.removeEventListener('ocp-providers-changed', _providersChangedHandler);
|
|
122
132
|
if (_hiddenModelsChangedHandler) document.removeEventListener('ocp-hidden-models-changed', _hiddenModelsChangedHandler);
|
|
133
|
+
try { _providersCacheStop?.(); } catch {}
|
|
134
|
+
_providersCacheStop = null;
|
|
123
135
|
_outsideHandler = null;
|
|
124
136
|
_providersChangedHandler = null;
|
|
125
137
|
_hiddenModelsChangedHandler = null;
|
|
@@ -134,6 +146,26 @@ export function unmountModelPicker() {
|
|
|
134
146
|
|
|
135
147
|
// ── Loading providers ──────────────────────────────────────────────────────
|
|
136
148
|
|
|
149
|
+
function applyProviders(res) {
|
|
150
|
+
if (res?.ok === false) throw new Error(res.error || 'provider metadata unavailable');
|
|
151
|
+
const data = res?.data || {};
|
|
152
|
+
_providers = data.all || data.providers || (Array.isArray(data) ? data : []);
|
|
153
|
+
_connected = new Set(data.connected || []);
|
|
154
|
+
// If the server didn't tell us which providers are "connected", assume all
|
|
155
|
+
// returned providers are connected so the menu isn't empty.
|
|
156
|
+
if (!_connected.size && _providers.length) {
|
|
157
|
+
_connected = new Set(_providers.map((p) => p.id).filter(Boolean));
|
|
158
|
+
}
|
|
159
|
+
_loaded = true;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// The list the page already holds (data cache, read at launch or by another module): no request.
|
|
163
|
+
function adoptKeptProviders() {
|
|
164
|
+
const kept = opencodeProviders.peek('');
|
|
165
|
+
if (!kept || kept.ok === false) return;
|
|
166
|
+
try { applyProviders(kept); } catch { /* not a list: read it */ }
|
|
167
|
+
}
|
|
168
|
+
|
|
137
169
|
async function ensureLoaded() {
|
|
138
170
|
if (_loaded) return;
|
|
139
171
|
if (_loadInflight) return _loadInflight;
|
|
@@ -142,16 +174,7 @@ async function ensureLoaded() {
|
|
|
142
174
|
try {
|
|
143
175
|
const res = await fetchProvidersFull();
|
|
144
176
|
if (generation !== _loadGeneration) return;
|
|
145
|
-
|
|
146
|
-
const data = res?.data || {};
|
|
147
|
-
_providers = data.all || data.providers || (Array.isArray(data) ? data : []);
|
|
148
|
-
_connected = new Set(data.connected || []);
|
|
149
|
-
// If the server didn't tell us which providers are "connected", assume all
|
|
150
|
-
// returned providers are connected so the menu isn't empty.
|
|
151
|
-
if (!_connected.size && _providers.length) {
|
|
152
|
-
_connected = new Set(_providers.map((p) => p.id).filter(Boolean));
|
|
153
|
-
}
|
|
154
|
-
_loaded = true;
|
|
177
|
+
applyProviders(res);
|
|
155
178
|
} catch (err) {
|
|
156
179
|
console.warn('[ocp-v2-modelpicker] providers fetch failed', err);
|
|
157
180
|
} finally {
|
|
@@ -165,9 +188,23 @@ function refreshProviders() {
|
|
|
165
188
|
_loaded = false;
|
|
166
189
|
_loadInflight = null;
|
|
167
190
|
_loadGeneration += 1;
|
|
168
|
-
return ensureLoaded().finally(() => {
|
|
169
|
-
|
|
170
|
-
|
|
191
|
+
return ensureLoaded().finally(() => { repaintOpenMenu(); });
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// The open menu drawn again from the current list: the search text, its caret and the scroll position stay,
|
|
195
|
+
// and focus is put back only where it was.
|
|
196
|
+
function repaintOpenMenu() {
|
|
197
|
+
if (!_dd?.classList.contains('open') || !_menu) return;
|
|
198
|
+
const input = _searchInput;
|
|
199
|
+
const typing = !!input && document.activeElement === input;
|
|
200
|
+
const caret = typing ? [input.selectionStart, input.selectionEnd] : null;
|
|
201
|
+
const scrollTop = _menu.scrollTop;
|
|
202
|
+
paintMenu(input?.value || '');
|
|
203
|
+
_menu.scrollTop = scrollTop;
|
|
204
|
+
if (typing && _searchInput) {
|
|
205
|
+
try { _searchInput.focus({ preventScroll: true }); } catch { _searchInput.focus(); }
|
|
206
|
+
try { if (caret) _searchInput.setSelectionRange(caret[0], caret[1]); } catch { /* not a text field */ }
|
|
207
|
+
}
|
|
171
208
|
}
|
|
172
209
|
|
|
173
210
|
// ── Label sync ─────────────────────────────────────────────────────────────
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Running is a display hint: tool activity, replay and automation reattachment
|
|
2
|
+
// can all set it. Only a new prompt gives completion notifications a new owner.
|
|
3
|
+
export function createOutcomeNotifications() {
|
|
4
|
+
const outcomes = new Map();
|
|
5
|
+
return {
|
|
6
|
+
take(state, type) {
|
|
7
|
+
const prompt = [...(state.messageOrder || [])].reverse().find(id => state.messages?.get(id)?.role === 'user');
|
|
8
|
+
const key = `${state.sessionId || ''}:${prompt || ''}`;
|
|
9
|
+
const last = outcomes.get(key);
|
|
10
|
+
if (last === type || (last === 'error' && type === 'done')) return false;
|
|
11
|
+
outcomes.set(key, type);
|
|
12
|
+
if (outcomes.size > 200) outcomes.delete(outcomes.keys().next().value);
|
|
13
|
+
return true;
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|