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
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool lists: what a run names out of the catalog (docs/design/mcp-tool-lists/PLAN.md §3.2-3.4).
|
|
3
|
+
*
|
|
4
|
+
* A list is an array of group ids, `all` and `mcp:` items. parseToolList reads one, or converts a name an older
|
|
5
|
+
* SynaBun stored (a preset, a comma list); resolveToolList applies the defaults and the groups a run gets by itself.
|
|
6
|
+
* Both refuse what the catalog does not have, with suggestions. Pure: the Neural Interface (dispatch, launches) and
|
|
7
|
+
* the MCP child (its runtime file, its environment, a header) call the same code.
|
|
8
|
+
*/
|
|
9
|
+
import { type ToolListEffect } from './tool-catalog.js';
|
|
10
|
+
export type ToolListProblemReason = 'unknown' | 'gated' | 'too-long' | 'too-many' | 'not-a-string' | 'unknown-server' | 'non-selectable' | 'absent-for-provider' | 'blocked' | 'unavailable';
|
|
11
|
+
export interface ToolListProblem {
|
|
12
|
+
item: string;
|
|
13
|
+
reason: ToolListProblemReason;
|
|
14
|
+
/** Ids to name instead (group ids, `all`, `mcp:*`); empty when nothing fits. */
|
|
15
|
+
suggestions: string[];
|
|
16
|
+
/** One sentence for the person or agent that wrote the item. */
|
|
17
|
+
hint: string | null;
|
|
18
|
+
}
|
|
19
|
+
export type ToolListErrorCode = 'TOOLS_INVALID' | 'TOOLS_TOO_MANY';
|
|
20
|
+
export interface ToolListFailure {
|
|
21
|
+
ok: false;
|
|
22
|
+
code: ToolListErrorCode;
|
|
23
|
+
problems: ToolListProblem[];
|
|
24
|
+
message: string;
|
|
25
|
+
}
|
|
26
|
+
export interface ParsedToolList {
|
|
27
|
+
ok: true;
|
|
28
|
+
/** Normalized items, each once, in the order given. */
|
|
29
|
+
items: string[];
|
|
30
|
+
/** The stored preset name this was converted from, or null. */
|
|
31
|
+
preset: string | null;
|
|
32
|
+
/** The platform that preset implied (`twitter`, `facebook`), or null. */
|
|
33
|
+
platform: string | null;
|
|
34
|
+
}
|
|
35
|
+
export type ToolListParse = ParsedToolList | ToolListFailure;
|
|
36
|
+
/** Registry presets by name (`profiles.<name>.groups` of data/mcp-registry.json): read only to convert a stored name. */
|
|
37
|
+
export type CustomPresets = Readonly<Record<string, {
|
|
38
|
+
groups?: unknown;
|
|
39
|
+
} | readonly unknown[] | null | undefined>>;
|
|
40
|
+
export type ToolListSource = 'dispatch' | 'launch' | 'runtime';
|
|
41
|
+
export type AddedReason = 'browser-group' | 'uses-browser' | 'design';
|
|
42
|
+
export interface AddedGroup {
|
|
43
|
+
id: string;
|
|
44
|
+
why: AddedReason;
|
|
45
|
+
}
|
|
46
|
+
export interface ResolveToolListContext {
|
|
47
|
+
/** dispatch: the Assistant's run; launch: a stored automation; runtime: an MCP child reading its own list. */
|
|
48
|
+
source: ToolListSource;
|
|
49
|
+
usesBrowser?: boolean | null;
|
|
50
|
+
taskClass?: string | null;
|
|
51
|
+
/** claude-code, codex, opencode, gemini: decides the effect. */
|
|
52
|
+
provider?: string | null;
|
|
53
|
+
/** launch: the record's own list, already converted (§3.10). */
|
|
54
|
+
stored?: readonly string[] | null;
|
|
55
|
+
/** The owner's Default tools (launch and runtime, when nothing else names a list). */
|
|
56
|
+
defaultTools?: readonly string[] | null;
|
|
57
|
+
browserV2?: boolean;
|
|
58
|
+
}
|
|
59
|
+
export interface ToolListResolution {
|
|
60
|
+
ok: true;
|
|
61
|
+
/** The items asked for, normalized; null when the run named nothing (a default applied). */
|
|
62
|
+
requested: string[] | null;
|
|
63
|
+
/** The list in its stored form: `all` or groups in catalog order, then the `mcp:` items. */
|
|
64
|
+
items: string[];
|
|
65
|
+
/** Every selectable group the run gets, in catalog order: `all` expanded, added groups included. */
|
|
66
|
+
groups: string[];
|
|
67
|
+
/** External refs; availability is checked at the provider launch boundary. */
|
|
68
|
+
servers: string[];
|
|
69
|
+
/** Groups the run gets without naming them, and why. */
|
|
70
|
+
added: AddedGroup[];
|
|
71
|
+
/** Always-on ids and tool names that were named: accepted and dropped. */
|
|
72
|
+
dropped: string[];
|
|
73
|
+
effect: ToolListEffect;
|
|
74
|
+
/** Tools the run loads (strict) or focuses on (focus), before its role and grants. */
|
|
75
|
+
count: number;
|
|
76
|
+
}
|
|
77
|
+
export type ToolListResult = ToolListResolution | ToolListFailure;
|
|
78
|
+
/** Trimmed; group ids and literals lower-cased; an `mcp:` server name keeps its case. */
|
|
79
|
+
export declare function normalizeToolItem(item: string): string;
|
|
80
|
+
/** One sentence per problem, for an API error, a tool answer or the MCP child's log. */
|
|
81
|
+
export declare function describeToolListProblems(code: ToolListErrorCode, problems: readonly ToolListProblem[]): string;
|
|
82
|
+
/**
|
|
83
|
+
* Read a list. An array (or a comma-joined string) is read as written: preset names are refused later, with
|
|
84
|
+
* suggestions. With `legacy`, a string is a stored profile value and is converted (presets, comma lists).
|
|
85
|
+
* A blank string is an empty list; a caller that means "no list" checks for blank first.
|
|
86
|
+
*/
|
|
87
|
+
export declare function parseToolList(value: unknown, { legacy, customPresets }?: {
|
|
88
|
+
legacy?: boolean;
|
|
89
|
+
customPresets?: CustomPresets | null;
|
|
90
|
+
}): ToolListParse;
|
|
91
|
+
/**
|
|
92
|
+
* Group ids an unknown item probably meant, best first (at most `limit`): an id, a label or a word of a label that
|
|
93
|
+
* equals it (`whatsapp`, `x`), one that contains it or that it contains (`googlesearch` → gsc, `discord_bot`),
|
|
94
|
+
* then one within two edits (`whatsap`). Selectable groups only.
|
|
95
|
+
*/
|
|
96
|
+
export declare function suggestToolIds(item: string, limit?: number): string[];
|
|
97
|
+
/** strict for a provider that loads its list exactly, focus for one that reaches every SynaBun tool anyway. */
|
|
98
|
+
export declare function toolListEffect(provider: string | null | undefined): ToolListEffect;
|
|
99
|
+
/**
|
|
100
|
+
* The groups a run gets (§3.3). No list means the default of its source: core for a dispatch, the record's own
|
|
101
|
+
* list or the owner's Default tools for a launch, the owner's Default tools for a runtime (else `all`). `all` is
|
|
102
|
+
* every selectable group, always-on ids are dropped, unknown and gated ids are refused. A browser group, or
|
|
103
|
+
* usesBrowser, adds `browser`; a design run adds browser (unless usesBrowser is false), styleguide and image.
|
|
104
|
+
*/
|
|
105
|
+
export declare function resolveToolList(requested: readonly string[] | string | null | undefined, context: ResolveToolListContext): ToolListResult;
|
|
106
|
+
/** A list joined for an environment variable or a header (SYNABUN_TOOLS, X-Synabun-Tools): at most 2048 bytes. */
|
|
107
|
+
export declare function serializeToolList(items: readonly string[]): string;
|
|
108
|
+
//# sourceMappingURL=tool-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-list.d.ts","sourceRoot":"","sources":["../../src/services/tool-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool lists: what a run names out of the catalog (docs/design/mcp-tool-lists/PLAN.md §3.2-3.4).
|
|
3
|
+
*
|
|
4
|
+
* A list is an array of group ids, `all` and `mcp:` items. parseToolList reads one, or converts a name an older
|
|
5
|
+
* SynaBun stored (a preset, a comma list); resolveToolList applies the defaults and the groups a run gets by itself.
|
|
6
|
+
* Both refuse what the catalog does not have, with suggestions. Pure: the Neural Interface (dispatch, launches) and
|
|
7
|
+
* the MCP child (its runtime file, its environment, a header) call the same code.
|
|
8
|
+
*/
|
|
9
|
+
import { ALWAYS_ON_TOOLS, DEFAULT_TOOLS, HOST_EFFECT, LEGACY_PRESETS, LEGACY_PRESET_PLATFORMS, RETIRED_GROUPS, RETIRED_PRESETS, SELECTABLE_GROUP_IDS, TOOL_GROUPS, TOOL_LIST_LIMITS, countTools, groupOfTool, isAlwaysOnId, isBrowserGroup, isGatedGroup, isSelectableGroup, sortGroups, toolGroup, } from './tool-catalog.js';
|
|
10
|
+
const MCP_PREFIX = /^mcp:/i;
|
|
11
|
+
/** Trimmed; group ids and literals lower-cased; an `mcp:` server name keeps its case. */
|
|
12
|
+
export function normalizeToolItem(item) {
|
|
13
|
+
const trimmed = item.trim();
|
|
14
|
+
if (MCP_PREFIX.test(trimmed))
|
|
15
|
+
return `mcp:${trimmed.slice(4).trim()}`;
|
|
16
|
+
return trimmed.toLowerCase();
|
|
17
|
+
}
|
|
18
|
+
function splitList(value) {
|
|
19
|
+
return value.split(',').map(normalizeToolItem).filter(Boolean);
|
|
20
|
+
}
|
|
21
|
+
function unique(items) {
|
|
22
|
+
return [...new Set(items)];
|
|
23
|
+
}
|
|
24
|
+
function clip(value, max = 80) {
|
|
25
|
+
return value.length > max ? `${value.slice(0, max)}…` : value;
|
|
26
|
+
}
|
|
27
|
+
function describeValue(value) {
|
|
28
|
+
if (value === null)
|
|
29
|
+
return 'null';
|
|
30
|
+
if (Array.isArray(value))
|
|
31
|
+
return 'an array';
|
|
32
|
+
return typeof value === 'object' ? 'an object' : clip(String(value));
|
|
33
|
+
}
|
|
34
|
+
function failure(code, problems) {
|
|
35
|
+
return { ok: false, code, problems, message: describeToolListProblems(code, problems) };
|
|
36
|
+
}
|
|
37
|
+
/** One sentence per problem, for an API error, a tool answer or the MCP child's log. */
|
|
38
|
+
export function describeToolListProblems(code, problems) {
|
|
39
|
+
const parts = problems.map((problem) => (problem.hint ? `${problem.item} (${problem.hint})` : problem.item));
|
|
40
|
+
if (code === 'TOOLS_TOO_MANY') {
|
|
41
|
+
return `A tool list holds at most ${TOOL_LIST_LIMITS.maxItems} items of at most ${TOOL_LIST_LIMITS.maxGroupItemLength} characters (${TOOL_LIST_LIMITS.maxServerItemLength} for an mcp: item): ${parts.join('; ')}`;
|
|
42
|
+
}
|
|
43
|
+
return `${problems.some(problem => problem.item.startsWith('mcp:')) ? 'Invalid tool selection' : 'Not SynaBun tool groups'}: ${parts.join('; ')}`;
|
|
44
|
+
}
|
|
45
|
+
/** A registry preset's groups that a list may name, or null when the registry has no preset of that name. */
|
|
46
|
+
function customPresetGroups(customPresets, name) {
|
|
47
|
+
if (!customPresets)
|
|
48
|
+
return null;
|
|
49
|
+
for (const [key, preset] of Object.entries(customPresets)) {
|
|
50
|
+
if (String(key).trim().toLowerCase() !== name)
|
|
51
|
+
continue;
|
|
52
|
+
const groups = Array.isArray(preset) ? preset : (preset && typeof preset === 'object' ? preset.groups : null);
|
|
53
|
+
if (!Array.isArray(groups))
|
|
54
|
+
return [];
|
|
55
|
+
return sortGroups(groups.filter((group) => typeof group === 'string').map((group) => group.trim().toLowerCase()).filter(isSelectableGroup));
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* A profile name an older SynaBun stored (SYNABUN_PROFILE, a runtime file's `profile`, a record's `mcpProfile`,
|
|
61
|
+
* active-profile.json): a preset becomes its groups (with the registry's own groups of that name), `full` and a
|
|
62
|
+
* retired preset become `all`, anything else is read as a comma list. In a comma list the retired groups and the
|
|
63
|
+
* gated ones are left out (the role and the grant decide those); what is left is checked like any list.
|
|
64
|
+
*/
|
|
65
|
+
function convertLegacyProfile(value, customPresets) {
|
|
66
|
+
const name = value.trim().toLowerCase();
|
|
67
|
+
const platform = LEGACY_PRESET_PLATFORMS[name] ?? null;
|
|
68
|
+
if (name === 'full' || RETIRED_PRESETS.includes(name))
|
|
69
|
+
return { ok: true, items: ['all'], preset: name, platform: null };
|
|
70
|
+
const custom = customPresetGroups(customPresets, name);
|
|
71
|
+
if (Object.prototype.hasOwnProperty.call(LEGACY_PRESETS, name)) {
|
|
72
|
+
return { ok: true, items: sortGroups([...LEGACY_PRESETS[name], ...(custom || [])]), preset: name, platform };
|
|
73
|
+
}
|
|
74
|
+
if (custom)
|
|
75
|
+
return { ok: true, items: custom, preset: name, platform: null };
|
|
76
|
+
const tokens = splitList(value);
|
|
77
|
+
const kept = tokens.filter((token) => !RETIRED_GROUPS.includes(token) && !isGatedGroup(token));
|
|
78
|
+
// A list that named only retired groups launched as every group before; it still does.
|
|
79
|
+
if (tokens.length && !kept.length && tokens.every((token) => RETIRED_GROUPS.includes(token))) {
|
|
80
|
+
return { ok: true, items: ['all'], preset: null, platform: null };
|
|
81
|
+
}
|
|
82
|
+
return { ok: true, items: unique(kept), preset: null, platform: null };
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Read a list. An array (or a comma-joined string) is read as written: preset names are refused later, with
|
|
86
|
+
* suggestions. With `legacy`, a string is a stored profile value and is converted (presets, comma lists).
|
|
87
|
+
* A blank string is an empty list; a caller that means "no list" checks for blank first.
|
|
88
|
+
*/
|
|
89
|
+
export function parseToolList(value, { legacy = false, customPresets = null } = {}) {
|
|
90
|
+
if (Array.isArray(value)) {
|
|
91
|
+
const problems = [];
|
|
92
|
+
const items = [];
|
|
93
|
+
for (const raw of value) {
|
|
94
|
+
if (typeof raw !== 'string') {
|
|
95
|
+
problems.push({ item: describeValue(raw), reason: 'not-a-string', suggestions: [], hint: 'every item of a tool list is a string' });
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
const item = normalizeToolItem(raw);
|
|
99
|
+
if (item)
|
|
100
|
+
items.push(item);
|
|
101
|
+
}
|
|
102
|
+
if (problems.length)
|
|
103
|
+
return failure('TOOLS_INVALID', problems);
|
|
104
|
+
return { ok: true, items: unique(items), preset: null, platform: null };
|
|
105
|
+
}
|
|
106
|
+
if (typeof value !== 'string') {
|
|
107
|
+
return failure('TOOLS_INVALID', [{ item: describeValue(value), reason: 'not-a-string', suggestions: [], hint: 'a tool list is an array of group ids' }]);
|
|
108
|
+
}
|
|
109
|
+
if (legacy)
|
|
110
|
+
return convertLegacyProfile(value, customPresets);
|
|
111
|
+
return { ok: true, items: unique(splitList(value)), preset: null, platform: null };
|
|
112
|
+
}
|
|
113
|
+
function levenshtein(a, b) {
|
|
114
|
+
if (a === b)
|
|
115
|
+
return 0;
|
|
116
|
+
const previous = Array.from({ length: b.length + 1 }, (_, index) => index);
|
|
117
|
+
for (let i = 1; i <= a.length; i += 1) {
|
|
118
|
+
let diagonal = previous[0];
|
|
119
|
+
previous[0] = i;
|
|
120
|
+
for (let j = 1; j <= b.length; j += 1) {
|
|
121
|
+
const above = previous[j];
|
|
122
|
+
previous[j] = Math.min(previous[j] + 1, previous[j - 1] + 1, diagonal + (a[i - 1] === b[j - 1] ? 0 : 1));
|
|
123
|
+
diagonal = above;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return previous[b.length];
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Group ids an unknown item probably meant, best first (at most `limit`): an id, a label or a word of a label that
|
|
130
|
+
* equals it (`whatsapp`, `x`), one that contains it or that it contains (`googlesearch` → gsc, `discord_bot`),
|
|
131
|
+
* then one within two edits (`whatsap`). Selectable groups only.
|
|
132
|
+
*/
|
|
133
|
+
export function suggestToolIds(item, limit = 3) {
|
|
134
|
+
const key = String(item ?? '').toLowerCase().replace(/[^a-z0-9]/g, '');
|
|
135
|
+
if (!key)
|
|
136
|
+
return [];
|
|
137
|
+
const scored = [];
|
|
138
|
+
TOOL_GROUPS.forEach((group, order) => {
|
|
139
|
+
if (group.gate)
|
|
140
|
+
return;
|
|
141
|
+
const id = group.id.replace(/_/g, '');
|
|
142
|
+
const short = group.id.replace(/^browser_/, '').replace(/_/g, '');
|
|
143
|
+
const label = group.label.toLowerCase().replace(/[^a-z0-9]/g, '');
|
|
144
|
+
const words = group.label.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean);
|
|
145
|
+
let score = 0;
|
|
146
|
+
if (key === id || key === short || key === label || words.includes(key))
|
|
147
|
+
score = 3;
|
|
148
|
+
else if (key.length >= 3 && (label.includes(key) || id.includes(key) || (short.length >= 3 && key.includes(short))))
|
|
149
|
+
score = 2;
|
|
150
|
+
else if (key.length >= 3 && Math.min(levenshtein(key, short), levenshtein(key, id), levenshtein(key, label)) <= 2)
|
|
151
|
+
score = 1;
|
|
152
|
+
if (score)
|
|
153
|
+
scored.push({ id: group.id, score, order });
|
|
154
|
+
});
|
|
155
|
+
return scored.sort((a, b) => b.score - a.score || a.order - b.order).slice(0, limit).map((entry) => entry.id);
|
|
156
|
+
}
|
|
157
|
+
/** What a retired preset name stands for now: the groups that set it apart from the default. */
|
|
158
|
+
function presetProblem(item) {
|
|
159
|
+
if (!Object.prototype.hasOwnProperty.call(LEGACY_PRESETS, item))
|
|
160
|
+
return null;
|
|
161
|
+
if (item === 'full' || RETIRED_PRESETS.includes(item)) {
|
|
162
|
+
return { item, reason: 'unknown', suggestions: ['all'], hint: `${item} was a preset; name all` };
|
|
163
|
+
}
|
|
164
|
+
const groups = LEGACY_PRESETS[item];
|
|
165
|
+
const browserComesWith = groups.some((id) => id !== 'browser' && isBrowserGroup(id));
|
|
166
|
+
const distinct = sortGroups(groups.filter((id) => !DEFAULT_TOOLS.includes(id) && !(id === 'browser' && browserComesWith)));
|
|
167
|
+
if (!distinct.length) {
|
|
168
|
+
return { item, reason: 'unknown', suggestions: [...DEFAULT_TOOLS], hint: `${item} was a preset: it is the default (${DEFAULT_TOOLS.join(', ')}), so leave tools out` };
|
|
169
|
+
}
|
|
170
|
+
return { item, reason: 'unknown', suggestions: distinct, hint: `${item} was a preset; name ${distinct.join(', ')}` };
|
|
171
|
+
}
|
|
172
|
+
function gatedProblem(item, group) {
|
|
173
|
+
if (toolGroup(group)?.gate === 'grant:computer') {
|
|
174
|
+
return { item, reason: 'gated', suggestions: [], hint: `${group} is never named in a list: pass uses_computer: true for a desktop grant` };
|
|
175
|
+
}
|
|
176
|
+
return { item, reason: 'gated', suggestions: [], hint: `${group} is the Assistant's own, never a worker's: its role decides` };
|
|
177
|
+
}
|
|
178
|
+
function unknownProblem(item) {
|
|
179
|
+
const preset = presetProblem(item);
|
|
180
|
+
if (preset)
|
|
181
|
+
return preset;
|
|
182
|
+
const owner = groupOfTool(item);
|
|
183
|
+
if (owner && isSelectableGroup(owner)) {
|
|
184
|
+
return { item, reason: 'unknown', suggestions: [owner], hint: `${item} is a tool of the ${owner} group; name ${owner}` };
|
|
185
|
+
}
|
|
186
|
+
const suggestions = suggestToolIds(item);
|
|
187
|
+
return { item, reason: 'unknown', suggestions, hint: suggestions.length ? `did you mean ${suggestions.join(' or ')}?` : null };
|
|
188
|
+
}
|
|
189
|
+
/** Every item checked against the catalog and the limits. */
|
|
190
|
+
function checkItems(items) {
|
|
191
|
+
const problems = [];
|
|
192
|
+
if (items.length > TOOL_LIST_LIMITS.maxItems) {
|
|
193
|
+
problems.push({ item: `${items.length} items`, reason: 'too-many', suggestions: [], hint: `at most ${TOOL_LIST_LIMITS.maxItems}` });
|
|
194
|
+
}
|
|
195
|
+
const serializedBytes = new TextEncoder().encode(items.join(',')).length;
|
|
196
|
+
if (serializedBytes > TOOL_LIST_LIMITS.maxSerializedBytes)
|
|
197
|
+
problems.push({ item: `${serializedBytes} bytes`, reason: 'too-long', suggestions: [], hint: `at most ${TOOL_LIST_LIMITS.maxSerializedBytes} serialized bytes` });
|
|
198
|
+
const groups = new Set();
|
|
199
|
+
const servers = [];
|
|
200
|
+
const dropped = [];
|
|
201
|
+
let all = false;
|
|
202
|
+
for (const item of items) {
|
|
203
|
+
const server = item.startsWith('mcp:');
|
|
204
|
+
const limit = server ? TOOL_LIST_LIMITS.maxServerItemLength : TOOL_LIST_LIMITS.maxGroupItemLength;
|
|
205
|
+
if (item.length > limit) {
|
|
206
|
+
problems.push({ item: clip(item), reason: 'too-long', suggestions: [], hint: `at most ${limit} characters` });
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
if (item === 'all') {
|
|
210
|
+
all = true;
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
if (isAlwaysOnId(item) || ALWAYS_ON_TOOLS.includes(item)) {
|
|
214
|
+
dropped.push(item);
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
if (isSelectableGroup(item)) {
|
|
218
|
+
groups.add(item);
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
if (isGatedGroup(item)) {
|
|
222
|
+
problems.push(gatedProblem(item, item));
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
if (item === 'mcp:*') {
|
|
226
|
+
servers.push(item);
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
if (server) {
|
|
230
|
+
if (/^mcp:[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$/.test(item) && item !== 'mcp:SynaBun')
|
|
231
|
+
servers.push(item);
|
|
232
|
+
else
|
|
233
|
+
problems.push({ item, reason: 'non-selectable', suggestions: [], hint: item === 'mcp:SynaBun'
|
|
234
|
+
? 'SynaBun is managed through tool groups, not an external server reference'
|
|
235
|
+
: 'this name cannot be selected individually: use 1-64 letters, digits, dots, underscores, colons or hyphens, starting with a letter or digit; mcp:* selects configured, permitted servers' });
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
const owner = groupOfTool(item);
|
|
239
|
+
if (owner && isGatedGroup(owner)) {
|
|
240
|
+
problems.push(gatedProblem(item, owner));
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
problems.push(unknownProblem(item));
|
|
244
|
+
}
|
|
245
|
+
if (problems.length) {
|
|
246
|
+
const tooMany = problems.some((problem) => problem.reason === 'too-many' || problem.reason === 'too-long');
|
|
247
|
+
return failure(tooMany ? 'TOOLS_TOO_MANY' : 'TOOLS_INVALID', problems);
|
|
248
|
+
}
|
|
249
|
+
const sorted = sortGroups(groups);
|
|
250
|
+
return {
|
|
251
|
+
ok: true,
|
|
252
|
+
groups: all ? [...SELECTABLE_GROUP_IDS] : sorted,
|
|
253
|
+
servers: unique(servers).sort(),
|
|
254
|
+
dropped,
|
|
255
|
+
items: all ? ['all', ...unique(servers).sort()] : [...sorted, ...unique(servers).sort()],
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
function defaultItems(context) {
|
|
259
|
+
if (context.source === 'dispatch')
|
|
260
|
+
return DEFAULT_TOOLS;
|
|
261
|
+
if (context.source === 'launch' && context.stored)
|
|
262
|
+
return context.stored;
|
|
263
|
+
return context.defaultTools ?? ['all'];
|
|
264
|
+
}
|
|
265
|
+
/** strict for a provider that loads its list exactly, focus for one that reaches every SynaBun tool anyway. */
|
|
266
|
+
export function toolListEffect(provider) {
|
|
267
|
+
return (provider && HOST_EFFECT[provider]) || 'strict';
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* The groups a run gets (§3.3). No list means the default of its source: core for a dispatch, the record's own
|
|
271
|
+
* list or the owner's Default tools for a launch, the owner's Default tools for a runtime (else `all`). `all` is
|
|
272
|
+
* every selectable group, always-on ids are dropped, unknown and gated ids are refused. A browser group, or
|
|
273
|
+
* usesBrowser, adds `browser`; a design run adds browser (unless usesBrowser is false), styleguide and image.
|
|
274
|
+
*/
|
|
275
|
+
export function resolveToolList(requested, context) {
|
|
276
|
+
let asked = null;
|
|
277
|
+
if (requested !== undefined && requested !== null) {
|
|
278
|
+
const parsed = parseToolList(requested);
|
|
279
|
+
if (!parsed.ok)
|
|
280
|
+
return parsed;
|
|
281
|
+
asked = parsed.items;
|
|
282
|
+
}
|
|
283
|
+
let base = asked;
|
|
284
|
+
if (!base) {
|
|
285
|
+
const fallback = parseToolList([...defaultItems(context)]);
|
|
286
|
+
if (!fallback.ok)
|
|
287
|
+
return fallback;
|
|
288
|
+
base = fallback.items;
|
|
289
|
+
}
|
|
290
|
+
const checked = checkItems(base);
|
|
291
|
+
if (!checked.ok)
|
|
292
|
+
return checked;
|
|
293
|
+
const groups = new Set(checked.groups);
|
|
294
|
+
const added = [];
|
|
295
|
+
const add = (id, why) => {
|
|
296
|
+
if (groups.has(id))
|
|
297
|
+
return;
|
|
298
|
+
groups.add(id);
|
|
299
|
+
added.push({ id, why });
|
|
300
|
+
};
|
|
301
|
+
if ([...groups].some((id) => id !== 'browser' && isBrowserGroup(id)))
|
|
302
|
+
add('browser', 'browser-group');
|
|
303
|
+
if (context.usesBrowser === true)
|
|
304
|
+
add('browser', 'uses-browser');
|
|
305
|
+
const design = context.taskClass === 'design';
|
|
306
|
+
if (design && context.usesBrowser !== false)
|
|
307
|
+
add('browser', 'design');
|
|
308
|
+
if (design) {
|
|
309
|
+
add('styleguide', 'design');
|
|
310
|
+
add('image', 'design');
|
|
311
|
+
}
|
|
312
|
+
const resolved = sortGroups(groups);
|
|
313
|
+
return {
|
|
314
|
+
ok: true,
|
|
315
|
+
requested: asked,
|
|
316
|
+
items: checked.items,
|
|
317
|
+
groups: resolved,
|
|
318
|
+
servers: checked.servers,
|
|
319
|
+
added,
|
|
320
|
+
dropped: checked.dropped,
|
|
321
|
+
effect: toolListEffect(context.provider),
|
|
322
|
+
count: countTools(resolved, { browserV2: context.browserV2 }),
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
/** A list joined for an environment variable or a header (SYNABUN_TOOLS, X-Synabun-Tools): at most 2048 bytes. */
|
|
326
|
+
export function serializeToolList(items) {
|
|
327
|
+
const value = unique(items.map(normalizeToolItem).filter(Boolean)).join(',');
|
|
328
|
+
const bytes = new TextEncoder().encode(value).length;
|
|
329
|
+
if (bytes > TOOL_LIST_LIMITS.maxSerializedBytes) {
|
|
330
|
+
throw new RangeError(`A tool list joined for an environment variable or a header is at most ${TOOL_LIST_LIMITS.maxSerializedBytes} bytes; this one is ${bytes}.`);
|
|
331
|
+
}
|
|
332
|
+
return value;
|
|
333
|
+
}
|
|
334
|
+
//# sourceMappingURL=tool-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-list.js","sourceRoot":"","sources":["../../src/services/tool-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The tool selection of one MCP server runtime: which SynaBun groups it advertises, and how.
|
|
3
|
+
*
|
|
4
|
+
* strict: the runtime advertises exactly its groups (OpenCode, Gemini, any other stdio client). focus: it
|
|
5
|
+
* advertises every group and its groups only steer the instructions (Claude Code's ToolSearch, Codex's deferred
|
|
6
|
+
* catalog, which Codex snapshots at the start of a turn). Gated groups follow the caller's role and grant in both
|
|
7
|
+
* modes, never a list.
|
|
8
|
+
*
|
|
9
|
+
* Each MCP server owns one ToolRuntime: the HTTP transport keeps several servers in one process, and a
|
|
10
|
+
* module-global selection once made one client's change land on another client's server.
|
|
11
|
+
*/
|
|
12
|
+
import type { RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
13
|
+
import { type CallerRole } from './identity.js';
|
|
14
|
+
import { type AddedGroup, type CustomPresets } from './tool-list.js';
|
|
15
|
+
export type ToolMode = 'strict' | 'focus';
|
|
16
|
+
export type CallerCapability = 'computer';
|
|
17
|
+
/** The list of this runtime (comma-joined group ids) and the file its tool_groups changes go to. */
|
|
18
|
+
export declare const TOOLS_ENV = "SYNABUN_TOOLS";
|
|
19
|
+
export declare const TOOLS_PATH_ENV = "SYNABUN_TOOLS_PATH";
|
|
20
|
+
/** deferred / focus: a focus host; profiled / strict: a strict one. */
|
|
21
|
+
export declare const TOOL_CATALOG_MODE_ENV = "SYNABUN_TOOL_CATALOG_MODE";
|
|
22
|
+
/** Read as aliases through the legacy conversion (an older Neural Interface, a user's own config.toml or Gemini settings); never written. */
|
|
23
|
+
export declare const LEGACY_PROFILE_ENV = "SYNABUN_PROFILE";
|
|
24
|
+
export declare const LEGACY_RUNTIME_PROFILE_PATH_ENV = "SYNABUN_RUNTIME_PROFILE_PATH";
|
|
25
|
+
/** The owner's Default tools: Settings and `synabun tools set` write it; a runtime reads it when it starts, never later. */
|
|
26
|
+
export declare const DEFAULT_TOOLS_PATH: string;
|
|
27
|
+
/** Groups only a caller with this role sees: the role decides, so no list can reveal or hide them. */
|
|
28
|
+
export declare const ROLE_GATED_GROUPS: Readonly<Record<string, CallerRole>>;
|
|
29
|
+
/** Groups a capability the caller proves unlocks: `computer` needs a desktop grant (and macOS). */
|
|
30
|
+
export declare const CAPABILITY_GATED_GROUPS: Readonly<Record<string, CallerCapability>>;
|
|
31
|
+
export declare function isRoleGatedGroup(group: string): boolean;
|
|
32
|
+
export declare function isCapabilityGatedGroup(group: string): boolean;
|
|
33
|
+
/** Where a runtime's selection came from (tool_groups get shows it). */
|
|
34
|
+
export type ToolSelectionSource = 'tools-file' | 'tools-env' | 'legacy-runtime-file' | 'claude-code' | 'legacy-profile-env' | 'default-tools' | 'legacy-default' | 'all' | 'http' | 'header' | 'channel' | 'explicit' | 'tool_groups';
|
|
35
|
+
export interface ToolSelection {
|
|
36
|
+
/** Selectable groups, catalog order. */
|
|
37
|
+
groups: string[];
|
|
38
|
+
mode: ToolMode;
|
|
39
|
+
/** The host's own mode, when a list that could not be read made this selection strict. */
|
|
40
|
+
hostMode?: ToolMode;
|
|
41
|
+
/** Why the list could not be read: the runtime then has its always-on and gated tools only. */
|
|
42
|
+
listError: string | null;
|
|
43
|
+
source: ToolSelectionSource;
|
|
44
|
+
/** Groups the runtime got without naming them (browser for a browser group). */
|
|
45
|
+
added: AddedGroup[];
|
|
46
|
+
}
|
|
47
|
+
/** The selection of a host's own list, with its host mode. */
|
|
48
|
+
export declare function selectionOf(groups: readonly string[], mode: ToolMode, source: ToolSelectionSource, added?: AddedGroup[]): ToolSelection;
|
|
49
|
+
/** What a list that could not be read leaves: memory tools only (and the gated ones), strict until tool_groups succeeds. */
|
|
50
|
+
export declare function unreadableSelection(source: ToolSelectionSource, reason: string, hostMode: ToolMode): ToolSelection;
|
|
51
|
+
export declare function isClaudeCode(env?: NodeJS.ProcessEnv): boolean;
|
|
52
|
+
/** focus for Codex (SYNABUN_TOOL_CATALOG_MODE=deferred, or a managed Codex sidepanel), strict otherwise. */
|
|
53
|
+
export declare function readHostMode(env?: NodeJS.ProcessEnv): ToolMode;
|
|
54
|
+
/** The registry's presets, read only to convert a stored profile name. */
|
|
55
|
+
export declare function readCustomPresets(): CustomPresets | null;
|
|
56
|
+
/**
|
|
57
|
+
* The selection of a list given in code or by a request (a header, the worker channel), resolved like a runtime's
|
|
58
|
+
* own: `all` expanded, a browser group's `browser` added. One that cannot be read is memory tools only, strict.
|
|
59
|
+
*/
|
|
60
|
+
export declare function selectionFromList(value: unknown, mode: ToolMode, source: ToolSelectionSource, { legacy }?: {
|
|
61
|
+
legacy?: boolean;
|
|
62
|
+
}): ToolSelection;
|
|
63
|
+
/**
|
|
64
|
+
* The selection a runtime starts with, the first of: its runtime file (SYNABUN_TOOLS_PATH), its list
|
|
65
|
+
* (SYNABUN_TOOLS), the runtime file of an older Neural Interface (SYNABUN_RUNTIME_PROFILE_PATH), Claude Code
|
|
66
|
+
* (CLAUDECODE=1: focus on every group), the old SYNABUN_PROFILE, the owner's Default tools, the old
|
|
67
|
+
* active-profile.json, every group. The runtime's own pins come before CLAUDECODE, so a strict runtime that
|
|
68
|
+
* inherited it from a parent shell keeps its list. A list that cannot be read is not skipped: the runtime starts
|
|
69
|
+
* with memory tools only and says why (fail closed, never every group).
|
|
70
|
+
*/
|
|
71
|
+
export declare function readInitialTools(env?: NodeJS.ProcessEnv): ToolSelection;
|
|
72
|
+
/**
|
|
73
|
+
* The value an older Neural Interface's /api/mcp/runtime-profile and runtime file understand for these groups: a
|
|
74
|
+
* comma list (every selectable id is one of its group names), or its always-on pseudo-group `memory` for none.
|
|
75
|
+
*/
|
|
76
|
+
export declare function legacyProfileValue(groups: readonly string[]): string;
|
|
77
|
+
/**
|
|
78
|
+
* Save this runtime's groups where a restarted child of the same runtime reads them, never the shared default.
|
|
79
|
+
* Over HTTP there is no such file: process.env is the Neural Interface's own, not a caller's.
|
|
80
|
+
*/
|
|
81
|
+
export declare function runtimeToolsWithExternalRefs(groups: readonly string[]): string[];
|
|
82
|
+
export declare function persistRuntimeTools(groups: readonly string[]): 'tools-file' | 'legacy-runtime-file' | null;
|
|
83
|
+
export declare function logCodexConfigNoticeOnce(): void;
|
|
84
|
+
export interface ToolApplyResult {
|
|
85
|
+
groups: string[];
|
|
86
|
+
/** The groups the instructions name: the selection plus the gated groups the role and grant unlock. */
|
|
87
|
+
activeGroups: string[];
|
|
88
|
+
/** Groups that became active, and groups that stopped being active. */
|
|
89
|
+
enabled: string[];
|
|
90
|
+
disabled: string[];
|
|
91
|
+
added: AddedGroup[];
|
|
92
|
+
/** Tools this server advertises now. */
|
|
93
|
+
totalTools: number;
|
|
94
|
+
changed: boolean;
|
|
95
|
+
/** Whether any tool appeared in or left the host's tool list. */
|
|
96
|
+
advertisedChanged: boolean;
|
|
97
|
+
mode: ToolMode;
|
|
98
|
+
listError: string | null;
|
|
99
|
+
}
|
|
100
|
+
export interface ToolRuntimeOptions {
|
|
101
|
+
role?: CallerRole | null;
|
|
102
|
+
capabilities?: CallerCapability[] | null;
|
|
103
|
+
platform?: string;
|
|
104
|
+
}
|
|
105
|
+
export declare class ToolRuntime {
|
|
106
|
+
private groups;
|
|
107
|
+
private mode;
|
|
108
|
+
private hostMode;
|
|
109
|
+
private listError;
|
|
110
|
+
private source;
|
|
111
|
+
private added;
|
|
112
|
+
private role;
|
|
113
|
+
private capabilities;
|
|
114
|
+
private readonly platform;
|
|
115
|
+
private activeGroups;
|
|
116
|
+
private readonly toolGroups;
|
|
117
|
+
private ungroupedTools;
|
|
118
|
+
private onToolsChanged;
|
|
119
|
+
private notificationTimer;
|
|
120
|
+
constructor(selection?: ToolSelection, options?: ToolRuntimeOptions);
|
|
121
|
+
getGroups(): string[];
|
|
122
|
+
/** The groups the instructions name: the selection plus the gated groups the role and grant unlock. */
|
|
123
|
+
getActiveGroups(): Set<string>;
|
|
124
|
+
getMode(): ToolMode;
|
|
125
|
+
/** The mode the host has once its list reads: focus for Codex and Claude Code, strict otherwise. */
|
|
126
|
+
getHostMode(): ToolMode;
|
|
127
|
+
getListError(): string | null;
|
|
128
|
+
getSource(): ToolSelectionSource;
|
|
129
|
+
getAdded(): AddedGroup[];
|
|
130
|
+
getRole(): CallerRole | null;
|
|
131
|
+
getCapabilities(): CallerCapability[];
|
|
132
|
+
getSelection(): ToolSelection;
|
|
133
|
+
/** Plain setter: callers apply() afterwards so the gated groups follow (index.ts setServerRole does both). */
|
|
134
|
+
setRole(role: CallerRole | null): void;
|
|
135
|
+
/** Plain setter, like setRole. */
|
|
136
|
+
setCapabilities(capabilities: CallerCapability[]): void;
|
|
137
|
+
setToolGroup(name: string, tools: RegisteredTool[]): void;
|
|
138
|
+
/** How many registered tools sit outside every group (the always-on tools, and any compatibility name). */
|
|
139
|
+
setUngroupedToolCount(count: number): void;
|
|
140
|
+
setOnToolsChanged(fn: (() => void | Promise<void>) | null): void;
|
|
141
|
+
private inBandRefresh;
|
|
142
|
+
setInBandRefresh(fn: () => Promise<boolean>): void;
|
|
143
|
+
hasInBandRefresh(): boolean;
|
|
144
|
+
refreshBeforeReply(): Promise<boolean>;
|
|
145
|
+
dispose(): void;
|
|
146
|
+
/**
|
|
147
|
+
* Coalesce one delayed tools/list_changed. The delay matters: OpenCode used to get the notification while the
|
|
148
|
+
* tool call that caused it was still in flight, and could abort or cache the old tool round trip.
|
|
149
|
+
*/
|
|
150
|
+
scheduleToolsChangedNotification(delayMs?: number): boolean;
|
|
151
|
+
/** The selection with the gates applied: a gated group is active iff this runtime's role or grant unlocks it. */
|
|
152
|
+
private resolveActive;
|
|
153
|
+
/** Tools this server advertises: the ones outside every group and each group's enabled tools. */
|
|
154
|
+
getAdvertisedToolCount(): number;
|
|
155
|
+
/**
|
|
156
|
+
* Apply a new selection (or re-apply the current one after a role or grant change). Tools are flipped directly:
|
|
157
|
+
* RegisteredTool.enable()/disable() would each send a notification, and the caller sends one after its answer.
|
|
158
|
+
*/
|
|
159
|
+
apply(next?: Partial<ToolSelection>): ToolApplyResult;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=tool-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-runtime.d.ts","sourceRoot":"","sources":["../../src/services/tool-runtime.ts"],"names":[],"mappings":"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"}
|