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
|
@@ -146,17 +146,19 @@
|
|
|
146
146
|
height: var(--fs-locked-height);
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
-
/* ── Window Controls Overlay (PWA standalone on macOS / Windows / Linux) ──
|
|
149
|
+
/* ── Window Controls Overlay (PWA standalone on macOS / Windows / Linux, and the SynaBun desktop app) ──
|
|
150
150
|
Uses body.wco-active (toggled by JS via navigator.windowControlsOverlay)
|
|
151
|
-
for higher specificity than base #title-bar rules.
|
|
151
|
+
for higher specificity than base #title-bar rules. The --desktop-titlebar-*
|
|
152
|
+
variables stand in for the env() ones only inside the desktop app when its
|
|
153
|
+
window has no overlay API (desktop-titlebar.js); the PWA never sets them.
|
|
152
154
|
── */
|
|
153
155
|
body.wco-active #title-bar {
|
|
154
156
|
-webkit-app-region: drag;
|
|
155
|
-
padding-left: calc(env(titlebar-area-x, 0px) + 10px);
|
|
156
|
-
padding-right: max(18px, calc(100vw - env(titlebar-area-x, 0px) - env(titlebar-area-width, 100vw) + 10px));
|
|
157
|
+
padding-left: calc(env(titlebar-area-x, var(--desktop-titlebar-x, 0px)) + 10px);
|
|
158
|
+
padding-right: max(18px, calc(100vw - env(titlebar-area-x, var(--desktop-titlebar-x, 0px)) - env(titlebar-area-width, var(--desktop-titlebar-width, 100vw)) + 10px));
|
|
157
159
|
padding-top: 0;
|
|
158
160
|
padding-bottom: 0;
|
|
159
|
-
height: env(titlebar-area-height, 48px);
|
|
161
|
+
height: env(titlebar-area-height, var(--desktop-titlebar-height, 48px));
|
|
160
162
|
transition: padding 0.2s ease;
|
|
161
163
|
}
|
|
162
164
|
body.wco-active #title-bar button,
|
|
@@ -167,7 +169,9 @@
|
|
|
167
169
|
body.wco-active #title-bar .bar-right {
|
|
168
170
|
-webkit-app-region: no-drag;
|
|
169
171
|
}
|
|
170
|
-
|
|
172
|
+
/* The installed PWA's overlay is thinner than the toolbar's pill: the pill's glass goes. The desktop app's bar is
|
|
173
|
+
the pill's height and keeps it (below). */
|
|
174
|
+
html:not(.desktop-titlebar) body.wco-active #title-bar .bar-right {
|
|
171
175
|
background: transparent;
|
|
172
176
|
backdrop-filter: none;
|
|
173
177
|
-webkit-backdrop-filter: none;
|
|
@@ -178,6 +182,19 @@
|
|
|
178
182
|
transform: translateY(1px);
|
|
179
183
|
}
|
|
180
184
|
|
|
185
|
+
/* ── The SynaBun desktop app (packaging/desktop): this bar is the window's title bar ──
|
|
186
|
+
html.desktop-titlebar comes from desktop-titlebar.js, only inside the app's main window, which also toggles
|
|
187
|
+
body.wco-active (off in full screen, where the system hides its buttons). Whatever in the bar takes a click
|
|
188
|
+
stays out of the drag region; the empty parts drag the window, and the system maximizes and restores it on
|
|
189
|
+
a double-click. While something is drawn over the bar (a dialog, the tour), the bar drags nothing, so that
|
|
190
|
+
thing gets its clicks. Windows and Linux: the app's menu opens from .desktop-app-menu-btn (a .bar-icon). */
|
|
191
|
+
html.desktop-titlebar body.wco-active #title-bar :is(#titlebar-logo, #search-container, select, label, [role="button"], [tabindex]:not([tabindex="-1"])) {
|
|
192
|
+
-webkit-app-region: no-drag;
|
|
193
|
+
}
|
|
194
|
+
html.desktop-titlebar body.wco-active.desktop-titlebar-covered #title-bar {
|
|
195
|
+
-webkit-app-region: no-drag;
|
|
196
|
+
}
|
|
197
|
+
|
|
181
198
|
::-webkit-scrollbar { width: 6px; }
|
|
182
199
|
::-webkit-scrollbar-track { background: rgba(255,255,255,0.03); }
|
|
183
200
|
::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.15); border-radius: 3px; }
|
|
@@ -1474,19 +1491,32 @@
|
|
|
1474
1491
|
z-index: 1;
|
|
1475
1492
|
}
|
|
1476
1493
|
|
|
1494
|
+
/* The memory search: a slot of its own between the menubar and the pill, centred in what the menu leaves (its auto
|
|
1495
|
+
margins) and up to 340px of it. It never lies under the menu, whatever the labels' language or the window's
|
|
1496
|
+
width: where the space runs short it shrinks, and below 200px the field is a search icon that opens over the
|
|
1497
|
+
menu while it has the focus ("SEARCH BAR"). Its box is the field's width only, so the empty bar beside it still
|
|
1498
|
+
drags the desktop app's window. With the visualization off it takes no room at all. */
|
|
1477
1499
|
#title-bar .bar-center {
|
|
1478
|
-
position:
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1500
|
+
position: relative;
|
|
1501
|
+
flex: 0 1 340px;
|
|
1502
|
+
min-width: 30px;
|
|
1503
|
+
margin-inline: auto;
|
|
1504
|
+
container-type: inline-size;
|
|
1483
1505
|
display: flex;
|
|
1484
1506
|
align-items: center;
|
|
1485
1507
|
justify-content: center;
|
|
1486
|
-
gap: 8px;
|
|
1487
|
-
min-width: 0;
|
|
1488
1508
|
pointer-events: auto;
|
|
1489
1509
|
}
|
|
1510
|
+
#title-bar .bar-center:has(> #search-wrapper.viz-hidden) {
|
|
1511
|
+
flex-basis: 0;
|
|
1512
|
+
min-width: 0;
|
|
1513
|
+
}
|
|
1514
|
+
#title-bar .bar-center:focus-within {
|
|
1515
|
+
z-index: 2; /* the opened field draws over the menubar (.bar-left, z-index 1) */
|
|
1516
|
+
}
|
|
1517
|
+
#title-bar .bar-center + .bar-right {
|
|
1518
|
+
margin-left: 0; /* the slot's auto margins push the pill to the right edge */
|
|
1519
|
+
}
|
|
1490
1520
|
|
|
1491
1521
|
/* ── Unified frosted glass pill ── */
|
|
1492
1522
|
#title-bar .bar-right {
|
|
@@ -5105,6 +5135,54 @@
|
|
|
5105
5135
|
vertical-align: -2px;
|
|
5106
5136
|
margin-right: 6px;
|
|
5107
5137
|
}
|
|
5138
|
+
/* Inside the desktop app (ui-update.js openDesktopUpdateModal): the release notes, written as text, and the
|
|
5139
|
+
download's progress. The surfaces and the green of the rest of this dialog. */
|
|
5140
|
+
.update-notes-label {
|
|
5141
|
+
font-size: 11px;
|
|
5142
|
+
color: var(--t-muted);
|
|
5143
|
+
margin: 4px 0 6px;
|
|
5144
|
+
}
|
|
5145
|
+
.update-notes {
|
|
5146
|
+
max-height: 168px;
|
|
5147
|
+
overflow: auto;
|
|
5148
|
+
white-space: pre-wrap;
|
|
5149
|
+
overflow-wrap: anywhere;
|
|
5150
|
+
background: rgba(0,0,0,0.35);
|
|
5151
|
+
border: 1px solid rgba(255,255,255,0.06);
|
|
5152
|
+
border-radius: var(--r-card);
|
|
5153
|
+
padding: 10px 14px;
|
|
5154
|
+
font-size: 12px;
|
|
5155
|
+
line-height: 1.5;
|
|
5156
|
+
color: var(--t-secondary);
|
|
5157
|
+
}
|
|
5158
|
+
.update-notes:focus-visible {
|
|
5159
|
+
outline: 2px solid var(--stg-focus, #93c5fd);
|
|
5160
|
+
outline-offset: 2px;
|
|
5161
|
+
}
|
|
5162
|
+
.update-progress {
|
|
5163
|
+
height: 6px;
|
|
5164
|
+
margin: 16px 0 8px;
|
|
5165
|
+
border-radius: 999px;
|
|
5166
|
+
background: rgba(255,255,255,0.12);
|
|
5167
|
+
overflow: hidden;
|
|
5168
|
+
}
|
|
5169
|
+
.update-progress-bar {
|
|
5170
|
+
height: 100%;
|
|
5171
|
+
border-radius: inherit;
|
|
5172
|
+
background: #34c759;
|
|
5173
|
+
transition: width 0.2s ease;
|
|
5174
|
+
}
|
|
5175
|
+
/* The size is not known: the bar is full and quiet, the words say how much came. */
|
|
5176
|
+
.update-progress-bar--unknown { opacity: 0.45; }
|
|
5177
|
+
.update-progress-text {
|
|
5178
|
+
font-family: var(--ff-mono);
|
|
5179
|
+
font-size: 11px;
|
|
5180
|
+
font-variant-numeric: tabular-nums;
|
|
5181
|
+
color: var(--t-muted);
|
|
5182
|
+
}
|
|
5183
|
+
@media (prefers-reduced-motion: reduce) {
|
|
5184
|
+
.update-progress-bar { transition: none; }
|
|
5185
|
+
}
|
|
5108
5186
|
.tag-delete-overlay.closing {
|
|
5109
5187
|
opacity: 0;
|
|
5110
5188
|
transition: opacity 0.15s ease;
|
|
@@ -7112,25 +7190,22 @@
|
|
|
7112
7190
|
/* ═══════════════════════════════════════════
|
|
7113
7191
|
SEARCH BAR (inline in top bar)
|
|
7114
7192
|
═══════════════════════════════════════════ */
|
|
7115
|
-
#search-container
|
|
7116
|
-
display: contents;
|
|
7117
|
-
}
|
|
7118
|
-
|
|
7193
|
+
/* #search-container is the navbar slot (#title-bar .bar-center, "TOP MENU BAR"); the field fills it up to 340px. */
|
|
7119
7194
|
#search-wrapper {
|
|
7120
7195
|
position: relative;
|
|
7121
7196
|
width: 340px;
|
|
7122
|
-
max-width:
|
|
7197
|
+
max-width: 100%;
|
|
7123
7198
|
border-radius: 8px;
|
|
7124
7199
|
padding: 1px;
|
|
7125
|
-
background:
|
|
7200
|
+
background: var(--s-light); /* the 1px edge around the field */
|
|
7126
7201
|
overflow: hidden;
|
|
7127
7202
|
opacity: 1;
|
|
7128
7203
|
transition: width 0.35s cubic-bezier(0.4, 0, 0.2, 1),
|
|
7129
7204
|
max-width 0.35s cubic-bezier(0.4, 0, 0.2, 1),
|
|
7130
7205
|
padding 0.35s cubic-bezier(0.4, 0, 0.2, 1),
|
|
7131
7206
|
opacity 0.25s ease,
|
|
7132
|
-
background 0.
|
|
7133
|
-
box-shadow 0.
|
|
7207
|
+
background 0.2s ease,
|
|
7208
|
+
box-shadow 0.2s ease;
|
|
7134
7209
|
}
|
|
7135
7210
|
|
|
7136
7211
|
#search-wrapper.viz-hidden {
|
|
@@ -7141,36 +7216,88 @@
|
|
|
7141
7216
|
pointer-events: none;
|
|
7142
7217
|
}
|
|
7143
7218
|
|
|
7219
|
+
#search-wrapper:hover {
|
|
7220
|
+
background: var(--s-medium);
|
|
7221
|
+
}
|
|
7222
|
+
|
|
7144
7223
|
#search-wrapper.focused {
|
|
7145
|
-
background:
|
|
7146
|
-
box-shadow: 0 0 0
|
|
7147
|
-
animation: searchGlow 2.5s ease-in-out infinite;
|
|
7224
|
+
background: var(--b-hover);
|
|
7225
|
+
box-shadow: 0 0 0 3px var(--s-subtle);
|
|
7148
7226
|
}
|
|
7149
7227
|
|
|
7150
|
-
|
|
7151
|
-
|
|
7152
|
-
|
|
7228
|
+
#search-wrapper .search-icon {
|
|
7229
|
+
position: absolute;
|
|
7230
|
+
left: 9px;
|
|
7231
|
+
top: 50%;
|
|
7232
|
+
width: 13px;
|
|
7233
|
+
height: 13px;
|
|
7234
|
+
transform: translateY(-50%);
|
|
7235
|
+
color: var(--t-secondary);
|
|
7236
|
+
pointer-events: none;
|
|
7237
|
+
transition: color 0.2s ease;
|
|
7153
7238
|
}
|
|
7239
|
+
#search-wrapper:hover .search-icon { color: var(--t-primary); }
|
|
7240
|
+
#search-wrapper.focused .search-icon { color: var(--t-bright); }
|
|
7154
7241
|
|
|
7155
7242
|
#search-input {
|
|
7156
7243
|
width: 100%;
|
|
7157
|
-
padding: 6px 36px 6px
|
|
7244
|
+
padding: 6px 36px 6px 30px;
|
|
7158
7245
|
background: rgba(28, 28, 30, 0.7);
|
|
7159
7246
|
border: none;
|
|
7160
7247
|
border-radius: 7px;
|
|
7161
|
-
color:
|
|
7248
|
+
color: var(--t-bright);
|
|
7249
|
+
font-family: inherit;
|
|
7162
7250
|
font-size: 12px;
|
|
7163
7251
|
font-weight: 400;
|
|
7164
7252
|
outline: none;
|
|
7165
7253
|
letter-spacing: 0.01em;
|
|
7254
|
+
text-overflow: ellipsis;
|
|
7166
7255
|
}
|
|
7167
7256
|
|
|
7168
7257
|
#search-input::placeholder {
|
|
7169
|
-
color:
|
|
7170
|
-
letter-spacing: 0.
|
|
7258
|
+
color: var(--t-secondary);
|
|
7259
|
+
letter-spacing: 0.01em;
|
|
7171
7260
|
font-weight: 400;
|
|
7172
7261
|
}
|
|
7173
7262
|
|
|
7263
|
+
/* ── Not enough room in the bar: a search icon, opened over the menubar while it has the focus ── */
|
|
7264
|
+
@container (max-width: 199px) {
|
|
7265
|
+
#search-wrapper {
|
|
7266
|
+
width: 30px;
|
|
7267
|
+
transition: opacity 0.25s ease, background 0.2s ease, box-shadow 0.2s ease; /* opens and closes at once */
|
|
7268
|
+
}
|
|
7269
|
+
#search-wrapper:not(:focus-within) #search-input {
|
|
7270
|
+
padding-right: 0;
|
|
7271
|
+
color: transparent;
|
|
7272
|
+
cursor: pointer;
|
|
7273
|
+
}
|
|
7274
|
+
#search-wrapper:not(:focus-within) #search-input::placeholder {
|
|
7275
|
+
color: transparent;
|
|
7276
|
+
}
|
|
7277
|
+
#search-wrapper:not(:focus-within) :is(#search-badge, #search-clear) {
|
|
7278
|
+
visibility: hidden; /* ui-search.js shows and hides them with inline display */
|
|
7279
|
+
}
|
|
7280
|
+
/* A search is on: the icon says so. */
|
|
7281
|
+
#search-wrapper:not(:focus-within):has(#search-input:not(:placeholder-shown)) {
|
|
7282
|
+
background: var(--b-visible);
|
|
7283
|
+
}
|
|
7284
|
+
#search-wrapper:not(:focus-within):has(#search-input:not(:placeholder-shown)) .search-icon {
|
|
7285
|
+
color: var(--t-bright);
|
|
7286
|
+
}
|
|
7287
|
+
#search-wrapper:focus-within:not(.viz-hidden) {
|
|
7288
|
+
position: absolute;
|
|
7289
|
+
right: 0;
|
|
7290
|
+
top: 50%;
|
|
7291
|
+
transform: translateY(-50%);
|
|
7292
|
+
width: min(340px, 60vw);
|
|
7293
|
+
max-width: none;
|
|
7294
|
+
box-shadow: 0 0 0 3px var(--s-subtle), var(--shadow-md);
|
|
7295
|
+
}
|
|
7296
|
+
#search-wrapper:focus-within:not(.viz-hidden) #search-input {
|
|
7297
|
+
background: rgb(28, 28, 30); /* opaque: the menu labels under it don't show through */
|
|
7298
|
+
}
|
|
7299
|
+
}
|
|
7300
|
+
|
|
7174
7301
|
#search-badge {
|
|
7175
7302
|
position: absolute;
|
|
7176
7303
|
right: 8px;
|
|
@@ -15649,6 +15776,102 @@
|
|
|
15649
15776
|
.settings-nav-item[data-tab="notifications"] { --stg-tile: #bd5a52; }
|
|
15650
15777
|
.settings-nav-item[data-tab="appearance"] { --stg-tile: #6c717a; }
|
|
15651
15778
|
/* <<< settings-redesign:nav-polish */
|
|
15779
|
+
/* >>> settings-redesign:spacing */
|
|
15780
|
+
/* ═══════════════════════════════════════════
|
|
15781
|
+
SETTINGS — room between the rows of the right column, on every page
|
|
15782
|
+
The elegance pass packed the rows at 8px. This loosens the whole rhythm one step and touches no size, weight or wiring:
|
|
15783
|
+
the row padding is the one lever (--stg-row-y), the gaps around it keep their proportions.
|
|
15784
|
+
Scoped to the settings panel; the command runner and the style guide keep the elegance values.
|
|
15785
|
+
═══════════════════════════════════════════ */
|
|
15786
|
+
.settings-panel { --stg-row-y: 13px; }
|
|
15787
|
+
/* page head, product headings, sections */
|
|
15788
|
+
.stg-page-head { margin-bottom: 26px; }
|
|
15789
|
+
.settings-panel .stg-pane-title { margin: 32px 0 14px; }
|
|
15790
|
+
.settings-panel .stg-card { margin-bottom: 22px; }
|
|
15791
|
+
.settings-panel .stg-card.stg-acc[data-collapsible] { margin-bottom: 14px; }
|
|
15792
|
+
.settings-panel .stg-card.stg-acc[data-collapsible] > .stg-card-head { min-height: 44px; padding-top: 10px; padding-bottom: 10px; }
|
|
15793
|
+
/* what a group holds that is not a row of its own (a note, a list, a preview) */
|
|
15794
|
+
.settings-panel .stg-card-body > * { margin-top: 14px; margin-bottom: 14px; }
|
|
15795
|
+
/* a row that opens (an assistant, a model) was fixed at 7px */
|
|
15796
|
+
.settings-panel .stg-card-body > .stg-card[data-collapsible] { padding-top: var(--stg-row-y); padding-bottom: var(--stg-row-y); }
|
|
15797
|
+
/* the Browser fields kept a margin of their own under the row, which doubled the gap next to the row padding */
|
|
15798
|
+
.settings-panel .stg-card-body > .stg-field.bc-card-row { margin-bottom: 0; }
|
|
15799
|
+
/* label, control, help */
|
|
15800
|
+
.settings-panel .stg-field > label { margin-bottom: 8px; }
|
|
15801
|
+
.settings-panel .stg-help { margin-top: 5px; }
|
|
15802
|
+
.settings-panel .stg-toggle-text .stg-help { margin-top: 4px; }
|
|
15803
|
+
/* <<< settings-redesign:spacing */
|
|
15804
|
+
/* >>> settings-about */
|
|
15805
|
+
/* Settings → About (shared/settings/settings-about-pane.js): the header (icon, name, version, the two buttons),
|
|
15806
|
+
the links, the facts of System and the dependency lists. Text weight and the panel's --stg-* roles; every row
|
|
15807
|
+
wraps instead of widening the panel, down to the 320px panel. Its tile is the palette's neutral graphite. */
|
|
15808
|
+
.settings-nav-item[data-tab="about"] { --stg-tile: #6b7078; }
|
|
15809
|
+
.settings-panel .stg-about-hero {
|
|
15810
|
+
display: flex; flex-direction: column; align-items: center; text-align: center;
|
|
15811
|
+
margin: 0 0 18px; padding: 20px 16px 16px; border-radius: 9px; background: var(--stg-group);
|
|
15812
|
+
}
|
|
15813
|
+
.settings-panel .stg-about-hero [hidden] { display: none; }
|
|
15814
|
+
.settings-panel .stg-about-logo { display: block; width: 64px; height: 64px; margin: 0 0 10px; border-radius: 14px; box-shadow: 0 1px 3px rgba(0,0,0,0.35); }
|
|
15815
|
+
.settings-panel .stg-about-name { margin: 0; font-size: 20px; font-weight: 600; line-height: 1.25; color: var(--stg-text); }
|
|
15816
|
+
.settings-panel .stg-about-version { margin: 2px 0 0; font-size: 12.5px; color: var(--stg-body); }
|
|
15817
|
+
.settings-panel .stg-about-line { margin: 2px 0 0; max-width: 52ch; font-size: 12px; color: var(--stg-help); overflow-wrap: anywhere; }
|
|
15818
|
+
.settings-panel .stg-about-desc { margin-top: 8px; }
|
|
15819
|
+
.settings-panel .stg-about-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; margin: 14px 0 0; }
|
|
15820
|
+
.settings-panel .stg-about-note { max-width: 52ch; margin: 10px 0 0; }
|
|
15821
|
+
|
|
15822
|
+
/* Links: the name on the left, the address on the right; the address gives way first */
|
|
15823
|
+
.settings-panel .stg-about-links { margin: 0; padding: 0; list-style: none; }
|
|
15824
|
+
.settings-panel .stg-about-links > li + li { border-top: 1px solid var(--stg-sep); }
|
|
15825
|
+
.settings-panel .stg-about-link { display: flex; align-items: center; gap: 10px; min-height: 32px; padding: 6px 0; box-sizing: border-box; font-size: 13px; color: var(--stg-text); text-decoration: none; }
|
|
15826
|
+
.settings-panel .stg-about-link:hover .stg-about-link-label { color: var(--stg-link); }
|
|
15827
|
+
.settings-panel .stg-about-link:focus-visible { outline: 2px solid var(--stg-focus); outline-offset: 2px; border-radius: 4px; }
|
|
15828
|
+
.settings-panel .stg-about-link-label { flex: 0 0 auto; }
|
|
15829
|
+
.settings-panel .stg-about-link-url { flex: 1 1 auto; min-width: 0; overflow: hidden; text-align: right; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; color: var(--stg-help); }
|
|
15830
|
+
.settings-panel .stg-about-arrow { flex: 0 0 auto; width: 10px; height: 10px; fill: none; stroke: var(--stg-help); stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }
|
|
15831
|
+
|
|
15832
|
+
/* System: label and value on one row; a long value (the data folder) wraps under its label */
|
|
15833
|
+
.settings-panel .stg-about-facts { margin: 0; }
|
|
15834
|
+
.settings-panel .stg-about-fact { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 2px 16px; min-height: 32px; padding: 7px 0; box-sizing: border-box; }
|
|
15835
|
+
.settings-panel .stg-about-fact + .stg-about-fact { border-top: 1px solid var(--stg-sep); }
|
|
15836
|
+
.settings-panel .stg-about-fact dt { flex: 0 0 auto; font-size: 13px; color: var(--stg-text); }
|
|
15837
|
+
.settings-panel .stg-about-fact dd { flex: 1 1 12em; min-width: 0; margin: 0; text-align: right; font-size: 12.5px; color: var(--stg-body); overflow-wrap: anywhere; user-select: text; }
|
|
15838
|
+
.settings-panel .stg-about-fact dd.stg-about-mono { font-family: var(--stg-mono); font-size: 12px; }
|
|
15839
|
+
.settings-panel .stg-about-empty { margin: 8px 0; list-style: none; }
|
|
15840
|
+
|
|
15841
|
+
/* Dependencies: a heading per package, then one row per dependency: name, version, then range and license,
|
|
15842
|
+
which move under the name when the row is narrow */
|
|
15843
|
+
.settings-panel .stg-about-filter { display: flex; }
|
|
15844
|
+
.settings-panel .stg-about-filter[hidden] { display: none; }
|
|
15845
|
+
.settings-panel .settings-content .stg-about-filter-input { width: 100%; max-width: 240px; }
|
|
15846
|
+
.settings-panel .stg-about-group + .stg-about-group,
|
|
15847
|
+
.settings-panel .stg-about-bundled { margin-top: 12px; }
|
|
15848
|
+
.settings-panel .stg-card-body .stg-about-group-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 8px; min-height: 0; margin: 0; padding: 8px 0 4px; font-size: 13px; color: var(--stg-text); }
|
|
15849
|
+
.settings-panel .stg-about-group-sub { min-width: 0; overflow-wrap: anywhere; font-family: var(--stg-mono); font-size: 11.5px; font-weight: 400; color: var(--stg-help); }
|
|
15850
|
+
.settings-panel .stg-about-count { margin-left: auto; font-size: 12px; font-weight: 400; color: var(--stg-help); font-variant-numeric: tabular-nums; }
|
|
15851
|
+
.settings-panel .stg-about-group-note { margin: 0 0 4px; }
|
|
15852
|
+
.settings-panel .stg-about-dep-list { margin: 0; padding: 0; list-style: none; }
|
|
15853
|
+
.settings-panel .stg-about-dep { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 10px; padding: 5px 0; border-top: 1px solid var(--stg-sep); font-size: 12.5px; }
|
|
15854
|
+
.settings-panel .stg-about-dep-name { flex: 1 1 auto; min-width: 0; overflow-wrap: anywhere; color: var(--stg-text); text-decoration: none; }
|
|
15855
|
+
.settings-panel a.stg-about-dep-name:hover { color: var(--stg-link); text-decoration: underline; }
|
|
15856
|
+
.settings-panel a.stg-about-dep-name:focus-visible { outline: 2px solid var(--stg-focus); outline-offset: 2px; border-radius: 3px; }
|
|
15857
|
+
.settings-panel .stg-about-dep-version { flex: 0 0 auto; font-family: var(--stg-mono); font-size: 12px; color: var(--stg-body); font-variant-numeric: tabular-nums; }
|
|
15858
|
+
.settings-panel .stg-about-dep-version[data-state="missing"] { color: var(--stg-warn); }
|
|
15859
|
+
.settings-panel .stg-about-dep-meta { flex: 1 0 100%; min-width: 0; overflow-wrap: anywhere; font-size: 11.5px; color: var(--stg-help); }
|
|
15860
|
+
.settings-panel .stg-about-dev { margin-top: 12px; }
|
|
15861
|
+
|
|
15862
|
+
/* The foot of the page: the license and the copyright, quiet and centred */
|
|
15863
|
+
.settings-panel .stg-about-footer { margin: 8px 0 4px; text-align: center; font-size: 11.5px; color: var(--stg-help); }
|
|
15864
|
+
.settings-panel .stg-about-footer p { margin: 2px 0; }
|
|
15865
|
+
.settings-panel .stg-about-builtwith { margin: 0; padding: 0; border: 0; background: none; font: inherit; color: var(--stg-link); cursor: pointer; }
|
|
15866
|
+
.settings-panel .stg-about-builtwith:hover { text-decoration: underline; }
|
|
15867
|
+
.settings-panel .stg-about-builtwith:focus-visible { outline: 2px solid var(--stg-focus); outline-offset: 2px; border-radius: 3px; }
|
|
15868
|
+
@container stg (max-width: 480px) {
|
|
15869
|
+
.settings-panel .stg-about-hero { padding: 16px 12px 14px; }
|
|
15870
|
+
.settings-panel .stg-about-link-url { display: none; }
|
|
15871
|
+
.settings-panel .stg-about-arrow { margin-left: auto; }
|
|
15872
|
+
.settings-panel .stg-about-fact dd { text-align: left; flex-basis: 100%; }
|
|
15873
|
+
}
|
|
15874
|
+
/* <<< settings-about */
|
|
15652
15875
|
.tag-add-input {
|
|
15653
15876
|
font-size: var(--fs-sm);
|
|
15654
15877
|
font-weight: 500;
|
|
@@ -26504,7 +26727,9 @@
|
|
|
26504
26727
|
body .term-float-tab.term-float-tab > .term-float-tab-header .term-float-tab-title { font-size: var(--fs-xs); }
|
|
26505
26728
|
body :is(.sched-header-icon, .sm-header-icon, .ig-icon),
|
|
26506
26729
|
body :is(.sched-header-icon, .sm-header-icon, .ig-icon) svg { width: 16px; height: 16px; }
|
|
26507
|
-
|
|
26730
|
+
/* The Claude Code, Codex and OpenCode headers stay one row: their session name gives way
|
|
26731
|
+
instead (the panels' own header styles). */
|
|
26732
|
+
body .sp-sidepanel.sp-floating > .asp-header { flex-wrap: wrap; }
|
|
26508
26733
|
|
|
26509
26734
|
body .term-float-tab-title { flex: 1 1 100px; }
|
|
26510
26735
|
body .term-float-tab-actions { flex-wrap: wrap; max-width: 100%; }
|
|
@@ -28640,6 +28865,30 @@
|
|
|
28640
28865
|
}
|
|
28641
28866
|
.update-check-toast .utc-sub { color: var(--t-muted); }
|
|
28642
28867
|
.update-check-toast .utc-hint { color: var(--t-muted); opacity: 0.7; margin-top: 6px; font-size: 11px; }
|
|
28868
|
+
/* The desktop app's update notice (ui-update.js renderDesktopNotice): the same toast, with its own answers. */
|
|
28869
|
+
.update-notice .utc-sub { overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }
|
|
28870
|
+
.update-notice-actions {
|
|
28871
|
+
display: flex;
|
|
28872
|
+
flex-wrap: wrap;
|
|
28873
|
+
align-items: center;
|
|
28874
|
+
justify-content: flex-end;
|
|
28875
|
+
gap: 8px;
|
|
28876
|
+
margin-top: 10px;
|
|
28877
|
+
}
|
|
28878
|
+
.update-notice-actions .action-btn { padding: 4px 12px; }
|
|
28879
|
+
.update-notice-link {
|
|
28880
|
+
color: var(--t-primary);
|
|
28881
|
+
font-size: 11px;
|
|
28882
|
+
text-decoration: underline;
|
|
28883
|
+
text-underline-offset: 2px;
|
|
28884
|
+
margin-right: auto;
|
|
28885
|
+
}
|
|
28886
|
+
.update-notice-link:hover { color: var(--t-bright); }
|
|
28887
|
+
.update-notice-link:focus-visible,
|
|
28888
|
+
.update-notice .action-btn:focus-visible {
|
|
28889
|
+
outline: 2px solid var(--stg-focus, #93c5fd);
|
|
28890
|
+
outline-offset: 2px;
|
|
28891
|
+
}
|
|
28643
28892
|
|
|
28644
28893
|
.update-channel-pill {
|
|
28645
28894
|
display: inline-block;
|
|
@@ -37,7 +37,8 @@
|
|
|
37
37
|
* `opts.count` 1-3 (subagent minis), `opts.mode` 'recall' | 'remember'
|
|
38
38
|
* (memory), `opts.ticks` 0-3 (plan), `opts.then` a pose to blend to once a
|
|
39
39
|
* one-shot (success, error, blocked) has played and held. The same pose with
|
|
40
|
-
* a new count or ticks keeps its loop running.
|
|
40
|
+
* a new count or ticks keeps its loop running. `opts.unlimited` selects the
|
|
41
|
+
* budget pose's relaxed infinity variant; project peeks into a folder.
|
|
41
42
|
* - `react(name)` — `MASCOT_REACTIONS`: hop (spring, at most one per 600 ms),
|
|
42
43
|
* wince, nod, pop (plan: pops the newest tick; ticks the next box too
|
|
43
44
|
* unless setPose passed `ticks`), startle, pulse, click
|
|
@@ -81,7 +82,7 @@ export const MASCOT_VIEWBOX = '0 0 280 140';
|
|
|
81
82
|
/** One pose per tool kind (shared with the activity rack's kind ids). */
|
|
82
83
|
export const MASCOT_KINDS = Object.freeze(['shell', 'read', 'edit', 'search', 'web', 'subagent', 'plan', 'memory', 'runs', 'computer', 'think', 'mcp']);
|
|
83
84
|
export const MASCOT_STATES = Object.freeze(['idle', 'sleep', 'watch', 'wait', 'success', 'error', 'blocked', 'offline']);
|
|
84
|
-
export const MASCOT_POSES = Object.freeze([...MASCOT_KINDS, ...MASCOT_STATES]);
|
|
85
|
+
export const MASCOT_POSES = Object.freeze([...MASCOT_KINDS, ...MASCOT_STATES, 'project', 'budget']);
|
|
85
86
|
export const MASCOT_REACTIONS = Object.freeze(['hop', 'wince', 'nod', 'pop', 'startle', 'pulse', 'click']);
|
|
86
87
|
|
|
87
88
|
/** The character's SVG. Colour comes from `currentColor` (the mouth at 25 %). */
|
|
@@ -145,6 +146,8 @@ export function mascotCameoSvg({ className = '' } = {}) {
|
|
|
145
146
|
|
|
146
147
|
/** Each prop's own box in face units, to draw it alone (a ledger row's glyph, a suggestion's). */
|
|
147
148
|
const PROP_BOX = Object.freeze({
|
|
149
|
+
project: [204, 77, 62, 48],
|
|
150
|
+
budget: [212, 65, 54, 60],
|
|
148
151
|
shell: [144, 116, 42, 26], // the last keycap and the caret
|
|
149
152
|
read: [65, 20, 150, 88],
|
|
150
153
|
edit: [188, 93, 56, 44],
|
|
@@ -315,6 +318,31 @@ const MINIS = [
|
|
|
315
318
|
* look: follows look(), easing with this time constant (ms).
|
|
316
319
|
*/
|
|
317
320
|
const POSES = {
|
|
321
|
+
// Empty-state controls: host-directed gaze, the same ticker and prop painter as tool kinds.
|
|
322
|
+
project: {
|
|
323
|
+
motion: 'loop', blinks: true, look: 70,
|
|
324
|
+
frame(t, o) {
|
|
325
|
+
const f = blankFrame();
|
|
326
|
+
const peek = o.still ? 0.5 : (1 + Math.sin(TAU * t / 2400)) / 2;
|
|
327
|
+
f.eyes = [eye(0, 2 + 2 * peek, 1, 0.92, -2), eye(0, 2 + 2 * peek, 1, 0.96, 2)];
|
|
328
|
+
f.mouth = mouth(34, 11);
|
|
329
|
+
gaze(f, o.look, { x: 16, y: 10 });
|
|
330
|
+
f.prop = { name: 'project', peek };
|
|
331
|
+
return f;
|
|
332
|
+
},
|
|
333
|
+
},
|
|
334
|
+
budget: {
|
|
335
|
+
motion: 'loop', blinks: true, look: 70,
|
|
336
|
+
frame(t, o) {
|
|
337
|
+
const f = blankFrame();
|
|
338
|
+
const lift = o.still ? 0 : Math.sin(TAU * t / 2200);
|
|
339
|
+
f.eyes = [eye(0, 0, 1, o.unlimited ? 0.65 : 0.93, -3), eye(0, 0, 1, o.unlimited ? 0.65 : 1, 3)];
|
|
340
|
+
f.mouth = mouth(o.unlimited ? 48 : 34, o.unlimited ? 20 : 11);
|
|
341
|
+
gaze(f, o.look, { x: 16, y: 10 });
|
|
342
|
+
f.prop = { name: 'budget', lift, unlimited: o.unlimited };
|
|
343
|
+
return f;
|
|
344
|
+
},
|
|
345
|
+
},
|
|
318
346
|
// ── States ──
|
|
319
347
|
idle: {
|
|
320
348
|
motion: 'still', blinks: true, tracks: true,
|
|
@@ -598,6 +626,7 @@ function poseOptions(opts) {
|
|
|
598
626
|
count: intIn(o.count, 1, 3, 1),
|
|
599
627
|
mode: o.mode === 'remember' ? 'remember' : 'recall',
|
|
600
628
|
ticks: intIn(o.ticks, 0, 3, 1),
|
|
629
|
+
unlimited: !!o.unlimited,
|
|
601
630
|
still: !!o.still,
|
|
602
631
|
};
|
|
603
632
|
}
|
|
@@ -741,6 +770,23 @@ export function reactionFrame(frame, name, p) {
|
|
|
741
770
|
// ── Props: small, currentColor, in the face's pill geometry ──
|
|
742
771
|
|
|
743
772
|
const PROPS = {
|
|
773
|
+
project: {
|
|
774
|
+
markup: () => '<g fill="none" stroke="currentColor" stroke-opacity=".7" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M208 117V84q0-4 4-4h15l7 8h25v29z"/><path class="syna-folder-front" d="M208 117l5-23h49l-5 23z"/><path class="syna-folder-paper" d="M223 93V85h22v8M229 89h10"/></g>',
|
|
775
|
+
refs: g => ({ front: g.querySelector('.syna-folder-front'), paper: g.querySelector('.syna-folder-paper') }),
|
|
776
|
+
update(r, p, put) {
|
|
777
|
+
put(r.front, 'transform', `translate(0,${n(2 * p.peek)})`);
|
|
778
|
+
put(r.paper, 'transform', `translate(0,${n(-4 * p.peek)})`);
|
|
779
|
+
},
|
|
780
|
+
},
|
|
781
|
+
budget: {
|
|
782
|
+
markup: () => '<g fill="none" stroke="currentColor" stroke-opacity=".7" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><rect x="216" y="96" width="46" height="25" rx="4"/><path d="M250 103h12v10h-12z"/><g class="syna-budget-coin"><circle cx="236" cy="80" r="12"/><path d="M236 73v14M232 76h6q4 0 0 4h-4q-4 4 0 4h6"/></g><path class="syna-budget-infinity" d="M235 80c-16-19-25 15-8 7l17-14c17-8 8 26-9 7"/></g>',
|
|
783
|
+
refs: g => ({ coin: g.querySelector('.syna-budget-coin'), infinity: g.querySelector('.syna-budget-infinity') }),
|
|
784
|
+
update(r, p, put) {
|
|
785
|
+
put(r.coin, 'display', p.unlimited ? 'none' : null);
|
|
786
|
+
put(r.infinity, 'display', p.unlimited ? null : 'none');
|
|
787
|
+
put(p.unlimited ? r.infinity : r.coin, 'transform', `translate(0,${n(-3 * p.lift)})`);
|
|
788
|
+
},
|
|
789
|
+
},
|
|
744
790
|
shell: { // three keycaps and a block caret under the chin
|
|
745
791
|
markup: () => [0, 1, 2].map(i => `<rect class="syna-key" x="${100 + i * 24}" y="127" width="20" height="9" rx="4.5" fill="currentColor" fill-opacity=".4"/>`).join('')
|
|
746
792
|
+ '<rect class="syna-caret" x="174" y="125" width="7" height="12" rx="2" fill="currentColor" fill-opacity=".75"/>',
|