synabun 2.0.10 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +207 -0
- package/README.md +25 -2
- package/THIRD-PARTY-LICENSES.md +22 -0
- package/bin/synabun.js +71 -24
- package/docs/whatsapp.md +13 -13
- package/hooks/claude-code/pre-websearch.mjs +12 -1
- package/hooks/claude-code/shared.mjs +5 -0
- package/hooks/claude-code/stop.mjs +1 -1
- package/lib/claude-hooks.js +172 -18
- package/lib/client-config-repair.js +30 -17
- package/lib/desktop-app.js +7 -1
- package/lib/external-tools.js +7 -6
- package/lib/first-launch-protection.js +57 -12
- package/lib/mcp-dist.js +176 -0
- package/lib/release-npm-ci.mjs +138 -0
- package/lib/release-publish.mjs +91 -0
- package/lib/release-scan.mjs +50 -0
- package/lib/server-crash-record.js +123 -0
- package/lib/server-exit.js +318 -0
- package/lib/server-supervisor.js +508 -0
- package/lib/start-launcher.js +37 -4
- package/lib/tools-cli.js +45 -0
- package/lib/update-snapshot.js +302 -0
- package/lib/virustotal.mjs +203 -0
- package/lib/windows-crash-event.js +269 -0
- package/mcp-server/dist/http.d.ts +20 -1
- package/mcp-server/dist/http.d.ts.map +1 -1
- package/mcp-server/dist/http.js +59 -12
- package/mcp-server/dist/http.js.map +1 -1
- package/mcp-server/dist/index.d.ts +33 -27
- package/mcp-server/dist/index.d.ts.map +1 -1
- package/mcp-server/dist/index.js +128 -143
- package/mcp-server/dist/index.js.map +1 -1
- package/mcp-server/dist/preload.js +1 -1
- package/mcp-server/dist/preload.js.map +1 -1
- package/mcp-server/dist/services/budget-judgments.d.ts +1 -1
- package/mcp-server/dist/services/budget-judgments.d.ts.map +1 -1
- package/mcp-server/dist/services/budget-judgments.js +5 -3
- package/mcp-server/dist/services/budget-judgments.js.map +1 -1
- package/mcp-server/dist/services/codex-config-heal.d.ts +6 -2
- package/mcp-server/dist/services/codex-config-heal.d.ts.map +1 -1
- package/mcp-server/dist/services/codex-config-heal.js +81 -28
- package/mcp-server/dist/services/codex-config-heal.js.map +1 -1
- package/mcp-server/dist/services/identity.d.ts +2 -2
- package/mcp-server/dist/services/identity.js +2 -2
- package/mcp-server/dist/services/memory-judge-backfill.d.ts +6 -0
- package/mcp-server/dist/services/memory-judge-backfill.d.ts.map +1 -1
- package/mcp-server/dist/services/memory-judge-backfill.js +7 -1
- package/mcp-server/dist/services/memory-judge-backfill.js.map +1 -1
- package/mcp-server/dist/services/memory-sessions.d.ts +1 -1
- package/mcp-server/dist/services/memory-sessions.d.ts.map +1 -1
- package/mcp-server/dist/services/memory-sessions.js +28 -2
- package/mcp-server/dist/services/memory-sessions.js.map +1 -1
- package/mcp-server/dist/services/neural-interface.d.ts +18 -11
- package/mcp-server/dist/services/neural-interface.d.ts.map +1 -1
- package/mcp-server/dist/services/neural-interface.js +67 -11
- package/mcp-server/dist/services/neural-interface.js.map +1 -1
- package/mcp-server/dist/services/server-instructions.d.ts +7 -2
- package/mcp-server/dist/services/server-instructions.d.ts.map +1 -1
- package/mcp-server/dist/services/server-instructions.js +22 -63
- package/mcp-server/dist/services/server-instructions.js.map +1 -1
- package/mcp-server/dist/services/tool-catalog.d.ts +120 -0
- package/mcp-server/dist/services/tool-catalog.d.ts.map +1 -0
- package/mcp-server/dist/services/tool-catalog.js +339 -0
- package/mcp-server/dist/services/tool-catalog.js.map +1 -0
- package/mcp-server/dist/services/tool-list-refresh-barrier.d.ts +12 -0
- package/mcp-server/dist/services/tool-list-refresh-barrier.d.ts.map +1 -0
- package/mcp-server/dist/services/tool-list-refresh-barrier.js +40 -0
- package/mcp-server/dist/services/tool-list-refresh-barrier.js.map +1 -0
- package/mcp-server/dist/services/tool-list.d.ts +108 -0
- package/mcp-server/dist/services/tool-list.d.ts.map +1 -0
- package/mcp-server/dist/services/tool-list.js +334 -0
- package/mcp-server/dist/services/tool-list.js.map +1 -0
- package/mcp-server/dist/services/tool-runtime.d.ts +161 -0
- package/mcp-server/dist/services/tool-runtime.d.ts.map +1 -0
- package/mcp-server/dist/services/tool-runtime.js +400 -0
- package/mcp-server/dist/services/tool-runtime.js.map +1 -0
- package/mcp-server/dist/services/typesafe-config.js +1 -1
- package/mcp-server/dist/services/typesafe-config.js.map +1 -1
- package/mcp-server/dist/services/whiteboard-geometry.d.ts +26 -2
- package/mcp-server/dist/services/whiteboard-geometry.d.ts.map +1 -1
- package/mcp-server/dist/services/whiteboard-geometry.js +91 -8
- package/mcp-server/dist/services/whiteboard-geometry.js.map +1 -1
- package/mcp-server/dist/tools/agents.d.ts +14 -14
- package/mcp-server/dist/tools/agents.d.ts.map +1 -1
- package/mcp-server/dist/tools/agents.js +29 -19
- package/mcp-server/dist/tools/agents.js.map +1 -1
- package/mcp-server/dist/tools/browser-batch.d.ts +3 -3
- package/mcp-server/dist/tools/choice.d.ts +6 -0
- package/mcp-server/dist/tools/choice.d.ts.map +1 -1
- package/mcp-server/dist/tools/choice.js +18 -13
- package/mcp-server/dist/tools/choice.js.map +1 -1
- package/mcp-server/dist/tools/git-tools.js +2 -2
- package/mcp-server/dist/tools/git-tools.js.map +1 -1
- package/mcp-server/dist/tools/image-tools.d.ts +1 -1
- package/mcp-server/dist/tools/image-tools.js +1 -1
- package/mcp-server/dist/tools/morelogin.d.ts.map +1 -1
- package/mcp-server/dist/tools/morelogin.js +9 -6
- package/mcp-server/dist/tools/morelogin.js.map +1 -1
- package/mcp-server/dist/tools/skill-tools.d.ts +505 -0
- package/mcp-server/dist/tools/skill-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/skill-tools.js +642 -0
- package/mcp-server/dist/tools/skill-tools.js.map +1 -0
- package/mcp-server/dist/tools/skill.d.ts +7 -0
- package/mcp-server/dist/tools/skill.d.ts.map +1 -0
- package/mcp-server/dist/tools/skill.js +11 -0
- package/mcp-server/dist/tools/skill.js.map +1 -0
- package/mcp-server/dist/tools/tool-groups.d.ts +68 -0
- package/mcp-server/dist/tools/tool-groups.d.ts.map +1 -0
- package/mcp-server/dist/tools/tool-groups.js +147 -0
- package/mcp-server/dist/tools/tool-groups.js.map +1 -0
- package/mcp-server/dist/tools/whiteboard-format.d.ts.map +1 -1
- package/mcp-server/dist/tools/whiteboard-format.js +7 -4
- package/mcp-server/dist/tools/whiteboard-format.js.map +1 -1
- package/mcp-server/dist/tools/whiteboard-tools.d.ts +64 -13
- package/mcp-server/dist/tools/whiteboard-tools.d.ts.map +1 -1
- package/mcp-server/dist/tools/whiteboard-tools.js +30 -5
- package/mcp-server/dist/tools/whiteboard-tools.js.map +1 -1
- package/mcp-server/package-lock.json +2 -2
- package/mcp-server/package.json +1 -1
- package/mcp-server/src/http.ts +75 -12
- package/mcp-server/src/index.ts +147 -154
- package/mcp-server/src/preload.ts +12 -12
- package/mcp-server/src/services/budget-judgments.ts +5 -3
- package/mcp-server/src/services/codex-config-heal.ts +80 -29
- package/mcp-server/src/services/identity.ts +2 -2
- package/mcp-server/src/services/memory-judge-backfill.ts +7 -1
- package/mcp-server/src/services/memory-sessions.ts +24 -3
- package/mcp-server/src/services/neural-interface.ts +81 -21
- package/mcp-server/src/services/server-instructions.ts +29 -64
- package/mcp-server/src/services/tool-catalog.ts +403 -0
- package/mcp-server/src/services/tool-list-refresh-barrier.ts +33 -0
- package/mcp-server/src/services/tool-list.ts +410 -0
- package/mcp-server/src/services/tool-runtime.ts +457 -0
- package/mcp-server/src/services/typesafe-config.ts +1 -1
- package/mcp-server/src/services/whiteboard-geometry.ts +94 -9
- package/mcp-server/src/tools/agents.ts +29 -20
- package/mcp-server/src/tools/choice.ts +17 -12
- package/mcp-server/src/tools/git-tools.ts +2 -2
- package/mcp-server/src/tools/image-tools.ts +1 -1
- package/mcp-server/src/tools/morelogin.ts +6 -4
- package/mcp-server/src/tools/skill-tools.ts +592 -0
- package/mcp-server/src/tools/skill.ts +13 -0
- package/mcp-server/src/tools/tool-groups.ts +164 -0
- package/mcp-server/src/tools/whiteboard-format.ts +9 -3
- package/mcp-server/src/tools/whiteboard-tools.ts +39 -5
- package/neural-interface/i18n/en.json +3953 -228
- package/neural-interface/i18n/pt-BR.json +3901 -179
- package/neural-interface/lib/agent-sandbox-elevation.js +6 -0
- package/neural-interface/lib/antigravity/acp-client-host.js +554 -0
- package/neural-interface/lib/antigravity/acp-connection.js +299 -0
- package/neural-interface/lib/antigravity/bypass.js +100 -0
- package/neural-interface/lib/antigravity/catalog.js +273 -0
- package/neural-interface/lib/antigravity/home.js +260 -0
- package/neural-interface/lib/antigravity/migrate-gemini.js +139 -0
- package/neural-interface/lib/antigravity/panel-bridge.js +1058 -0
- package/neural-interface/lib/antigravity/policy-hook.mjs +78 -0
- package/neural-interface/lib/antigravity/policy.js +74 -0
- package/neural-interface/lib/antigravity/tool-call.js +178 -0
- package/neural-interface/lib/antigravity/transcripts.js +252 -0
- package/neural-interface/lib/antigravity/usage.js +43 -0
- package/neural-interface/lib/assistant-api.js +128 -28
- package/neural-interface/lib/assistant-brains/antigravity.js +423 -0
- package/neural-interface/lib/assistant-brains/claude.js +4 -3
- package/neural-interface/lib/assistant-brains/codex-browser-policy-hook.mjs +12 -2
- package/neural-interface/lib/assistant-brains/codex-route-gate-hook.mjs +32 -9
- package/neural-interface/lib/assistant-brains/codex.js +9 -5
- package/neural-interface/lib/assistant-brains/opencode.js +120 -54
- package/neural-interface/lib/assistant-brains/opencode2-browser-policy/index.js +28 -13
- package/neural-interface/lib/assistant-brains/opencode2-route-gate/index.js +59 -19
- package/neural-interface/lib/assistant-budget-planner.js +7 -3
- package/neural-interface/lib/assistant-budget-split.js +42 -15
- package/neural-interface/lib/assistant-catalog.js +81 -15
- package/neural-interface/lib/assistant-config.js +6 -3
- package/neural-interface/lib/assistant-dispatch.js +1073 -200
- package/neural-interface/lib/assistant-envelope.js +156 -2
- package/neural-interface/lib/assistant-evidence.js +80 -0
- package/neural-interface/lib/assistant-hidden-models.js +7 -5
- package/neural-interface/lib/assistant-persona.js +93 -19
- package/neural-interface/lib/assistant-plan-permissions.js +25 -9
- package/neural-interface/lib/assistant-route-gate-codex.js +3 -0
- package/neural-interface/lib/assistant-route-gate.js +6 -4
- package/neural-interface/lib/assistant-router.js +245 -38
- package/neural-interface/lib/assistant-runtime.js +214 -30
- package/neural-interface/lib/assistant-task-prompt.js +87 -21
- package/neural-interface/lib/assistant-tools.js +51 -0
- package/neural-interface/lib/assistant-usage.js +29 -0
- package/neural-interface/lib/backup-service.js +626 -4
- package/neural-interface/lib/backup-zip-reader.js +10 -5
- package/neural-interface/lib/backup-zip-writer.js +257 -0
- package/neural-interface/lib/browser-execution.js +10 -2
- package/neural-interface/lib/browser-guard-cdp.js +84 -0
- package/neural-interface/lib/browser-network-guard.js +476 -0
- package/neural-interface/lib/browser-policy-roots.js +64 -0
- package/neural-interface/lib/browser-tool-policy.js +198 -38
- package/neural-interface/lib/claude-agent-bridge.js +11 -2
- package/neural-interface/lib/claude-history-cache.js +210 -0
- package/neural-interface/lib/claude-hooks-status.js +103 -0
- package/neural-interface/lib/claude-model-catalog.js +5 -1
- package/neural-interface/lib/claude-temporary.js +5 -11
- package/neural-interface/lib/cli-install-api.js +1 -1
- package/neural-interface/lib/cli-install.js +163 -154
- package/neural-interface/lib/cli-resolver.js +13 -3
- package/neural-interface/lib/cli-update-planner.js +52 -41
- package/neural-interface/lib/cloudflared/tunnel.js +42 -2
- package/neural-interface/lib/codex-mcp-approvals.js +11 -0
- package/neural-interface/lib/codex-rollout-reader.js +52 -0
- package/neural-interface/lib/codex-worker-app-server.js +191 -0
- package/neural-interface/lib/confined-fs.js +30 -3
- package/neural-interface/lib/crash-notice-api.js +98 -0
- package/neural-interface/lib/editor-completion-opencode.js +68 -68
- package/neural-interface/lib/editor-git-api.js +3 -20
- package/neural-interface/lib/exec-loop-command.js +13 -10
- package/neural-interface/lib/file-explorer-api.js +74 -40
- package/neural-interface/lib/file-explorer-watch.js +9 -3
- package/neural-interface/lib/git-bash/install.js +52 -6
- package/neural-interface/lib/git-bash/manager.js +59 -17
- package/neural-interface/lib/git-bash/pins.js +12 -0
- package/neural-interface/lib/git-read.js +2 -2
- package/neural-interface/lib/git-status-runner.js +390 -0
- package/neural-interface/lib/git-status-watchdog.js +40 -0
- package/neural-interface/lib/greeting/budgets.js +1 -0
- package/neural-interface/lib/greeting/engine.js +2 -2
- package/neural-interface/lib/greeting/sources.js +10 -12
- package/neural-interface/lib/greeting/writer.js +1 -1
- package/neural-interface/lib/http-guards.js +8 -2
- package/neural-interface/lib/install-details.js +4 -1
- package/neural-interface/lib/mcp-agent-servers.js +67 -0
- package/neural-interface/lib/mcp-client-config.js +35 -33
- package/neural-interface/lib/mcp-external-servers.js +332 -0
- package/neural-interface/lib/mcp-installer.js +2 -1
- package/neural-interface/lib/{mcp-profile-refresh-coordinator.js → mcp-tools-refresh-coordinator.js} +4 -4
- package/neural-interface/lib/memory-session-capture.js +17 -3
- package/neural-interface/lib/morelogin.js +177 -25
- package/neural-interface/lib/native-loop-providers.js +965 -66
- package/neural-interface/lib/native-loop-runtime.js +290 -42
- package/neural-interface/lib/opencode-config.js +557 -0
- package/neural-interface/lib/opencode-db-schema.js +17 -34
- package/neural-interface/lib/opencode-history.js +48 -218
- package/neural-interface/lib/opencode-mcp-ready.js +108 -0
- package/neural-interface/lib/opencode-native-boundary.js +53 -0
- package/neural-interface/lib/opencode-protocol.js +249 -112
- package/neural-interface/lib/opencode-runtime-config.js +32 -22
- package/neural-interface/lib/opencode-serve-records.js +39 -21
- package/neural-interface/lib/opencode-v2-client.js +48 -153
- package/neural-interface/lib/opencode-v2-ws-requests.js +36 -210
- package/neural-interface/lib/opencode-worker-data.js +27 -0
- package/neural-interface/lib/opencode2-client.js +73 -37
- package/neural-interface/lib/opencode2-proxy.js +23 -63
- package/neural-interface/lib/opencode2-translate.js +51 -2
- package/neural-interface/lib/owner-authority.js +249 -0
- package/neural-interface/lib/page-session.js +275 -0
- package/neural-interface/lib/path-confine.js +12 -9
- package/neural-interface/lib/peer-identity.js +793 -0
- package/neural-interface/lib/pty-host/core.js +28 -1
- package/neural-interface/lib/pty-host/lifetime.js +12 -0
- package/neural-interface/lib/pty-host/manager.js +12 -1
- package/neural-interface/lib/remote-policy.js +1 -1
- package/neural-interface/lib/request-gate.js +20 -2
- package/neural-interface/lib/rulesets/api.js +7 -6
- package/neural-interface/lib/rulesets/fs-safe.js +1 -1
- package/neural-interface/lib/rulesets/installer.js +180 -36
- package/neural-interface/lib/rulesets/json-edit.js +1 -1
- package/neural-interface/lib/rulesets/render.js +1 -1
- package/neural-interface/lib/session-cache-builder.js +81 -31
- package/neural-interface/lib/session-title-generator.js +58 -36
- package/neural-interface/lib/skills/api-v2.js +495 -0
- package/neural-interface/lib/skills/bundle.js +418 -0
- package/neural-interface/lib/skills/catalog.js +298 -0
- package/neural-interface/lib/skills/creation-api.js +191 -0
- package/neural-interface/lib/skills/creation-brief.js +247 -0
- package/neural-interface/lib/skills/creation-sources.js +285 -0
- package/neural-interface/lib/skills/creation.js +843 -0
- package/neural-interface/lib/skills/deploy.js +569 -0
- package/neural-interface/lib/skills/digest.js +119 -0
- package/neural-interface/lib/skills/discover.js +111 -0
- package/neural-interface/lib/skills/draft-confinement.js +216 -0
- package/neural-interface/lib/skills/eval-confinement.js +399 -0
- package/neural-interface/lib/skills/eval-sandbox.js +280 -0
- package/neural-interface/lib/skills/eval-trace.js +135 -0
- package/neural-interface/lib/skills/evals-api.js +212 -0
- package/neural-interface/lib/skills/evals.js +1573 -0
- package/neural-interface/lib/skills/export.js +203 -0
- package/neural-interface/lib/skills/frontmatter.js +64 -0
- package/neural-interface/lib/skills/health.js +75 -0
- package/neural-interface/lib/skills/json-edit.js +165 -0
- package/neural-interface/lib/skills/known-bridge-digests.json +441 -0
- package/neural-interface/lib/skills/known-bridges.js +96 -0
- package/neural-interface/lib/skills/library.js +823 -0
- package/neural-interface/lib/skills/local-store.js +21 -0
- package/neural-interface/lib/skills/migration.js +433 -0
- package/neural-interface/lib/skills/operations.js +45 -0
- package/neural-interface/lib/skills/ownership.js +427 -0
- package/neural-interface/lib/skills/packages.js +88 -0
- package/neural-interface/lib/skills/reviews.js +212 -0
- package/neural-interface/lib/skills/revision.js +80 -0
- package/neural-interface/lib/skills/roots.js +269 -0
- package/neural-interface/lib/skills/runtime-checks.js +358 -0
- package/neural-interface/lib/skills/scan-assets.js +252 -0
- package/neural-interface/lib/skills/scan-context.js +26 -0
- package/neural-interface/lib/skills/scan-shell.js +324 -0
- package/neural-interface/lib/skills/scan.js +364 -0
- package/neural-interface/lib/skills/scanners.js +54 -0
- package/neural-interface/lib/skills/service.js +530 -0
- package/neural-interface/lib/skills/telemetry.js +119 -0
- package/neural-interface/lib/sqlite-integrity-worker.js +22 -0
- package/neural-interface/lib/synabun-version.js +1 -1
- package/neural-interface/lib/system-activity.js +1 -1
- package/neural-interface/lib/tool-lists.js +124 -0
- package/neural-interface/lib/whatsapp/brain.js +7 -3
- package/neural-interface/lib/whatsapp/bridge.js +6 -3
- package/neural-interface/lib/whatsapp/cards.js +22 -9
- package/neural-interface/lib/whatsapp/config.js +1 -1
- package/neural-interface/lib/worker-confinement.js +1268 -0
- package/neural-interface/lib/worker-guard-setting.js +56 -0
- package/neural-interface/lib/worker-mcp-channel.js +175 -0
- package/neural-interface/lib/worker-question.js +74 -0
- package/neural-interface/lib/worker-relay-ports.js +227 -0
- package/neural-interface/lib/worker-resume.js +238 -0
- package/neural-interface/lib/worker-sandbox.js +329 -0
- package/neural-interface/package-lock.json +34 -12
- package/neural-interface/package.json +3 -2
- package/neural-interface/public/index.html +3 -1
- package/neural-interface/public/index2d.html +19 -11
- package/neural-interface/public/onboarding.html +3 -3
- package/neural-interface/public/shared/account-menu.js +8 -5
- package/neural-interface/public/shared/agent-runtime-options.js +125 -31
- package/neural-interface/public/shared/agy/agy-bypass.js +47 -0
- package/neural-interface/public/shared/agy/agy-client.js +266 -0
- package/neural-interface/public/shared/agy/agy-commands.js +120 -0
- package/neural-interface/public/shared/agy/agy-copy.js +326 -0
- package/neural-interface/public/shared/agy/agy-diff.js +161 -0
- package/neural-interface/public/shared/agy/agy-events.js +469 -0
- package/neural-interface/public/shared/agy/agy-greeting.js +26 -0
- package/neural-interface/public/shared/agy/agy-options.js +232 -0
- package/neural-interface/public/shared/agy/agy-panel.js +2543 -0
- package/neural-interface/public/shared/agy/agy-render.js +392 -0
- package/neural-interface/public/shared/agy/agy-setup.js +149 -0
- package/neural-interface/public/shared/agy/agy-styles.js +604 -0
- package/neural-interface/public/shared/agy/agy-tabs-logic.js +181 -0
- package/neural-interface/public/shared/api.js +1527 -1336
- package/neural-interface/public/shared/app-frame.js +192 -0
- package/neural-interface/public/shared/assistant/asst-agents-dock.js +36 -6
- package/neural-interface/public/shared/assistant/asst-api.js +1 -1
- package/neural-interface/public/shared/assistant/asst-ask-styles.js +270 -0
- package/neural-interface/public/shared/assistant/asst-ask-tail.js +118 -0
- package/neural-interface/public/shared/assistant/asst-ask.js +397 -0
- package/neural-interface/public/shared/assistant/asst-brain-picker.js +105 -44
- package/neural-interface/public/shared/assistant/asst-budget.js +5 -4
- package/neural-interface/public/shared/assistant/asst-control.js +205 -26
- package/neural-interface/public/shared/assistant/asst-followups-card.js +383 -0
- package/neural-interface/public/shared/assistant/asst-followups.js +417 -0
- package/neural-interface/public/shared/assistant/asst-hosts.js +16 -7
- package/neural-interface/public/shared/assistant/asst-limit-dock.js +45 -0
- package/neural-interface/public/shared/assistant/asst-limit-wait.js +327 -0
- package/neural-interface/public/shared/assistant/asst-limit.js +168 -0
- package/neural-interface/public/shared/assistant/asst-mascot.js +49 -12
- package/neural-interface/public/shared/assistant/asst-menu.js +7 -6
- package/neural-interface/public/shared/assistant/asst-panel.js +151 -19
- package/neural-interface/public/shared/assistant/asst-rack-styles.js +66 -49
- package/neural-interface/public/shared/assistant/asst-render.js +445 -82
- package/neural-interface/public/shared/assistant/asst-route.js +304 -53
- package/neural-interface/public/shared/assistant/asst-routes-editor.js +9 -8
- package/neural-interface/public/shared/assistant/asst-scenes.js +56 -1
- package/neural-interface/public/shared/assistant/asst-sidepanel.js +117 -10
- package/neural-interface/public/shared/assistant/asst-slash.js +17 -9
- package/neural-interface/public/shared/assistant/asst-state.js +87 -24
- package/neural-interface/public/shared/assistant/asst-stop.js +127 -0
- package/neural-interface/public/shared/assistant/asst-styles.js +93 -21
- package/neural-interface/public/shared/assistant/asst-tool-kinds.js +190 -23
- package/neural-interface/public/shared/assistant/asst-usage.js +2 -1
- package/neural-interface/public/shared/automation-context.js +5 -2
- package/neural-interface/public/shared/cc-dropdown.js +89 -19
- package/neural-interface/public/shared/cdx/cdx-context-menu.js +10 -9
- package/neural-interface/public/shared/cdx/cdx-copy.js +16 -0
- package/neural-interface/public/shared/cdx/cdx-output-model.js +22 -1
- package/neural-interface/public/shared/cdx/cdx-output.js +34 -10
- package/neural-interface/public/shared/cdx/cdx-panel.js +59 -151
- package/neural-interface/public/shared/cdx/cdx-preview.js +12 -0
- package/neural-interface/public/shared/cdx/cdx-protocol.js +39 -11
- package/neural-interface/public/shared/cdx/cdx-render.js +57 -38
- package/neural-interface/public/shared/cdx/cdx-requests.js +14 -4
- package/neural-interface/public/shared/cdx/cdx-skill-hints.js +54 -0
- package/neural-interface/public/shared/cdx/cdx-styles.js +15 -3
- package/neural-interface/public/shared/cdx/cdx-tabs.js +127 -44
- package/neural-interface/public/shared/cdx/cdx-ws.js +0 -1
- package/neural-interface/public/shared/cli-install-controller.js +218 -0
- package/neural-interface/public/shared/cli-install-view.js +11 -12
- package/neural-interface/public/shared/cli-status.js +11 -10
- package/neural-interface/public/shared/constants.js +5 -4
- package/neural-interface/public/shared/context-menu-areas.js +34 -0
- package/neural-interface/public/shared/context-menu-logic.js +243 -0
- package/neural-interface/public/shared/context-menu-model.js +367 -0
- package/neural-interface/public/shared/context-menu.js +372 -0
- package/neural-interface/public/shared/cp/cp-context-menu.js +10 -9
- package/neural-interface/public/shared/cp/cp-restore.js +162 -0
- package/neural-interface/public/shared/cp/cp-tool-cards.js +10 -3
- package/neural-interface/public/shared/crash-notice-view.js +168 -0
- package/neural-interface/public/shared/desktop-bridge.js +17 -0
- package/neural-interface/public/shared/desktop-titlebar-view.js +12 -0
- package/neural-interface/public/shared/desktop-titlebar.js +13 -4
- package/neural-interface/public/shared/desktop-update-view.js +21 -0
- package/neural-interface/public/shared/editor/editor-panel-logic.js +2 -2
- package/neural-interface/public/shared/explorer/fx-api.js +4 -4
- package/neural-interface/public/shared/explorer/fx-links.js +3 -3
- package/neural-interface/public/shared/explorer/fx-logic.js +1 -1
- package/neural-interface/public/shared/explorer/fx-main.js +48 -16
- package/neural-interface/public/shared/explorer/fx-tree.js +1 -0
- package/neural-interface/public/shared/greeting/greeting-card.js +2 -2
- package/neural-interface/public/shared/greeting/greeting-view.js +1 -0
- package/neural-interface/public/shared/html-shell.js +30 -15
- package/neural-interface/public/shared/i18n.js +2 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-approvals.js +7 -7
- package/neural-interface/public/shared/ocp-v2/ocp-v2-binding.js +4 -4
- package/neural-interface/public/shared/ocp-v2/ocp-v2-changes-logic.js +3 -101
- package/neural-interface/public/shared/ocp-v2/ocp-v2-childpanel.js +2 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-compact-button.js +1 -3
- package/neural-interface/public/shared/ocp-v2/ocp-v2-composer-logic.js +2 -6
- package/neural-interface/public/shared/ocp-v2/ocp-v2-context-menu.js +11 -11
- package/neural-interface/public/shared/ocp-v2/ocp-v2-context-model.js +0 -3
- package/neural-interface/public/shared/ocp-v2/ocp-v2-events.js +8 -4
- package/neural-interface/public/shared/ocp-v2/ocp-v2-manager.js +7 -7
- package/neural-interface/public/shared/ocp-v2/ocp-v2-outcome-notifications.js +16 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-panel.js +74 -259
- package/neural-interface/public/shared/ocp-v2/ocp-v2-plan.js +1 -2
- package/neural-interface/public/shared/ocp-v2/ocp-v2-projectbar.js +95 -202
- package/neural-interface/public/shared/ocp-v2/ocp-v2-rehydrate.js +13 -4
- package/neural-interface/public/shared/ocp-v2/ocp-v2-render.js +13 -22
- package/neural-interface/public/shared/ocp-v2/ocp-v2-send.js +4 -4
- package/neural-interface/public/shared/ocp-v2/ocp-v2-session-actions.js +8 -61
- package/neural-interface/public/shared/ocp-v2/ocp-v2-sessions-logic.js +2 -91
- package/neural-interface/public/shared/ocp-v2/ocp-v2-slash-hints.js +16 -15
- package/neural-interface/public/shared/ocp-v2/ocp-v2-state.js +8 -21
- package/neural-interface/public/shared/ocp-v2/ocp-v2-status-logic.js +1 -99
- package/neural-interface/public/shared/ocp-v2/ocp-v2-status.js +5 -35
- package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +17 -21
- package/neural-interface/public/shared/ocp-v2/{ocp-v2-profile-inheritance.js → ocp-v2-tools-inheritance.js} +16 -16
- package/neural-interface/public/shared/ocp-v2/ocp-v2-ws.js +60 -50
- package/neural-interface/public/shared/page-session.js +96 -0
- package/neural-interface/public/shared/provider-icons.js +4 -2
- package/neural-interface/public/shared/registry.js +5 -3
- package/neural-interface/public/shared/retired-2d.js +3 -0
- package/neural-interface/public/shared/schedules-view.js +195 -61
- package/neural-interface/public/shared/settings/settings-claude-hooks.js +135 -0
- package/neural-interface/public/shared/settings/settings-data.js +3 -1
- package/neural-interface/public/shared/settings/settings-ia.js +6 -6
- package/neural-interface/public/shared/settings/settings-opencode.js +89 -0
- package/neural-interface/public/shared/settings/settings-rules.js +2 -2
- package/neural-interface/public/shared/settings/settings-skill-folders-pane.js +265 -0
- package/neural-interface/public/shared/settings/settings-skill-folders.js +130 -0
- package/neural-interface/public/shared/settings/settings-worker-guard.js +72 -0
- package/neural-interface/public/shared/showcase-privacy.js +6 -1
- package/neural-interface/public/shared/sidepanel-session-status.js +3 -3
- package/neural-interface/public/shared/skills/ss-args.js +96 -0
- package/neural-interface/public/shared/skills/ss-creation.js +222 -0
- package/neural-interface/public/shared/skills/ss-dialog.js +133 -0
- package/neural-interface/public/shared/skills/ss-doc.js +173 -0
- package/neural-interface/public/shared/skills/ss-eval-adapters.js +269 -0
- package/neural-interface/public/shared/skills/ss-eval-grade.js +359 -0
- package/neural-interface/public/shared/skills/ss-eval-optimise.js +153 -0
- package/neural-interface/public/shared/skills/ss-eval-plan.js +315 -0
- package/neural-interface/public/shared/skills/ss-evals.js +417 -0
- package/neural-interface/public/shared/skills/ss-form.js +159 -0
- package/neural-interface/public/shared/skills/ss-frontmatter.js +376 -0
- package/neural-interface/public/shared/skills/ss-ids.js +32 -0
- package/neural-interface/public/shared/skills/ss-lint.js +149 -0
- package/neural-interface/public/shared/skills/ss-presets.js +117 -0
- package/neural-interface/public/shared/skills/ss-profiles.js +513 -0
- package/neural-interface/public/shared/skills/ss-resources.js +165 -0
- package/neural-interface/public/shared/skills/ss-review-view.js +190 -0
- package/neural-interface/public/shared/skills/ss-tabs.js +79 -0
- package/neural-interface/public/shared/skills/ss-unicode.js +135 -0
- package/neural-interface/public/shared/skills/studio/sx-actions.js +222 -0
- package/neural-interface/public/shared/skills/studio/sx-cm.js +101 -0
- package/neural-interface/public/shared/skills/studio/sx-create-ai-view.js +749 -0
- package/neural-interface/public/shared/skills/studio/sx-create-ai.js +237 -0
- package/neural-interface/public/shared/skills/studio/sx-create-view.js +254 -0
- package/neural-interface/public/shared/skills/studio/sx-create.js +126 -0
- package/neural-interface/public/shared/skills/studio/sx-diff-view.js +43 -0
- package/neural-interface/public/shared/skills/studio/sx-diff.js +133 -0
- package/neural-interface/public/shared/skills/studio/sx-docs.js +480 -0
- package/neural-interface/public/shared/skills/studio/sx-dom.js +230 -0
- package/neural-interface/public/shared/skills/studio/sx-edit-view.js +848 -0
- package/neural-interface/public/shared/skills/studio/sx-editor-model.js +193 -0
- package/neural-interface/public/shared/skills/studio/sx-errors.js +22 -0
- package/neural-interface/public/shared/skills/studio/sx-fixes-view.js +359 -0
- package/neural-interface/public/shared/skills/studio/sx-fixes.js +327 -0
- package/neural-interface/public/shared/skills/studio/sx-geometry.js +82 -0
- package/neural-interface/public/shared/skills/studio/sx-import.js +262 -0
- package/neural-interface/public/shared/skills/studio/sx-inspector.js +308 -0
- package/neural-interface/public/shared/skills/studio/sx-install-flow.js +282 -0
- package/neural-interface/public/shared/skills/studio/sx-install.js +313 -0
- package/neural-interface/public/shared/skills/studio/sx-library-view.js +748 -0
- package/neural-interface/public/shared/skills/studio/sx-library.js +479 -0
- package/neural-interface/public/shared/skills/studio/sx-main.js +690 -0
- package/neural-interface/public/shared/skills/studio/sx-operations-view.js +98 -0
- package/neural-interface/public/shared/skills/studio/sx-operations.js +11 -0
- package/neural-interface/public/shared/skills/studio/sx-plan.js +158 -0
- package/neural-interface/public/shared/skills/studio/sx-publish-view.js +621 -0
- package/neural-interface/public/shared/skills/studio/sx-review-view.js +369 -0
- package/neural-interface/public/shared/skills/studio/sx-review.js +148 -0
- package/neural-interface/public/shared/skills/studio/sx-scan.js +35 -0
- package/neural-interface/public/shared/skills/studio/sx-snippets.js +96 -0
- package/neural-interface/public/shared/skills/studio/sx-subject.js +249 -0
- package/neural-interface/public/shared/skills/studio/sx-test-view.js +994 -0
- package/neural-interface/public/shared/skills/studio/sx-test.js +328 -0
- package/neural-interface/public/shared/skills/studio/sx-versions-view.js +241 -0
- package/neural-interface/public/shared/skills/studio/sx-workspace-view.js +426 -0
- package/neural-interface/public/shared/state.js +1 -1
- package/neural-interface/public/shared/streaming-markdown.js +58 -0
- package/neural-interface/public/shared/styleguide/sg-panel.js +4 -2
- package/neural-interface/public/shared/styles.css +1822 -1756
- package/neural-interface/public/shared/synabun-mascot.js +1115 -9
- package/neural-interface/public/shared/text-cache.js +29 -0
- package/neural-interface/public/shared/tool-list-picker.js +55 -0
- package/neural-interface/public/shared/tool-list-storage.js +24 -0
- package/neural-interface/public/shared/tool-list-view.js +112 -0
- package/neural-interface/public/shared/topright-overflow-logic.js +54 -0
- package/neural-interface/public/shared/tour/tour-actor.js +268 -0
- package/neural-interface/public/shared/tour/tour-beats.js +336 -0
- package/neural-interface/public/shared/tour/tour-engine.js +884 -0
- package/neural-interface/public/shared/tour/tour-ink.js +390 -0
- package/neural-interface/public/shared/tour/tour-stage.js +440 -0
- package/neural-interface/public/shared/tour/tour-state.js +40 -0
- package/neural-interface/public/shared/tour/tour-tips.js +99 -0
- package/neural-interface/public/shared/tour/tour.css +144 -0
- package/neural-interface/public/shared/ui-antigravity-panel.js +19 -0
- package/neural-interface/public/shared/ui-assistant.js +2 -0
- package/neural-interface/public/shared/ui-automation-studio.js +111 -140
- package/neural-interface/public/shared/ui-claude-panel.js +376 -82
- package/neural-interface/public/shared/ui-cli-banner.js +23 -167
- package/neural-interface/public/shared/ui-command-runner.js +6 -3
- package/neural-interface/public/shared/ui-context-menu.js +295 -0
- package/neural-interface/public/shared/ui-cost-widget.js +57 -59
- package/neural-interface/public/shared/ui-crash-notice.js +187 -0
- package/neural-interface/public/shared/ui-detail.js +15 -3
- package/neural-interface/public/shared/ui-file-explorer.js +48 -6
- package/neural-interface/public/shared/ui-file-links.js +2 -2
- package/neural-interface/public/shared/ui-games.js +2 -2
- package/neural-interface/public/shared/ui-image-gallery.js +50 -47
- package/neural-interface/public/shared/ui-judgments.js +1 -1
- package/neural-interface/public/shared/ui-keybinds.js +33 -2
- package/neural-interface/public/shared/ui-link.js +3 -3
- package/neural-interface/public/shared/ui-menubar.js +10 -20
- package/neural-interface/public/shared/ui-native-loop-router-state.js +5 -0
- package/neural-interface/public/shared/ui-native-loop-router.js +11 -1
- package/neural-interface/public/shared/ui-navbar.js +49 -24
- package/neural-interface/public/shared/ui-notifications.js +1 -0
- package/neural-interface/public/shared/ui-panels.js +96 -65
- package/neural-interface/public/shared/ui-resume.js +9 -7
- package/neural-interface/public/shared/ui-schedules-studio.js +546 -431
- package/neural-interface/public/shared/ui-scroll-follow.js +16 -5
- package/neural-interface/public/shared/ui-sessions.js +27 -15
- package/neural-interface/public/shared/ui-settings.js +683 -526
- package/neural-interface/public/shared/ui-sidepanel-session-entry.js +9 -2
- package/neural-interface/public/shared/ui-sidepanel-sessions.js +4 -4
- package/neural-interface/public/shared/ui-sidepanel-state.js +23 -12
- package/neural-interface/public/shared/ui-sidepanel-tray.js +48 -7
- package/neural-interface/public/shared/ui-sidepanel-windows.js +18 -13
- package/neural-interface/public/shared/ui-skills.js +33 -2830
- package/neural-interface/public/shared/ui-styleguide.js +5 -2
- package/neural-interface/public/shared/ui-sync.js +15 -5
- package/neural-interface/public/shared/ui-terminal.js +270 -190
- package/neural-interface/public/shared/ui-tool-updates.js +6 -4
- package/neural-interface/public/shared/ui-tooltip.js +81 -51
- package/neural-interface/public/shared/ui-topright-overflow.js +233 -0
- package/neural-interface/public/shared/ui-trash.js +6 -4
- package/neural-interface/public/shared/ui-tutorial-layout.js +3 -117
- package/neural-interface/public/shared/ui-tutorial-preview.js +103 -0
- package/neural-interface/public/shared/ui-tutorial-steps.js +3 -65
- package/neural-interface/public/shared/ui-tutorial.css +47 -100
- package/neural-interface/public/shared/ui-tutorial.js +285 -509
- package/neural-interface/public/shared/ui-update.js +38 -2
- package/neural-interface/public/shared/ui-whiteboard.js +312 -59
- package/neural-interface/public/shared/ui-worker-end.js +5 -1
- package/neural-interface/public/shared/ui-workspaces.js +3 -2
- package/neural-interface/public/shared/view-variant.js +66 -0
- package/neural-interface/public/shared/whatsapp/wa-view.js +3 -3
- package/neural-interface/public/shared/whiteboard-list.js +172 -0
- package/neural-interface/public/shared/worker-end.js +10 -3
- package/neural-interface/public/shared/worker-questions.js +34 -0
- package/neural-interface/public/shared/worker-restart.js +12 -0
- package/neural-interface/public/sidepanel-session.html +2 -2
- package/neural-interface/public/variant/2d/background.js +2 -1
- package/neural-interface/public/variant/2d/context-menu.js +8 -2
- package/neural-interface/public/variant/2d/graph.js +42 -20
- package/neural-interface/public/variant/2d/hulls.js +14 -9
- package/neural-interface/public/variant/2d/lasso.js +11 -7
- package/neural-interface/public/variant/2d/main.js +32 -1
- package/neural-interface/public/variant/2d/minimap.js +11 -13
- package/neural-interface/public/variant/3d/main.js +69 -6
- package/neural-interface/public/variant/3d/map-controls.js +24 -9
- package/neural-interface/public/vendor/caveat/OFL.txt +93 -0
- package/neural-interface/public/vendor/caveat/caveat-latin-400-normal.woff2 +0 -0
- package/neural-interface/public/vendor/caveat/caveat-latin-700-normal.woff2 +0 -0
- package/neural-interface/public/vendor/caveat/caveat.css +17 -0
- package/neural-interface/public/vendor/caveat/manifest.json +12 -0
- package/neural-interface/public/vendor/yaml/LICENSE +13 -0
- package/neural-interface/public/vendor/yaml/manifest.json +4 -0
- package/neural-interface/public/vendor/yaml/yaml-2.9.1.min.js +137 -0
- package/neural-interface/scripts/build-vendor.mjs +32 -0
- package/neural-interface/server.js +4553 -2855
- package/neural-interface/templates/rulesets/README.md +1 -1
- package/neural-interface/templates/rulesets/core.md +1 -1
- package/neural-interface/templates/rulesets/legacy-hashes.json +23 -5
- package/neural-interface/templates/rulesets/manifest.json +8 -8
- package/npm-shrinkwrap.json +34 -12
- package/package.json +17 -3
- package/postinstall.js +9 -4
- package/preuninstall.js +1 -1
- package/setup.js +97 -322
- package/skills/skill-forge/SKILL.md +177 -0
- package/skills/skill-forge/evals/evals.json +54 -0
- package/skills/skill-forge/references/package.md +105 -0
- package/skills/skill-forge/references/review-and-recovery.md +63 -0
- package/skills/skill-forge/references/runtime-profiles.md +20 -0
- package/skills/skill-forge/references/sources-and-capabilities.md +51 -0
- package/skills/synabun/SKILL.md +10 -7
- package/skills/synabun/modules/audit.md +1 -5
- package/skills/synabun/modules/changelog.md +1 -5
- package/skills/synabun/modules/idea.md +1 -1
- package/skills/synabun/modules/memorize.md +6 -9
- package/skills/synabun/modules/schedule.md +6 -6
- package/mcp-server/dist/services/profiles.d.ts +0 -120
- package/mcp-server/dist/services/profiles.d.ts.map +0 -1
- package/mcp-server/dist/services/profiles.js +0 -387
- package/mcp-server/dist/services/profiles.js.map +0 -1
- package/mcp-server/dist/tools/leonardo-browser-tools.d.ts +0 -97
- package/mcp-server/dist/tools/leonardo-browser-tools.d.ts.map +0 -1
- package/mcp-server/dist/tools/leonardo-browser-tools.js +0 -228
- package/mcp-server/dist/tools/leonardo-browser-tools.js.map +0 -1
- package/mcp-server/dist/tools/leonardo.d.ts +0 -13
- package/mcp-server/dist/tools/leonardo.d.ts.map +0 -1
- package/mcp-server/dist/tools/leonardo.js +0 -21
- package/mcp-server/dist/tools/leonardo.js.map +0 -1
- package/mcp-server/dist/tools/profile.d.ts +0 -17
- package/mcp-server/dist/tools/profile.d.ts.map +0 -1
- package/mcp-server/dist/tools/profile.js +0 -114
- package/mcp-server/dist/tools/profile.js.map +0 -1
- package/mcp-server/src/services/profiles.ts +0 -428
- package/mcp-server/src/tools/leonardo-browser-tools.ts +0 -291
- package/mcp-server/src/tools/leonardo.ts +0 -30
- package/mcp-server/src/tools/profile.ts +0 -122
- package/neural-interface/lib/assistant-brains/opencode-browser-policy.js +0 -47
- package/neural-interface/lib/assistant-brains/opencode-route-gate.js +0 -62
- package/neural-interface/lib/mcp-profile-servers.js +0 -120
- package/neural-interface/public/shared/ui-tutorial-draw.js +0 -311
- package/skills/leonardo/SKILL.md +0 -168
- package/skills/leonardo/icon.svg +0 -1
- package/skills/leonardo/modules/browser-guide.md +0 -378
- package/skills/leonardo/modules/image-prompter.md +0 -283
- package/skills/leonardo/modules/model-advisor.md +0 -100
- package/skills/leonardo/modules/prompt-library.md +0 -110
- package/skills/leonardo/modules/style-guide.md +0 -186
- package/skills/leonardo/modules/video-prompter.md +0 -317
- /package/neural-interface/templates/rulesets/{gemini.md → antigravity.md} +0 -0
|
@@ -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, Antigravity, 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 an Antigravity mcp_config.json); 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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"}
|
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'fs';
|
|
2
|
+
import { basename, dirname, join } from 'path';
|
|
3
|
+
import { config } from '../config.js';
|
|
4
|
+
import { isHttpMode, sanitizeDesktopGrant, sanitizeRole } from './identity.js';
|
|
5
|
+
import { ALWAYS_ON_TOOLS, SELECTABLE_GROUP_IDS, TOOL_LIST_LIMITS, TOOL_GROUPS, isGatedGroup, isSelectableGroup, sortGroups } from './tool-catalog.js';
|
|
6
|
+
import { parseToolList, resolveToolList } from './tool-list.js';
|
|
7
|
+
/** The list of this runtime (comma-joined group ids) and the file its tool_groups changes go to. */
|
|
8
|
+
export const TOOLS_ENV = 'SYNABUN_TOOLS';
|
|
9
|
+
export const TOOLS_PATH_ENV = 'SYNABUN_TOOLS_PATH';
|
|
10
|
+
/** deferred / focus: a focus host; profiled / strict: a strict one. */
|
|
11
|
+
export const TOOL_CATALOG_MODE_ENV = 'SYNABUN_TOOL_CATALOG_MODE';
|
|
12
|
+
/** Read as aliases through the legacy conversion (an older Neural Interface, a user's own config.toml or an Antigravity mcp_config.json); never written. */
|
|
13
|
+
export const LEGACY_PROFILE_ENV = 'SYNABUN_PROFILE';
|
|
14
|
+
export const LEGACY_RUNTIME_PROFILE_PATH_ENV = 'SYNABUN_RUNTIME_PROFILE_PATH';
|
|
15
|
+
/** The owner's Default tools: Settings and `synabun tools set` write it; a runtime reads it when it starts, never later. */
|
|
16
|
+
export const DEFAULT_TOOLS_PATH = join(config.dataHome, 'data', 'default-tools.json');
|
|
17
|
+
const LEGACY_DEFAULT_PROFILE_PATHS = [join(config.dataDir, 'active-profile.json'), join(config.dataHome, 'data', 'active-profile.json')];
|
|
18
|
+
const REGISTRY_PATH = join(config.dataHome, 'data', 'mcp-registry.json');
|
|
19
|
+
/** Groups only a caller with this role sees: the role decides, so no list can reveal or hide them. */
|
|
20
|
+
export const ROLE_GATED_GROUPS = Object.freeze(Object.fromEntries(TOOL_GROUPS.filter((group) => group.gate === 'role:assistant').map((group) => [group.id, 'assistant'])));
|
|
21
|
+
/** Groups a capability the caller proves unlocks: `computer` needs a desktop grant (and macOS). */
|
|
22
|
+
export const CAPABILITY_GATED_GROUPS = Object.freeze(Object.fromEntries(TOOL_GROUPS.filter((group) => group.gate === 'grant:computer').map((group) => [group.id, 'computer'])));
|
|
23
|
+
export function isRoleGatedGroup(group) {
|
|
24
|
+
return Object.prototype.hasOwnProperty.call(ROLE_GATED_GROUPS, group);
|
|
25
|
+
}
|
|
26
|
+
export function isCapabilityGatedGroup(group) {
|
|
27
|
+
return Object.prototype.hasOwnProperty.call(CAPABILITY_GATED_GROUPS, group);
|
|
28
|
+
}
|
|
29
|
+
const SOURCE_NAMES = {
|
|
30
|
+
'tools-file': 'SYNABUN_TOOLS_PATH',
|
|
31
|
+
'tools-env': 'SYNABUN_TOOLS',
|
|
32
|
+
'legacy-runtime-file': 'SYNABUN_RUNTIME_PROFILE_PATH',
|
|
33
|
+
'legacy-profile-env': 'SYNABUN_PROFILE',
|
|
34
|
+
'default-tools': 'default-tools.json',
|
|
35
|
+
'legacy-default': 'active-profile.json',
|
|
36
|
+
header: 'X-Synabun-Tools',
|
|
37
|
+
channel: 'the worker channel',
|
|
38
|
+
};
|
|
39
|
+
/** The selection of a host's own list, with its host mode. */
|
|
40
|
+
export function selectionOf(groups, mode, source, added = []) {
|
|
41
|
+
return { groups: sortGroups(groups).filter(isSelectableGroup), mode, listError: null, source, added };
|
|
42
|
+
}
|
|
43
|
+
/** What a list that could not be read leaves: memory tools only (and the gated ones), strict until tool_groups succeeds. */
|
|
44
|
+
export function unreadableSelection(source, reason, hostMode) {
|
|
45
|
+
const name = SOURCE_NAMES[source];
|
|
46
|
+
return { groups: [], mode: 'strict', hostMode, listError: name ? `${name}: ${reason}` : reason, source, added: [] };
|
|
47
|
+
}
|
|
48
|
+
export function isClaudeCode(env = process.env) {
|
|
49
|
+
return env.CLAUDECODE === '1';
|
|
50
|
+
}
|
|
51
|
+
/** focus for Codex (SYNABUN_TOOL_CATALOG_MODE=deferred, or a managed Codex sidepanel), strict otherwise. */
|
|
52
|
+
export function readHostMode(env = process.env) {
|
|
53
|
+
const configured = String(env[TOOL_CATALOG_MODE_ENV] || '').trim().toLowerCase();
|
|
54
|
+
if (configured === 'deferred' || configured === 'focus')
|
|
55
|
+
return 'focus';
|
|
56
|
+
if (configured === 'profiled' || configured === 'strict')
|
|
57
|
+
return 'strict';
|
|
58
|
+
// Managed Codex sidepanels have always used this runtime prefix: one spawned before its launch environment
|
|
59
|
+
// named the catalog mode is a focus host all the same.
|
|
60
|
+
if (/^codex-sp-/.test(String(env.SYNABUN_TERMINAL_SESSION || '')))
|
|
61
|
+
return 'focus';
|
|
62
|
+
return 'strict';
|
|
63
|
+
}
|
|
64
|
+
const loggedProblems = new Set();
|
|
65
|
+
function logOnce(message) {
|
|
66
|
+
if (loggedProblems.has(message))
|
|
67
|
+
return;
|
|
68
|
+
loggedProblems.add(message);
|
|
69
|
+
console.error(`[SynaBun] ${message}`);
|
|
70
|
+
}
|
|
71
|
+
/** The registry's presets, read only to convert a stored profile name. */
|
|
72
|
+
export function readCustomPresets() {
|
|
73
|
+
try {
|
|
74
|
+
if (!existsSync(REGISTRY_PATH))
|
|
75
|
+
return null;
|
|
76
|
+
const registry = JSON.parse(readFileSync(REGISTRY_PATH, 'utf-8'));
|
|
77
|
+
const profiles = registry?.profiles;
|
|
78
|
+
return profiles && typeof profiles === 'object' && !Array.isArray(profiles) ? profiles : null;
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
logOnce(`Could not read the MCP registry for stored profile names: ${err instanceof Error ? err.message : String(err)}`);
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function fromList(value, source, hostMode, legacy) {
|
|
86
|
+
const parsed = parseToolList(value, legacy ? { legacy: true, customPresets: readCustomPresets() } : {});
|
|
87
|
+
if (!parsed.ok)
|
|
88
|
+
return unreadableSelection(source, parsed.message, hostMode);
|
|
89
|
+
const resolved = resolveToolList(parsed.items, { source: 'runtime' });
|
|
90
|
+
if (!resolved.ok)
|
|
91
|
+
return unreadableSelection(source, resolved.message, hostMode);
|
|
92
|
+
return selectionOf(resolved.groups, hostMode, source, resolved.added);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The selection of a list given in code or by a request (a header, the worker channel), resolved like a runtime's
|
|
96
|
+
* own: `all` expanded, a browser group's `browser` added. One that cannot be read is memory tools only, strict.
|
|
97
|
+
*/
|
|
98
|
+
export function selectionFromList(value, mode, source, { legacy = false } = {}) {
|
|
99
|
+
return fromList(value, source, mode, legacy);
|
|
100
|
+
}
|
|
101
|
+
/** A runtime file holds `{ "tools": [...] }`; one an older Neural Interface wrote holds `{ "profile": "..." }`. */
|
|
102
|
+
function fromFile(path, source, hostMode) {
|
|
103
|
+
const file = String(path || '').trim();
|
|
104
|
+
if (!file)
|
|
105
|
+
return null;
|
|
106
|
+
let text;
|
|
107
|
+
try {
|
|
108
|
+
if (!existsSync(file))
|
|
109
|
+
return null;
|
|
110
|
+
text = readFileSync(file, 'utf-8');
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
return unreadableSelection(source, `${basename(file)} could not be read (${err instanceof Error ? err.message : String(err)})`, hostMode);
|
|
114
|
+
}
|
|
115
|
+
let data;
|
|
116
|
+
try {
|
|
117
|
+
data = JSON.parse(text);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return unreadableSelection(source, `${basename(file)} is not JSON`, hostMode);
|
|
121
|
+
}
|
|
122
|
+
const record = data && typeof data === 'object' && !Array.isArray(data) ? data : null;
|
|
123
|
+
if (record && Array.isArray(record.tools))
|
|
124
|
+
return fromList(record.tools, source, hostMode, false);
|
|
125
|
+
if (record && typeof record.profile === 'string')
|
|
126
|
+
return fromList(record.profile, source, hostMode, true);
|
|
127
|
+
return unreadableSelection(source, `${basename(file)} names no tools`, hostMode);
|
|
128
|
+
}
|
|
129
|
+
function fromEnv(value, source, hostMode, legacy) {
|
|
130
|
+
if (value === undefined || !value.trim())
|
|
131
|
+
return null;
|
|
132
|
+
return fromList(value, source, hostMode, legacy);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* The selection a runtime starts with, the first of: its runtime file (SYNABUN_TOOLS_PATH), its list
|
|
136
|
+
* (SYNABUN_TOOLS), the runtime file of an older Neural Interface (SYNABUN_RUNTIME_PROFILE_PATH), Claude Code
|
|
137
|
+
* (CLAUDECODE=1: focus on every group), the old SYNABUN_PROFILE, the owner's Default tools, the old
|
|
138
|
+
* active-profile.json, every group. The runtime's own pins come before CLAUDECODE, so a strict runtime that
|
|
139
|
+
* inherited it from a parent shell keeps its list. A list that cannot be read is not skipped: the runtime starts
|
|
140
|
+
* with memory tools only and says why (fail closed, never every group).
|
|
141
|
+
*/
|
|
142
|
+
export function readInitialTools(env = process.env) {
|
|
143
|
+
const hostMode = readHostMode(env);
|
|
144
|
+
const steps = [
|
|
145
|
+
() => fromFile(env[TOOLS_PATH_ENV], 'tools-file', hostMode),
|
|
146
|
+
() => fromEnv(env[TOOLS_ENV], 'tools-env', hostMode, false),
|
|
147
|
+
() => fromFile(env[LEGACY_RUNTIME_PROFILE_PATH_ENV], 'legacy-runtime-file', hostMode),
|
|
148
|
+
() => (isClaudeCode(env) ? selectionOf(SELECTABLE_GROUP_IDS, 'focus', 'claude-code') : null),
|
|
149
|
+
() => fromEnv(env[LEGACY_PROFILE_ENV], 'legacy-profile-env', hostMode, true),
|
|
150
|
+
() => fromFile(DEFAULT_TOOLS_PATH, 'default-tools', hostMode),
|
|
151
|
+
() => {
|
|
152
|
+
for (const path of LEGACY_DEFAULT_PROFILE_PATHS) {
|
|
153
|
+
const selection = fromFile(path, 'legacy-default', hostMode);
|
|
154
|
+
if (selection)
|
|
155
|
+
return selection;
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
},
|
|
159
|
+
];
|
|
160
|
+
for (const step of steps) {
|
|
161
|
+
const selection = step();
|
|
162
|
+
if (!selection)
|
|
163
|
+
continue;
|
|
164
|
+
if (selection.listError)
|
|
165
|
+
logOnce(`Could not read this runtime's tool list (${selection.listError}); only memory tools are loaded.`);
|
|
166
|
+
return selection;
|
|
167
|
+
}
|
|
168
|
+
return selectionOf(SELECTABLE_GROUP_IDS, hostMode, 'all');
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* The value an older Neural Interface's /api/mcp/runtime-profile and runtime file understand for these groups: a
|
|
172
|
+
* comma list (every selectable id is one of its group names), or its always-on pseudo-group `memory` for none.
|
|
173
|
+
*/
|
|
174
|
+
export function legacyProfileValue(groups) {
|
|
175
|
+
const ids = sortGroups(groups).filter(isSelectableGroup);
|
|
176
|
+
return ids.length ? ids.join(',') : 'memory';
|
|
177
|
+
}
|
|
178
|
+
function writeJsonFile(path, value) {
|
|
179
|
+
const temp = `${path}.synabun-${process.pid}-${Date.now()}.tmp`;
|
|
180
|
+
try {
|
|
181
|
+
const dir = dirname(path);
|
|
182
|
+
if (!existsSync(dir))
|
|
183
|
+
mkdirSync(dir, { recursive: true });
|
|
184
|
+
writeFileSync(temp, JSON.stringify(value, null, 2) + '\n', 'utf-8');
|
|
185
|
+
renameSync(temp, path);
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
try {
|
|
190
|
+
unlinkSync(temp);
|
|
191
|
+
}
|
|
192
|
+
catch { /* never written */ }
|
|
193
|
+
console.error(`[SynaBun] Failed to save this runtime's tools at ${path}:`, err);
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Save this runtime's groups where a restarted child of the same runtime reads them, never the shared default.
|
|
199
|
+
* Over HTTP there is no such file: process.env is the Neural Interface's own, not a caller's.
|
|
200
|
+
*/
|
|
201
|
+
export function runtimeToolsWithExternalRefs(groups) {
|
|
202
|
+
const tools = sortGroups(groups).filter(isSelectableGroup);
|
|
203
|
+
if (isHttpMode())
|
|
204
|
+
return tools; // HTTP identity belongs to the request; NI preserves the outer run's refs.
|
|
205
|
+
const path = String(process.env[TOOLS_PATH_ENV] || process.env[LEGACY_RUNTIME_PROFILE_PATH_ENV] || '').trim();
|
|
206
|
+
let previous = process.env[TOOLS_ENV] || '';
|
|
207
|
+
try {
|
|
208
|
+
if (path && existsSync(path))
|
|
209
|
+
previous = JSON.parse(readFileSync(path, 'utf8')).tools ?? previous;
|
|
210
|
+
}
|
|
211
|
+
catch { /* launch env remains the fallback */ }
|
|
212
|
+
const parsed = parseToolList(previous);
|
|
213
|
+
const refs = parsed.ok ? parsed.items.filter(item => item.startsWith('mcp:')) : [];
|
|
214
|
+
const compact = tools.length + refs.length > TOOL_LIST_LIMITS.maxItems && SELECTABLE_GROUP_IDS.every(id => tools.includes(id));
|
|
215
|
+
return [...(compact ? ['all'] : tools), ...refs];
|
|
216
|
+
}
|
|
217
|
+
export function persistRuntimeTools(groups) {
|
|
218
|
+
if (isHttpMode())
|
|
219
|
+
return null;
|
|
220
|
+
const tools = runtimeToolsWithExternalRefs(groups);
|
|
221
|
+
const toolsPath = String(process.env[TOOLS_PATH_ENV] || '').trim();
|
|
222
|
+
if (toolsPath)
|
|
223
|
+
return writeJsonFile(toolsPath, { tools, updatedAt: new Date().toISOString() }) ? 'tools-file' : null;
|
|
224
|
+
const legacyPath = String(process.env[LEGACY_RUNTIME_PROFILE_PATH_ENV] || '').trim();
|
|
225
|
+
if (legacyPath)
|
|
226
|
+
return writeJsonFile(legacyPath, { profile: legacyProfileValue(groups), tools }) ? 'legacy-runtime-file' : null;
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
export function logCodexConfigNoticeOnce() {
|
|
230
|
+
logOnce('Changing this runtime\'s tools never rewrites ~/.codex/config.toml: the canonical Codex registration loads every '
|
|
231
|
+
+ 'SynaBun tool (SYNABUN_TOOLS=all, deferred catalog) and a tool list only sets a Codex runtime\'s focus.');
|
|
232
|
+
}
|
|
233
|
+
function sameList(a, b) {
|
|
234
|
+
return a.length === b.length && a.every((item, index) => item === b[index]);
|
|
235
|
+
}
|
|
236
|
+
export class ToolRuntime {
|
|
237
|
+
groups;
|
|
238
|
+
mode;
|
|
239
|
+
hostMode;
|
|
240
|
+
listError;
|
|
241
|
+
source;
|
|
242
|
+
added;
|
|
243
|
+
role;
|
|
244
|
+
capabilities;
|
|
245
|
+
platform;
|
|
246
|
+
activeGroups;
|
|
247
|
+
toolGroups = new Map();
|
|
248
|
+
ungroupedTools = ALWAYS_ON_TOOLS.length;
|
|
249
|
+
onToolsChanged = null;
|
|
250
|
+
notificationTimer = null;
|
|
251
|
+
constructor(selection = readInitialTools(), options = {}) {
|
|
252
|
+
// stdio children of the Codex/OpenCode assistant brains receive the role through their launch env; HTTP
|
|
253
|
+
// sessions bind it later (setRole). The desktop grant the same way (setCapabilities).
|
|
254
|
+
this.role = options.role !== undefined ? options.role : sanitizeRole(process.env.SYNABUN_ROLE);
|
|
255
|
+
this.capabilities = new Set(options.capabilities ?? (sanitizeDesktopGrant(process.env.SYNABUN_DESKTOP_GRANT) ? ['computer'] : []));
|
|
256
|
+
this.platform = options.platform || process.platform;
|
|
257
|
+
this.groups = sortGroups(selection.groups).filter(isSelectableGroup);
|
|
258
|
+
this.mode = selection.mode;
|
|
259
|
+
this.hostMode = selection.hostMode ?? selection.mode;
|
|
260
|
+
this.listError = selection.listError ?? null;
|
|
261
|
+
this.source = selection.source;
|
|
262
|
+
this.added = [...(selection.added || [])];
|
|
263
|
+
this.activeGroups = this.resolveActive(this.groups);
|
|
264
|
+
}
|
|
265
|
+
getGroups() { return [...this.groups]; }
|
|
266
|
+
/** The groups the instructions name: the selection plus the gated groups the role and grant unlock. */
|
|
267
|
+
getActiveGroups() { return this.activeGroups; }
|
|
268
|
+
getMode() { return this.mode; }
|
|
269
|
+
/** The mode the host has once its list reads: focus for Codex and Claude Code, strict otherwise. */
|
|
270
|
+
getHostMode() { return this.hostMode; }
|
|
271
|
+
getListError() { return this.listError; }
|
|
272
|
+
getSource() { return this.source; }
|
|
273
|
+
getAdded() { return [...this.added]; }
|
|
274
|
+
getRole() { return this.role; }
|
|
275
|
+
getCapabilities() { return [...this.capabilities]; }
|
|
276
|
+
getSelection() {
|
|
277
|
+
return { groups: this.getGroups(), mode: this.mode, hostMode: this.hostMode, listError: this.listError, source: this.source, added: this.getAdded() };
|
|
278
|
+
}
|
|
279
|
+
/** Plain setter: callers apply() afterwards so the gated groups follow (index.ts setServerRole does both). */
|
|
280
|
+
setRole(role) { this.role = role; }
|
|
281
|
+
/** Plain setter, like setRole. */
|
|
282
|
+
setCapabilities(capabilities) { this.capabilities = new Set(capabilities); }
|
|
283
|
+
setToolGroup(name, tools) {
|
|
284
|
+
this.toolGroups.set(name, tools);
|
|
285
|
+
}
|
|
286
|
+
/** How many registered tools sit outside every group (the always-on tools, and any compatibility name). */
|
|
287
|
+
setUngroupedToolCount(count) {
|
|
288
|
+
this.ungroupedTools = count;
|
|
289
|
+
}
|
|
290
|
+
setOnToolsChanged(fn) {
|
|
291
|
+
this.onToolsChanged = fn;
|
|
292
|
+
}
|
|
293
|
+
// HTTP clients can refresh over their open notification stream without destroying an in-flight call.
|
|
294
|
+
inBandRefresh = null;
|
|
295
|
+
setInBandRefresh(fn) { this.inBandRefresh = fn; }
|
|
296
|
+
hasInBandRefresh() { return !!this.inBandRefresh; }
|
|
297
|
+
refreshBeforeReply() { return this.inBandRefresh?.() ?? Promise.resolve(false); }
|
|
298
|
+
dispose() {
|
|
299
|
+
if (this.notificationTimer)
|
|
300
|
+
clearTimeout(this.notificationTimer);
|
|
301
|
+
this.notificationTimer = null;
|
|
302
|
+
this.onToolsChanged = null;
|
|
303
|
+
this.inBandRefresh = null;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Coalesce one delayed tools/list_changed. The delay matters: OpenCode used to get the notification while the
|
|
307
|
+
* tool call that caused it was still in flight, and could abort or cache the old tool round trip.
|
|
308
|
+
*/
|
|
309
|
+
scheduleToolsChangedNotification(delayMs = 10) {
|
|
310
|
+
if (!this.onToolsChanged)
|
|
311
|
+
return false;
|
|
312
|
+
if (this.notificationTimer)
|
|
313
|
+
clearTimeout(this.notificationTimer);
|
|
314
|
+
this.notificationTimer = setTimeout(() => {
|
|
315
|
+
this.notificationTimer = null;
|
|
316
|
+
try {
|
|
317
|
+
void Promise.resolve(this.onToolsChanged?.()).catch((err) => {
|
|
318
|
+
console.error('[SynaBun] tools/list_changed notifier failed:', err);
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
catch (err) {
|
|
322
|
+
console.error('[SynaBun] tools/list_changed notifier failed:', err);
|
|
323
|
+
}
|
|
324
|
+
}, Math.max(0, delayMs));
|
|
325
|
+
this.notificationTimer.unref?.();
|
|
326
|
+
return true;
|
|
327
|
+
}
|
|
328
|
+
/** The selection with the gates applied: a gated group is active iff this runtime's role or grant unlocks it. */
|
|
329
|
+
resolveActive(groups) {
|
|
330
|
+
const active = new Set(groups.filter(isSelectableGroup));
|
|
331
|
+
for (const [group, role] of Object.entries(ROLE_GATED_GROUPS))
|
|
332
|
+
if (this.role === role)
|
|
333
|
+
active.add(group);
|
|
334
|
+
for (const [group, capability] of Object.entries(CAPABILITY_GATED_GROUPS)) {
|
|
335
|
+
if (this.capabilities.has(capability) && (capability !== 'computer' || this.platform === 'darwin'))
|
|
336
|
+
active.add(group);
|
|
337
|
+
}
|
|
338
|
+
return active;
|
|
339
|
+
}
|
|
340
|
+
/** Tools this server advertises: the ones outside every group and each group's enabled tools. */
|
|
341
|
+
getAdvertisedToolCount() {
|
|
342
|
+
let total = this.ungroupedTools;
|
|
343
|
+
for (const tools of this.toolGroups.values())
|
|
344
|
+
total += tools.filter((tool) => tool.enabled).length;
|
|
345
|
+
return total;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Apply a new selection (or re-apply the current one after a role or grant change). Tools are flipped directly:
|
|
349
|
+
* RegisteredTool.enable()/disable() would each send a notification, and the caller sends one after its answer.
|
|
350
|
+
*/
|
|
351
|
+
apply(next = {}) {
|
|
352
|
+
const groups = next.groups ? sortGroups(next.groups).filter(isSelectableGroup) : this.groups;
|
|
353
|
+
const mode = next.mode ?? this.mode;
|
|
354
|
+
const listError = next.listError !== undefined ? next.listError : this.listError;
|
|
355
|
+
const previous = { groups: this.groups, mode: this.mode, listError: this.listError, active: this.activeGroups };
|
|
356
|
+
const active = this.resolveActive(groups);
|
|
357
|
+
let advertisedChanged = false;
|
|
358
|
+
for (const [group, tools] of this.toolGroups) {
|
|
359
|
+
// A gated group ignores the mode: a focus host gets every other group up front, never one its role or grant does not unlock.
|
|
360
|
+
const advertise = isGatedGroup(group) ? active.has(group) : mode === 'focus' || active.has(group);
|
|
361
|
+
for (const tool of tools) {
|
|
362
|
+
if (tool.enabled === advertise)
|
|
363
|
+
continue;
|
|
364
|
+
tool.enabled = advertise;
|
|
365
|
+
advertisedChanged = true;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
const enabled = sortGroups([...active].filter((group) => !previous.active.has(group)));
|
|
369
|
+
const disabled = sortGroups([...previous.active].filter((group) => !active.has(group)));
|
|
370
|
+
this.groups = groups;
|
|
371
|
+
this.mode = mode;
|
|
372
|
+
this.listError = listError;
|
|
373
|
+
this.activeGroups = active;
|
|
374
|
+
if (next.hostMode)
|
|
375
|
+
this.hostMode = next.hostMode;
|
|
376
|
+
if (next.source)
|
|
377
|
+
this.source = next.source;
|
|
378
|
+
if (next.added)
|
|
379
|
+
this.added = [...next.added];
|
|
380
|
+
const totalTools = this.getAdvertisedToolCount();
|
|
381
|
+
const changed = enabled.length > 0 || disabled.length > 0 || previous.mode !== mode
|
|
382
|
+
|| previous.listError !== listError || !sameList(previous.groups, groups);
|
|
383
|
+
if (changed) {
|
|
384
|
+
console.error(`[SynaBun] Tools (${mode}): ${groups.join(',') || 'memory only'} (${totalTools} tools, +${enabled.join(',') || 'none'}, -${disabled.join(',') || 'none'})`);
|
|
385
|
+
}
|
|
386
|
+
return {
|
|
387
|
+
groups: [...groups],
|
|
388
|
+
activeGroups: sortGroups(active),
|
|
389
|
+
enabled,
|
|
390
|
+
disabled,
|
|
391
|
+
added: [...this.added],
|
|
392
|
+
totalTools,
|
|
393
|
+
changed,
|
|
394
|
+
advertisedChanged,
|
|
395
|
+
mode,
|
|
396
|
+
listError,
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
//# sourceMappingURL=tool-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-runtime.js","sourceRoot":"","sources":["../../src/services/tool-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,7 +64,7 @@ export const SURFACE_META = {
|
|
|
64
64
|
'worker-outcome': { label: 'Worker outcome', description: 'Assistant workers: reads done / blocked / needs input from a final message that has no ## Result block (instead of spending a retry turn), and what kept a failed or blocked run from finishing (capability, access, needs the user, transient), which decides whether escalation is offered.', fallback: 'one result-retry worker turn; every failed, blocked or result-less run offers a one-tier escalation' },
|
|
65
65
|
'worker-claim': { label: 'Worker claim', description: 'Assistant workers: whether a run reported done while claiming success (tests pass, fixed, verified) that its own command output does not show. Flags the run so the Assistant verifies before reporting; asked only when the turn exposed commands or tool results.', fallback: 'no check', ridesWith: 'worker-outcome' },
|
|
66
66
|
'desktop-target': { label: 'Desktop target', description: 'Computer use: ranks the visible controls of the front window against a computer_ax intent. Advisory; one low-risk press by intent only behind the desktop benchmark gate.', fallback: 'the full accessibility tree, or a word-overlap ranking when an intent is given' },
|
|
67
|
-
'budget-split': { label: 'Budget split', description: 'Assistant sessions with a budget: how much of the money still to be spent will land on each provider (Claude Code, Codex, OpenCode), asked at the first route and at checkpoints (a share used up, a budget change, a run ending). It only divides what the user allowed: shares never add up to more than is left, and it never picks a model.', fallback: 'weights from the saved routes, the session\'s tasks and live runs, times the list price of the routed models; the brain keeps its reserve either way' },
|
|
67
|
+
'budget-split': { label: 'Budget split', description: 'Assistant sessions with a budget: how much of the money still to be spent will land on each priced provider (Claude Code, Codex, OpenCode; Antigravity reports tokens, not prices, so it takes no share and its runs do not run under a budget), asked at the first route and at checkpoints (a share used up, a budget change, a run ending). It only divides what the user allowed: shares never add up to more than is left, and it never picks a model.', fallback: 'weights from the saved routes, the session\'s tasks and live runs, times the list price of the routed models; the brain keeps its reserve either way' },
|
|
68
68
|
};
|
|
69
69
|
const SURFACE_DEFAULTS = {
|
|
70
70
|
'relations': { enabled: true, timeoutMs: 8000, minConfidence: 0.7 },
|