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
package/mcp-server/src/index.ts
CHANGED
|
@@ -25,121 +25,135 @@ import { registerCardTools } from './tools/card.js';
|
|
|
25
25
|
import { registerTicTacToeTools } from './tools/tictactoe.js';
|
|
26
26
|
import { registerDiscordTools } from './tools/discord.js';
|
|
27
27
|
import { registerGitTools } from './tools/git.js';
|
|
28
|
-
import { registerLeonardoTools } from './tools/leonardo.js';
|
|
29
28
|
import { registerImageTools } from './tools/image.js';
|
|
30
29
|
import { registerGscTools } from './tools/gsc.js';
|
|
31
30
|
import { registerYoutubeTools } from './tools/youtube.js';
|
|
32
31
|
import { registerStyleGuideTools } from './tools/style-guide.js';
|
|
33
32
|
import { registerMoreLoginTools } from './tools/morelogin.js';
|
|
34
33
|
import { registerAgentTools } from './tools/agents.js';
|
|
34
|
+
import { registerSkillTools } from './tools/skill.js';
|
|
35
35
|
import { registerWhatsAppSendFileTool } from './tools/whatsapp-send-file.js';
|
|
36
36
|
import { registerComputerTools } from './tools/computer.js';
|
|
37
|
-
import {
|
|
37
|
+
import { toolGroupsSchema, toolGroupsDescription, handleToolGroups } from './tools/tool-groups.js';
|
|
38
38
|
import { choiceSchema, choiceDescription, handleChoice } from './tools/choice.js';
|
|
39
|
+
import { SELECTABLE_GROUP_IDS, TOOL_GROUPS } from './services/tool-catalog.js';
|
|
39
40
|
import {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
} from './services/profiles.js';
|
|
41
|
+
ToolRuntime, readInitialTools, isClaudeCode, logCodexConfigNoticeOnce, selectionFromList, selectionOf,
|
|
42
|
+
type CallerCapability, type ToolMode, type ToolSelection,
|
|
43
|
+
} from './services/tool-runtime.js';
|
|
44
44
|
import { invalidateCategoryCache, setOnExternalChange, startWatchingCategories, stopWatchingCategories, initCategoryCache } from './services/categories.js';
|
|
45
45
|
import { healCodexConfig } from './services/codex-config-heal.js';
|
|
46
46
|
import type { CallerRole } from './services/identity.js';
|
|
47
|
+
import type { RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
47
48
|
import { getEnvPath, config } from './config.js';
|
|
48
49
|
import { SERVER_VERSION } from './version.js';
|
|
49
50
|
import { readFileSync, writeFileSync, watch, existsSync, mkdirSync } from 'fs';
|
|
50
51
|
import { join } from 'path';
|
|
51
52
|
|
|
52
|
-
//
|
|
53
|
-
|
|
53
|
+
// ── Tool groups ──────────────────────────────────────────────────────
|
|
54
|
+
// Every group is registered at start and switched on or off by the server's
|
|
55
|
+
// ToolRuntime (services/tool-runtime.ts): its list decides on a strict host,
|
|
56
|
+
// only its focus on a focus host, its role and grant for the gated groups.
|
|
57
|
+
// The default-tools file is read once, at start; it is never a cross-process
|
|
58
|
+
// runtime signal. tool_groups changes only its own server.
|
|
54
59
|
|
|
55
|
-
|
|
56
|
-
// Dynamic profile switching — all tools registered at startup, toggled via enable/disable.
|
|
57
|
-
// Each MCP server runtime owns its live profile. active-profile.json is read
|
|
58
|
-
// only at startup as the default for future processes; it is never a
|
|
59
|
-
// cross-process runtime signal. The `profile` MCP tool changes only its server.
|
|
60
|
-
|
|
61
|
-
function buildServerInstructions(runtime: ProfileRuntime): string {
|
|
60
|
+
function buildServerInstructions(runtime: ToolRuntime): string {
|
|
62
61
|
const activeGroups = runtime.getActiveGroups();
|
|
63
62
|
const instructions = buildServerInstructionsText({
|
|
64
63
|
activeGroups,
|
|
65
|
-
|
|
64
|
+
mode: runtime.getMode(),
|
|
66
65
|
browserV2: isBrowserV2Enabled(),
|
|
67
66
|
// Dispatched task runs (assistant workers) get their memory obligation
|
|
68
67
|
// from the instructions; the launcher sets SYNABUN_RUN_MODE=task.
|
|
69
68
|
runMode: process.env.SYNABUN_RUN_MODE,
|
|
69
|
+
listError: runtime.getListError(),
|
|
70
70
|
});
|
|
71
|
-
|
|
72
|
-
const
|
|
73
|
-
const sig = `${profileName}|${activeGroups.size}|${instructions.length}`;
|
|
71
|
+
const groups = runtime.getGroups().join(',') || 'memory only';
|
|
72
|
+
const sig = `${runtime.getMode()}|${groups}|${activeGroups.size}|${instructions.length}`;
|
|
74
73
|
if (sig !== _lastInstructionsSig) {
|
|
75
74
|
_lastInstructionsSig = sig;
|
|
76
|
-
console.error(`[SynaBun]
|
|
75
|
+
console.error(`[SynaBun] Tools (${runtime.getMode()}): ${groups} (${activeGroups.size} groups, instructions: ${instructions.length} chars)`);
|
|
77
76
|
}
|
|
78
77
|
return instructions;
|
|
79
78
|
}
|
|
80
79
|
|
|
81
80
|
let _lastInstructionsSig: string | null = null;
|
|
82
81
|
|
|
82
|
+
/** One registrar per catalog group (services/tool-catalog.ts): registering is iterating the catalog. */
|
|
83
|
+
const GROUP_REGISTRARS: Readonly<Record<string, (server: McpServer) => RegisteredTool[]>> = Object.freeze({
|
|
84
|
+
browser: registerBrowserCoreTools,
|
|
85
|
+
browser_twitter: registerBrowserTwitterTools,
|
|
86
|
+
browser_facebook: registerBrowserFacebookTools,
|
|
87
|
+
browser_tiktok: registerBrowserTiktokTools,
|
|
88
|
+
browser_whatsapp: registerBrowserWhatsappTools,
|
|
89
|
+
browser_instagram: registerBrowserInstagramTools,
|
|
90
|
+
browser_linkedin: registerBrowserLinkedinTools,
|
|
91
|
+
browser_bluesky: registerBlueskyTools,
|
|
92
|
+
gsc: registerGscTools,
|
|
93
|
+
youtube: registerYoutubeTools,
|
|
94
|
+
discord: registerDiscordTools,
|
|
95
|
+
whiteboard: registerWhiteboardTools,
|
|
96
|
+
card: registerCardTools,
|
|
97
|
+
git: registerGitTools,
|
|
98
|
+
image: registerImageTools,
|
|
99
|
+
styleguide: registerStyleGuideTools,
|
|
100
|
+
morelogin: registerMoreLoginTools,
|
|
101
|
+
tictactoe: registerTicTacToeTools,
|
|
102
|
+
// Role-gated: only an assistant brain sees it; whatsapp_send_file rides here (and only a WhatsApp brain may use it).
|
|
103
|
+
agents: (server) => [...registerAgentTools(server), registerWhatsAppSendFileTool(server)],
|
|
104
|
+
// Role-gated like agents: the Assistant drafts skills and submits them for review; the owner installs.
|
|
105
|
+
skills: registerSkillTools,
|
|
106
|
+
// Capability-gated: a caller holding a desktop grant, macOS only.
|
|
107
|
+
computer: registerComputerTools,
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
/** The group ids this server has a registrar for (tests/tool-catalog.test.ts compares them with the catalog). */
|
|
111
|
+
export function registeredGroupIds(): string[] {
|
|
112
|
+
return Object.keys(GROUP_REGISTRARS);
|
|
113
|
+
}
|
|
114
|
+
|
|
83
115
|
// Register ALL tools on a given McpServer instance.
|
|
84
|
-
// All groups are always registered;
|
|
85
|
-
export function registerTools(server: McpServer, runtime:
|
|
116
|
+
// All groups are always registered; the runtime enables or disables them.
|
|
117
|
+
export function registerTools(server: McpServer, runtime: ToolRuntime = new ToolRuntime(readInitialTools())) {
|
|
86
118
|
attachMemoryClient(server);
|
|
87
119
|
// Core memory tools — always registered and always enabled
|
|
88
120
|
// Use build*Schema() instead of module-level constants so HTTP transport
|
|
89
121
|
// sessions always read current display-settings.json when constructed.
|
|
90
122
|
const rememberTool = server.tool('remember', rememberDescription, buildRememberSchema(), handleRemember);
|
|
91
123
|
const recallTool = server.tool('recall', recallDescription, buildRecallSchema(), handleRecall);
|
|
92
|
-
server.tool('forget', forgetDescription, forgetSchema, handleForget);
|
|
93
|
-
server.tool('restore', restoreDescription, restoreSchema, handleRestore);
|
|
124
|
+
const forgetTool = server.tool('forget', forgetDescription, forgetSchema, handleForget);
|
|
125
|
+
const restoreTool = server.tool('restore', restoreDescription, restoreSchema, handleRestore);
|
|
94
126
|
const reflectTool = server.tool('reflect', reflectDescription, buildReflectSchema(), handleReflect);
|
|
95
127
|
const memoriesTool = server.tool('memories', memoriesDescription, buildMemoriesSchema(), handleMemories);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
runtime.
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
runtime.
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
runtime.
|
|
121
|
-
runtime.setToolGroup('morelogin', registerMoreLoginTools(server));
|
|
122
|
-
// Role-gated: advertised only while the runtime's role is 'assistant'
|
|
123
|
-
// (profiles.ts ROLE_GATED_GROUPS), never by profile selection. whatsapp_send_file
|
|
124
|
-
// rides here: only an assistant brain sees it (and only a WhatsApp one may use it).
|
|
125
|
-
runtime.setToolGroup('agents', [...registerAgentTools(server), registerWhatsAppSendFileTool(server)]);
|
|
126
|
-
// Capability-gated: advertised only to callers holding a desktop grant
|
|
127
|
-
// (profiles.ts CAPABILITY_GATED_GROUPS), macOS only.
|
|
128
|
-
runtime.setToolGroup('computer', registerComputerTools(server));
|
|
129
|
-
|
|
130
|
-
// Apply initial profile (disables groups not in the active profile).
|
|
131
|
-
// The notifier is registered AFTER this call so the initial sweep doesn't
|
|
132
|
-
// emit a spurious tools/list_changed before the client has even subscribed.
|
|
133
|
-
runtime.applyProfile(runtime.getActiveProfileName());
|
|
134
|
-
|
|
135
|
-
// From now on, profile.set emits one delayed, coalesced list_changed instead
|
|
136
|
-
// of one event per tool flipped. Some MCP clients abort the initiating tool
|
|
137
|
-
// roundtrip if profile notifications arrive before its response.
|
|
138
|
-
runtime.setOnProfileChanged(() => {
|
|
128
|
+
const ungrouped = [
|
|
129
|
+
rememberTool, recallTool, forgetTool, restoreTool, reflectTool, memoriesTool,
|
|
130
|
+
server.tool('category', categoryDescription, categorySchema, handleCategory),
|
|
131
|
+
server.tool('sync', syncDescription, syncSchema, handleSync),
|
|
132
|
+
server.tool('loop', loopDescription, loopSchema, handleLoop),
|
|
133
|
+
server.tool('tool_groups', toolGroupsDescription, toolGroupsSchema, (args) => handleToolGroups(runtime, args)),
|
|
134
|
+
server.tool('choice', choiceDescription, choiceSchema, (args) => handleChoice(server, args)),
|
|
135
|
+
];
|
|
136
|
+
runtime.setUngroupedToolCount(ungrouped.length);
|
|
137
|
+
|
|
138
|
+
for (const group of TOOL_GROUPS) {
|
|
139
|
+
const register = GROUP_REGISTRARS[group.id];
|
|
140
|
+
if (!register) throw new Error(`SynaBun tool group "${group.id}" has no registrar in index.ts`);
|
|
141
|
+
runtime.setToolGroup(group.id, register(server));
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Apply the initial selection (disables what it leaves out). The notifier is
|
|
145
|
+
// registered AFTER this call so the initial sweep doesn't emit a spurious
|
|
146
|
+
// tools/list_changed before the client has even subscribed.
|
|
147
|
+
runtime.apply();
|
|
148
|
+
|
|
149
|
+
// From now on, a tool_groups change emits one delayed, coalesced list_changed
|
|
150
|
+
// instead of one event per tool flipped. Some MCP clients abort the
|
|
151
|
+
// initiating tool round trip if the notification arrives before its answer.
|
|
152
|
+
runtime.setOnToolsChanged(() => {
|
|
139
153
|
server.server.notification({
|
|
140
154
|
method: 'notifications/tools/list_changed',
|
|
141
155
|
}).catch((err) => {
|
|
142
|
-
console.error('[SynaBun]
|
|
156
|
+
console.error('[SynaBun] tool_groups tools/list_changed notify failed:', err);
|
|
143
157
|
});
|
|
144
158
|
});
|
|
145
159
|
const previousOnClose = server.server.onclose;
|
|
@@ -187,83 +201,36 @@ export function trackToolUsage(toolName: string) {
|
|
|
187
201
|
_usageFlushTimer = setTimeout(flushUsageCounts, 10_000);
|
|
188
202
|
}
|
|
189
203
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
// Backward-compatible singleton accessors for consumers of the package entry
|
|
193
|
-
// point. New multi-server code should retain the ProfileRuntime returned by
|
|
194
|
-
// createMcpServer instead of using these stdio-runtime wrappers.
|
|
195
|
-
export function getActiveProfile(): { profile: string; activeGroups: string[] } {
|
|
196
|
-
return mainProfileRuntime.getActiveProfile();
|
|
197
|
-
}
|
|
204
|
+
// Load usage counts on startup
|
|
205
|
+
loadUsageCounts();
|
|
198
206
|
|
|
199
|
-
export
|
|
200
|
-
|
|
207
|
+
export interface CreateMcpServerOptions {
|
|
208
|
+
/** The server's tools. Without it the server reads its runtime's own list (readInitialTools). */
|
|
209
|
+
selection?: ToolSelection;
|
|
210
|
+
/** Or a list of group ids, resolved like a runtime's own (strict unless `mode` says focus). */
|
|
211
|
+
tools?: readonly string[] | string;
|
|
212
|
+
/** The mode for `tools`, or for the list the runtime reads by itself. */
|
|
213
|
+
mode?: ToolMode;
|
|
214
|
+
role?: CallerRole | null;
|
|
215
|
+
capabilities?: CallerCapability[] | null;
|
|
216
|
+
platform?: string;
|
|
201
217
|
}
|
|
202
218
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
const registeredGroups = Array.from(activeGroups);
|
|
209
|
-
|
|
210
|
-
// Determine which groups have actually been used
|
|
211
|
-
const groupToolPrefixes: Record<string, string[]> = {
|
|
212
|
-
browser: ['browser_batch', 'browser_navigate', 'browser_go_', 'browser_reload', 'browser_click', 'browser_fill', 'browser_type', 'browser_hover', 'browser_select', 'browser_press', 'browser_scroll', 'browser_upload', 'browser_snapshot', 'browser_content', 'browser_screenshot', 'browser_console', 'browser_evaluate', 'browser_wait', 'browser_session'],
|
|
213
|
-
browser_twitter: ['browser_extract_tweets', 'browser_x_compose_state'],
|
|
214
|
-
browser_facebook: ['browser_extract_fb_', 'browser_fb_', 'fb_groups'],
|
|
215
|
-
browser_tiktok: ['browser_extract_tiktok_'],
|
|
216
|
-
browser_whatsapp: ['browser_extract_wa_'],
|
|
217
|
-
browser_instagram: ['browser_extract_ig_'],
|
|
218
|
-
browser_linkedin: ['browser_extract_li_'],
|
|
219
|
-
browser_bluesky: ['bluesky_'],
|
|
220
|
-
whiteboard: ['whiteboard_'],
|
|
221
|
-
card: ['card_'],
|
|
222
|
-
tictactoe: ['tictactoe'],
|
|
223
|
-
discord: ['discord_'],
|
|
224
|
-
git: ['git'],
|
|
225
|
-
leonardo: ['leonardo_'],
|
|
226
|
-
image: ['image_staged'],
|
|
227
|
-
gsc: ['gsc_'],
|
|
228
|
-
styleguide: ['style_guide'],
|
|
229
|
-
agents: ['agent_', 'whatsapp_send_file'],
|
|
230
|
-
computer: ['computer'],
|
|
231
|
-
};
|
|
232
|
-
const usedGroups = new Set<string>();
|
|
233
|
-
for (const tool of Object.keys(_usageCounts)) {
|
|
234
|
-
for (const [group, prefixes] of Object.entries(groupToolPrefixes)) {
|
|
235
|
-
if (prefixes.some(p => tool.startsWith(p))) usedGroups.add(group);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
let recommendation = '';
|
|
240
|
-
if (profile === 'full' && totalCalls > 20) {
|
|
241
|
-
const unusedGroups = registeredGroups.filter(g => !usedGroups.has(g));
|
|
242
|
-
if (unusedGroups.length > 0) {
|
|
243
|
-
const neededGroups = registeredGroups.filter(g => usedGroups.has(g));
|
|
244
|
-
if (neededGroups.length <= 2) {
|
|
245
|
-
recommendation = `You're using ${usedTools} tools — consider switching to "core" profile (saves ~${74 - 11} tool schemas).`;
|
|
246
|
-
} else {
|
|
247
|
-
recommendation = `Unused groups: ${unusedGroups.join(', ')}. Consider a custom profile: "${neededGroups.join(',')}".`;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
return { counts: { ..._usageCounts }, profile, activeGroups: registeredGroups, recommendation };
|
|
219
|
+
function initialSelection(options: CreateMcpServerOptions): ToolSelection {
|
|
220
|
+
if (options.selection) return options.selection;
|
|
221
|
+
if (options.tools !== undefined) return selectionFromList(options.tools, options.mode ?? 'strict', 'explicit');
|
|
222
|
+
const selection = readInitialTools();
|
|
223
|
+
return options.mode && !selection.listError ? { ...selection, mode: options.mode } : selection;
|
|
253
224
|
}
|
|
254
225
|
|
|
255
|
-
// Load usage counts on startup
|
|
256
|
-
loadUsageCounts();
|
|
257
|
-
|
|
258
226
|
// Create a fully configured McpServer with all tools registered.
|
|
259
|
-
// Used by the HTTP transport (one stateful server per client session)
|
|
260
|
-
//
|
|
261
|
-
//
|
|
262
|
-
//
|
|
263
|
-
//
|
|
264
|
-
export function createMcpServer(
|
|
265
|
-
const
|
|
266
|
-
const runtime = new ProfileRuntime(initialProfile, options);
|
|
227
|
+
// Used by the HTTP transport (one stateful server per client session): it
|
|
228
|
+
// passes focus on every group and binds each session's own selection at
|
|
229
|
+
// initialize (setServerSelection). Stdio clients (Codex, OpenCode, Gemini)
|
|
230
|
+
// read their list from their launch (readInitialTools) through the singleton
|
|
231
|
+
// at the bottom of this file.
|
|
232
|
+
export function createMcpServer(options: CreateMcpServerOptions = {}) {
|
|
233
|
+
const runtime = new ToolRuntime(initialSelection(options), { role: options.role, capabilities: options.capabilities, platform: options.platform });
|
|
267
234
|
const server = new McpServer(
|
|
268
235
|
{ name: 'claude-memory', version: SERVER_VERSION },
|
|
269
236
|
{ instructions: buildServerInstructions(runtime) }
|
|
@@ -278,25 +245,32 @@ export function createMcpServer(forceProfile?: string, options: { catalogMode?:
|
|
|
278
245
|
// one server per client session instead of one per request).
|
|
279
246
|
const serverToolRefs = new WeakMap<McpServer, ReturnType<typeof registerTools>>();
|
|
280
247
|
|
|
281
|
-
export function
|
|
248
|
+
export function getServerToolRuntime(target: McpServer): ToolRuntime | null {
|
|
282
249
|
return serverToolRefs.get(target)?.runtime || null;
|
|
283
250
|
}
|
|
284
251
|
|
|
252
|
+
/**
|
|
253
|
+
* The initialize instructions are refreshed in place: the SDK reads
|
|
254
|
+
* Server._instructions when it answers the initialize request, and the HTTP
|
|
255
|
+
* transport binds a session from onsessioninitialized, which runs before that
|
|
256
|
+
* request is dispatched.
|
|
257
|
+
*/
|
|
258
|
+
function refreshInstructions(target: McpServer, runtime: ToolRuntime): void {
|
|
259
|
+
(target.server as unknown as { _instructions?: string })._instructions = buildServerInstructions(runtime);
|
|
260
|
+
}
|
|
261
|
+
|
|
285
262
|
/**
|
|
286
263
|
* Bind a caller role to a live server built by createMcpServer. Role-gated
|
|
287
264
|
* groups (agents) are advertised only while the role matches, so the runtime
|
|
288
|
-
* re-applies its
|
|
289
|
-
* refreshed in place: the SDK reads Server._instructions when it answers the
|
|
290
|
-
* initialize request, and the HTTP transport calls this from
|
|
291
|
-
* onsessioninitialized, which runs before that request is dispatched.
|
|
265
|
+
* re-applies its selection and the instructions follow.
|
|
292
266
|
*/
|
|
293
267
|
export function setServerRole(target: McpServer, role: CallerRole | null): boolean {
|
|
294
|
-
const runtime =
|
|
268
|
+
const runtime = getServerToolRuntime(target);
|
|
295
269
|
if (!runtime) return false;
|
|
296
270
|
if (runtime.getRole() === role) return true;
|
|
297
271
|
runtime.setRole(role);
|
|
298
|
-
runtime.
|
|
299
|
-
(target
|
|
272
|
+
runtime.apply();
|
|
273
|
+
refreshInstructions(target, runtime);
|
|
300
274
|
return true;
|
|
301
275
|
}
|
|
302
276
|
|
|
@@ -305,17 +279,37 @@ export function setServerRole(target: McpServer, role: CallerRole | null): boole
|
|
|
305
279
|
* same mechanics as setServerRole, called from the HTTP initialize hook.
|
|
306
280
|
*/
|
|
307
281
|
export function setServerCapabilities(target: McpServer, caps: { computer?: boolean }): boolean {
|
|
308
|
-
const runtime =
|
|
282
|
+
const runtime = getServerToolRuntime(target);
|
|
309
283
|
if (!runtime) return false;
|
|
310
284
|
const next: CallerCapability[] = caps.computer ? ['computer'] : [];
|
|
311
285
|
const current = runtime.getCapabilities();
|
|
312
286
|
if (current.length === next.length && current.every((cap) => next.includes(cap))) return true;
|
|
313
287
|
runtime.setCapabilities(next);
|
|
314
|
-
runtime.
|
|
315
|
-
(target
|
|
288
|
+
runtime.apply();
|
|
289
|
+
refreshInstructions(target, runtime);
|
|
316
290
|
return true;
|
|
317
291
|
}
|
|
318
292
|
|
|
293
|
+
/**
|
|
294
|
+
* Bind a session's tool selection to a live server: the X-Synabun-Tools focus
|
|
295
|
+
* of the main HTTP mount, or the strict list the worker channel resolves for
|
|
296
|
+
* its run. Same mechanics as setServerRole. Focus never changes what a server
|
|
297
|
+
* advertises, so a header can neither widen nor narrow it; the gates stay with
|
|
298
|
+
* the role and the grant.
|
|
299
|
+
*/
|
|
300
|
+
export function setServerSelection(target: McpServer, selection: ToolSelection): boolean {
|
|
301
|
+
const runtime = getServerToolRuntime(target);
|
|
302
|
+
if (!runtime) return false;
|
|
303
|
+
runtime.apply({ ...selection, hostMode: selection.hostMode ?? selection.mode });
|
|
304
|
+
refreshInstructions(target, runtime);
|
|
305
|
+
return true;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/** The selection an HTTP session starts from before its own is bound: focus on every group. */
|
|
309
|
+
export function httpDefaultSelection(): ToolSelection {
|
|
310
|
+
return selectionOf(SELECTABLE_GROUP_IDS, 'focus', 'http');
|
|
311
|
+
}
|
|
312
|
+
|
|
319
313
|
// Refresh the category-dependent tool schemas of a specific server instance.
|
|
320
314
|
// tool.update() pushes notifications/tools/list_changed to its connected client.
|
|
321
315
|
export function refreshServerSchemas(target: McpServer): void {
|
|
@@ -328,15 +322,14 @@ export function refreshServerSchemas(target: McpServer): void {
|
|
|
328
322
|
}
|
|
329
323
|
|
|
330
324
|
// ── Main stdio server instance ──
|
|
331
|
-
const
|
|
332
|
-
mainProfileRuntime = new ProfileRuntime(_initialProfile);
|
|
325
|
+
const mainToolRuntime = new ToolRuntime(readInitialTools());
|
|
333
326
|
|
|
334
327
|
const server = new McpServer(
|
|
335
328
|
{ name: 'claude-memory', version: SERVER_VERSION },
|
|
336
|
-
{ instructions: buildServerInstructions(
|
|
329
|
+
{ instructions: buildServerInstructions(mainToolRuntime) }
|
|
337
330
|
);
|
|
338
331
|
|
|
339
|
-
const { rememberTool, recallTool, reflectTool, memoriesTool } = registerTools(server,
|
|
332
|
+
const { rememberTool, recallTool, reflectTool, memoriesTool } = registerTools(server, mainToolRuntime);
|
|
340
333
|
|
|
341
334
|
// ── Wire tool usage tracking into low-level server ──
|
|
342
335
|
// Intercept tool call notifications to count usage per tool name.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Preload script — loads .env into process.env BEFORE any other module evaluates.
|
|
5
|
-
* This avoids the ESM hoisting issue where static imports (like config.ts) would
|
|
6
|
-
* read empty env vars because import statements execute before module body code.
|
|
7
|
-
*/
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Preload script — loads .env into process.env BEFORE any other module evaluates.
|
|
5
|
+
* This avoids the ESM hoisting issue where static imports (like config.ts) would
|
|
6
|
+
* read empty env vars because import statements execute before module body code.
|
|
7
|
+
*/
|
|
8
8
|
import { readFileSync } from 'fs';
|
|
9
9
|
import { resolve } from 'path';
|
|
10
10
|
import { getDataHome } from '../../lib/paths.js';
|
|
@@ -18,13 +18,13 @@ try {
|
|
|
18
18
|
const eq = trimmed.indexOf('=');
|
|
19
19
|
if (eq === -1) continue;
|
|
20
20
|
const key = trimmed.slice(0, eq);
|
|
21
|
-
// Explicit host/session values (especially
|
|
21
|
+
// Explicit host/session values (especially SYNABUN_TOOLS) must outrank
|
|
22
22
|
// shared dotenv defaults so concurrent MCP processes remain isolated.
|
|
23
23
|
if (process.env[key] !== undefined) continue;
|
|
24
24
|
process.env[key] = trimmed.slice(eq + 1);
|
|
25
25
|
}
|
|
26
26
|
} catch { /* .env not found, rely on existing env vars */ }
|
|
27
|
-
|
|
28
|
-
// Now that env is loaded, dynamically import the main entry point.
|
|
29
|
-
// Dynamic import ensures all static imports in index.ts see the populated env.
|
|
30
|
-
await import('./index.js');
|
|
27
|
+
|
|
28
|
+
// Now that env is loaded, dynamically import the main entry point.
|
|
29
|
+
// Dynamic import ensures all static imports in index.ts see the populated env.
|
|
30
|
+
await import('./index.js');
|