synabun 2.0.5 → 2.0.9
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 +78 -0
- package/README.md +2 -1
- package/THIRD-PARTY-LICENSES.md +13 -0
- package/docs/whatsapp.md +151 -16
- package/hooks/claude-code/post-plan.mjs +6 -30
- package/hooks/claude-code/session-start.mjs +1 -4
- package/hooks/claude-code/shared.mjs +112 -75
- package/lib/child-path.js +303 -0
- package/lib/claude-hooks.js +2 -1
- package/lib/data-home-migration.js +2 -0
- package/lib/desktop-app.js +265 -0
- package/lib/external-tools.js +7 -3
- package/lib/log-redact.js +102 -0
- package/lib/package-processes.js +670 -0
- package/lib/packaged-runtime.js +138 -11
- package/lib/runtime-dependencies.js +225 -0
- package/mcp-server/dist/http.d.ts +3 -1
- package/mcp-server/dist/http.d.ts.map +1 -1
- package/mcp-server/dist/http.js +15 -4
- package/mcp-server/dist/http.js.map +1 -1
- package/mcp-server/dist/index.d.ts.map +1 -1
- package/mcp-server/dist/index.js +9 -6
- package/mcp-server/dist/index.js.map +1 -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/budget-judgments.d.ts +108 -0
- package/mcp-server/dist/services/budget-judgments.d.ts.map +1 -0
- package/mcp-server/dist/services/budget-judgments.js +153 -0
- package/mcp-server/dist/services/budget-judgments.js.map +1 -0
- 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/codex-config-heal.d.ts +5 -1
- package/mcp-server/dist/services/codex-config-heal.d.ts.map +1 -1
- package/mcp-server/dist/services/codex-config-heal.js +41 -4
- package/mcp-server/dist/services/codex-config-heal.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/services/identity.d.ts +11 -0
- package/mcp-server/dist/services/identity.d.ts.map +1 -1
- package/mcp-server/dist/services/identity.js +24 -0
- package/mcp-server/dist/services/identity.js.map +1 -1
- package/mcp-server/dist/services/neural-interface.d.ts +13 -0
- package/mcp-server/dist/services/neural-interface.d.ts.map +1 -1
- package/mcp-server/dist/services/neural-interface.js +34 -2
- package/mcp-server/dist/services/neural-interface.js.map +1 -1
- package/mcp-server/dist/services/typesafe-config.d.ts +1 -1
- package/mcp-server/dist/services/typesafe-config.d.ts.map +1 -1
- package/mcp-server/dist/services/typesafe-config.js +4 -1
- package/mcp-server/dist/services/typesafe-config.js.map +1 -1
- package/mcp-server/dist/tools/agents.d.ts +11 -8
- package/mcp-server/dist/tools/agents.d.ts.map +1 -1
- package/mcp-server/dist/tools/agents.js +35 -14
- 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 +17 -0
- package/mcp-server/dist/tools/whatsapp-send-file.d.ts.map +1 -0
- package/mcp-server/dist/tools/whatsapp-send-file.js +44 -0
- package/mcp-server/dist/tools/whatsapp-send-file.js.map +1 -0
- 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 +18 -5
- package/mcp-server/dist/tui.js.map +1 -1
- package/mcp-server/dist/version.d.ts +5 -0
- package/mcp-server/dist/version.d.ts.map +1 -0
- package/mcp-server/dist/version.js +21 -0
- package/mcp-server/dist/version.js.map +1 -0
- package/mcp-server/package-lock.json +3 -3
- package/mcp-server/package.json +3 -3
- package/mcp-server/run.mjs +15 -9
- package/mcp-server/src/http.ts +18 -3
- package/mcp-server/src/index.ts +9 -6
- package/mcp-server/src/services/browser-bench.ts +1 -1
- package/mcp-server/src/services/budget-judgments.ts +183 -0
- package/mcp-server/src/services/categories.ts +77 -32
- package/mcp-server/src/services/codex-config-heal.ts +35 -4
- package/mcp-server/src/services/desktop-bench.ts +1 -1
- package/mcp-server/src/services/identity.ts +27 -0
- package/mcp-server/src/services/neural-interface.ts +34 -2
- package/mcp-server/src/services/typesafe-config.ts +4 -1
- package/mcp-server/src/tools/agents.ts +34 -15
- 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 +51 -0
- 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 +24 -10
- package/mcp-server/src/version.ts +22 -0
- package/neural-interface/i18n/en.json +645 -57
- package/neural-interface/i18n/pt-BR.json +644 -56
- package/neural-interface/lib/account-usage.js +163 -0
- package/neural-interface/lib/agent-sandbox-elevation.js +102 -0
- package/neural-interface/lib/agent-sandbox-setting.js +57 -0
- package/neural-interface/lib/assistant-api.js +274 -52
- package/neural-interface/lib/assistant-brains/claude.js +15 -2
- package/neural-interface/lib/assistant-brains/codex.js +3 -0
- package/neural-interface/lib/assistant-brains/opencode.js +17 -4
- package/neural-interface/lib/assistant-budget-planner.js +390 -0
- package/neural-interface/lib/assistant-budget-split.js +408 -0
- package/neural-interface/lib/assistant-budget.js +94 -95
- package/neural-interface/lib/assistant-config.js +62 -14
- package/neural-interface/lib/assistant-dispatch.js +432 -125
- package/neural-interface/lib/assistant-jev.js +26 -3
- package/neural-interface/lib/assistant-persona.js +68 -11
- package/neural-interface/lib/assistant-plan-permissions.js +8 -1
- package/neural-interface/lib/assistant-route-accounts.js +14 -0
- package/neural-interface/lib/assistant-route-gate-codex.js +3 -1
- package/neural-interface/lib/assistant-route-gate.js +19 -3
- package/neural-interface/lib/assistant-router.js +373 -42
- package/neural-interface/lib/assistant-runtime.js +312 -48
- package/neural-interface/lib/assistant-user-writer.js +4 -2
- package/neural-interface/lib/augmented-path.js +317 -53
- package/neural-interface/lib/claude-accounts.js +342 -31
- package/neural-interface/lib/claude-agent-bridge.js +90 -3
- package/neural-interface/lib/claude-executable.js +6 -1
- package/neural-interface/lib/claude-model-catalog.js +3 -3
- package/neural-interface/lib/claude-panel-auth.js +221 -0
- package/neural-interface/lib/claude-profile-api-key.js +62 -0
- package/neural-interface/lib/cli-install-api.js +137 -0
- package/neural-interface/lib/cli-install.js +797 -0
- package/neural-interface/lib/cli-path.js +130 -0
- package/neural-interface/lib/cli-resolver.js +744 -0
- package/neural-interface/lib/cli-update-planner.js +143 -7
- package/neural-interface/lib/codex-account-auth.js +180 -0
- package/neural-interface/lib/codex-accounts.js +502 -0
- package/neural-interface/lib/codex-capabilities.js +2 -1
- package/neural-interface/lib/codex-compat-rpc.js +8 -2
- package/neural-interface/lib/codex-mcp-approvals.js +5 -1
- package/neural-interface/lib/codex-panel-auth.js +62 -0
- package/neural-interface/lib/codex-session-settings.js +1 -1
- package/neural-interface/lib/codex-settings-schema.js +122 -0
- package/neural-interface/lib/desktop/config.js +3 -0
- package/neural-interface/lib/exec-loop-command.js +3 -1
- package/neural-interface/lib/git-bash/bzip2.js +339 -0
- package/neural-interface/lib/git-bash/claude-settings.js +73 -0
- package/neural-interface/lib/git-bash/extract-worker.js +34 -0
- package/neural-interface/lib/git-bash/install.js +529 -0
- package/neural-interface/lib/git-bash/licenses/COPYING +360 -0
- package/neural-interface/lib/git-bash/licenses/LGPL-2.1 +511 -0
- package/neural-interface/lib/git-bash/manager.js +268 -0
- package/neural-interface/lib/git-bash/pins.js +206 -0
- package/neural-interface/lib/git-bash/pins.json +34 -0
- package/neural-interface/lib/git-bash/resolver.js +194 -0
- package/neural-interface/lib/git-read.js +34 -2
- package/neural-interface/lib/install-details.js +163 -0
- package/neural-interface/lib/mcp-installer.js +14 -2
- package/neural-interface/lib/native-loop-providers.js +22 -4
- package/neural-interface/lib/native-loop-runtime.js +9 -4
- package/neural-interface/lib/os-path.js +319 -0
- package/neural-interface/lib/provider-panel-api-key-auth.js +92 -0
- package/neural-interface/lib/provider-panel-terminal-auth.js +96 -0
- package/neural-interface/lib/pty-host/core.js +2 -1
- package/neural-interface/lib/pty-host/manager.js +27 -2
- package/neural-interface/lib/remote-policy.js +20 -11
- package/neural-interface/lib/session-indexer.js +3 -1
- package/neural-interface/lib/session-title-generator.js +6 -3
- package/neural-interface/lib/system-about.js +340 -0
- package/neural-interface/lib/system-activity.js +66 -0
- package/neural-interface/lib/terminal-env.js +11 -3
- package/neural-interface/lib/terminal-path.js +55 -0
- package/neural-interface/lib/virtual-socket.js +12 -1
- package/neural-interface/lib/whatsapp/baileys-adapter.js +165 -45
- package/neural-interface/lib/whatsapp/bridge.js +78 -34
- package/neural-interface/lib/whatsapp/commands.js +13 -14
- package/neural-interface/lib/whatsapp/config.js +134 -20
- package/neural-interface/lib/whatsapp/fake-baileys.js +99 -14
- package/neural-interface/lib/whatsapp/host-core.js +168 -35
- package/neural-interface/lib/whatsapp/inbound.js +5 -3
- package/neural-interface/lib/whatsapp/local-file.js +524 -0
- package/neural-interface/lib/whatsapp/manager.js +92 -32
- package/neural-interface/lib/whatsapp/paths.js +11 -1
- package/neural-interface/lib/whatsapp/protocol.js +65 -5
- package/neural-interface/lib/whatsapp/redact.js +63 -0
- package/neural-interface/lib/whatsapp/service.js +343 -91
- package/neural-interface/lib/whatsapp/transcription.js +463 -0
- package/neural-interface/package-lock.json +2 -2
- package/neural-interface/package.json +1 -1
- package/neural-interface/public/index.html +2 -0
- package/neural-interface/public/index2d.html +2 -0
- package/neural-interface/public/offline.html +16 -1
- package/neural-interface/public/onboarding.html +96 -2
- package/neural-interface/public/shared/account-i18n.js +7 -0
- package/neural-interface/public/shared/account-menu.js +542 -0
- package/neural-interface/public/shared/account-usage.js +79 -0
- package/neural-interface/public/shared/account-view.js +336 -0
- package/neural-interface/public/shared/agent-runtime-options.js +28 -8
- package/neural-interface/public/shared/assistant/asst-account-menu.js +298 -0
- package/neural-interface/public/shared/assistant/asst-accounts.js +182 -184
- package/neural-interface/public/shared/assistant/asst-api.js +39 -2
- package/neural-interface/public/shared/assistant/asst-brain-picker.js +288 -32
- package/neural-interface/public/shared/assistant/asst-budget.js +259 -303
- package/neural-interface/public/shared/assistant/asst-mascot.js +126 -7
- package/neural-interface/public/shared/assistant/asst-menu.js +219 -80
- package/neural-interface/public/shared/assistant/asst-model-chip.js +135 -0
- package/neural-interface/public/shared/assistant/asst-panel.js +87 -16
- package/neural-interface/public/shared/assistant/asst-render.js +38 -7
- package/neural-interface/public/shared/assistant/asst-route.js +72 -14
- package/neural-interface/public/shared/assistant/asst-routes-editor.js +45 -6
- package/neural-interface/public/shared/assistant/asst-slash.js +1 -1
- package/neural-interface/public/shared/assistant/asst-state.js +1 -1
- package/neural-interface/public/shared/assistant/asst-styles.js +160 -29
- package/neural-interface/public/shared/cdx/cdx-commands.js +4 -1
- package/neural-interface/public/shared/cdx/cdx-features.js +22 -14
- package/neural-interface/public/shared/cdx/cdx-icons.js +2 -0
- package/neural-interface/public/shared/cdx/cdx-panel.js +49 -108
- package/neural-interface/public/shared/cdx/cdx-settings.js +231 -0
- package/neural-interface/public/shared/cdx/cdx-styles.js +172 -111
- package/neural-interface/public/shared/cdx/cdx-tabs.js +264 -664
- package/neural-interface/public/shared/cdx/cdx-ws.js +2 -0
- package/neural-interface/public/shared/claude-account-view.js +3 -0
- package/neural-interface/public/shared/cli-install-view.js +392 -0
- package/neural-interface/public/shared/cli-status.js +282 -22
- package/neural-interface/public/shared/cp/cp-events.js +2 -1
- package/neural-interface/public/shared/cp/cp-styles.js +46 -0
- package/neural-interface/public/shared/desktop-bridge.js +39 -0
- package/neural-interface/public/shared/desktop-titlebar-page.js +59 -0
- package/neural-interface/public/shared/desktop-titlebar-view.js +122 -0
- package/neural-interface/public/shared/desktop-titlebar.js +153 -0
- package/neural-interface/public/shared/desktop-update-view.js +462 -0
- package/neural-interface/public/shared/editor/editor-panel.js +1 -1
- package/neural-interface/public/shared/explorer/fx-main.js +1 -1
- package/neural-interface/public/shared/git-bash-view.js +145 -0
- package/neural-interface/public/shared/html-shell.js +1 -0
- package/neural-interface/public/shared/i18n.js +19 -1
- package/neural-interface/public/shared/install-details-view.js +86 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-childpanel.js +4 -1
- package/neural-interface/public/shared/ocp-v2/ocp-v2-panel.js +36 -1
- package/neural-interface/public/shared/ocp-v2/ocp-v2-send.js +17 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +169 -2
- package/neural-interface/public/shared/pwa-install-page.js +3 -1
- package/neural-interface/public/shared/settings/settings-about-pane.js +271 -0
- package/neural-interface/public/shared/settings/settings-about.js +254 -0
- package/neural-interface/public/shared/settings/settings-ia.js +15 -0
- package/neural-interface/public/shared/showcase-privacy.js +490 -0
- package/neural-interface/public/shared/storage.js +30 -3
- package/neural-interface/public/shared/styles.css +281 -32
- package/neural-interface/public/shared/synabun-mascot.js +48 -2
- package/neural-interface/public/shared/ui-claude-panel.js +262 -217
- package/neural-interface/public/shared/ui-cli-banner.js +355 -0
- package/neural-interface/public/shared/ui-explorer.js +2 -0
- package/neural-interface/public/shared/ui-git-bash.js +124 -0
- package/neural-interface/public/shared/ui-judgments.js +10 -1
- package/neural-interface/public/shared/ui-loading.js +30 -6
- package/neural-interface/public/shared/ui-menubar.js +13 -3
- package/neural-interface/public/shared/ui-navbar.js +3 -1
- package/neural-interface/public/shared/ui-provider-auth.js +104 -0
- package/neural-interface/public/shared/ui-provider-terminal-auth.js +223 -0
- package/neural-interface/public/shared/ui-sessions.js +9 -3
- package/neural-interface/public/shared/ui-settings.js +55 -3
- package/neural-interface/public/shared/ui-sidepanel-sessions.js +3 -1
- package/neural-interface/public/shared/ui-sync.js +8 -0
- package/neural-interface/public/shared/ui-terminal.js +17 -0
- package/neural-interface/public/shared/ui-tool-updates.js +5 -0
- package/neural-interface/public/shared/ui-update.js +598 -7
- package/neural-interface/public/shared/ui-whatsapp.js +21 -6
- package/neural-interface/public/shared/whatsapp/wa-view.js +51 -8
- package/neural-interface/public/shared/worker-end.js +2 -0
- package/neural-interface/public/sw.js +1 -1
- package/neural-interface/public/variant/2d/main.js +10 -1
- package/neural-interface/public/variant/3d/main.js +10 -1
- package/neural-interface/scripts/rebuild-pty.js +14 -2
- package/neural-interface/server.js +1384 -679
- package/npm-shrinkwrap.json +4424 -0
- package/package.json +57 -2
- package/postinstall.js +61 -47
- package/preuninstall.js +8 -35
- package/setup.js +80 -47
- package/skills/synabun/modules/idea.md +1 -1
- package/skills/synabun/modules/schedule.md +1 -1
- package/updater.cmd +2 -2
- package/updater.mjs +97 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "synabun",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.9",
|
|
4
4
|
"description": "Local-first persistent vector memory, MCP tooling, and multi-agent workflows for AI assistants",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "The SynaBun Authors",
|
|
@@ -59,11 +59,17 @@
|
|
|
59
59
|
"lib/paths.js",
|
|
60
60
|
"lib/start-launcher.js",
|
|
61
61
|
"lib/packaged-runtime.js",
|
|
62
|
+
"lib/child-path.js",
|
|
63
|
+
"lib/log-redact.js",
|
|
62
64
|
"lib/desktop-pwa.js",
|
|
65
|
+
"lib/desktop-app.js",
|
|
63
66
|
"lib/external-tools.js",
|
|
64
67
|
"lib/paths.d.ts",
|
|
65
68
|
"lib/data-home-migration.js",
|
|
66
69
|
"lib/first-launch-protection.js",
|
|
70
|
+
"lib/runtime-dependencies.js",
|
|
71
|
+
"lib/package-processes.js",
|
|
72
|
+
"npm-shrinkwrap.json",
|
|
67
73
|
"lib/client-config-repair.js",
|
|
68
74
|
"lib/claude-hooks.js",
|
|
69
75
|
"lib/claude-usage-audit.js",
|
|
@@ -95,7 +101,56 @@
|
|
|
95
101
|
"build:windows:x86": "node packaging/build.mjs build --target windows-x86",
|
|
96
102
|
"postinstall": "node postinstall.js",
|
|
97
103
|
"preuninstall": "node preuninstall.js",
|
|
98
|
-
"prepublishOnly": "npm --prefix mcp-server ci --ignore-scripts && npm --prefix neural-interface ci --ignore-scripts && npm run mcp:build && node -e \"const fs = require('node:fs'); for (const path of ['mcp-server/dist/index.js', 'NOTICE', 'THIRD-PARTY-LICENSES.md']) fs.accessSync(path)\" && npm run pack:check"
|
|
104
|
+
"prepublishOnly": "npm --prefix mcp-server ci --ignore-scripts && npm --prefix neural-interface ci --ignore-scripts && npm run mcp:build && node -e \"const fs = require('node:fs'); for (const path of ['mcp-server/dist/index.js', 'NOTICE', 'THIRD-PARTY-LICENSES.md']) fs.accessSync(path)\" && npm run pack:check",
|
|
105
|
+
"prepack": "node lib/root-dependencies.mjs --check",
|
|
106
|
+
"deps:check": "node lib/root-dependencies.mjs --check",
|
|
107
|
+
"deps:sync": "node lib/root-dependencies.mjs --write"
|
|
108
|
+
},
|
|
109
|
+
"dependencies": {
|
|
110
|
+
"@anthropic-ai/claude-agent-sdk": "0.3.288",
|
|
111
|
+
"@huggingface/transformers": "^3.0.0",
|
|
112
|
+
"@inquirer/prompts": "^8.2.0",
|
|
113
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
114
|
+
"@openai/codex-sdk": "^0.160.0",
|
|
115
|
+
"@opencode-ai/sdk": "1.18.34",
|
|
116
|
+
"@xterm/addon-fit": "0.11.0",
|
|
117
|
+
"@xterm/addon-search": "0.16.0",
|
|
118
|
+
"@xterm/addon-serialize": "0.14.0",
|
|
119
|
+
"@xterm/addon-unicode11": "0.9.0",
|
|
120
|
+
"@xterm/addon-web-links": "0.12.0",
|
|
121
|
+
"@xterm/addon-webgl": "0.19.0",
|
|
122
|
+
"@xterm/headless": "6.0.0",
|
|
123
|
+
"@xterm/xterm": "6.0.0",
|
|
124
|
+
"adm-zip": "^0.6.0",
|
|
125
|
+
"archiver": "^7.0.1",
|
|
126
|
+
"chalk": "^5.6.2",
|
|
127
|
+
"dotenv": "^16.4.7",
|
|
128
|
+
"express": "^4.21.2",
|
|
129
|
+
"node-html-markdown": "^2.0.0",
|
|
130
|
+
"playwright": "^1.59.1",
|
|
131
|
+
"undici": "^8.5.0",
|
|
132
|
+
"uuid": "^14.0.0",
|
|
133
|
+
"ws": "^8.21.0",
|
|
134
|
+
"zod": "^4.4.3"
|
|
135
|
+
},
|
|
136
|
+
"optionalDependencies": {
|
|
137
|
+
"node-pty": "^1.1.0"
|
|
138
|
+
},
|
|
139
|
+
"devDependencies": {
|
|
140
|
+
"@types/express": "^5.0.0",
|
|
141
|
+
"@types/node": "^22.12.0",
|
|
142
|
+
"typescript": "^5.9.3"
|
|
143
|
+
},
|
|
144
|
+
"overrides": {
|
|
145
|
+
"@hono/node-server": "^1.19.13",
|
|
146
|
+
"brace-expansion": "^2.1.2",
|
|
147
|
+
"esbuild": "^0.28.1",
|
|
148
|
+
"hono": "^4.12.25",
|
|
149
|
+
"lodash": "^4.18.1",
|
|
150
|
+
"postcss": "^8.5.10",
|
|
151
|
+
"protobufjs": "^7.6.5",
|
|
152
|
+
"tar": "^7.5.19",
|
|
153
|
+
"vite": "^8.0.16"
|
|
99
154
|
},
|
|
100
155
|
"keywords": [
|
|
101
156
|
"ai-agents",
|
package/postinstall.js
CHANGED
|
@@ -3,17 +3,21 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* SynaBun — NPM postinstall script
|
|
5
5
|
*
|
|
6
|
-
* Runs
|
|
7
|
-
*
|
|
6
|
+
* Runs after `npm i -g synabun` (and after `npm install` in a checkout). npm
|
|
7
|
+
* has already installed every runtime dependency at the package root, at the
|
|
8
|
+
* versions npm-shrinkwrap.json pins, so nothing is installed here: this only
|
|
9
|
+
* finishes what npm cannot (node-pty's binary, the MCP build of a fresh
|
|
10
|
+
* checkout, the synabun:// handler, the updater shim's executable bit).
|
|
8
11
|
* Does NOT start the server — that's setup.js / `synabun` command.
|
|
9
12
|
*/
|
|
10
13
|
|
|
11
|
-
import {
|
|
12
|
-
import { existsSync, chmodSync } from 'node:fs';
|
|
13
|
-
import { resolve, dirname } from 'node:path';
|
|
14
|
+
import { execFileSync } from 'node:child_process';
|
|
15
|
+
import { existsSync, chmodSync, lstatSync, readlinkSync, unlinkSync } from 'node:fs';
|
|
16
|
+
import { resolve, dirname, basename, join } from 'node:path';
|
|
14
17
|
import { fileURLToPath } from 'node:url';
|
|
15
18
|
import { platform } from 'node:os';
|
|
16
19
|
import { registerStartLauncher } from './lib/start-launcher.js';
|
|
20
|
+
import { mcpCompiler } from './lib/runtime-dependencies.js';
|
|
17
21
|
|
|
18
22
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
19
23
|
|
|
@@ -28,44 +32,22 @@ const c = {
|
|
|
28
32
|
red: '\x1b[31m',
|
|
29
33
|
};
|
|
30
34
|
|
|
31
|
-
function ok(msg) { console.log(` ${c.green}
|
|
35
|
+
function ok(msg) { console.log(` ${c.green}✓${c.reset} ${msg}`); }
|
|
32
36
|
function warn(msg) { console.log(` ${c.yellow}!${c.reset} ${msg}`); }
|
|
33
|
-
function fail(msg) { console.log(` ${c.red}
|
|
34
|
-
function info(msg) { console.log(` ${c.cyan}
|
|
35
|
-
|
|
36
|
-
// ── Dependency installation ──
|
|
37
|
-
|
|
38
|
-
function needsInstall(dir) {
|
|
39
|
-
return !existsSync(resolve(dir, 'node_modules', '.package-lock.json'));
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function installDeps(name, dir, { includeDev = false } = {}) {
|
|
43
|
-
if (!needsInstall(dir)) {
|
|
44
|
-
ok(`${name} dependencies already installed`);
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
info(`Installing ${name} dependencies...`);
|
|
49
|
-
try {
|
|
50
|
-
const omitFlag = includeDev ? '' : ' --omit=dev';
|
|
51
|
-
execSync(`npm install${omitFlag} --ignore-scripts`, {
|
|
52
|
-
cwd: dir,
|
|
53
|
-
stdio: 'inherit',
|
|
54
|
-
timeout: 300_000,
|
|
55
|
-
});
|
|
56
|
-
ok(`${name} dependencies installed`);
|
|
57
|
-
} catch (err) {
|
|
58
|
-
fail(`Failed to install ${name} dependencies`);
|
|
59
|
-
console.error(err.stderr?.toString() || err.message);
|
|
60
|
-
process.exit(1);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
function needsBuild() {
|
|
65
|
-
return !existsSync(resolve(__dirname, 'mcp-server', 'dist', 'index.js'));
|
|
66
|
-
}
|
|
37
|
+
function fail(msg) { console.log(` ${c.red}✗${c.reset} ${msg}`); }
|
|
38
|
+
function info(msg) { console.log(` ${c.cyan}→${c.reset} ${msg}`); }
|
|
67
39
|
|
|
68
40
|
// ── node-pty native rebuild ──
|
|
41
|
+
//
|
|
42
|
+
// On an install or an update npm runs no dependency's install script
|
|
43
|
+
// (npm-shrinkwrap.json keeps them off: lib/root-dependencies.mjs
|
|
44
|
+
// withoutInstallScript), so node-pty is this script's: its prebuilt binary on
|
|
45
|
+
// macOS and Windows, with the execute bit of its spawn helper restored; a
|
|
46
|
+
// compile where it has none (Linux) or the one it has does not start. Never
|
|
47
|
+
// fatal: without it only the terminal is missing. A bare `npm rebuild -g`
|
|
48
|
+
// reads each package's own package.json and runs those scripts after all:
|
|
49
|
+
// SynaBun never runs one, and its repair is `npm i -g synabun@<version>` or
|
|
50
|
+
// `npm rebuild -g synabun --ignore-scripts` followed by this script.
|
|
69
51
|
|
|
70
52
|
function rebuildPty() {
|
|
71
53
|
const rebuildScript = resolve(__dirname, 'neural-interface', 'scripts', 'rebuild-pty.js');
|
|
@@ -74,20 +56,23 @@ function rebuildPty() {
|
|
|
74
56
|
return;
|
|
75
57
|
}
|
|
76
58
|
|
|
77
|
-
info('
|
|
59
|
+
info('Checking node-pty native addon...');
|
|
78
60
|
try {
|
|
79
|
-
|
|
61
|
+
execFileSync(process.execPath, [rebuildScript], {
|
|
80
62
|
cwd: resolve(__dirname, 'neural-interface'),
|
|
81
63
|
stdio: 'inherit',
|
|
82
64
|
timeout: 120_000,
|
|
83
65
|
});
|
|
84
|
-
ok('node-pty
|
|
66
|
+
ok('node-pty ready');
|
|
85
67
|
} catch (err) {
|
|
86
68
|
warn('node-pty rebuild failed (terminal features may not work)');
|
|
87
69
|
}
|
|
88
70
|
}
|
|
89
71
|
|
|
90
72
|
// ── MCP server build ──
|
|
73
|
+
//
|
|
74
|
+
// A published package carries mcp-server/dist; a fresh checkout compiles it,
|
|
75
|
+
// with the TypeScript of the root's devDependencies.
|
|
91
76
|
|
|
92
77
|
function buildMcpServer() {
|
|
93
78
|
const distIndex = resolve(__dirname, 'mcp-server', 'dist', 'index.js');
|
|
@@ -97,8 +82,13 @@ function buildMcpServer() {
|
|
|
97
82
|
}
|
|
98
83
|
|
|
99
84
|
info('Building MCP server from source...');
|
|
85
|
+
const tsc = mcpCompiler(__dirname);
|
|
86
|
+
if (!tsc) {
|
|
87
|
+
fail('MCP server build failed: TypeScript is not installed (run npm install in the package root)');
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
100
90
|
try {
|
|
101
|
-
|
|
91
|
+
execFileSync(process.execPath, [tsc, '-p', resolve(__dirname, 'mcp-server')], {
|
|
102
92
|
cwd: resolve(__dirname, 'mcp-server'),
|
|
103
93
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
104
94
|
timeout: 120_000,
|
|
@@ -114,6 +104,31 @@ function buildMcpServer() {
|
|
|
114
104
|
}
|
|
115
105
|
}
|
|
116
106
|
|
|
107
|
+
// ── Links an older postinstall left ──
|
|
108
|
+
//
|
|
109
|
+
// Up to 2.0.8 this script ran `npm install` in mcp-server/ and neural-interface/
|
|
110
|
+
// itself. Inside `npm i -g`, npm sets npm_config_global for its scripts, so each
|
|
111
|
+
// of those installs put its folder in the global packages as a link of its own,
|
|
112
|
+
// beside SynaBun: claude-memory-mcp -> synabun/mcp-server and
|
|
113
|
+
// neural-memory-interface -> synabun/neural-interface. Only such a link, pointing
|
|
114
|
+
// at this package's own folder, is removed.
|
|
115
|
+
|
|
116
|
+
function removeStalePartLinks() {
|
|
117
|
+
const parent = dirname(__dirname);
|
|
118
|
+
if (basename(parent) !== 'node_modules') return;
|
|
119
|
+
const same = (a, b) => (platform() === 'win32' ? a.toLowerCase() === b.toLowerCase() : a === b);
|
|
120
|
+
for (const [name, folder] of [['claude-memory-mcp', 'mcp-server'], ['neural-memory-interface', 'neural-interface']]) {
|
|
121
|
+
const link = join(parent, name);
|
|
122
|
+
try {
|
|
123
|
+
if (!lstatSync(link).isSymbolicLink()) continue;
|
|
124
|
+
const target = readlinkSync(link).replace(/^\\\\\?\\/, '');
|
|
125
|
+
if (!same(resolve(parent, target), resolve(__dirname, folder))) continue;
|
|
126
|
+
unlinkSync(link);
|
|
127
|
+
ok(`Removed ${name}, a link an older SynaBun left in the global packages`);
|
|
128
|
+
} catch {}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
117
132
|
// ── Protocol handler registration ──
|
|
118
133
|
//
|
|
119
134
|
// The synabun:// handler behind the offline page's Start Server button. The
|
|
@@ -151,14 +166,13 @@ function ensureUpdaterShExecutable() {
|
|
|
151
166
|
function main() {
|
|
152
167
|
console.log(`\n ${c.cyan}SynaBun${c.reset} ${c.dim}postinstall${c.reset}\n`);
|
|
153
168
|
|
|
154
|
-
|
|
155
|
-
installDeps('MCP Server', resolve(__dirname, 'mcp-server'), { includeDev: needsBuild() });
|
|
169
|
+
removeStalePartLinks();
|
|
156
170
|
rebuildPty();
|
|
157
171
|
buildMcpServer();
|
|
158
172
|
registerProtocolHandler();
|
|
159
173
|
ensureUpdaterShExecutable();
|
|
160
174
|
|
|
161
|
-
console.log(`\n ${c.green}
|
|
175
|
+
console.log(`\n ${c.green}✓${c.reset} Setup complete. Run ${c.cyan}synabun${c.reset} to start.\n`);
|
|
162
176
|
}
|
|
163
177
|
|
|
164
178
|
main();
|
package/preuninstall.js
CHANGED
|
@@ -78,50 +78,23 @@ async function tryGracefulServerShutdown() {
|
|
|
78
78
|
// keep file handles inside the install dir open, causing EBUSY when npm
|
|
79
79
|
// tries to rename it.
|
|
80
80
|
//
|
|
81
|
-
//
|
|
82
|
-
//
|
|
81
|
+
// Windows: lib/package-processes.js, the same step the updater runs (node
|
|
82
|
+
// processes with an argument inside the install path, anything whose program
|
|
83
|
+
// file is inside it; never this process, its parents or its children).
|
|
84
|
+
// Elsewhere: any process whose command line references the install path.
|
|
83
85
|
// Skips the current PID (we are the preuninstall process itself).
|
|
84
86
|
|
|
85
|
-
killOrphansInsideInstall();
|
|
87
|
+
await killOrphansInsideInstall();
|
|
86
88
|
|
|
87
|
-
function killOrphansInsideInstall() {
|
|
89
|
+
async function killOrphansInsideInstall() {
|
|
88
90
|
const installPath = __dirname;
|
|
89
91
|
const selfPid = process.pid;
|
|
90
92
|
const plat = platform();
|
|
91
93
|
|
|
92
94
|
if (plat === 'win32') {
|
|
93
|
-
// PowerShell: Get-CimInstance returns every process with CommandLine.
|
|
94
|
-
// Pass the install path via env so this PowerShell command line does not
|
|
95
|
-
// itself contain the path we are trying to match and kill.
|
|
96
|
-
// Stop-Process -Force kills synchronously; -ErrorAction SilentlyContinue
|
|
97
|
-
// suppresses "process already exited" noise.
|
|
98
|
-
const ps = `
|
|
99
|
-
$ErrorActionPreference = 'SilentlyContinue';
|
|
100
|
-
$installPath = $env:SYNABUN_INSTALL_PATH;
|
|
101
|
-
$selfPid = [int]$env:SYNABUN_PREUNINSTALL_PID;
|
|
102
|
-
Get-CimInstance Win32_Process |
|
|
103
|
-
Where-Object {
|
|
104
|
-
$_.ProcessId -ne $selfPid -and
|
|
105
|
-
$_.ProcessId -ne $PID -and (
|
|
106
|
-
($_.CommandLine -and $_.CommandLine -like "*$installPath*") -or
|
|
107
|
-
($_.ExecutablePath -and $_.ExecutablePath -like "$installPath*")
|
|
108
|
-
)
|
|
109
|
-
} |
|
|
110
|
-
ForEach-Object {
|
|
111
|
-
Write-Host (' Killing orphan PID ' + $_.ProcessId + ' (' + $_.Name + ')');
|
|
112
|
-
Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue
|
|
113
|
-
}
|
|
114
|
-
`.trim();
|
|
115
95
|
try {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
timeout: 8000,
|
|
119
|
-
env: {
|
|
120
|
-
...process.env,
|
|
121
|
-
SYNABUN_INSTALL_PATH: installPath,
|
|
122
|
-
SYNABUN_PREUNINSTALL_PID: String(selfPid),
|
|
123
|
-
},
|
|
124
|
-
});
|
|
96
|
+
const { stopPackageProcesses } = await import('./lib/package-processes.js');
|
|
97
|
+
await stopPackageProcesses({ roots: [installPath], selfPid, log: line => console.log(line) });
|
|
125
98
|
} catch {
|
|
126
99
|
// PowerShell unavailable, blocked, or timed out. Fall through.
|
|
127
100
|
}
|
package/setup.js
CHANGED
|
@@ -8,17 +8,18 @@
|
|
|
8
8
|
* 1. Checks Node.js version (>=22)
|
|
9
9
|
* 2. Ensures data directory exists (~/.synabun or %APPDATA%/synabun)
|
|
10
10
|
* 3. Migrates data from old scaffolded installs if detected
|
|
11
|
-
* 4.
|
|
12
|
-
*
|
|
11
|
+
* 4. Checks that the runtime dependencies resolve (npm installs them with the
|
|
12
|
+
* package); runs npm only for a checkout nobody installed or a missing module
|
|
13
|
+
* 5. Builds the MCP server TypeScript (if dist/ is missing)
|
|
13
14
|
* 6. Takes a verified snapshot of user state before a new version first runs
|
|
14
15
|
* (lib/first-launch-protection.js). If it cannot, the launch stops here.
|
|
15
16
|
* 7. Starts the Neural Interface Express server
|
|
16
17
|
* 8. Auto-opens browser to onboarding wizard (or main page if setup complete)
|
|
17
18
|
*/
|
|
18
19
|
|
|
19
|
-
import {
|
|
20
|
+
import { execFileSync, spawn, exec } from 'node:child_process';
|
|
20
21
|
import { existsSync, readFileSync, writeFileSync, cpSync, readdirSync, mkdirSync, unlinkSync, createWriteStream, statSync, renameSync } from 'node:fs';
|
|
21
|
-
import { resolve, dirname } from 'node:path';
|
|
22
|
+
import { resolve, dirname, join } from 'node:path';
|
|
22
23
|
import { fileURLToPath } from 'node:url';
|
|
23
24
|
import { platform } from 'node:os';
|
|
24
25
|
import {
|
|
@@ -48,6 +49,9 @@ import {
|
|
|
48
49
|
RESTART_REPORT_ENV, noteSupervisorFailure, openRestartReport, openSupervisorRecord, registerStartLauncher, resolvePort,
|
|
49
50
|
} from './lib/start-launcher.js';
|
|
50
51
|
import { packagedRuntime } from './lib/packaged-runtime.js';
|
|
52
|
+
import {
|
|
53
|
+
OPTIONAL_AT_ROOT, checkRuntimeDependencies, findInstalled, installAtPackageRoot, installKind, mcpCompiler,
|
|
54
|
+
} from './lib/runtime-dependencies.js';
|
|
51
55
|
|
|
52
56
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
53
57
|
|
|
@@ -288,54 +292,79 @@ function checkNodeVersion() {
|
|
|
288
292
|
ok(`Node.js v${process.versions.node}`);
|
|
289
293
|
}
|
|
290
294
|
|
|
291
|
-
// ── Phase 2:
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
295
|
+
// ── Phase 2: Runtime dependencies ──
|
|
296
|
+
//
|
|
297
|
+
// `npm i -g synabun` installed them at the package root, at the versions
|
|
298
|
+
// npm-shrinkwrap.json pins; a desktop build and a development checkout carry
|
|
299
|
+
// them in each part's node_modules. This step only checks that Node finds them
|
|
300
|
+
// (lib/runtime-dependencies.js). npm runs here only for what is really missing,
|
|
301
|
+
// a checkout nobody installed or a module that disappeared: once, at the
|
|
302
|
+
// package root, and never inside a packaged application.
|
|
303
|
+
|
|
304
|
+
// The repair of an npm install: this version again, from the registry, which keeps the dependencies' install
|
|
305
|
+
// scripts off as every install and update does. Never a bare `npm rebuild -g`: it reads each dependency's own
|
|
306
|
+
// package.json and runs those scripts (onnxruntime-node's CUDA download, sharp's source build).
|
|
307
|
+
function npmRepairCommand() {
|
|
308
|
+
let version = null;
|
|
309
|
+
try { version = JSON.parse(readFileSync(resolve(PACKAGE_ROOT, 'package.json'), 'utf-8')).version; } catch {}
|
|
310
|
+
return `npm i -g synabun${version ? `@${version}` : ''}`;
|
|
306
311
|
}
|
|
307
312
|
|
|
308
|
-
function
|
|
309
|
-
|
|
310
|
-
|
|
313
|
+
function ensureRuntimeDependencies() {
|
|
314
|
+
const report = checkRuntimeDependencies({ packageRoot: PACKAGE_ROOT });
|
|
315
|
+
// A fresh checkout compiles the MCP server, with the TypeScript of the root's devDependencies.
|
|
316
|
+
const compilerMissing = needsBuild() && !mcpCompiler(PACKAGE_ROOT);
|
|
317
|
+
if (report.ok && !compilerMissing) {
|
|
318
|
+
ok('Runtime dependencies present');
|
|
319
|
+
for (const part of report.parts) for (const name of part.optional) warn(`${name} is not installed: ${OPTIONAL_AT_ROOT[name]}`);
|
|
311
320
|
return;
|
|
312
321
|
}
|
|
313
322
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
323
|
+
for (const part of report.parts) if (part.error) fail(part.error);
|
|
324
|
+
const names = [...report.missing.map(item => item.name), ...(compilerMissing ? ['typescript (builds the MCP server)'] : [])];
|
|
325
|
+
if (names.length) warn(`Missing: ${names.slice(0, 8).join(', ')}${names.length > 8 ? ` and ${names.length - 8} more` : ''}`);
|
|
326
|
+
const kind = installKind({ packageRoot: PACKAGE_ROOT, packaged: !!packagedRuntime() });
|
|
327
|
+
if (kind === 'packaged') {
|
|
328
|
+
fail('This SynaBun application is incomplete. Reinstall it from https://synabun.ai');
|
|
329
|
+
startFailed('DEPENDENCIES_MISSING', 'the application is incomplete: reinstall it');
|
|
330
|
+
process.exit(1);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
info(`Installing them with npm in ${PACKAGE_ROOT}...`);
|
|
334
|
+
startPhase('dependencies', { name: 'SynaBun' });
|
|
335
|
+
const logsDir = resolve(DATA_HOME, 'data', 'npm-logs');
|
|
336
|
+
const result = installAtPackageRoot({ packageRoot: PACKAGE_ROOT, includeDev: needsBuild(), logsDir });
|
|
337
|
+
const after = result.ok ? checkRuntimeDependencies({ packageRoot: PACKAGE_ROOT }) : null;
|
|
338
|
+
if (!result.ok || !after.ok) {
|
|
339
|
+
fail('npm could not install the runtime dependencies');
|
|
340
|
+
info(`Command: ${result.command}`);
|
|
341
|
+
info(`Folder: ${result.cwd}`);
|
|
342
|
+
info(`Exit code: ${result.status ?? 'none'}${result.signal ? `, signal ${result.signal}` : ''}${result.timedOut ? ' (stopped after 20 minutes)' : result.error ? ` (${result.error})` : ''}`);
|
|
343
|
+
info(`npm log: ${result.logFile || `none written (folder ${logsDir})`}`);
|
|
344
|
+
if (after && !after.ok) info(`Still missing: ${after.missing.map(item => item.name).join(', ')}`);
|
|
345
|
+
if (kind === 'npm') info(`To repair: close SynaBun and every AI client that uses it, then run ${npmRepairCommand()}`);
|
|
346
|
+
startFailed('DEPENDENCIES_FAILED', `npm could not install the runtime dependencies (exit ${result.status ?? result.signal ?? result.error})`, { exitCode: result.status ?? undefined });
|
|
328
347
|
process.exit(1);
|
|
329
348
|
}
|
|
349
|
+
ok(`Runtime dependencies installed (${result.seconds} s)`);
|
|
350
|
+
// That install ran no package scripts: node-pty still needs building where it has no prebuilt binary.
|
|
351
|
+
const rebuild = resolve(PACKAGE_ROOT, 'neural-interface', 'scripts', 'rebuild-pty.js');
|
|
352
|
+
try {
|
|
353
|
+
execFileSync(process.execPath, [rebuild], { cwd: resolve(PACKAGE_ROOT, 'neural-interface'), stdio: 'inherit', timeout: 180_000, windowsHide: true });
|
|
354
|
+
} catch {
|
|
355
|
+
warn('node-pty could not be prepared: terminal features may not work');
|
|
356
|
+
}
|
|
330
357
|
}
|
|
331
358
|
|
|
332
359
|
// ── Phase 3: Playwright Chromium (for browser automation) ──
|
|
333
360
|
|
|
334
361
|
function installPlaywrightChromium() {
|
|
335
362
|
const niDir = resolve(PACKAGE_ROOT, 'neural-interface');
|
|
363
|
+
// SynaBun's own Playwright on the Node that runs SynaBun (its absolute path): a packaged application puts its
|
|
364
|
+
// runtime last on PATH, so a `node` or `npx` by name may be the user's, of any version.
|
|
336
365
|
try {
|
|
337
|
-
const result =
|
|
338
|
-
cwd: niDir, encoding: 'utf8', timeout: 10_000,
|
|
366
|
+
const result = execFileSync(process.execPath, ['-e', "const pw=require('playwright');const p=pw.chromium.executablePath();process.stdout.write(p)"], {
|
|
367
|
+
cwd: niDir, encoding: 'utf8', timeout: 10_000, windowsHide: true,
|
|
339
368
|
});
|
|
340
369
|
if (existsSync(result)) {
|
|
341
370
|
ok('Playwright Chromium already installed');
|
|
@@ -346,11 +375,11 @@ function installPlaywrightChromium() {
|
|
|
346
375
|
info('Installing Playwright Chromium (for browser automation)...');
|
|
347
376
|
startPhase('browser');
|
|
348
377
|
try {
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
});
|
|
378
|
+
// SynaBun's own Playwright (the package root's in an npm install, the part's in a checkout), never `npx`:
|
|
379
|
+
// npx would fetch the newest Playwright, whose Chromium is not the one this version drives.
|
|
380
|
+
const playwright = findInstalled(niDir, 'playwright', { stopAt: PACKAGE_ROOT });
|
|
381
|
+
if (!playwright) throw new Error('playwright is not installed');
|
|
382
|
+
execFileSync(process.execPath, [join(playwright.path, 'cli.js'), 'install', 'chromium'], { cwd: niDir, stdio: 'inherit', timeout: 120_000 });
|
|
354
383
|
ok('Playwright Chromium installed');
|
|
355
384
|
} catch (err) {
|
|
356
385
|
console.log(' (optional) Playwright Chromium install failed — system Chrome will be used');
|
|
@@ -372,8 +401,13 @@ function buildMcpServer() {
|
|
|
372
401
|
|
|
373
402
|
info('Building MCP server from source...');
|
|
374
403
|
startPhase('build');
|
|
404
|
+
const tsc = mcpCompiler(PACKAGE_ROOT);
|
|
405
|
+
if (!tsc) {
|
|
406
|
+
fail('MCP server build failed: TypeScript is not installed (npm install at the package root installs it)');
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
375
409
|
try {
|
|
376
|
-
|
|
410
|
+
execFileSync(process.execPath, [tsc, '-p', resolve(PACKAGE_ROOT, 'mcp-server')], {
|
|
377
411
|
cwd: resolve(PACKAGE_ROOT, 'mcp-server'),
|
|
378
412
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
379
413
|
windowsHide: !!packagedRuntime(),
|
|
@@ -840,11 +874,10 @@ async function main() {
|
|
|
840
874
|
checkNodeVersion();
|
|
841
875
|
console.log('');
|
|
842
876
|
|
|
843
|
-
// Dependencies (installed
|
|
877
|
+
// Dependencies (npm installed them with the package; this only checks)
|
|
844
878
|
// A slow step names itself when it begins (startPhase inside each); between
|
|
845
879
|
// them the record goes back to 'checking', so it never names a finished one.
|
|
846
|
-
|
|
847
|
-
installDeps('MCP Server', resolve(PACKAGE_ROOT, 'mcp-server'), { includeDev: needsBuild() });
|
|
880
|
+
ensureRuntimeDependencies();
|
|
848
881
|
startPhase('checking');
|
|
849
882
|
console.log('');
|
|
850
883
|
|
|
@@ -128,7 +128,7 @@ If the user says yes:
|
|
|
128
128
|
2. If not, create it with the runtime's category-management tool using:
|
|
129
129
|
- `name`: "ideas"
|
|
130
130
|
- `description`: "Brainstormed features, experiments, and creative explorations"
|
|
131
|
-
- `parent`: the current project's parent category (e.g., "my-project") —
|
|
131
|
+
- `parent`: the current project's parent category (e.g., "my-project") only when it is in the list from step 1 — otherwise no parent (a fresh install has no categories; SynaBun also creates `ideas` with no parent on the first `remember` into it)
|
|
132
132
|
3. For each idea the user wants saved, call `remember` with:
|
|
133
133
|
- `content`: The full idea text (title + concept + reasoning chain + next steps)
|
|
134
134
|
- `category`: "ideas"
|
|
@@ -139,7 +139,7 @@ Rules baked in: `model`/`profile` **top level**; `{iterations,maxMinutes}` in `o
|
|
|
139
139
|
|
|
140
140
|
## Phase 5 — Remember (one MCP call)
|
|
141
141
|
|
|
142
|
-
`remember` `category:"schedules"` (if
|
|
142
|
+
`remember` `category:"schedules"` (SynaBun creates it on the first save, with no parent; if the runtime still reports it unknown, `category` action `create` it first, under parent `synabun` only when that category exists in `category` action `list`, otherwise with no parent), `project:"synabun"`, `importance:6`, `tags:["schedule","<platform/topic>","conversational-created"]`, content = 4–6 lines: name, template id, schedule id, cron, group, profile/model, date.
|
|
143
143
|
|
|
144
144
|
## Phase 6 — Done (one line)
|
|
145
145
|
|
package/updater.cmd
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
setlocal enableextensions
|
|
3
3
|
title SynaBun Updater
|
|
4
4
|
|
|
5
|
-
rem
|
|
5
|
+
rem -------------------------------------------------------
|
|
6
6
|
rem Windows shim for the cross-platform updater (updater.mjs).
|
|
7
7
|
rem Invoked by the running SynaBun server via:
|
|
8
8
|
rem start "" "<install>\updater.cmd" --payload payload.json
|
|
@@ -11,7 +11,7 @@ rem We use a shim instead of spawning node directly so cmd's
|
|
|
11
11
|
rem quoting rules don't mangle the command line, and so the
|
|
12
12
|
rem window stays open for the user to read npm output even
|
|
13
13
|
rem if node exits unexpectedly.
|
|
14
|
-
rem
|
|
14
|
+
rem -------------------------------------------------------
|
|
15
15
|
|
|
16
16
|
set "SCRIPT_DIR=%~dp0"
|
|
17
17
|
set "EXIT_CODE=0"
|