synabun 2.0.7 → 2.0.10
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 +67 -0
- package/README.md +1 -1
- package/THIRD-PARTY-LICENSES.md +46 -4
- package/hooks/claude-code/post-plan.mjs +6 -30
- package/hooks/claude-code/session-start.mjs +1 -4
- package/hooks/claude-code/shared.mjs +106 -72
- package/launcher.mjs +9 -3
- package/lib/package-processes.js +670 -0
- package/lib/runtime-dependencies.js +225 -0
- package/lib/start-launcher.js +6 -1
- package/mcp-server/dist/services/browser-bench.d.ts +1 -1
- package/mcp-server/dist/services/browser-bench.d.ts.map +1 -1
- package/mcp-server/dist/services/browser-bench.js +1 -1
- package/mcp-server/dist/services/browser-bench.js.map +1 -1
- package/mcp-server/dist/services/categories.d.ts +35 -2
- package/mcp-server/dist/services/categories.d.ts.map +1 -1
- package/mcp-server/dist/services/categories.js +77 -33
- package/mcp-server/dist/services/categories.js.map +1 -1
- package/mcp-server/dist/services/desktop-bench.d.ts +7 -7
- package/mcp-server/dist/services/desktop-bench.d.ts.map +1 -1
- package/mcp-server/dist/services/desktop-bench.js +1 -1
- package/mcp-server/dist/services/desktop-bench.js.map +1 -1
- package/mcp-server/dist/tools/agents.d.ts +1 -1
- package/mcp-server/dist/tools/agents.d.ts.map +1 -1
- package/mcp-server/dist/tools/agents.js +1 -1
- package/mcp-server/dist/tools/agents.js.map +1 -1
- package/mcp-server/dist/tools/bluesky.js +1 -1
- package/mcp-server/dist/tools/bluesky.js.map +1 -1
- package/mcp-server/dist/tools/browser-advanced.d.ts +1 -1
- package/mcp-server/dist/tools/browser-advanced.d.ts.map +1 -1
- package/mcp-server/dist/tools/browser-advanced.js +1 -1
- package/mcp-server/dist/tools/browser-advanced.js.map +1 -1
- package/mcp-server/dist/tools/browser-batch.d.ts +1 -1
- package/mcp-server/dist/tools/browser-batch.d.ts.map +1 -1
- package/mcp-server/dist/tools/browser-batch.js +1 -1
- package/mcp-server/dist/tools/browser-batch.js.map +1 -1
- package/mcp-server/dist/tools/browser-cheatsheet.d.ts +1 -1
- package/mcp-server/dist/tools/browser-cheatsheet.d.ts.map +1 -1
- package/mcp-server/dist/tools/browser-cheatsheet.js +1 -1
- package/mcp-server/dist/tools/browser-cheatsheet.js.map +1 -1
- package/mcp-server/dist/tools/browser-interact.d.ts +1 -1
- package/mcp-server/dist/tools/browser-interact.d.ts.map +1 -1
- package/mcp-server/dist/tools/browser-interact.js +1 -1
- package/mcp-server/dist/tools/browser-interact.js.map +1 -1
- package/mcp-server/dist/tools/browser-navigate.d.ts +1 -1
- package/mcp-server/dist/tools/browser-navigate.d.ts.map +1 -1
- package/mcp-server/dist/tools/browser-navigate.js +1 -1
- package/mcp-server/dist/tools/browser-navigate.js.map +1 -1
- package/mcp-server/dist/tools/browser-observe.d.ts +1 -1
- package/mcp-server/dist/tools/browser-observe.d.ts.map +1 -1
- package/mcp-server/dist/tools/browser-observe.js +1 -1
- package/mcp-server/dist/tools/browser-observe.js.map +1 -1
- package/mcp-server/dist/tools/card-tools.d.ts +1 -1
- package/mcp-server/dist/tools/card-tools.d.ts.map +1 -1
- package/mcp-server/dist/tools/card-tools.js +1 -1
- package/mcp-server/dist/tools/card-tools.js.map +1 -1
- package/mcp-server/dist/tools/category.d.ts +1 -1
- package/mcp-server/dist/tools/category.d.ts.map +1 -1
- package/mcp-server/dist/tools/category.js +5 -1
- package/mcp-server/dist/tools/category.js.map +1 -1
- package/mcp-server/dist/tools/choice.d.ts +1 -1
- package/mcp-server/dist/tools/choice.d.ts.map +1 -1
- package/mcp-server/dist/tools/choice.js +1 -1
- package/mcp-server/dist/tools/choice.js.map +1 -1
- package/mcp-server/dist/tools/computer.d.ts +1 -1
- package/mcp-server/dist/tools/computer.d.ts.map +1 -1
- package/mcp-server/dist/tools/computer.js +1 -1
- package/mcp-server/dist/tools/computer.js.map +1 -1
- package/mcp-server/dist/tools/discord-channel.d.ts +1 -1
- package/mcp-server/dist/tools/discord-channel.d.ts.map +1 -1
- package/mcp-server/dist/tools/discord-channel.js +1 -1
- package/mcp-server/dist/tools/discord-channel.js.map +1 -1
- package/mcp-server/dist/tools/discord-guild.d.ts +1 -1
- package/mcp-server/dist/tools/discord-guild.d.ts.map +1 -1
- package/mcp-server/dist/tools/discord-guild.js +1 -1
- package/mcp-server/dist/tools/discord-guild.js.map +1 -1
- package/mcp-server/dist/tools/discord-member.d.ts +1 -1
- package/mcp-server/dist/tools/discord-member.d.ts.map +1 -1
- package/mcp-server/dist/tools/discord-member.js +1 -1
- package/mcp-server/dist/tools/discord-member.js.map +1 -1
- package/mcp-server/dist/tools/discord-message.d.ts +1 -1
- package/mcp-server/dist/tools/discord-message.d.ts.map +1 -1
- package/mcp-server/dist/tools/discord-message.js +1 -1
- package/mcp-server/dist/tools/discord-message.js.map +1 -1
- package/mcp-server/dist/tools/discord-onboarding.d.ts +1 -1
- package/mcp-server/dist/tools/discord-onboarding.d.ts.map +1 -1
- package/mcp-server/dist/tools/discord-onboarding.js +1 -1
- package/mcp-server/dist/tools/discord-onboarding.js.map +1 -1
- package/mcp-server/dist/tools/discord-role.d.ts +1 -1
- package/mcp-server/dist/tools/discord-role.d.ts.map +1 -1
- package/mcp-server/dist/tools/discord-role.js +1 -1
- package/mcp-server/dist/tools/discord-role.js.map +1 -1
- package/mcp-server/dist/tools/discord-thread.d.ts +1 -1
- package/mcp-server/dist/tools/discord-thread.d.ts.map +1 -1
- package/mcp-server/dist/tools/discord-thread.js +1 -1
- package/mcp-server/dist/tools/discord-thread.js.map +1 -1
- package/mcp-server/dist/tools/discord-webhook.d.ts +1 -1
- package/mcp-server/dist/tools/discord-webhook.d.ts.map +1 -1
- package/mcp-server/dist/tools/discord-webhook.js +1 -1
- package/mcp-server/dist/tools/discord-webhook.js.map +1 -1
- package/mcp-server/dist/tools/fb-groups.d.ts +1 -1
- package/mcp-server/dist/tools/fb-groups.d.ts.map +1 -1
- package/mcp-server/dist/tools/fb-groups.js +1 -1
- package/mcp-server/dist/tools/fb-groups.js.map +1 -1
- package/mcp-server/dist/tools/forget.d.ts +1 -1
- package/mcp-server/dist/tools/forget.d.ts.map +1 -1
- package/mcp-server/dist/tools/forget.js +1 -1
- package/mcp-server/dist/tools/forget.js.map +1 -1
- package/mcp-server/dist/tools/git-tools.d.ts +1 -1
- package/mcp-server/dist/tools/git-tools.d.ts.map +1 -1
- package/mcp-server/dist/tools/git-tools.js +1 -1
- package/mcp-server/dist/tools/git-tools.js.map +1 -1
- package/mcp-server/dist/tools/gsc/experience.d.ts +1 -1
- package/mcp-server/dist/tools/gsc/experience.d.ts.map +1 -1
- package/mcp-server/dist/tools/gsc/experience.js +1 -1
- package/mcp-server/dist/tools/gsc/experience.js.map +1 -1
- package/mcp-server/dist/tools/gsc/indexing.d.ts +1 -1
- package/mcp-server/dist/tools/gsc/indexing.d.ts.map +1 -1
- package/mcp-server/dist/tools/gsc/indexing.js +1 -1
- package/mcp-server/dist/tools/gsc/indexing.js.map +1 -1
- package/mcp-server/dist/tools/gsc/inspect.d.ts +1 -1
- package/mcp-server/dist/tools/gsc/inspect.d.ts.map +1 -1
- package/mcp-server/dist/tools/gsc/inspect.js +1 -1
- package/mcp-server/dist/tools/gsc/inspect.js.map +1 -1
- package/mcp-server/dist/tools/gsc/navigate.d.ts +1 -1
- package/mcp-server/dist/tools/gsc/navigate.d.ts.map +1 -1
- package/mcp-server/dist/tools/gsc/navigate.js +1 -1
- package/mcp-server/dist/tools/gsc/navigate.js.map +1 -1
- package/mcp-server/dist/tools/gsc/performance.d.ts +1 -1
- package/mcp-server/dist/tools/gsc/performance.d.ts.map +1 -1
- package/mcp-server/dist/tools/gsc/performance.js +1 -1
- package/mcp-server/dist/tools/gsc/performance.js.map +1 -1
- package/mcp-server/dist/tools/gsc/settings.d.ts +1 -1
- package/mcp-server/dist/tools/gsc/settings.d.ts.map +1 -1
- package/mcp-server/dist/tools/gsc/settings.js +1 -1
- package/mcp-server/dist/tools/gsc/settings.js.map +1 -1
- package/mcp-server/dist/tools/image-tools.d.ts +1 -1
- package/mcp-server/dist/tools/image-tools.d.ts.map +1 -1
- package/mcp-server/dist/tools/image-tools.js +1 -1
- package/mcp-server/dist/tools/image-tools.js.map +1 -1
- package/mcp-server/dist/tools/leonardo-browser-tools.d.ts +1 -1
- package/mcp-server/dist/tools/leonardo-browser-tools.d.ts.map +1 -1
- package/mcp-server/dist/tools/leonardo-browser-tools.js +1 -1
- package/mcp-server/dist/tools/leonardo-browser-tools.js.map +1 -1
- package/mcp-server/dist/tools/loop.d.ts +1 -1
- package/mcp-server/dist/tools/loop.d.ts.map +1 -1
- package/mcp-server/dist/tools/loop.js +1 -1
- package/mcp-server/dist/tools/loop.js.map +1 -1
- package/mcp-server/dist/tools/memories.d.ts +1 -1
- package/mcp-server/dist/tools/memories.d.ts.map +1 -1
- package/mcp-server/dist/tools/memories.js +1 -1
- package/mcp-server/dist/tools/memories.js.map +1 -1
- package/mcp-server/dist/tools/morelogin.d.ts +1 -1
- package/mcp-server/dist/tools/morelogin.d.ts.map +1 -1
- package/mcp-server/dist/tools/morelogin.js +1 -1
- package/mcp-server/dist/tools/morelogin.js.map +1 -1
- package/mcp-server/dist/tools/profile.d.ts +1 -1
- package/mcp-server/dist/tools/profile.d.ts.map +1 -1
- package/mcp-server/dist/tools/profile.js +1 -1
- package/mcp-server/dist/tools/profile.js.map +1 -1
- package/mcp-server/dist/tools/recall.d.ts +1 -1
- package/mcp-server/dist/tools/recall.d.ts.map +1 -1
- package/mcp-server/dist/tools/recall.js +1 -1
- package/mcp-server/dist/tools/recall.js.map +1 -1
- package/mcp-server/dist/tools/reflect.d.ts +1 -1
- package/mcp-server/dist/tools/reflect.d.ts.map +1 -1
- package/mcp-server/dist/tools/reflect.js +1 -1
- package/mcp-server/dist/tools/reflect.js.map +1 -1
- package/mcp-server/dist/tools/remember.d.ts +1 -1
- package/mcp-server/dist/tools/remember.d.ts.map +1 -1
- package/mcp-server/dist/tools/remember.js +13 -11
- package/mcp-server/dist/tools/remember.js.map +1 -1
- package/mcp-server/dist/tools/restore.d.ts +1 -1
- package/mcp-server/dist/tools/restore.d.ts.map +1 -1
- package/mcp-server/dist/tools/restore.js +1 -1
- package/mcp-server/dist/tools/restore.js.map +1 -1
- package/mcp-server/dist/tools/style-guide-tools.d.ts +1 -1
- package/mcp-server/dist/tools/style-guide-tools.d.ts.map +1 -1
- package/mcp-server/dist/tools/style-guide-tools.js +1 -1
- package/mcp-server/dist/tools/style-guide-tools.js.map +1 -1
- package/mcp-server/dist/tools/sync.d.ts +1 -1
- package/mcp-server/dist/tools/sync.d.ts.map +1 -1
- package/mcp-server/dist/tools/sync.js +1 -1
- package/mcp-server/dist/tools/sync.js.map +1 -1
- package/mcp-server/dist/tools/tictactoe-tools.d.ts +1 -1
- package/mcp-server/dist/tools/tictactoe-tools.d.ts.map +1 -1
- package/mcp-server/dist/tools/tictactoe-tools.js +1 -1
- package/mcp-server/dist/tools/tictactoe-tools.js.map +1 -1
- package/mcp-server/dist/tools/utils.d.ts +1 -1
- package/mcp-server/dist/tools/utils.d.ts.map +1 -1
- package/mcp-server/dist/tools/utils.js +1 -1
- package/mcp-server/dist/tools/utils.js.map +1 -1
- package/mcp-server/dist/tools/whatsapp-send-file.d.ts +1 -1
- package/mcp-server/dist/tools/whatsapp-send-file.d.ts.map +1 -1
- package/mcp-server/dist/tools/whatsapp-send-file.js +1 -1
- package/mcp-server/dist/tools/whatsapp-send-file.js.map +1 -1
- package/mcp-server/dist/tools/whiteboard-tools.d.ts +3 -3
- package/mcp-server/dist/tools/whiteboard-tools.d.ts.map +1 -1
- package/mcp-server/dist/tools/whiteboard-tools.js +1 -1
- package/mcp-server/dist/tools/whiteboard-tools.js.map +1 -1
- package/mcp-server/dist/tools/youtube/analytics.d.ts +1 -1
- package/mcp-server/dist/tools/youtube/analytics.d.ts.map +1 -1
- package/mcp-server/dist/tools/youtube/analytics.js +1 -1
- package/mcp-server/dist/tools/youtube/analytics.js.map +1 -1
- package/mcp-server/dist/tools/youtube/download.d.ts +1 -1
- package/mcp-server/dist/tools/youtube/download.d.ts.map +1 -1
- package/mcp-server/dist/tools/youtube/download.js +1 -1
- package/mcp-server/dist/tools/youtube/download.js.map +1 -1
- package/mcp-server/dist/tools/youtube/media.d.ts +1 -1
- package/mcp-server/dist/tools/youtube/media.d.ts.map +1 -1
- package/mcp-server/dist/tools/youtube/media.js +1 -1
- package/mcp-server/dist/tools/youtube/media.js.map +1 -1
- package/mcp-server/dist/tools/youtube/metadata.d.ts +1 -1
- package/mcp-server/dist/tools/youtube/metadata.d.ts.map +1 -1
- package/mcp-server/dist/tools/youtube/metadata.js +1 -1
- package/mcp-server/dist/tools/youtube/metadata.js.map +1 -1
- package/mcp-server/dist/tools/youtube/navigate.d.ts +1 -1
- package/mcp-server/dist/tools/youtube/navigate.d.ts.map +1 -1
- package/mcp-server/dist/tools/youtube/navigate.js +1 -1
- package/mcp-server/dist/tools/youtube/navigate.js.map +1 -1
- package/mcp-server/dist/tools/youtube/playlist.d.ts +1 -1
- package/mcp-server/dist/tools/youtube/playlist.d.ts.map +1 -1
- package/mcp-server/dist/tools/youtube/playlist.js +1 -1
- package/mcp-server/dist/tools/youtube/playlist.js.map +1 -1
- package/mcp-server/dist/tools/youtube/schedule.d.ts +1 -1
- package/mcp-server/dist/tools/youtube/schedule.d.ts.map +1 -1
- package/mcp-server/dist/tools/youtube/schedule.js +1 -1
- package/mcp-server/dist/tools/youtube/schedule.js.map +1 -1
- package/mcp-server/dist/tools/youtube/source.d.ts +1 -1
- package/mcp-server/dist/tools/youtube/source.d.ts.map +1 -1
- package/mcp-server/dist/tools/youtube/source.js +1 -1
- package/mcp-server/dist/tools/youtube/source.js.map +1 -1
- package/mcp-server/dist/tools/youtube/upload.d.ts +1 -1
- package/mcp-server/dist/tools/youtube/upload.d.ts.map +1 -1
- package/mcp-server/dist/tools/youtube/upload.js +4 -9
- package/mcp-server/dist/tools/youtube/upload.js.map +1 -1
- package/mcp-server/dist/tui.js +16 -4
- package/mcp-server/dist/tui.js.map +1 -1
- package/mcp-server/package-lock.json +3 -3
- package/mcp-server/package.json +3 -3
- package/mcp-server/src/services/browser-bench.ts +1 -1
- package/mcp-server/src/services/categories.ts +77 -32
- package/mcp-server/src/services/desktop-bench.ts +1 -1
- package/mcp-server/src/tools/agents.ts +1 -1
- package/mcp-server/src/tools/bluesky.ts +1 -1
- package/mcp-server/src/tools/browser-advanced.ts +1 -1
- package/mcp-server/src/tools/browser-batch.ts +1 -1
- package/mcp-server/src/tools/browser-cheatsheet.ts +1 -1
- package/mcp-server/src/tools/browser-interact.ts +1 -1
- package/mcp-server/src/tools/browser-navigate.ts +1 -1
- package/mcp-server/src/tools/browser-observe.ts +1 -1
- package/mcp-server/src/tools/card-tools.ts +1 -1
- package/mcp-server/src/tools/category.ts +6 -1
- package/mcp-server/src/tools/choice.ts +1 -1
- package/mcp-server/src/tools/computer.ts +1 -1
- package/mcp-server/src/tools/discord-channel.ts +1 -1
- package/mcp-server/src/tools/discord-guild.ts +1 -1
- package/mcp-server/src/tools/discord-member.ts +1 -1
- package/mcp-server/src/tools/discord-message.ts +1 -1
- package/mcp-server/src/tools/discord-onboarding.ts +1 -1
- package/mcp-server/src/tools/discord-role.ts +1 -1
- package/mcp-server/src/tools/discord-thread.ts +1 -1
- package/mcp-server/src/tools/discord-webhook.ts +1 -1
- package/mcp-server/src/tools/fb-groups.ts +1 -1
- package/mcp-server/src/tools/forget.ts +1 -1
- package/mcp-server/src/tools/git-tools.ts +1 -1
- package/mcp-server/src/tools/gsc/experience.ts +1 -1
- package/mcp-server/src/tools/gsc/indexing.ts +1 -1
- package/mcp-server/src/tools/gsc/inspect.ts +1 -1
- package/mcp-server/src/tools/gsc/navigate.ts +1 -1
- package/mcp-server/src/tools/gsc/performance.ts +1 -1
- package/mcp-server/src/tools/gsc/settings.ts +1 -1
- package/mcp-server/src/tools/image-tools.ts +1 -1
- package/mcp-server/src/tools/leonardo-browser-tools.ts +1 -1
- package/mcp-server/src/tools/loop.ts +1 -1
- package/mcp-server/src/tools/memories.ts +1 -1
- package/mcp-server/src/tools/morelogin.ts +1 -1
- package/mcp-server/src/tools/profile.ts +1 -1
- package/mcp-server/src/tools/recall.ts +1 -1
- package/mcp-server/src/tools/reflect.ts +1 -1
- package/mcp-server/src/tools/remember.ts +13 -12
- package/mcp-server/src/tools/restore.ts +1 -1
- package/mcp-server/src/tools/style-guide-tools.ts +1 -1
- package/mcp-server/src/tools/sync.ts +1 -1
- package/mcp-server/src/tools/tictactoe-tools.ts +1 -1
- package/mcp-server/src/tools/utils.ts +1 -1
- package/mcp-server/src/tools/whatsapp-send-file.ts +1 -1
- package/mcp-server/src/tools/whiteboard-tools.ts +1 -1
- package/mcp-server/src/tools/youtube/analytics.ts +1 -1
- package/mcp-server/src/tools/youtube/download.ts +1 -1
- package/mcp-server/src/tools/youtube/media.ts +1 -1
- package/mcp-server/src/tools/youtube/metadata.ts +1 -1
- package/mcp-server/src/tools/youtube/navigate.ts +1 -1
- package/mcp-server/src/tools/youtube/playlist.ts +1 -1
- package/mcp-server/src/tools/youtube/schedule.ts +1 -1
- package/mcp-server/src/tools/youtube/source.ts +1 -1
- package/mcp-server/src/tools/youtube/upload.ts +4 -12
- package/mcp-server/src/tui.ts +22 -9
- package/neural-interface/i18n/en.json +236 -7
- package/neural-interface/i18n/pt-BR.json +238 -9
- package/neural-interface/lib/account-usage.js +5 -3
- package/neural-interface/lib/agent-sandbox-elevation.js +102 -0
- package/neural-interface/lib/agent-sandbox-setting.js +57 -0
- package/neural-interface/lib/app-controls-api.js +161 -0
- package/neural-interface/lib/assistant-api.js +40 -7
- package/neural-interface/lib/assistant-brains/opencode.js +13 -1
- package/neural-interface/lib/assistant-brains/opencode2-browser-policy/index.js +44 -0
- package/neural-interface/lib/assistant-brains/opencode2-route-gate/index.js +57 -0
- package/neural-interface/lib/assistant-catalog.js +17 -2
- package/neural-interface/lib/assistant-dispatch.js +3 -0
- package/neural-interface/lib/assistant-envelope.js +19 -1
- package/neural-interface/lib/assistant-route-gate-codex.js +3 -1
- package/neural-interface/lib/assistant-runtime.js +131 -8
- package/neural-interface/lib/claude-model-catalog.js +64 -14
- package/neural-interface/lib/codex-account-auth.js +4 -2
- package/neural-interface/lib/codex-accounts.js +14 -1
- package/neural-interface/lib/codex-settings-schema.js +111 -47
- package/neural-interface/lib/editor-completion-opencode.js +132 -35
- package/neural-interface/lib/exec-loop-command.js +11 -2
- package/neural-interface/lib/install-details.js +23 -5
- package/neural-interface/lib/launch-cache.js +293 -0
- package/neural-interface/lib/login-start.js +524 -0
- package/neural-interface/lib/native-loop-providers.js +24 -4
- package/neural-interface/lib/native-loop-runtime.js +19 -0
- package/neural-interface/lib/opencode-db-schema.js +75 -0
- package/neural-interface/lib/opencode-history.js +16 -1
- package/neural-interface/lib/opencode-protocol.js +173 -0
- package/neural-interface/lib/opencode-provider-view.js +81 -0
- package/neural-interface/lib/opencode-runtime-config.js +10 -3
- package/neural-interface/lib/opencode-serve-records.js +606 -0
- package/neural-interface/lib/opencode-v2-client.js +33 -6
- package/neural-interface/lib/opencode-v2-ws-requests.js +19 -5
- package/neural-interface/lib/opencode-worker-activity.js +229 -0
- package/neural-interface/lib/opencode2-client.js +760 -0
- package/neural-interface/lib/opencode2-proxy.js +116 -0
- package/neural-interface/lib/opencode2-translate.js +1008 -0
- package/neural-interface/lib/process-identity.js +361 -0
- package/neural-interface/lib/provider-panel-terminal-auth.js +3 -2
- package/neural-interface/lib/session-cache-builder.js +26 -5
- package/neural-interface/lib/session-indexer.js +3 -1
- package/neural-interface/lib/session-title-generator.js +20 -0
- package/neural-interface/lib/style-guide/api.js +4 -3
- package/neural-interface/lib/untrusted-file-headers.js +27 -0
- package/neural-interface/package-lock.json +1342 -44
- package/neural-interface/package.json +5 -1
- package/neural-interface/public/index.html +2 -2
- package/neural-interface/public/shared/account-menu.js +4 -1
- package/neural-interface/public/shared/account-usage.js +62 -2
- package/neural-interface/public/shared/account-view.js +2 -1
- package/neural-interface/public/shared/agent-runtime-options.js +55 -11
- package/neural-interface/public/shared/assistant/asst-account-menu.js +298 -0
- package/neural-interface/public/shared/assistant/asst-agents-dock.js +172 -17
- package/neural-interface/public/shared/assistant/asst-api.js +18 -3
- package/neural-interface/public/shared/assistant/asst-brain-picker.js +424 -152
- package/neural-interface/public/shared/assistant/asst-composer.js +1 -1
- package/neural-interface/public/shared/assistant/asst-hosts.js +49 -2
- package/neural-interface/public/shared/assistant/asst-menu.js +275 -77
- package/neural-interface/public/shared/assistant/asst-model-chip.js +135 -0
- package/neural-interface/public/shared/assistant/asst-panel.js +236 -35
- package/neural-interface/public/shared/assistant/asst-rack-styles.js +28 -10
- package/neural-interface/public/shared/assistant/asst-redact.js +186 -0
- package/neural-interface/public/shared/assistant/asst-render.js +382 -36
- 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 +528 -0
- package/neural-interface/public/shared/assistant/asst-sidepanel-styles.js +3 -15
- package/neural-interface/public/shared/assistant/asst-state.js +14 -0
- package/neural-interface/public/shared/assistant/asst-styles.js +109 -17
- package/neural-interface/public/shared/assistant/asst-tool-kinds.js +13 -1
- package/neural-interface/public/shared/cc-dropdown.js +480 -0
- package/neural-interface/public/shared/cdx/cdx-panel.js +14 -2
- package/neural-interface/public/shared/cdx/cdx-render.js +15 -3
- package/neural-interface/public/shared/cdx/cdx-styles.js +49 -5
- package/neural-interface/public/shared/cdx/cdx-tabs.js +152 -35
- package/neural-interface/public/shared/cp/cp-markdown.js +4 -57
- 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 +15 -5
- package/neural-interface/public/shared/file-links.js +73 -8
- package/neural-interface/public/shared/html-shell.js +74 -80
- package/neural-interface/public/shared/launch-prefetch.js +59 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-caps.js +3 -2
- package/neural-interface/public/shared/ocp-v2/ocp-v2-childpanel.js +11 -3
- package/neural-interface/public/shared/ocp-v2/ocp-v2-modelpicker.js +54 -17
- package/neural-interface/public/shared/ocp-v2/ocp-v2-panel.js +97 -3
- package/neural-interface/public/shared/ocp-v2/ocp-v2-projectbar.js +3 -2
- 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 +1 -1
- 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 +16 -9
- package/neural-interface/public/shared/ocp-v2/ocp-v2-sessions-logic.js +60 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +83 -5
- package/neural-interface/public/shared/ocp-v2/ocp-v2-ws.js +195 -19
- package/neural-interface/public/shared/opencode-providers.js +39 -0
- package/neural-interface/public/shared/schedules-view.js +318 -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-data.js +88 -0
- package/neural-interface/public/shared/settings/settings-ia.js +17 -0
- package/neural-interface/public/shared/showcase-privacy.js +2 -1
- package/neural-interface/public/shared/sidepanel-session-status.js +49 -0
- package/neural-interface/public/shared/styles.css +543 -372
- package/neural-interface/public/shared/ui-assistant.js +27 -5
- package/neural-interface/public/shared/ui-automation-studio.js +67 -27
- package/neural-interface/public/shared/ui-bookmarks.js +2 -1
- package/neural-interface/public/shared/ui-claude-panel.js +126 -12
- package/neural-interface/public/shared/ui-codex-panel.js +1 -0
- package/neural-interface/public/shared/ui-detail.js +6 -6
- package/neural-interface/public/shared/ui-explorer.js +2 -0
- package/neural-interface/public/shared/ui-file-links.js +1 -0
- package/neural-interface/public/shared/ui-image-gallery.js +6 -5
- package/neural-interface/public/shared/ui-invite.js +18 -2
- package/neural-interface/public/shared/ui-link.js +9 -9
- package/neural-interface/public/shared/ui-menubar.js +232 -33
- package/neural-interface/public/shared/ui-native-loop-router.js +2 -0
- package/neural-interface/public/shared/ui-opencode-panel-v2.js +1 -0
- package/neural-interface/public/shared/ui-schedules-studio.js +2099 -869
- package/neural-interface/public/shared/ui-sessions.js +15 -4
- package/neural-interface/public/shared/ui-settings.js +87 -36
- 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 +55 -4
- package/neural-interface/public/shared/ui-sidepanel-tray.js +84 -8
- package/neural-interface/public/shared/ui-skills.js +70 -12
- package/neural-interface/public/shared/ui-sync.js +9 -0
- package/neural-interface/public/shared/ui-terminal.js +36 -20
- package/neural-interface/public/shared/ui-trash.js +8 -1
- package/neural-interface/public/shared/ui-tutorial-steps.js +7 -3
- package/neural-interface/public/shared/ui-tutorial.js +15 -5
- package/neural-interface/public/shared/ui-update.js +87 -16
- package/neural-interface/public/shared/ui-whiteboard.js +2 -1
- package/neural-interface/public/variant/2d/main.js +4 -1
- package/neural-interface/public/variant/3d/main.js +3 -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/scripts/build-vendor.mjs +84 -3
- package/neural-interface/scripts/rebuild-pty.js +14 -2
- package/neural-interface/server.js +1279 -372
- package/npm-shrinkwrap.json +4424 -0
- package/package.json +54 -2
- package/postinstall.js +61 -47
- package/preuninstall.js +8 -35
- package/setup.js +76 -44
- package/skills/synabun/modules/idea.md +1 -1
- package/skills/synabun/modules/schedule.md +2 -2
- package/updater.cmd +2 -2
- package/updater.mjs +97 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,70 @@
|
|
|
1
|
+
# SynaBun v.2.0.10
|
|
2
|
+
|
|
3
|
+
2.0.10 works with OpenCode 2, adds a Settings › App page for updates and start at login, and opens menus, model lists and Settings at once instead of waiting on the network, most noticeably in the Windows desktop app. It also redesigns the Schedules window, shows every worker the Assistant dispatches at work, and closes a security hole in the Codex panel.
|
|
4
|
+
|
|
5
|
+
## ✨ New
|
|
6
|
+
|
|
7
|
+
- **OpenCode 2** — With OpenCode 2 installed, every OpenCode feature in SynaBun failed. SynaBun now works with OpenCode 1 and OpenCode 2 alike: the OpenCode panel, the Assistant's OpenCode brain and workers, schedules, loops and Automation Studio, the code editor's AI autocomplete and session titles. It finds out which one you have and speaks to it accordingly.
|
|
8
|
+
- **Settings › App** — A new page in the SynaBun group of Settings, above About. **Updates** shows your version and the last check, with Check for updates, Install update and an **Automatic updates** switch (on by default). With it off, the desktop app still tells you about an update but downloads and installs nothing until you choose Install now, and an npm or Git install no longer checks on its own. **Start at login** (off by default) works on macOS, Windows and Linux, for the desktop app and for an npm or Git install, and can start SynaBun in the background. The desktop app adds **Keep running when the window closes** (Windows and Linux) and **Hardware acceleration**, and **Maintenance** opens the data or logs folder and restarts SynaBun.
|
|
9
|
+
- **Workers at work in the Assistant panel** — While a worker the Assistant dispatched is queued or running, its card shows a small live scene for the kind of task, its current step and a clock, also after the Assistant's own reply has ended and after a page reload. When the worker finishes, the card says Done, Failed or Stopped.
|
|
10
|
+
- **Remove a session** — Each row of the Assistant's Sessions menu has a remove button. It asks in the row, stops the session's running work and deletes the session; memories made from it are kept.
|
|
11
|
+
|
|
12
|
+
## 🛠 Fixed
|
|
13
|
+
|
|
14
|
+
- **Codex panel security** — The Codex panel put a model's formatted reply into the page as it was, so HTML in a reply, in a quoted web page or in a file the model read could run inside SynaBun. Every Codex message, and every saved Codex and Claude Code transcript, now goes through the same strict filter as the other panels, and text agents write is escaped in the memory, terminal, whiteboard, Skills and Settings views. The Markdown, diagram, code-highlighting and screenshot libraries now ship with SynaBun instead of loading from a CDN, an SVG opened from the image gallery can no longer run anything, and a link whose scheme is hidden behind a tab, a line break or a character entity is no longer treated as a link to a file.
|
|
15
|
+
- **OpenCode only stops its own servers** — SynaBun now stops an OpenCode server only when it can prove that it started that server itself and that the SynaBun which started it has ended. A server left running by a SynaBun that crashed is cleaned up at the next start, your own OpenCode servers are left alone, and starts that happen at once no longer collide. On Windows, servers started through an npm-installed OpenCode are now tracked too.
|
|
16
|
+
- **Questions and approvals that wait on you** — Open OpenCode questions and permissions are read again after a reconnect or a page reload, so a turn's clock no longer runs while it waits on you, and a sub-agent's question keeps its parent waiting. A Codex approval no longer goes missing after a reload. Claude Code and Codex tabs and worker pills show "needs you" while they wait on a permission, a plan approval or a question, and a worker's card says "waiting for your answer".
|
|
17
|
+
- **Minimized session pills** — A minimized session's pill keeps its running animation for as long as the session works, in every provider: while the Assistant's workers run, while a Claude Code tab's background agents or shells run, after a Codex tab reconnects, and for the Assistant in a terminal tab. The way back from an OpenCode sub-agent now stays visible at every panel width, the Codex queue hint follows the tab on screen, and the Assistant's rack redraws right after a resize.
|
|
18
|
+
- **Schedules keep what you did not change** — Saving a schedule or a group could clear settings you never touched, such as a Codex account or a thinking level set to off, and changing a group's CLI could reset schedules that had changed meanwhile. The editors now save only what you changed, a list that fails to load says so instead of showing up empty, a group's new CLI reaches its schedules, and a day theme can be removed.
|
|
19
|
+
- **One update dialog at a time** — Opening the update dialog again from the badge, a notification or Settings no longer draws a second one over the first.
|
|
20
|
+
- **A lighter desktop title bar** — The desktop app no longer measures its title bar after every change on the page, which cost time on every chunk of streamed text and terminal output.
|
|
21
|
+
|
|
22
|
+
## ⚙️ Changed
|
|
23
|
+
|
|
24
|
+
- **Menus, model lists and Settings open at once** — Model lists, provider lists, the Assistant's menus and Settings now open from what SynaBun read last and refresh in the background. In the Windows desktop app the Codex model list could take ten seconds, OpenCode's provider list over a second every time, and the whole server could stall for a few seconds; these lists are now read once at launch and kept between starts.
|
|
25
|
+
- **Assistant sessions are saved with your first message** — Opening the Assistant or a new session no longer stores an empty session, so the Sessions menu no longer fills with empty rows, and a session you close without chatting is not kept.
|
|
26
|
+
- **Schedules** — Schedules has its own button in the menubar, and its window is redesigned: views for Up next, All schedules, Needs attention, Paused, Timers and Activity, your groups beside them, search, rows with an on/off switch, the next and last run side by side, and details when you ask for them. Every dropdown in it is the app's own, with full keyboard support. Games and the 3D map's commands moved into the Apps menu.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
# SynaBun v.2.0.9
|
|
31
|
+
|
|
32
|
+
2.0.9 makes npm installs and updates more reliable, especially on Windows: SynaBun's dependencies are installed in one place at pinned versions, none of them runs its own install script, and the Windows updater closes the SynaBun processes your AI clients started before it replaces the package. A fresh install now starts with no memory categories, Codex on Windows no longer asks for administrator approval when SynaBun starts it, and the Assistant's account menu is easier to read.
|
|
33
|
+
|
|
34
|
+
## ✨ New
|
|
35
|
+
|
|
36
|
+
- **Admin sandbox** — When SynaBun started Codex on Windows, Codex could ask Windows for administrator approval (a UAC prompt) to set up its elevated sandbox, once for every Codex account, and a scheduled or background run waited on a prompt nobody saw. Codex started by SynaBun now uses the Windows sandbox that needs no administrator approval, which isolates commands less strictly. To use the elevated one, turn on **Admin sandbox** at the end of the Assistant's permission menu, under **Every agent**. It is off by default, applies to every agent SynaBun starts and never changes your own Codex settings; Claude Code and OpenCode are not affected.
|
|
37
|
+
|
|
38
|
+
## 🛠 Fixed
|
|
39
|
+
|
|
40
|
+
- **npm installs and updates that failed on Windows** — An install or update could stop with "Failed to install MCP Server dependencies", or fail because a SynaBun MCP server that an AI client had started still held files of the package open. All of SynaBun's dependencies are now installed together with the package, at the versions the release pins, and SynaBun no longer runs npm when it starts. On Windows the updater first closes the SynaBun processes that AI clients started from the install folder, and tries again when Windows still holds a file.
|
|
41
|
+
- **Installs that downloaded or compiled extra parts** — No dependency runs its own install script during an install or update any more. On Linux x64 an install could download CUDA libraries SynaBun never uses, and on a computer with its own libvips the image library tried to compile itself and failed.
|
|
42
|
+
|
|
43
|
+
## ⚙️ Changed
|
|
44
|
+
|
|
45
|
+
- **No memory categories until you need them** — A fresh install starts with no categories, so categories you never used, such as the YouTube one, no longer appear. Adding a project creates its five default categories once: a default you delete stays deleted, and starting a session no longer brings it back. A feature such as conversations, plans or ideas creates its own category the first time it saves something. Categories you already have are not changed.
|
|
46
|
+
- **The Assistant's account menu** — ⚙ → **Account** shows each account on one row with its plan or API key, who is signed in and how much usage is left, with the reset time in words. A signed-out account opens its sign-in, and the account your workers use is in the same menu. The composer's **Model** menu shows the same rows, and the model chip shows the model with the account's initial, with the account's name in its tooltip.
|
|
47
|
+
- **Side panel headers stay on one row** — In a narrow Claude Code, Codex or OpenCode panel, the session name gets shorter instead of the header wrapping onto a second row, and the whole name shows when you point at it.
|
|
48
|
+
- **Repairing an npm install** — When an npm install needs repairing, the launcher names the command: close SynaBun and every AI client that uses it, then run `npm i -g synabun@<version>` with your version. A plain `npm rebuild -g` runs the dependencies' install scripts again, so do not use it.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
# SynaBun v.2.0.8
|
|
53
|
+
|
|
54
|
+
2.0.8 fixes the Windows installer of 2.0.7, which could not finish on any Windows PC. It now installs in a few minutes, and when something does go wrong it says what and where to look. macOS, Linux and npm installs were not affected.
|
|
55
|
+
|
|
56
|
+
## 🛠 Fixed
|
|
57
|
+
|
|
58
|
+
- **The Windows installer of 2.0.7 never finished** — On every Windows PC, the 2.0.7 installer unpacked SynaBun, could not check the files it had unpacked, unpacked everything again several times over more than ten minutes and then showed a box that blamed the disk space. One of its scripts could not be read by the PowerShell that comes with Windows, so the check never ran. The 2.0.8 installer finishes. If the 2.0.7 installer is still open on your PC, click **Cancel** in its box before you start the new one.
|
|
59
|
+
- **Clear errors when an install cannot finish** — The installer never unpacks again by itself. If files are missing or incomplete, it names them and shows how much space the disk has left and where the installation log is: **Retry** unpacks once more, and **Cancel** stops and puts back the SynaBun you had. The installation log now also shows what the installer did to close SynaBun and to check the files.
|
|
60
|
+
- **Leftovers of a failed install** — A copy that a failed 2.0.7 install left on your PC is replaced cleanly by the new version.
|
|
61
|
+
|
|
62
|
+
## ⚙️ Changed
|
|
63
|
+
|
|
64
|
+
- **Faster Windows installs** — Installing over an earlier version moves the old copy aside in one step instead of uninstalling it file by file, the check of the unpacked files takes about a second, and the app carries about 2,300 fewer files for Windows to write and scan.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
1
68
|
# SynaBun v.2.0.7
|
|
2
69
|
|
|
3
70
|
2.0.7 brings the SynaBun desktop app for macOS, Windows and Linux, with updates that install themselves and a Windows installer that shows every step. SynaBun now finds every installed Claude Code, Codex and OpenCode the same way and installs a missing one with one click, you can sign in from the Claude and Codex panels, and the WhatsApp Assistant can send you files and understand voice notes.
|
package/README.md
CHANGED
|
@@ -159,7 +159,7 @@ Everything SynaBun stores is in one folder outside the app: `~/.synabun` on macO
|
|
|
159
159
|
|
|
160
160
|
## Links
|
|
161
161
|
|
|
162
|
-
- [Changelog](./CHANGELOG.md): what is new in 2.0.
|
|
162
|
+
- [Changelog](./CHANGELOG.md): what is new in 2.0.10 and before
|
|
163
163
|
- [Security](./SECURITY.md): security model and how to report a vulnerability
|
|
164
164
|
- [Contributing](./CONTRIBUTING.md): bug reports and feature requests are welcome as [issues](https://github.com/danilokhury/Synabun/issues); pull requests are not accepted
|
|
165
165
|
- [Website](https://synabun.ai), [docs](https://synabun.ai/docs) and [blog](https://synabun.ai/blog)
|
package/THIRD-PARTY-LICENSES.md
CHANGED
|
@@ -75,9 +75,13 @@ runtime dependencies in the published package.
|
|
|
75
75
|
| `@codemirror/search` | `6.7.2` | 6.7.2 | MIT | [npm](https://www.npmjs.com/package/@codemirror/search) |
|
|
76
76
|
| `@codemirror/state` | `6.7.6` | 6.7.6 | MIT | [npm](https://www.npmjs.com/package/@codemirror/state) |
|
|
77
77
|
| `@codemirror/view` | `6.43.14` | 6.43.14 | MIT | [npm](https://www.npmjs.com/package/@codemirror/view) |
|
|
78
|
+
| `@highlightjs/cdn-assets` | `11.12.0` | 11.12.0 | BSD-3-Clause | [npm](https://www.npmjs.com/package/@highlightjs/cdn-assets) |
|
|
78
79
|
| `@lezer/highlight` | `1.2.5` | 1.2.5 | MIT | [npm](https://www.npmjs.com/package/@lezer/highlight) |
|
|
79
80
|
| `@replit/codemirror-indentation-markers` | `6.5.3` | 6.5.3 | MIT | [npm](https://www.npmjs.com/package/@replit/codemirror-indentation-markers) |
|
|
80
81
|
| `esbuild` | `^0.28.1` | 0.28.1 | MIT | [npm](https://www.npmjs.com/package/esbuild) |
|
|
82
|
+
| `html2canvas` | `1.4.1` | 1.4.1 | MIT | [npm](https://www.npmjs.com/package/html2canvas) |
|
|
83
|
+
| `marked` | `14.1.4` | 14.1.4 | MIT | [npm](https://www.npmjs.com/package/marked) |
|
|
84
|
+
| `mermaid` | `11.17.2` | 11.17.2 | MIT | [npm](https://www.npmjs.com/package/mermaid) |
|
|
81
85
|
| `three` | `0.169.0` | 0.169.0 | MIT | [npm](https://www.npmjs.com/package/three) |
|
|
82
86
|
|
|
83
87
|
## Browser-Delivered and Bundled Components
|
|
@@ -86,10 +90,10 @@ runtime dependencies in the published package.
|
|
|
86
90
|
| --- | --- | --- | --- | --- |
|
|
87
91
|
| xterm.js | 6.0.0 | Bundled browser asset and npm dependency | MIT | [GitHub](https://github.com/xtermjs/xterm.js) |
|
|
88
92
|
| three.js | 0.169.0 | Bundled browser asset (`neural-interface/public/vendor/three/`) built from the npm development dependency | MIT | [GitHub](https://github.com/mrdoob/three.js) |
|
|
89
|
-
| marked | 14.
|
|
90
|
-
| highlight.js | 11.
|
|
91
|
-
| Mermaid | 11.
|
|
92
|
-
| html2canvas | 1.4.1 |
|
|
93
|
+
| marked | 14.1.4 | Bundled browser asset (`neural-interface/public/vendor/marked/`) copied from the npm development dependency | MIT | [GitHub](https://github.com/markedjs/marked) |
|
|
94
|
+
| highlight.js | 11.12.0 | Bundled browser asset (`neural-interface/public/vendor/highlight/`) copied from the npm development dependency `@highlightjs/cdn-assets` | BSD-3-Clause | [GitHub](https://github.com/highlightjs/highlight.js) |
|
|
95
|
+
| Mermaid | 11.17.2 | Bundled browser asset (`neural-interface/public/vendor/mermaid/`) copied from the npm development dependency | MIT | [GitHub](https://github.com/mermaid-js/mermaid) |
|
|
96
|
+
| html2canvas | 1.4.1 | Bundled browser asset (`neural-interface/public/vendor/html2canvas/`) copied from the npm development dependency | MIT | [GitHub](https://github.com/niklasvh/html2canvas) |
|
|
93
97
|
|
|
94
98
|
### CodeMirror 6
|
|
95
99
|
|
|
@@ -114,6 +118,44 @@ Brought in by those, and in the bundle too (MIT, Copyright (C) Marijn Haverbeke
|
|
|
114
118
|
- the Lezer parser runtime and grammars: `@lezer/common`, `@lezer/lr`, `@lezer/cpp`, `@lezer/css`, `@lezer/go`, `@lezer/html`, `@lezer/java`, `@lezer/javascript`, `@lezer/json`, `@lezer/markdown`, `@lezer/php`, `@lezer/python`, `@lezer/rust`, `@lezer/sass`, `@lezer/xml`, `@lezer/yaml`
|
|
115
119
|
- `style-mod`, `w3c-keyname`, `crelt` and `@marijn/find-cluster-break`
|
|
116
120
|
|
|
121
|
+
### marked
|
|
122
|
+
|
|
123
|
+
The Markdown parser of the Assistant and the Claude, Codex and OpenCode panels. Its own browser build (`lib/marked.esm.js`), copied by `neural-interface/scripts/build-vendor.mjs` into `neural-interface/public/vendor/marked/` with the package's `LICENSE.md`.
|
|
124
|
+
|
|
125
|
+
- **Version:** 14.1.4
|
|
126
|
+
- **License:** MIT (the license file also carries the BSD-style notice of the original Markdown.pl, Copyright © 2004 John Gruber)
|
|
127
|
+
- **Copyright:** Copyright (c) 2018+, MarkedJS; Copyright (c) 2011-2018, Christopher Jeffrey
|
|
128
|
+
- **URL:** https://github.com/markedjs/marked
|
|
129
|
+
|
|
130
|
+
### mermaid
|
|
131
|
+
|
|
132
|
+
The diagrams of the Skills preview. Its own browser build (`dist/mermaid.esm.min.mjs` and the chunks it imports), copied by `neural-interface/scripts/build-vendor.mjs` into `neural-interface/public/vendor/mermaid/` with the package's `LICENSE`.
|
|
133
|
+
|
|
134
|
+
- **Version:** 11.17.2
|
|
135
|
+
- **License:** MIT
|
|
136
|
+
- **Copyright:** Copyright (c) 2014 - 2022 Knut Sveidqvist
|
|
137
|
+
- **URL:** https://github.com/mermaid-js/mermaid
|
|
138
|
+
|
|
139
|
+
Mermaid's build bundles its own dependencies, each under its own license: MIT (`@braintree/sanitize-url`, `@iconify/utils`, `@mermaid-js/parser`, `@upsetjs/venn.js`, `cytoscape`, `cytoscape-cose-bilkent`, `cytoscape-fcose`, `cose-base`, `layout-base`, `dagre-d3-es`, `dayjs`, `es-toolkit`, `katex`, `khroma`, `lodash-es`, `marked` 16, `roughjs` and its path helpers, `stylis`, `ts-dedent`, `uuid`), ISC (`d3` 7 and its `d3-*` modules, `internmap`, `delaunator`), BSD-3-Clause (`d3-sankey`, `d3-ease`, `rw` and the older `d3-array`, `d3-shape`, `d3-path` it brings), Apache-2.0 (`@chevrotain/types`), MPL-2.0 or Apache-2.0 (`dompurify`, used here under Apache-2.0) and the Unlicense (`robust-predicates`).
|
|
140
|
+
|
|
141
|
+
### highlight.js
|
|
142
|
+
|
|
143
|
+
The Codex panel's code-block highlighting. The official browser build of the version whose stylesheet the panel loaded before (`@highlightjs/cdn-assets`: `highlight.min.js` and `styles/github-dark-dimmed.min.css`; the `highlight.js` package itself ships no browser build), copied by `neural-interface/scripts/build-vendor.mjs` into `neural-interface/public/vendor/highlight/` with the package's `LICENSE`.
|
|
144
|
+
|
|
145
|
+
- **Version:** 11.12.0
|
|
146
|
+
- **License:** BSD-3-Clause
|
|
147
|
+
- **Copyright:** Copyright (c) 2006, Ivan Sagalaev; Josh Goebel and other contributors
|
|
148
|
+
- **URL:** https://github.com/highlightjs/highlight.js
|
|
149
|
+
|
|
150
|
+
### html2canvas
|
|
151
|
+
|
|
152
|
+
The card screenshot tool of the 3D map (`index.html`). Its own browser build (`dist/html2canvas.min.js`, which bundles `base64-arraybuffer`, `css-line-break`, `text-segmentation` and `utrie`, all MIT, by the same author), copied by `neural-interface/scripts/build-vendor.mjs` into `neural-interface/public/vendor/html2canvas/` with the package's `LICENSE`.
|
|
153
|
+
|
|
154
|
+
- **Version:** 1.4.1
|
|
155
|
+
- **License:** MIT
|
|
156
|
+
- **Copyright:** Copyright (c) 2012 Niklas von Hertzen
|
|
157
|
+
- **URL:** https://github.com/niklasvh/html2canvas
|
|
158
|
+
|
|
117
159
|
## Vendored Code
|
|
118
160
|
|
|
119
161
|
| Component | Location | License | Project |
|
|
@@ -31,7 +31,7 @@ import { dirname, join, basename } from 'node:path';
|
|
|
31
31
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
32
32
|
import { createHash } from 'node:crypto';
|
|
33
33
|
import { withStateLock, writeJsonAtomic, planMemoryKey } from './state.mjs';
|
|
34
|
-
import { detectProject,
|
|
34
|
+
import { detectProject, ensureCategories, FEATURE_CATEGORIES, DATA_DIR, readStdin, hookBudget, hookJudge, clipForJudge, isTemporaryChat } from './shared.mjs';
|
|
35
35
|
|
|
36
36
|
// Cross-platform safety: catch uncaught errors and output valid hook JSON
|
|
37
37
|
process.on('uncaughtException', () => { try { process.stdout.write('{}'); } catch {} process.exit(0); });
|
|
@@ -356,38 +356,14 @@ function findLatestPlan() {
|
|
|
356
356
|
|
|
357
357
|
// ─── Category management ───
|
|
358
358
|
|
|
359
|
+
// "plans" and "plans-<project>" are made by the first plan stored (a fresh install has neither).
|
|
359
360
|
function ensureProjectCategory(project) {
|
|
360
361
|
const categoryName = `plans-${project}`;
|
|
361
|
-
const catPath = getMcpCategoriesPath();
|
|
362
|
-
|
|
363
362
|
try {
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
return categoryName;
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
if (!categories.some((c) => c.name === 'plans')) {
|
|
372
|
-
categories.push({
|
|
373
|
-
name: 'plans',
|
|
374
|
-
description: 'Implementation plans stored after plan mode approval. Sub-categorized by project name.',
|
|
375
|
-
is_parent: true,
|
|
376
|
-
color: '#06d6a0',
|
|
377
|
-
created_at: new Date().toISOString(),
|
|
378
|
-
});
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
categories.push({
|
|
382
|
-
name: categoryName,
|
|
383
|
-
description: `Implementation plans for ${project} project`,
|
|
384
|
-
parent: 'plans',
|
|
385
|
-
created_at: new Date().toISOString(),
|
|
386
|
-
});
|
|
387
|
-
|
|
388
|
-
data.categories = categories;
|
|
389
|
-
writeFileSync(catPath, JSON.stringify(data, null, 2), 'utf-8');
|
|
390
|
-
|
|
363
|
+
ensureCategories([
|
|
364
|
+
{ name: 'plans', description: FEATURE_CATEGORIES.plans.description, is_parent: true, color: '#06d6a0' },
|
|
365
|
+
{ name: categoryName, description: `Implementation plans for ${project} project`, parent: 'plans' },
|
|
366
|
+
]);
|
|
391
367
|
return categoryName;
|
|
392
368
|
} catch {
|
|
393
369
|
return 'plans';
|
|
@@ -33,7 +33,7 @@ import { execSync } from 'node:child_process';
|
|
|
33
33
|
import { dirname, join } from 'node:path';
|
|
34
34
|
import { fileURLToPath } from 'node:url';
|
|
35
35
|
import { homedir } from 'node:os';
|
|
36
|
-
import { getHookFeatures, detectProject,
|
|
36
|
+
import { getHookFeatures, detectProject, cleanupStaleLoops, cleanupStalePendingRemember, cleanupStaleFiles, appendCapped, DATA_DIR, isTemporaryChat, niUrl, greetingSurface, greetingOff, GREETING_NOTE_DIR } from './shared.mjs';
|
|
37
37
|
|
|
38
38
|
// CC updates (especially when installer runs as root) can wipe ~/.claude.json
|
|
39
39
|
// or strip mcpServers.SynaBun, leaving the side panel/CLI with MCP disabled
|
|
@@ -228,9 +228,6 @@ async function main() {
|
|
|
228
228
|
} catch { /* ok */ }
|
|
229
229
|
}
|
|
230
230
|
|
|
231
|
-
// Ensure all registered projects have their default category trees
|
|
232
|
-
try { withStateLock(() => ensureProjectCategories()); } catch { /* non-critical */ }
|
|
233
|
-
|
|
234
231
|
// Self-heal SynaBun MCP registration (CC updates can strip it)
|
|
235
232
|
healSynaBunMcp();
|
|
236
233
|
|
|
@@ -1031,15 +1031,21 @@ export function buildCategoryTree(categories) {
|
|
|
1031
1031
|
}
|
|
1032
1032
|
|
|
1033
1033
|
// --- Auto-category creation ---
|
|
1034
|
+
// A fresh install has no categories. The only ones made without being asked are a
|
|
1035
|
+
// project's defaults (when the project is added) and a feature's own category (the
|
|
1036
|
+
// first time that feature saves into it).
|
|
1034
1037
|
|
|
1035
1038
|
/**
|
|
1036
|
-
*
|
|
1039
|
+
* Categories features save into by name, created on first save, never earlier.
|
|
1040
|
+
* The hooks' and the Neural Interface's share of mcp-server/src/services/categories.ts
|
|
1041
|
+
* FEATURE_CATEGORIES: keep the descriptions the same.
|
|
1037
1042
|
*/
|
|
1038
|
-
const
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
+
export const FEATURE_CATEGORIES = {
|
|
1044
|
+
conversations: { description: 'Indexed conversation sessions with compacted summaries for cross-session recall: session metadata (date, branch, session id) and topic summaries, so past conversations can be found by asking for them.' },
|
|
1045
|
+
'communication-style': { description: 'How the user communicates and works: patterns in how they give instructions, correct, decide and signal frustration, and their stated preferences.' },
|
|
1046
|
+
plans: { description: 'Implementation plans stored after plan mode approval, one child category per project.', is_parent: true },
|
|
1047
|
+
uncategorized: { description: 'Fallback for memories stored without a category.' },
|
|
1048
|
+
};
|
|
1043
1049
|
|
|
1044
1050
|
/**
|
|
1045
1051
|
* Default child categories for every registered project.
|
|
@@ -1052,90 +1058,118 @@ const PROJECT_CHILDREN = [
|
|
|
1052
1058
|
{ suffix: 'config', description: 'Configuration, deployment, environment, and infrastructure' },
|
|
1053
1059
|
];
|
|
1054
1060
|
|
|
1061
|
+
/** A project's parent category name: the label normalized, cut to 16 so children stay within 30 chars (16 + 1 + 12 = 29). */
|
|
1062
|
+
export function projectCategoryLabel(label) {
|
|
1063
|
+
let name = normalizeLabel(String(label || ''));
|
|
1064
|
+
if (name.length > 16) name = name.slice(0, 16).replace(/-$/, '');
|
|
1065
|
+
return name;
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1055
1068
|
/**
|
|
1056
|
-
*
|
|
1057
|
-
*
|
|
1069
|
+
* Add the categories in `defs` that are missing, in order (parents first), to the
|
|
1070
|
+
* MCP server's categories file (no connection suffix), whose watcher refreshes the
|
|
1071
|
+
* tool schemas. A missing file is an empty list; an unreadable one is left alone.
|
|
1072
|
+
* `mutate(categories, now)` may push more entries and return the names it created.
|
|
1058
1073
|
*
|
|
1059
|
-
*
|
|
1060
|
-
*
|
|
1061
|
-
*
|
|
1062
|
-
* Idempotent: only adds missing categories, never modifies or removes existing ones.
|
|
1074
|
+
* Idempotent: only adds missing categories, never modifies or removes existing ones
|
|
1075
|
+
* (a project parent that exists without the flag is marked `is_parent` so its
|
|
1076
|
+
* children can sit under it).
|
|
1063
1077
|
*
|
|
1064
1078
|
* @returns {{ created: string[], total: number }}
|
|
1065
1079
|
*/
|
|
1066
|
-
|
|
1067
|
-
const projects = loadRegisteredProjects();
|
|
1080
|
+
function addMissingCategories(mutate) {
|
|
1068
1081
|
const catPath = getMcpCategoriesPath();
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
data
|
|
1073
|
-
} catch {
|
|
1074
|
-
data = { version: 1, categories: [] };
|
|
1082
|
+
let data = { version: 1, categories: [] };
|
|
1083
|
+
if (existsSync(catPath)) {
|
|
1084
|
+
try { data = JSON.parse(readFileSync(catPath, 'utf-8')); } catch { return { created: [], total: 0 }; }
|
|
1085
|
+
if (!data || !Array.isArray(data.categories)) return { created: [], total: 0 };
|
|
1075
1086
|
}
|
|
1087
|
+
const categories = data.categories;
|
|
1088
|
+
const created = mutate(categories, new Date().toISOString());
|
|
1089
|
+
if (created.length > 0) {
|
|
1090
|
+
data.version = data.version || 1;
|
|
1091
|
+
mkdirSync(dirname(catPath), { recursive: true });
|
|
1092
|
+
writeFileSync(catPath, JSON.stringify(data, null, 2), 'utf-8');
|
|
1093
|
+
}
|
|
1094
|
+
return { created, total: categories.length };
|
|
1095
|
+
}
|
|
1076
1096
|
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1097
|
+
/**
|
|
1098
|
+
* Create categories the first time something saves into them.
|
|
1099
|
+
* `defs`: [{ name, description, parent?, is_parent?, color? }], parents first. A
|
|
1100
|
+
* parent is attached only when it exists (or is created by an earlier def).
|
|
1101
|
+
*
|
|
1102
|
+
* @returns {{ created: string[], total: number }}
|
|
1103
|
+
*/
|
|
1104
|
+
export function ensureCategories(defs) {
|
|
1105
|
+
return addMissingCategories((categories, now) => {
|
|
1106
|
+
const names = new Set(categories.map((c) => c.name));
|
|
1107
|
+
const created = [];
|
|
1108
|
+
for (const def of defs || []) {
|
|
1109
|
+
if (!def?.name || names.has(def.name)) continue;
|
|
1110
|
+
const cat = { name: def.name, description: def.description || def.name, created_at: now };
|
|
1111
|
+
if (def.parent && names.has(def.parent)) cat.parent = def.parent;
|
|
1112
|
+
else if (def.is_parent) cat.is_parent = true;
|
|
1087
1113
|
if (def.color) cat.color = def.color;
|
|
1088
1114
|
categories.push(cat);
|
|
1089
|
-
|
|
1115
|
+
names.add(def.name);
|
|
1090
1116
|
created.push(def.name);
|
|
1091
1117
|
}
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
for (const proj of projects) {
|
|
1096
|
-
let label = normalizeLabel(proj.label);
|
|
1097
|
-
// Truncate to 16 chars so children stay within 30-char limit (16 + 1 + 12 = 29)
|
|
1098
|
-
if (label.length > 16) label = label.slice(0, 16).replace(/-$/, '');
|
|
1099
|
-
|
|
1100
|
-
// Ensure parent exists
|
|
1101
|
-
if (!existingNames.has(label)) {
|
|
1102
|
-
categories.push({
|
|
1103
|
-
name: label,
|
|
1104
|
-
description: `Knowledge and context for the ${proj.label} project`,
|
|
1105
|
-
is_parent: true,
|
|
1106
|
-
created_at: now,
|
|
1107
|
-
});
|
|
1108
|
-
existingNames.add(label);
|
|
1109
|
-
created.push(label);
|
|
1110
|
-
} else {
|
|
1111
|
-
// Parent exists — ensure it has is_parent flag
|
|
1112
|
-
const existing = categories.find((c) => c.name === label);
|
|
1113
|
-
if (existing && !existing.is_parent) existing.is_parent = true;
|
|
1114
|
-
}
|
|
1118
|
+
return created;
|
|
1119
|
+
});
|
|
1120
|
+
}
|
|
1115
1121
|
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1122
|
+
/**
|
|
1123
|
+
* Create a project's parent category with the default children, once: at the moment
|
|
1124
|
+
* the project is registered (the Neural Interface's add-project route, the only
|
|
1125
|
+
* writer of the registry). Never called for a project that was already registered,
|
|
1126
|
+
* so a default category the user deleted stays deleted.
|
|
1127
|
+
*
|
|
1128
|
+
* @param {Array<{ label: string }>} projects — the project(s) just registered
|
|
1129
|
+
* @returns {{ created: string[], total: number }}
|
|
1130
|
+
*/
|
|
1131
|
+
export function ensureProjectCategories(projects) {
|
|
1132
|
+
return addMissingCategories((categories, now) => {
|
|
1133
|
+
const existingNames = new Set(categories.map((c) => c.name));
|
|
1134
|
+
const created = [];
|
|
1135
|
+
for (const proj of projects || []) {
|
|
1136
|
+
if (!proj?.label) continue;
|
|
1137
|
+
const label = projectCategoryLabel(proj.label);
|
|
1138
|
+
if (!label) continue;
|
|
1139
|
+
|
|
1140
|
+
// Ensure parent exists
|
|
1141
|
+
if (!existingNames.has(label)) {
|
|
1120
1142
|
categories.push({
|
|
1121
|
-
name:
|
|
1122
|
-
description:
|
|
1123
|
-
|
|
1143
|
+
name: label,
|
|
1144
|
+
description: `Knowledge and context for the ${proj.label} project`,
|
|
1145
|
+
is_parent: true,
|
|
1124
1146
|
created_at: now,
|
|
1125
1147
|
});
|
|
1126
|
-
existingNames.add(
|
|
1127
|
-
created.push(
|
|
1148
|
+
existingNames.add(label);
|
|
1149
|
+
created.push(label);
|
|
1150
|
+
} else {
|
|
1151
|
+
// Parent exists — ensure it has is_parent flag
|
|
1152
|
+
const existing = categories.find((c) => c.name === label);
|
|
1153
|
+
if (existing && !existing.is_parent && !existing.parent) existing.is_parent = true;
|
|
1128
1154
|
}
|
|
1129
|
-
}
|
|
1130
|
-
}
|
|
1131
1155
|
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1156
|
+
// Ensure each default child exists
|
|
1157
|
+
for (const child of PROJECT_CHILDREN) {
|
|
1158
|
+
const childName = `${label}-${child.suffix}`;
|
|
1159
|
+
if (!existingNames.has(childName)) {
|
|
1160
|
+
categories.push({
|
|
1161
|
+
name: childName,
|
|
1162
|
+
description: `${child.description} for ${proj.label}`,
|
|
1163
|
+
parent: label,
|
|
1164
|
+
created_at: now,
|
|
1165
|
+
});
|
|
1166
|
+
existingNames.add(childName);
|
|
1167
|
+
created.push(childName);
|
|
1168
|
+
}
|
|
1169
|
+
}
|
|
1170
|
+
}
|
|
1171
|
+
return created;
|
|
1172
|
+
});
|
|
1139
1173
|
}
|
|
1140
1174
|
|
|
1141
1175
|
/**
|
package/launcher.mjs
CHANGED
|
@@ -9,19 +9,25 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Registered by lib/start-launcher.js; can also be run by hand:
|
|
11
11
|
* node launcher.mjs
|
|
12
|
+
*
|
|
13
|
+
* Start at login (Settings > App, neural-interface/lib/login-start.js) runs it
|
|
14
|
+
* with `--via=login --background`: the server starts with no window, and no
|
|
15
|
+
* page waits for a report.
|
|
12
16
|
*/
|
|
13
17
|
|
|
14
18
|
import { dirname } from 'node:path';
|
|
15
19
|
import { fileURLToPath } from 'node:url';
|
|
16
|
-
import { BEACON_LINGER_MS, runLauncher } from './lib/start-launcher.js';
|
|
20
|
+
import { BEACON_LINGER_MS, parseLauncherArgs, runLauncher } from './lib/start-launcher.js';
|
|
17
21
|
|
|
18
22
|
const packageRoot = dirname(fileURLToPath(import.meta.url));
|
|
19
23
|
|
|
20
24
|
try {
|
|
21
25
|
// The page that asked is offline and cannot ask a server how the start is
|
|
22
26
|
// going: the launch reports itself on its beacon, and keeps a failure
|
|
23
|
-
// readable there for a moment.
|
|
24
|
-
const
|
|
27
|
+
// readable there for a moment. A start at login has no page.
|
|
28
|
+
const argv = process.argv.slice(2);
|
|
29
|
+
const login = parseLauncherArgs(argv).via === 'login';
|
|
30
|
+
const result = await runLauncher({ argv, packageRoot, beacon: !login, lingerMs: login ? 0 : BEACON_LINGER_MS });
|
|
25
31
|
if (process.stdout.isTTY) {
|
|
26
32
|
const said = {
|
|
27
33
|
ignored: 'Nothing to do for that link.',
|