editormate 1.0.2 → 1.0.5
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/bin/cli.js +74 -0
- package/dist/adapters/ide/ide_adapters.js +147 -7
- package/dist/adapters/messaging/discord_adapter.js +606 -7
- package/dist/adapters/messaging/discord_menu.js +125 -7
- package/dist/adapters/messaging/matrix_adapter.js +98 -7
- package/dist/adapters/messaging/slack_adapter.js +420 -7
- package/dist/adapters/messaging/telegram_adapter.js +612 -7
- package/dist/adapters/messaging/telegram_client.js +383 -7
- package/dist/adapters/messaging/telegram_keyboards.js +219 -7
- package/dist/adapters/messaging/whatsapp_adapter.js +153 -7
- package/dist/adapters/messaging/whatsapp_baileys.js +880 -7
- package/dist/core/blocking_prompt_bridge.js +255 -7
- package/dist/core/chat_switchboard.js +243 -7
- package/dist/core/companion_daemon.d.ts +4 -0
- package/dist/core/companion_daemon.d.ts.map +1 -1
- package/dist/core/companion_daemon.js +1126 -7
- package/dist/core/companion_daemon.js.map +1 -1
- package/dist/core/email_reporter.js +510 -7
- package/dist/core/licensing.d.ts.map +1 -1
- package/dist/core/licensing.js +335 -7
- package/dist/core/licensing.js.map +1 -1
- package/dist/core/media_handler.js +449 -7
- package/dist/core/os_keychain.js +155 -7
- package/dist/core/outbound_dispatcher.js +80 -7
- package/dist/core/pdf_generator.js +226 -7
- package/dist/core/process_checker.js +47 -7
- package/dist/core/prompt_sanitizer.js +93 -7
- package/dist/core/security.js +385 -7
- package/dist/core/session_manager.d.ts.map +1 -1
- package/dist/core/session_manager.js +1241 -7
- package/dist/core/session_manager.js.map +1 -1
- package/dist/core/standalone_dashboard/client_script.js +479 -7
- package/dist/core/standalone_dashboard/components/header.js +23 -7
- package/dist/core/standalone_dashboard/components/modals.js +11 -7
- package/dist/core/standalone_dashboard/components/remote_deck.js +228 -7
- package/dist/core/standalone_dashboard/components/settings_deck.js +205 -7
- package/dist/core/standalone_dashboard/index.js +49 -7
- package/dist/core/standalone_dashboard/styles.js +546 -7
- package/dist/core/standalone_dashboard.js +4 -7
- package/dist/core/telemetry.js +225 -7
- package/dist/core/transcript_watcher.d.ts.map +1 -1
- package/dist/core/transcript_watcher.js +257 -7
- package/dist/core/transcript_watcher.js.map +1 -1
- package/dist/core/transcription_refiner.js +203 -7
- package/dist/core/tui_dashboard.js +454 -7
- package/dist/index.js +13 -7
- package/dist/types.js +12 -7
- package/extension/editormate-1.0.5.vsix +0 -0
- package/extension/editormate-latest.vsix +0 -0
- package/package.json +3 -2
- package/extension/.vscodeignore +0 -4
- package/extension/LICENSE.md +0 -31
- package/extension/README.md +0 -55
- package/extension/assets/icon.png +0 -0
- package/extension/assets/icon.svg +0 -16
- package/extension/bin/cli.js +0 -264
- package/extension/bin/package.json +0 -3
- package/extension/daemon/adapters/ide/ide_adapters.d.ts +0 -45
- package/extension/daemon/adapters/ide/ide_adapters.d.ts.map +0 -1
- package/extension/daemon/adapters/ide/ide_adapters.js +0 -9
- package/extension/daemon/adapters/ide/ide_adapters.js.map +0 -1
- package/extension/daemon/adapters/messaging/discord_adapter.d.ts +0 -56
- package/extension/daemon/adapters/messaging/discord_adapter.d.ts.map +0 -1
- package/extension/daemon/adapters/messaging/discord_adapter.js +0 -9
- package/extension/daemon/adapters/messaging/discord_adapter.js.map +0 -1
- package/extension/daemon/adapters/messaging/discord_menu.d.ts +0 -15
- package/extension/daemon/adapters/messaging/discord_menu.d.ts.map +0 -1
- package/extension/daemon/adapters/messaging/discord_menu.js +0 -9
- package/extension/daemon/adapters/messaging/discord_menu.js.map +0 -1
- package/extension/daemon/adapters/messaging/matrix_adapter.d.ts +0 -39
- package/extension/daemon/adapters/messaging/matrix_adapter.d.ts.map +0 -1
- package/extension/daemon/adapters/messaging/matrix_adapter.js +0 -9
- package/extension/daemon/adapters/messaging/matrix_adapter.js.map +0 -1
- package/extension/daemon/adapters/messaging/slack_adapter.d.ts +0 -115
- package/extension/daemon/adapters/messaging/slack_adapter.d.ts.map +0 -1
- package/extension/daemon/adapters/messaging/slack_adapter.js +0 -9
- package/extension/daemon/adapters/messaging/slack_adapter.js.map +0 -1
- package/extension/daemon/adapters/messaging/telegram_adapter.d.ts +0 -90
- package/extension/daemon/adapters/messaging/telegram_adapter.d.ts.map +0 -1
- package/extension/daemon/adapters/messaging/telegram_adapter.js +0 -9
- package/extension/daemon/adapters/messaging/telegram_adapter.js.map +0 -1
- package/extension/daemon/adapters/messaging/telegram_client.d.ts +0 -75
- package/extension/daemon/adapters/messaging/telegram_client.d.ts.map +0 -1
- package/extension/daemon/adapters/messaging/telegram_client.js +0 -9
- package/extension/daemon/adapters/messaging/telegram_client.js.map +0 -1
- package/extension/daemon/adapters/messaging/telegram_keyboards.d.ts +0 -55
- package/extension/daemon/adapters/messaging/telegram_keyboards.d.ts.map +0 -1
- package/extension/daemon/adapters/messaging/telegram_keyboards.js +0 -9
- package/extension/daemon/adapters/messaging/telegram_keyboards.js.map +0 -1
- package/extension/daemon/adapters/messaging/whatsapp_adapter.d.ts +0 -30
- package/extension/daemon/adapters/messaging/whatsapp_adapter.d.ts.map +0 -1
- package/extension/daemon/adapters/messaging/whatsapp_adapter.js +0 -9
- package/extension/daemon/adapters/messaging/whatsapp_adapter.js.map +0 -1
- package/extension/daemon/adapters/messaging/whatsapp_baileys.d.ts +0 -84
- package/extension/daemon/adapters/messaging/whatsapp_baileys.d.ts.map +0 -1
- package/extension/daemon/adapters/messaging/whatsapp_baileys.js +0 -9
- package/extension/daemon/adapters/messaging/whatsapp_baileys.js.map +0 -1
- package/extension/daemon/core/blocking_prompt_bridge.d.ts +0 -99
- package/extension/daemon/core/blocking_prompt_bridge.d.ts.map +0 -1
- package/extension/daemon/core/blocking_prompt_bridge.js +0 -9
- package/extension/daemon/core/blocking_prompt_bridge.js.map +0 -1
- package/extension/daemon/core/chat_switchboard.d.ts +0 -35
- package/extension/daemon/core/chat_switchboard.d.ts.map +0 -1
- package/extension/daemon/core/chat_switchboard.js +0 -9
- package/extension/daemon/core/chat_switchboard.js.map +0 -1
- package/extension/daemon/core/companion_daemon.d.ts +0 -23
- package/extension/daemon/core/companion_daemon.d.ts.map +0 -1
- package/extension/daemon/core/companion_daemon.js +0 -9
- package/extension/daemon/core/companion_daemon.js.map +0 -1
- package/extension/daemon/core/email_reporter.d.ts +0 -109
- package/extension/daemon/core/email_reporter.d.ts.map +0 -1
- package/extension/daemon/core/email_reporter.js +0 -9
- package/extension/daemon/core/email_reporter.js.map +0 -1
- package/extension/daemon/core/licensing.d.ts +0 -44
- package/extension/daemon/core/licensing.d.ts.map +0 -1
- package/extension/daemon/core/licensing.js +0 -9
- package/extension/daemon/core/licensing.js.map +0 -1
- package/extension/daemon/core/media_handler.d.ts +0 -67
- package/extension/daemon/core/media_handler.d.ts.map +0 -1
- package/extension/daemon/core/media_handler.js +0 -9
- package/extension/daemon/core/media_handler.js.map +0 -1
- package/extension/daemon/core/os_keychain.d.ts +0 -41
- package/extension/daemon/core/os_keychain.d.ts.map +0 -1
- package/extension/daemon/core/os_keychain.js +0 -9
- package/extension/daemon/core/os_keychain.js.map +0 -1
- package/extension/daemon/core/outbound_dispatcher.d.ts +0 -33
- package/extension/daemon/core/outbound_dispatcher.d.ts.map +0 -1
- package/extension/daemon/core/outbound_dispatcher.js +0 -9
- package/extension/daemon/core/outbound_dispatcher.js.map +0 -1
- package/extension/daemon/core/pdf_generator.d.ts +0 -66
- package/extension/daemon/core/pdf_generator.d.ts.map +0 -1
- package/extension/daemon/core/pdf_generator.js +0 -9
- package/extension/daemon/core/pdf_generator.js.map +0 -1
- package/extension/daemon/core/process_checker.d.ts +0 -10
- package/extension/daemon/core/process_checker.d.ts.map +0 -1
- package/extension/daemon/core/process_checker.js +0 -9
- package/extension/daemon/core/process_checker.js.map +0 -1
- package/extension/daemon/core/prompt_sanitizer.d.ts +0 -15
- package/extension/daemon/core/prompt_sanitizer.d.ts.map +0 -1
- package/extension/daemon/core/prompt_sanitizer.js +0 -9
- package/extension/daemon/core/prompt_sanitizer.js.map +0 -1
- package/extension/daemon/core/security.d.ts +0 -75
- package/extension/daemon/core/security.d.ts.map +0 -1
- package/extension/daemon/core/security.js +0 -9
- package/extension/daemon/core/security.js.map +0 -1
- package/extension/daemon/core/session_manager.d.ts +0 -67
- package/extension/daemon/core/session_manager.d.ts.map +0 -1
- package/extension/daemon/core/session_manager.js +0 -9
- package/extension/daemon/core/session_manager.js.map +0 -1
- package/extension/daemon/core/standalone_dashboard/client_script.d.ts +0 -5
- package/extension/daemon/core/standalone_dashboard/client_script.d.ts.map +0 -1
- package/extension/daemon/core/standalone_dashboard/client_script.js +0 -9
- package/extension/daemon/core/standalone_dashboard/client_script.js.map +0 -1
- package/extension/daemon/core/standalone_dashboard/components/header.d.ts +0 -5
- package/extension/daemon/core/standalone_dashboard/components/header.d.ts.map +0 -1
- package/extension/daemon/core/standalone_dashboard/components/header.js +0 -9
- package/extension/daemon/core/standalone_dashboard/components/header.js.map +0 -1
- package/extension/daemon/core/standalone_dashboard/components/modals.d.ts +0 -5
- package/extension/daemon/core/standalone_dashboard/components/modals.d.ts.map +0 -1
- package/extension/daemon/core/standalone_dashboard/components/modals.js +0 -9
- package/extension/daemon/core/standalone_dashboard/components/modals.js.map +0 -1
- package/extension/daemon/core/standalone_dashboard/components/remote_deck.d.ts +0 -5
- package/extension/daemon/core/standalone_dashboard/components/remote_deck.d.ts.map +0 -1
- package/extension/daemon/core/standalone_dashboard/components/remote_deck.js +0 -9
- package/extension/daemon/core/standalone_dashboard/components/remote_deck.js.map +0 -1
- package/extension/daemon/core/standalone_dashboard/components/settings_deck.d.ts +0 -5
- package/extension/daemon/core/standalone_dashboard/components/settings_deck.d.ts.map +0 -1
- package/extension/daemon/core/standalone_dashboard/components/settings_deck.js +0 -9
- package/extension/daemon/core/standalone_dashboard/components/settings_deck.js.map +0 -1
- package/extension/daemon/core/standalone_dashboard/index.d.ts +0 -13
- package/extension/daemon/core/standalone_dashboard/index.d.ts.map +0 -1
- package/extension/daemon/core/standalone_dashboard/index.js +0 -9
- package/extension/daemon/core/standalone_dashboard/index.js.map +0 -1
- package/extension/daemon/core/standalone_dashboard/styles.d.ts +0 -6
- package/extension/daemon/core/standalone_dashboard/styles.d.ts.map +0 -1
- package/extension/daemon/core/standalone_dashboard/styles.js +0 -9
- package/extension/daemon/core/standalone_dashboard/styles.js.map +0 -1
- package/extension/daemon/core/standalone_dashboard.d.ts +0 -6
- package/extension/daemon/core/standalone_dashboard.d.ts.map +0 -1
- package/extension/daemon/core/standalone_dashboard.js +0 -9
- package/extension/daemon/core/standalone_dashboard.js.map +0 -1
- package/extension/daemon/core/telemetry.d.ts +0 -62
- package/extension/daemon/core/telemetry.d.ts.map +0 -1
- package/extension/daemon/core/telemetry.js +0 -9
- package/extension/daemon/core/telemetry.js.map +0 -1
- package/extension/daemon/core/transcript_watcher.d.ts +0 -23
- package/extension/daemon/core/transcript_watcher.d.ts.map +0 -1
- package/extension/daemon/core/transcript_watcher.js +0 -9
- package/extension/daemon/core/transcript_watcher.js.map +0 -1
- package/extension/daemon/core/transcription_refiner.d.ts +0 -34
- package/extension/daemon/core/transcription_refiner.d.ts.map +0 -1
- package/extension/daemon/core/transcription_refiner.js +0 -9
- package/extension/daemon/core/transcription_refiner.js.map +0 -1
- package/extension/daemon/core/tui_dashboard.d.ts +0 -8
- package/extension/daemon/core/tui_dashboard.d.ts.map +0 -1
- package/extension/daemon/core/tui_dashboard.js +0 -9
- package/extension/daemon/core/tui_dashboard.js.map +0 -1
- package/extension/daemon/index.d.ts +0 -15
- package/extension/daemon/index.d.ts.map +0 -1
- package/extension/daemon/index.js +0 -9
- package/extension/daemon/index.js.map +0 -1
- package/extension/daemon/types.d.ts +0 -159
- package/extension/daemon/types.d.ts.map +0 -1
- package/extension/daemon/types.js +0 -9
- package/extension/daemon/types.js.map +0 -1
- package/extension/dist/adapters/ide/ide_adapters.d.ts +0 -45
- package/extension/dist/adapters/ide/ide_adapters.d.ts.map +0 -1
- package/extension/dist/adapters/ide/ide_adapters.js +0 -9
- package/extension/dist/adapters/ide/ide_adapters.js.map +0 -1
- package/extension/dist/adapters/messaging/discord_adapter.d.ts +0 -56
- package/extension/dist/adapters/messaging/discord_adapter.d.ts.map +0 -1
- package/extension/dist/adapters/messaging/discord_adapter.js +0 -9
- package/extension/dist/adapters/messaging/discord_adapter.js.map +0 -1
- package/extension/dist/adapters/messaging/discord_menu.d.ts +0 -15
- package/extension/dist/adapters/messaging/discord_menu.d.ts.map +0 -1
- package/extension/dist/adapters/messaging/discord_menu.js +0 -9
- package/extension/dist/adapters/messaging/discord_menu.js.map +0 -1
- package/extension/dist/adapters/messaging/matrix_adapter.d.ts +0 -39
- package/extension/dist/adapters/messaging/matrix_adapter.d.ts.map +0 -1
- package/extension/dist/adapters/messaging/matrix_adapter.js +0 -9
- package/extension/dist/adapters/messaging/matrix_adapter.js.map +0 -1
- package/extension/dist/adapters/messaging/slack_adapter.d.ts +0 -115
- package/extension/dist/adapters/messaging/slack_adapter.d.ts.map +0 -1
- package/extension/dist/adapters/messaging/slack_adapter.js +0 -9
- package/extension/dist/adapters/messaging/slack_adapter.js.map +0 -1
- package/extension/dist/adapters/messaging/telegram_adapter.d.ts +0 -90
- package/extension/dist/adapters/messaging/telegram_adapter.d.ts.map +0 -1
- package/extension/dist/adapters/messaging/telegram_adapter.js +0 -9
- package/extension/dist/adapters/messaging/telegram_adapter.js.map +0 -1
- package/extension/dist/adapters/messaging/telegram_client.d.ts +0 -75
- package/extension/dist/adapters/messaging/telegram_client.d.ts.map +0 -1
- package/extension/dist/adapters/messaging/telegram_client.js +0 -9
- package/extension/dist/adapters/messaging/telegram_client.js.map +0 -1
- package/extension/dist/adapters/messaging/telegram_keyboards.d.ts +0 -55
- package/extension/dist/adapters/messaging/telegram_keyboards.d.ts.map +0 -1
- package/extension/dist/adapters/messaging/telegram_keyboards.js +0 -9
- package/extension/dist/adapters/messaging/telegram_keyboards.js.map +0 -1
- package/extension/dist/adapters/messaging/whatsapp_adapter.d.ts +0 -30
- package/extension/dist/adapters/messaging/whatsapp_adapter.d.ts.map +0 -1
- package/extension/dist/adapters/messaging/whatsapp_adapter.js +0 -9
- package/extension/dist/adapters/messaging/whatsapp_adapter.js.map +0 -1
- package/extension/dist/adapters/messaging/whatsapp_baileys.d.ts +0 -84
- package/extension/dist/adapters/messaging/whatsapp_baileys.d.ts.map +0 -1
- package/extension/dist/adapters/messaging/whatsapp_baileys.js +0 -9
- package/extension/dist/adapters/messaging/whatsapp_baileys.js.map +0 -1
- package/extension/dist/adapters/package.json +0 -3
- package/extension/dist/command_guard.js +0 -9
- package/extension/dist/commands_manager.js +0 -9
- package/extension/dist/core/blocking_prompt_bridge.d.ts +0 -99
- package/extension/dist/core/blocking_prompt_bridge.d.ts.map +0 -1
- package/extension/dist/core/blocking_prompt_bridge.js +0 -9
- package/extension/dist/core/blocking_prompt_bridge.js.map +0 -1
- package/extension/dist/core/chat_switchboard.d.ts +0 -35
- package/extension/dist/core/chat_switchboard.d.ts.map +0 -1
- package/extension/dist/core/chat_switchboard.js +0 -9
- package/extension/dist/core/chat_switchboard.js.map +0 -1
- package/extension/dist/core/companion_daemon.d.ts +0 -23
- package/extension/dist/core/companion_daemon.d.ts.map +0 -1
- package/extension/dist/core/companion_daemon.js +0 -9
- package/extension/dist/core/companion_daemon.js.map +0 -1
- package/extension/dist/core/email_reporter.d.ts +0 -109
- package/extension/dist/core/email_reporter.d.ts.map +0 -1
- package/extension/dist/core/email_reporter.js +0 -9
- package/extension/dist/core/email_reporter.js.map +0 -1
- package/extension/dist/core/licensing.d.ts +0 -44
- package/extension/dist/core/licensing.d.ts.map +0 -1
- package/extension/dist/core/licensing.js +0 -9
- package/extension/dist/core/licensing.js.map +0 -1
- package/extension/dist/core/media_handler.d.ts +0 -67
- package/extension/dist/core/media_handler.d.ts.map +0 -1
- package/extension/dist/core/media_handler.js +0 -9
- package/extension/dist/core/media_handler.js.map +0 -1
- package/extension/dist/core/os_keychain.d.ts +0 -41
- package/extension/dist/core/os_keychain.d.ts.map +0 -1
- package/extension/dist/core/os_keychain.js +0 -9
- package/extension/dist/core/os_keychain.js.map +0 -1
- package/extension/dist/core/outbound_dispatcher.d.ts +0 -33
- package/extension/dist/core/outbound_dispatcher.d.ts.map +0 -1
- package/extension/dist/core/outbound_dispatcher.js +0 -9
- package/extension/dist/core/outbound_dispatcher.js.map +0 -1
- package/extension/dist/core/package.json +0 -3
- package/extension/dist/core/pdf_generator.d.ts +0 -66
- package/extension/dist/core/pdf_generator.d.ts.map +0 -1
- package/extension/dist/core/pdf_generator.js +0 -9
- package/extension/dist/core/pdf_generator.js.map +0 -1
- package/extension/dist/core/process_checker.d.ts +0 -10
- package/extension/dist/core/process_checker.d.ts.map +0 -1
- package/extension/dist/core/process_checker.js +0 -9
- package/extension/dist/core/process_checker.js.map +0 -1
- package/extension/dist/core/prompt_sanitizer.d.ts +0 -15
- package/extension/dist/core/prompt_sanitizer.d.ts.map +0 -1
- package/extension/dist/core/prompt_sanitizer.js +0 -9
- package/extension/dist/core/prompt_sanitizer.js.map +0 -1
- package/extension/dist/core/security.d.ts +0 -75
- package/extension/dist/core/security.d.ts.map +0 -1
- package/extension/dist/core/security.js +0 -9
- package/extension/dist/core/security.js.map +0 -1
- package/extension/dist/core/session_manager.d.ts +0 -67
- package/extension/dist/core/session_manager.d.ts.map +0 -1
- package/extension/dist/core/session_manager.js +0 -9
- package/extension/dist/core/session_manager.js.map +0 -1
- package/extension/dist/core/standalone_dashboard/client_script.d.ts +0 -5
- package/extension/dist/core/standalone_dashboard/client_script.d.ts.map +0 -1
- package/extension/dist/core/standalone_dashboard/client_script.js +0 -9
- package/extension/dist/core/standalone_dashboard/client_script.js.map +0 -1
- package/extension/dist/core/standalone_dashboard/components/header.d.ts +0 -5
- package/extension/dist/core/standalone_dashboard/components/header.d.ts.map +0 -1
- package/extension/dist/core/standalone_dashboard/components/header.js +0 -9
- package/extension/dist/core/standalone_dashboard/components/header.js.map +0 -1
- package/extension/dist/core/standalone_dashboard/components/modals.d.ts +0 -5
- package/extension/dist/core/standalone_dashboard/components/modals.d.ts.map +0 -1
- package/extension/dist/core/standalone_dashboard/components/modals.js +0 -9
- package/extension/dist/core/standalone_dashboard/components/modals.js.map +0 -1
- package/extension/dist/core/standalone_dashboard/components/remote_deck.d.ts +0 -5
- package/extension/dist/core/standalone_dashboard/components/remote_deck.d.ts.map +0 -1
- package/extension/dist/core/standalone_dashboard/components/remote_deck.js +0 -9
- package/extension/dist/core/standalone_dashboard/components/remote_deck.js.map +0 -1
- package/extension/dist/core/standalone_dashboard/components/settings_deck.d.ts +0 -5
- package/extension/dist/core/standalone_dashboard/components/settings_deck.d.ts.map +0 -1
- package/extension/dist/core/standalone_dashboard/components/settings_deck.js +0 -9
- package/extension/dist/core/standalone_dashboard/components/settings_deck.js.map +0 -1
- package/extension/dist/core/standalone_dashboard/index.d.ts +0 -13
- package/extension/dist/core/standalone_dashboard/index.d.ts.map +0 -1
- package/extension/dist/core/standalone_dashboard/index.js +0 -9
- package/extension/dist/core/standalone_dashboard/index.js.map +0 -1
- package/extension/dist/core/standalone_dashboard/styles.d.ts +0 -6
- package/extension/dist/core/standalone_dashboard/styles.d.ts.map +0 -1
- package/extension/dist/core/standalone_dashboard/styles.js +0 -9
- package/extension/dist/core/standalone_dashboard/styles.js.map +0 -1
- package/extension/dist/core/standalone_dashboard.d.ts +0 -6
- package/extension/dist/core/standalone_dashboard.d.ts.map +0 -1
- package/extension/dist/core/standalone_dashboard.js +0 -9
- package/extension/dist/core/standalone_dashboard.js.map +0 -1
- package/extension/dist/core/telemetry.d.ts +0 -62
- package/extension/dist/core/telemetry.d.ts.map +0 -1
- package/extension/dist/core/telemetry.js +0 -9
- package/extension/dist/core/telemetry.js.map +0 -1
- package/extension/dist/core/transcript_watcher.d.ts +0 -23
- package/extension/dist/core/transcript_watcher.d.ts.map +0 -1
- package/extension/dist/core/transcript_watcher.js +0 -9
- package/extension/dist/core/transcript_watcher.js.map +0 -1
- package/extension/dist/core/transcription_refiner.d.ts +0 -34
- package/extension/dist/core/transcription_refiner.d.ts.map +0 -1
- package/extension/dist/core/transcription_refiner.js +0 -9
- package/extension/dist/core/transcription_refiner.js.map +0 -1
- package/extension/dist/core/tui_dashboard.d.ts +0 -8
- package/extension/dist/core/tui_dashboard.d.ts.map +0 -1
- package/extension/dist/core/tui_dashboard.js +0 -9
- package/extension/dist/core/tui_dashboard.js.map +0 -1
- package/extension/dist/extension.js +0 -9
- package/extension/dist/ide_detector.js +0 -9
- package/extension/dist/index.js +0 -9
- package/extension/dist/remote_actions.js +0 -9
- package/extension/dist/sidebar_provider.js +0 -9
- package/extension/dist/types.js +0 -9
- package/extension/dist/webview/webview_html.js +0 -830
- package/extension/dist/webview/webview_scripts.js +0 -701
- package/extension/dist/webview/webview_styles.js +0 -1075
- package/extension/dist/webview_template.js +0 -9
- package/extension/editormate-1.0.0.vsix +0 -0
- package/extension/editormate-1.0.1.vsix +0 -0
- package/extension/editormate-1.0.2.vsix +0 -0
- package/extension/editormate-companion-1.0.0.vsix +0 -0
- package/extension/node_modules/.package-lock.json +0 -15
- package/extension/node_modules/@types/vscode/LICENSE +0 -21
- package/extension/node_modules/@types/vscode/README.md +0 -15
- package/extension/node_modules/@types/vscode/index.d.ts +0 -21244
- package/extension/node_modules/@types/vscode/package.json +0 -26
- package/extension/package-lock.json +0 -25
- package/extension/package.json +0 -154
- package/extension/scripts/build_protected.js +0 -88
- package/extension/scripts/transcribe_audio.py +0 -42
- package/extension/src/command_guard.ts +0 -201
- package/extension/src/commands_manager.ts +0 -466
- package/extension/src/extension.ts +0 -458
- package/extension/src/ide_detector.ts +0 -60
- package/extension/src/remote_actions.ts +0 -284
- package/extension/src/sidebar_provider.ts +0 -471
- package/extension/src/webview/webview_html.ts +0 -895
- package/extension/src/webview/webview_scripts.ts +0 -698
- package/extension/src/webview/webview_styles.ts +0 -1073
- package/extension/src/webview_template.ts +0 -33
- package/extension/tsconfig.json +0 -16
|
@@ -1,830 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* EditorMate Webview HTML Template
|
|
4
|
-
* Renders the multi-tab layout with TokenShield aesthetic:
|
|
5
|
-
* - Top header with settings cog for fast tab switching
|
|
6
|
-
* - Remote Deck (Main Page): Device connection bar, text sending/not sending status, Execution Guard, and commands dropdown
|
|
7
|
-
* - Settings & Channels: Connection pills, live WhatsApp iframe, collapsible Discord channel QR, and hardware preferences.
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.getWebviewHtmlBody = getWebviewHtmlBody;
|
|
11
|
-
const ide_detector_1 = require("../ide_detector");
|
|
12
|
-
function getWebviewHtmlBody(data) {
|
|
13
|
-
// All 10 Built-in Commands with Live Removable Alias Chips & Inline Quick-Add Drawer
|
|
14
|
-
const builtinCommandsHtml = (data.builtinCommands || [])
|
|
15
|
-
.map((cmd) => {
|
|
16
|
-
const cleanCmdId = cmd.id.replace(/^\//, '');
|
|
17
|
-
const existingAliases = (data.aliases || []).filter((a) => a.command.toLowerCase() === cmd.id.toLowerCase() ||
|
|
18
|
-
a.command.toLowerCase() === cleanCmdId.toLowerCase());
|
|
19
|
-
const aliasBadges = existingAliases.length > 0
|
|
20
|
-
? existingAliases
|
|
21
|
-
.map((a) => `<span class="cmd-badge-alias" title="Click to remove alias /${a.alias}">/${a.alias} <span style="opacity: 0.7; margin-left: 2px; cursor: pointer;" onclick="event.stopPropagation(); removeAlias('${a.alias}')">✕</span></span>`)
|
|
22
|
-
.join(' ')
|
|
23
|
-
: `<span style="font-size: 8px; color: var(--text-muted); opacity: 0.6;">+ alias</span>`;
|
|
24
|
-
return `
|
|
25
|
-
<div style="display: flex; flex-direction: column;">
|
|
26
|
-
<div class="cmd-row-clickable" onclick="toggleInlineAliasDrawer('${cleanCmdId}')">
|
|
27
|
-
<div class="cmd-meta-col">
|
|
28
|
-
<span class="cmd-badge-key">${cmd.id}</span>
|
|
29
|
-
<div style="display: flex; gap: 2px; flex-wrap: wrap;">${aliasBadges}</div>
|
|
30
|
-
<span class="cmd-desc-text" title="${cmd.description}">${cmd.description}</span>
|
|
31
|
-
</div>
|
|
32
|
-
<div class="cmd-action-btns">
|
|
33
|
-
<button class="mini-btn" title="Assign Alias for ${cmd.id}" onclick="event.stopPropagation(); toggleInlineAliasDrawer('${cleanCmdId}')">✏️</button>
|
|
34
|
-
<button class="mini-btn" title="Test Run Command ${cmd.id}" onclick="event.stopPropagation(); vscode.postMessage({command: 'remoteCommand', cmd: '${cmd.id}'})">▶</button>
|
|
35
|
-
</div>
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
<!-- Inline Quick-Add Alias Drawer -->
|
|
39
|
-
<div id="alias-drawer-${cleanCmdId}" class="alias-inline-drawer" style="display: none;">
|
|
40
|
-
<div style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 2px;">
|
|
41
|
-
<span style="font-size: 8.5px; font-weight: 700; color: var(--accent);">Alias for ${cmd.id} (e.g. s, snap, ref):</span>
|
|
42
|
-
<span style="font-size: 8px; color: var(--text-muted); cursor: pointer;" onclick="toggleInlineAliasDrawer('${cleanCmdId}')">✕ Close</span>
|
|
43
|
-
</div>
|
|
44
|
-
<div style="display: flex; gap: 3px;">
|
|
45
|
-
<input id="input-alias-${cleanCmdId}" type="text" class="form-input" placeholder="Alias name" style="font-size: 9.5px; height: 22px; padding: 2px 4px;" onkeydown="if(event.key==='Enter') saveInlineAlias('${cmd.id}', '${cleanCmdId}')" />
|
|
46
|
-
<button class="btn btn-primary" style="height: 22px; padding: 0 6px; font-size: 9px; width: 48px;" onclick="saveInlineAlias('${cmd.id}', '${cleanCmdId}')">💾 Add</button>
|
|
47
|
-
</div>
|
|
48
|
-
</div>
|
|
49
|
-
</div>
|
|
50
|
-
`;
|
|
51
|
-
})
|
|
52
|
-
.join('\n');
|
|
53
|
-
// 3 Custom IDE slots
|
|
54
|
-
const customSlotsHtml = data.customSlots
|
|
55
|
-
.map((slot) => `
|
|
56
|
-
<div class="cmd-row-clickable" onclick="selectItemForEdit('slot', ${slot.slotIndex}, '${slot.alias}', '${slot.command}', '${slot.label}')">
|
|
57
|
-
<div class="cmd-meta-col">
|
|
58
|
-
<span class="cmd-badge-key">/${slot.alias}</span>
|
|
59
|
-
<span style="font-size: 8px; background: rgba(129, 140, 248, 0.15); color: #818cf8; padding: 1px 3px; border-radius: 3px; font-weight: 600;">S${slot.slotIndex}</span>
|
|
60
|
-
<span class="cmd-arrow-target" title="${slot.command}">➔ ${slot.command}</span>
|
|
61
|
-
</div>
|
|
62
|
-
<div class="cmd-action-btns">
|
|
63
|
-
<button class="mini-btn" title="Edit Slot" onclick="event.stopPropagation(); selectItemForEdit('slot', ${slot.slotIndex}, '${slot.alias}', '${slot.command}', '${slot.label}')">✏️</button>
|
|
64
|
-
<button class="mini-btn" title="Test Execute Slot" onclick="event.stopPropagation(); vscode.postMessage({command: 'runAlias', alias: '${slot.alias}'})">▶</button>
|
|
65
|
-
</div>
|
|
66
|
-
</div>
|
|
67
|
-
`)
|
|
68
|
-
.join('\n');
|
|
69
|
-
// Linked Companion Devices across all platforms (Only real authenticated accounts)
|
|
70
|
-
const linkedAccounts = (data.linkedAccounts || []).filter((a) => ['whatsapp', 'telegram', 'discord', 'slack', 'matrix'].includes(a.platform) &&
|
|
71
|
-
(0, ide_detector_1.isRealPairedAccount)(a));
|
|
72
|
-
// Real paired devices only - NEVER treat arbitrary unverified phone numbers as paired!
|
|
73
|
-
const hasLinked = linkedAccounts.length > 0;
|
|
74
|
-
const selectedCompanion = data.selectedCompanion || '';
|
|
75
|
-
const selectedPlatform = selectedCompanion && selectedCompanion !== 'all'
|
|
76
|
-
? (selectedCompanion.includes(':') ? selectedCompanion.split(':')[0].toLowerCase() : selectedCompanion.toLowerCase())
|
|
77
|
-
: '';
|
|
78
|
-
const companionOptionsHtml = linkedAccounts.length > 0
|
|
79
|
-
? [
|
|
80
|
-
...(linkedAccounts.length > 1
|
|
81
|
-
? [`<option value="all" ${!selectedCompanion || selectedCompanion === 'all' ? 'selected' : ''}>🌐 All Paired Devices (${linkedAccounts.length})</option>`]
|
|
82
|
-
: []),
|
|
83
|
-
...linkedAccounts.map((a) => {
|
|
84
|
-
const icon = a.platform === 'whatsapp' ? '💬' : a.platform === 'telegram' ? '✈️' : a.platform === 'discord' ? '🎮' : '⚡';
|
|
85
|
-
const display = a.userHandle || (a.platform === 'whatsapp' ? `+${a.userId}` : a.userId);
|
|
86
|
-
const val = `${a.platform}:${a.userId}`;
|
|
87
|
-
const isSelected = val === selectedCompanion || (linkedAccounts.length === 1);
|
|
88
|
-
return `<option value="${val}" ${isSelected ? 'selected' : ''}>${icon} ${display} (${a.platform.toUpperCase()})</option>`;
|
|
89
|
-
})
|
|
90
|
-
].join('\n')
|
|
91
|
-
: `<option value="" disabled selected>No paired devices found</option>`;
|
|
92
|
-
// Live Chat Stream Bubbles with Playable Audio & Media Lightbox (Filtered by active companion device)
|
|
93
|
-
const rawChatMessages = data.recentChatMessages || [];
|
|
94
|
-
const filteredChatMessages = selectedPlatform
|
|
95
|
-
? rawChatMessages.filter((m) => {
|
|
96
|
-
const p = (m.platform || '').toLowerCase();
|
|
97
|
-
const s = (m.sender || '').toLowerCase();
|
|
98
|
-
return p === selectedPlatform || (selectedPlatform === 'whatsapp' && (p === 'whatsapp' || s.includes('whatsapp')));
|
|
99
|
-
})
|
|
100
|
-
: rawChatMessages;
|
|
101
|
-
const chatMessagesHtml = filteredChatMessages.length > 0
|
|
102
|
-
? filteredChatMessages
|
|
103
|
-
.slice(-6)
|
|
104
|
-
.map((m) => {
|
|
105
|
-
let mediaHtml = '';
|
|
106
|
-
if (m.mediaUrl) {
|
|
107
|
-
const url = m.mediaUrl;
|
|
108
|
-
if (m.mediaType === 'audio' || url.endsWith('.ogg') || url.endsWith('.wav') || url.endsWith('.mp3')) {
|
|
109
|
-
mediaHtml = `
|
|
110
|
-
<div style="margin-top: 4px; display: flex; flex-direction: column; gap: 4px;">
|
|
111
|
-
<button class="media-preview-btn audio" onclick="openMediaModal('${url}', 'audio')" title="Play audio note in popup">🎙️ Play Audio Note ▶</button>
|
|
112
|
-
<audio controls src="${url}" preload="none" style="width: 100%; height: 26px; border-radius: 4px;"></audio>
|
|
113
|
-
</div>`;
|
|
114
|
-
}
|
|
115
|
-
else if (m.mediaType === 'image' || url.endsWith('.jpg') || url.endsWith('.png') || url.endsWith('.jpeg')) {
|
|
116
|
-
mediaHtml = `
|
|
117
|
-
<div style="margin-top: 4px; display: flex; flex-direction: column; gap: 4px;">
|
|
118
|
-
<button class="media-preview-btn" onclick="openMediaModal('${url}', 'image')" title="View enlarged image">🖼️ View Full Image 🔍</button>
|
|
119
|
-
<img src="${url}" alt="Attachment" style="max-width: 100%; max-height: 140px; border-radius: 4px; border: 1px solid var(--border); cursor: pointer;" onclick="openMediaModal('${url}', 'image')" />
|
|
120
|
-
</div>`;
|
|
121
|
-
}
|
|
122
|
-
else if (m.mediaType === 'video' || url.endsWith('.mp4') || url.endsWith('.webm')) {
|
|
123
|
-
mediaHtml = `
|
|
124
|
-
<div style="margin-top: 4px; display: flex; flex-direction: column; gap: 4px;">
|
|
125
|
-
<button class="media-preview-btn video" onclick="openMediaModal('${url}', 'video')" title="Watch video note in popup">🎬 Watch Video Note ▶</button>
|
|
126
|
-
<video controls src="${url}" style="max-width: 100%; max-height: 140px; border-radius: 4px; border: 1px solid var(--border);"></video>
|
|
127
|
-
</div>`;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
return `
|
|
131
|
-
<div class="chat-bubble ${m.sender === 'EditorMate' ? 'outbound' : 'inbound'}">
|
|
132
|
-
<div class="chat-meta">
|
|
133
|
-
<span>${m.sender || (m.platform ? m.platform.toUpperCase() : 'Companion')}</span>
|
|
134
|
-
<span style="opacity: 0.7;">${new Date(m.timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}</span>
|
|
135
|
-
</div>
|
|
136
|
-
<div style="word-break: break-word;">${m.text}</div>
|
|
137
|
-
${mediaHtml}
|
|
138
|
-
</div>
|
|
139
|
-
`;
|
|
140
|
-
})
|
|
141
|
-
.join('\n')
|
|
142
|
-
: `<div style="color: var(--text-muted); font-size: 9.5px; text-align: center; padding: 8px 0;">No messages yet for ${selectedPlatform ? selectedPlatform.toUpperCase() : 'all companions'}. Speak or type to EditorMate!</div>`;
|
|
143
|
-
// Target IDE Session Options (Real dynamically detected IDEs, no hardcoded names)
|
|
144
|
-
const sessionOptions = data.connectedSessions && data.connectedSessions.length > 0
|
|
145
|
-
? data.connectedSessions
|
|
146
|
-
.map((s) => `<option value="${s.id}" ${s.id === data.activeSessionId ? 'selected' : ''}>${s.id === data.mySessionId ? '★ [THIS IDE] ' : ''}${s.name} (${s.ide})</option>`)
|
|
147
|
-
.join('\n')
|
|
148
|
-
: `<option value="${data.mySessionId}" selected>★ [THIS IDE] ${data.workspaceName} (${data.realIde || 'IDE'})</option>`;
|
|
149
|
-
// Trial progress width calculation
|
|
150
|
-
const trialDays = Math.max(0, Math.min(data.trialDaysLeft, data.trialMaxDays || 7));
|
|
151
|
-
const trialPct = Math.round((trialDays / (data.trialMaxDays || 7)) * 100);
|
|
152
|
-
const isSettingsTab = data.activeMainTab === 'settings';
|
|
153
|
-
return `
|
|
154
|
-
<div id="main-container" class="container">
|
|
155
|
-
<!-- 1. Top Brand & Action Bar -->
|
|
156
|
-
<div class="brand-bar">
|
|
157
|
-
<div class="brand-group">
|
|
158
|
-
<span class="brand-icon">${data.iconEmoji}</span>
|
|
159
|
-
<div class="brand-meta">
|
|
160
|
-
<div class="brand-title">EditorMate</div>
|
|
161
|
-
<div class="brand-sub">${data.workspaceName}</div>
|
|
162
|
-
</div>
|
|
163
|
-
<span class="badge ${data.isActivated ? 'badge-live' : 'badge-amber'}">
|
|
164
|
-
<span class="pulse-dot"></span>${data.isActivated ? 'PRO' : 'TRIAL'}
|
|
165
|
-
</span>
|
|
166
|
-
</div>
|
|
167
|
-
<div class="top-actions">
|
|
168
|
-
<button id="top-edit-btn" class="top-btn" onclick="toggleEditMode()" title="Edit Layout (Reorder Cards)">✏️</button>
|
|
169
|
-
<button id="top-cog-btn" class="top-btn ${isSettingsTab ? 'active' : ''}" onclick="toggleSettingsTab()" title="${isSettingsTab ? 'Close Settings (Back to Remote Deck)' : 'Settings & Channels'}">${isSettingsTab ? '✕' : '⚙️'}</button>
|
|
170
|
-
</div>
|
|
171
|
-
</div>
|
|
172
|
-
|
|
173
|
-
<!-- ======================================================== -->
|
|
174
|
-
<!-- TAB 1: REMOTE DECK (MAIN DASHBOARD) -->
|
|
175
|
-
<!-- ======================================================== -->
|
|
176
|
-
<div id="tab-content-dashboard" class="tab-content ${isSettingsTab ? '' : 'active'}">
|
|
177
|
-
|
|
178
|
-
<!-- A. Companion Device Card (With Dropdown & Inline Make Active & Unpair Buttons) -->
|
|
179
|
-
<div id="card-device" class="card reorderable-card" data-card-id="card-device">
|
|
180
|
-
<div class="collapsible-header" onclick="toggleCard('card-body-device', 'arrow-device')">
|
|
181
|
-
<div style="display: flex; align-items: center; gap: 6px; min-width: 0; flex: 1;">
|
|
182
|
-
<span class="section-title">📱 Companion Device</span>
|
|
183
|
-
<span class="badge ${hasLinked ? 'badge-live' : 'badge-amber'}">
|
|
184
|
-
<span class="pulse-dot"></span>${hasLinked ? 'PAIRED' : 'NOT PAIRED'}
|
|
185
|
-
</span>
|
|
186
|
-
</div>
|
|
187
|
-
<div class="card-reorder-bar">
|
|
188
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardUp('card-device')" title="Move card up">▲</button>
|
|
189
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardDown('card-device')" title="Move card down">▼</button>
|
|
190
|
-
<span class="drag-handle" title="Drag to reorder card">⠿</span>
|
|
191
|
-
</div>
|
|
192
|
-
<span id="arrow-device" class="collapse-arrow open">▼</span>
|
|
193
|
-
</div>
|
|
194
|
-
|
|
195
|
-
<div id="card-body-device" class="collapsible-body">
|
|
196
|
-
<!-- Companion Device Selector with Equal-Sized Dropdown and Action Buttons -->
|
|
197
|
-
<div style="margin-bottom: 7px;">
|
|
198
|
-
<div style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 3px;">
|
|
199
|
-
<label class="field-label" style="margin-bottom: 0;">Connected Companion Device / Channel:</label>
|
|
200
|
-
${!hasLinked ? `<span style="font-size: 8px; color: var(--accent); cursor: pointer;" onclick="switchMainTab('settings')">+ Connect Channel</span>` : ''}
|
|
201
|
-
</div>
|
|
202
|
-
<div style="display: flex; gap: 4px; align-items: center; width: 100%;">
|
|
203
|
-
<select id="select-active-companion" class="select-field" style="flex: 1; height: 26px; font-size: 9.5px; min-width: 0;" onchange="onCompanionDeviceChange(this.value)">
|
|
204
|
-
${companionOptionsHtml}
|
|
205
|
-
</select>
|
|
206
|
-
<button class="btn btn-primary" style="height: 26px; width: auto; padding: 0 8px; font-size: 9px; flex-shrink: 0;" onclick="makeSelectedCompanionActive()" title="Set this device active for chatting">
|
|
207
|
-
🎯 Make Active
|
|
208
|
-
</button>
|
|
209
|
-
</div>
|
|
210
|
-
</div>
|
|
211
|
-
|
|
212
|
-
<!-- Active Target IDE Selector (Prevents blasting to all IDEs) -->
|
|
213
|
-
<div class="target-ide-banner" style="margin-bottom: 6px;">
|
|
214
|
-
<div style="display: flex; flex-direction: column; overflow: hidden; min-width: 0; flex: 1;">
|
|
215
|
-
<span style="font-size: 8px; font-weight: 700; text-transform: uppercase; color: var(--accent); letter-spacing: 0.2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">Target Chat IDE Session</span>
|
|
216
|
-
<span style="font-size: 9.5px; font-weight: 600; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap;">
|
|
217
|
-
${data.isActiveChatTarget ? '🎯 Active (Targeted)' : '⏸️ Standing By'}
|
|
218
|
-
</span>
|
|
219
|
-
</div>
|
|
220
|
-
<div style="flex-shrink: 0;">
|
|
221
|
-
${!data.isActiveChatTarget ? `
|
|
222
|
-
<button class="mini-btn" style="background: var(--accent); color: #000; font-weight: 700; padding: 2px 6px;" onclick="setThisIdeActive()">
|
|
223
|
-
🎯 Make Active
|
|
224
|
-
</button>
|
|
225
|
-
` : `
|
|
226
|
-
<span class="target-ide-badge">ACTIVE</span>
|
|
227
|
-
`}
|
|
228
|
-
</div>
|
|
229
|
-
</div>
|
|
230
|
-
|
|
231
|
-
<!-- Target Session Switcher Dropdown (Real active IDE sessions only) -->
|
|
232
|
-
<div style="margin-bottom: 6px;">
|
|
233
|
-
<select class="select-field" onchange="onSelectActiveSession(this.value)">
|
|
234
|
-
${sessionOptions}
|
|
235
|
-
</select>
|
|
236
|
-
</div>
|
|
237
|
-
|
|
238
|
-
<!-- Mobile Prompt Routing Selection with Tooltip & Info Drawer -->
|
|
239
|
-
<div style="margin-bottom: 6px;">
|
|
240
|
-
<div style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 3px;">
|
|
241
|
-
<label class="field-label" style="margin-bottom: 0;" title="Select how incoming mobile prompts are dispatched in this IDE">Mobile Prompt Routing:</label>
|
|
242
|
-
<span class="info-tip-btn" onclick="toggleRoutingTip()" title="Click to view guide on routing modes">ℹ️ Info</span>
|
|
243
|
-
</div>
|
|
244
|
-
<div id="routing-explainer-box" class="routing-explainer" style="display: none; padding: 6px 8px; margin-bottom: 6px;">
|
|
245
|
-
<div>📌 <b>Direct Pin:</b> Pins incoming mobile prompt directly into editor context as active draft without auto-running.</div>
|
|
246
|
-
<div style="margin-top: 3px;">🚀 <b>Auto-Submit Turn:</b> Instantly sends prompt to AI agent as an active conversational turn upon arrival.</div>
|
|
247
|
-
<div style="margin-top: 3px;">⚡ <b>Quick Chat Input:</b> Populates IDE Quick Chat bar, letting you review or edit before hitting Enter.</div>
|
|
248
|
-
<div style="margin-top: 3px;">🔔 <b>Toast (Manual):</b> Displays a toast popup in bottom-right with an 'Insert / Run' button.</div>
|
|
249
|
-
</div>
|
|
250
|
-
<select class="select-field" onchange="changeRouting(this.value)" title="Choose how mobile messages are routed into your IDE">
|
|
251
|
-
<option value="autoPin" ${data.currentRouting === 'autoPin' ? 'selected' : ''} title="Pins incoming mobile prompt directly into editor context as active draft without auto-running">📌 Direct Pin (Zero-Click)</option>
|
|
252
|
-
<option value="autoSubmit" ${data.currentRouting === 'autoSubmit' ? 'selected' : ''} title="Instantly sends prompt to AI agent as an active conversational turn upon arrival">🚀 Auto-Submit Turn</option>
|
|
253
|
-
<option value="quickChat" ${data.currentRouting === 'quickChat' ? 'selected' : ''} title="Populates IDE Quick Chat bar, letting you review or edit before hitting Enter">⚡ Quick Chat Input</option>
|
|
254
|
-
<option value="manualToast" ${data.currentRouting === 'manualToast' ? 'selected' : ''} title="Displays a toast popup in bottom-right with an 'Insert / Run' button">🔔 Toast (Manual)</option>
|
|
255
|
-
</select>
|
|
256
|
-
</div>
|
|
257
|
-
|
|
258
|
-
<!-- Cockpit Metadata Grid -->
|
|
259
|
-
<div class="cockpit-grid">
|
|
260
|
-
<div class="grid-row">
|
|
261
|
-
<span class="grid-label">📱 Device</span>
|
|
262
|
-
<span class="grid-val" title="${data.deviceName}">${hasLinked && data.isDevicePaired ? data.deviceName : '<span style="color: var(--amber);">Not Paired</span>'}</span>
|
|
263
|
-
</div>
|
|
264
|
-
<div class="grid-row">
|
|
265
|
-
<span class="grid-label">💬 Chat Line</span>
|
|
266
|
-
<span class="grid-val" style="color: ${hasLinked ? 'var(--emerald)' : 'var(--text-muted)'};" title="${hasLinked ? (linkedAccounts[0]?.userHandle ? `${linkedAccounts[0].userHandle} (${linkedAccounts[0].platform.toUpperCase()})` : (linkedAccounts[0]?.platform === 'whatsapp' ? '+' + linkedAccounts[0].userId : linkedAccounts[0]?.userId || 'Paired Channel')) : 'Not Connected'}">
|
|
267
|
-
${hasLinked ? (linkedAccounts[0]?.userHandle ? `${linkedAccounts[0].userHandle} (${linkedAccounts[0].platform.toUpperCase()})` : (linkedAccounts[0]?.platform === 'whatsapp' ? '+' + linkedAccounts[0].userId : linkedAccounts[0]?.userId || 'Paired Channel')) : 'Not Connected'}
|
|
268
|
-
</span>
|
|
269
|
-
</div>
|
|
270
|
-
<div class="grid-row">
|
|
271
|
-
<span class="grid-label">💺 Seat</span>
|
|
272
|
-
<span class="grid-val font-mono">${data.deviceSeat}</span>
|
|
273
|
-
</div>
|
|
274
|
-
<div class="grid-row">
|
|
275
|
-
<span class="grid-label">⚡ Bridge</span>
|
|
276
|
-
<span class="grid-val" style="color: var(--emerald);">127.0.0.1:4588</span>
|
|
277
|
-
</div>
|
|
278
|
-
</div>
|
|
279
|
-
|
|
280
|
-
<!-- Live Chat / Feed Column with Connected Device -->
|
|
281
|
-
<div class="chat-card" style="margin-top: 6px;">
|
|
282
|
-
<div style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 3px;">
|
|
283
|
-
<span style="font-weight: 600; font-size: 9.5px; color: var(--accent);">💬 Live Companion Feed</span>
|
|
284
|
-
<span id="live-feed-badge" class="badge badge-purple" style="font-size: 8px; text-transform: uppercase;">${selectedPlatform ? selectedPlatform : 'All Channels'}</span>
|
|
285
|
-
</div>
|
|
286
|
-
<div id="live-chat-stream" class="chat-bubble-stream">
|
|
287
|
-
${chatMessagesHtml}
|
|
288
|
-
</div>
|
|
289
|
-
</div>
|
|
290
|
-
|
|
291
|
-
<!-- Privacy Meter -->
|
|
292
|
-
<div class="privacy-box" style="margin-top: 6px;">
|
|
293
|
-
<div class="privacy-row">
|
|
294
|
-
<span class="privacy-tag sending">📤 Sending</span>
|
|
295
|
-
<span class="privacy-text" title="Voice notes & clean prompts to selected IDE">Voice & prompts to active IDE</span>
|
|
296
|
-
</div>
|
|
297
|
-
<div class="privacy-row" style="margin-top: 3px;">
|
|
298
|
-
<span class="privacy-tag not-sending">🔒 NOT Sending</span>
|
|
299
|
-
<span class="privacy-text" title="0 code telemetry • 0 cloud logs • Local socket encryption">0 telemetry • 0 cloud logs • Local socket encryption</span>
|
|
300
|
-
</div>
|
|
301
|
-
</div>
|
|
302
|
-
</div>
|
|
303
|
-
</div>
|
|
304
|
-
|
|
305
|
-
<!-- B. Collapsible Execution Guard Card -->
|
|
306
|
-
<div id="card-guard" class="card reorderable-card" data-card-id="card-guard">
|
|
307
|
-
<div class="collapsible-header" onclick="toggleCard('card-body-guard', 'arrow-guard')">
|
|
308
|
-
<div style="display: flex; align-items: center; gap: 5px; min-width: 0; flex: 1;">
|
|
309
|
-
<span class="section-title">🛡️ Execution Guard</span>
|
|
310
|
-
<span class="badge ${data.approvalMode === 'allow_all' ? 'badge-live' : data.approvalMode === 'deny_all' ? 'badge-amber' : 'badge-purple'}">
|
|
311
|
-
${data.approvalMode.toUpperCase().replace('_', ' ')}
|
|
312
|
-
</span>
|
|
313
|
-
</div>
|
|
314
|
-
<div class="card-reorder-bar">
|
|
315
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardUp('card-guard')" title="Move card up">▲</button>
|
|
316
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardDown('card-guard')" title="Move card down">▼</button>
|
|
317
|
-
<span class="drag-handle" title="Drag to reorder card">⠿</span>
|
|
318
|
-
</div>
|
|
319
|
-
<span id="arrow-guard" class="collapse-arrow open">▼</span>
|
|
320
|
-
</div>
|
|
321
|
-
|
|
322
|
-
<div id="card-body-guard" class="collapsible-body">
|
|
323
|
-
${data.pendingExecutions && data.pendingExecutions.length > 0 ? `
|
|
324
|
-
<div id="pending-execution-alert" style="background: rgba(245, 158, 11, 0.12); border: 1px solid rgba(245, 158, 11, 0.4); border-radius: 6px; padding: 7px 8px; margin-bottom: 7px;">
|
|
325
|
-
<div style="font-size: 8.5px; font-weight: 700; color: var(--amber); margin-bottom: 2px;">
|
|
326
|
-
⚠️ EXECUTION PERMISSION REQUEST
|
|
327
|
-
</div>
|
|
328
|
-
<div style="font-size: 9px; color: var(--text); font-family: var(--font-mono); word-break: break-all; margin-bottom: 5px;">
|
|
329
|
-
${data.pendingExecutions[0].command} ${data.pendingExecutions[0].alias ? `(${data.pendingExecutions[0].alias})` : ''}
|
|
330
|
-
</div>
|
|
331
|
-
<div style="display: flex; gap: 4px;">
|
|
332
|
-
<button class="btn btn-allow" style="height: 24px; font-size: 9px; flex: 1;" onclick="resolvePending('allow')" title="Approve and execute this command now">⚡ Allow</button>
|
|
333
|
-
<button class="btn btn-allow" style="height: 24px; font-size: 9px; flex: 1;" onclick="resolvePending('allow_all')" title="Whitelist and execute without asking again">⚡ Allow All</button>
|
|
334
|
-
<button class="btn btn-deny" style="height: 24px; font-size: 9px; flex: 1;" onclick="resolvePending('deny')" title="Reject and block this execution">🚫 Deny</button>
|
|
335
|
-
</div>
|
|
336
|
-
</div>
|
|
337
|
-
` : ''}
|
|
338
|
-
<div class="guard-btn-row">
|
|
339
|
-
<button class="btn btn-allow ${data.approvalMode === 'allow_all' ? 'active-guard' : ''}" onclick="setGuardMode('allow_all')" title="Auto-approve all remote commands">⚡ Allow</button>
|
|
340
|
-
<button class="btn btn-amber ${data.approvalMode === 'prompt' ? 'active-guard' : ''}" onclick="setGuardMode('prompt')" title="Prompt on each unapproved execution">❓ Prompt</button>
|
|
341
|
-
<button class="btn btn-deny ${data.approvalMode === 'deny_all' ? 'active-guard' : ''}" onclick="setGuardMode('deny_all')" title="Block all unapproved executions">🚫 Deny</button>
|
|
342
|
-
</div>
|
|
343
|
-
<div style="font-size: 8.5px; color: var(--text-muted); display: flex; justify-content: space-between; align-items: center; margin-top: 5px;">
|
|
344
|
-
<span>Whitelist: ${data.whitelistCount} approved</span>
|
|
345
|
-
<span style="cursor: pointer; color: var(--accent); text-decoration: underline;" onclick="vscode.postMessage({command: 'clearWhitelist'})">Clear</span>
|
|
346
|
-
</div>
|
|
347
|
-
</div>
|
|
348
|
-
</div>
|
|
349
|
-
|
|
350
|
-
<!-- C. Supported Commands & Custom Aliases (Collapsible Accordion) -->
|
|
351
|
-
<div id="card-commands" class="card reorderable-card" data-card-id="card-commands">
|
|
352
|
-
<div class="collapsible-header" onclick="toggleCard('card-body-commands', 'arrow-commands')">
|
|
353
|
-
<div style="display: flex; align-items: center; gap: 5px; min-width: 0; flex: 1; overflow: hidden;">
|
|
354
|
-
<span class="section-title">⌨️ Commands</span>
|
|
355
|
-
<span class="badge badge-purple">10 BUILT-IN • 3 SLOTS</span>
|
|
356
|
-
</div>
|
|
357
|
-
<div class="card-reorder-bar">
|
|
358
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardUp('card-commands')" title="Move card up">▲</button>
|
|
359
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardDown('card-commands')" title="Move card down">▼</button>
|
|
360
|
-
<span class="drag-handle" title="Drag to reorder card">⠿</span>
|
|
361
|
-
</div>
|
|
362
|
-
<span id="arrow-commands" class="collapse-arrow">▼</span>
|
|
363
|
-
</div>
|
|
364
|
-
|
|
365
|
-
<div id="card-body-commands" class="collapsible-body" style="display: none;">
|
|
366
|
-
<!-- Group 1: 10 Built-in Commands with Aliases -->
|
|
367
|
-
<div class="cmd-group-title">
|
|
368
|
-
<span>🤖 10 Built-in Commands (Click row to assign alias)</span>
|
|
369
|
-
<span style="font-size: 8px; color: var(--text-muted); text-transform: none;">Click to test / edit</span>
|
|
370
|
-
</div>
|
|
371
|
-
<div class="cmd-list-col">
|
|
372
|
-
${builtinCommandsHtml}
|
|
373
|
-
</div>
|
|
374
|
-
|
|
375
|
-
<!-- Group 2: 3 Assignable IDE Command Slots -->
|
|
376
|
-
<div class="cmd-group-title" style="margin-top: 8px;">
|
|
377
|
-
<span>⌨️ 3 Assignable Custom Slots</span>
|
|
378
|
-
<span style="font-size: 8px; color: var(--text-muted); text-transform: none;">Click row to edit</span>
|
|
379
|
-
</div>
|
|
380
|
-
<div class="cmd-list-col">
|
|
381
|
-
${customSlotsHtml}
|
|
382
|
-
</div>
|
|
383
|
-
|
|
384
|
-
<!-- Inspector & Inline Editor Form (Populates when any command or slot is clicked) -->
|
|
385
|
-
<div id="command-editor-form" class="editor-form-box">
|
|
386
|
-
<div style="display: flex; align-items: center; justify-content: space-between;">
|
|
387
|
-
<span id="editor-form-title" style="font-size: 10px; font-weight: 700; color: var(--accent);">✏️ Edit Custom Slot 1</span>
|
|
388
|
-
<span id="editor-form-type" style="font-size: 8.5px; color: var(--text-muted);">Slot 1</span>
|
|
389
|
-
</div>
|
|
390
|
-
<div>
|
|
391
|
-
<label class="field-label">Shortcut Alias Name (without slash):</label>
|
|
392
|
-
<input id="input-alias" type="text" class="form-input" placeholder="e.g. s, snap, fmt, save, term" value="fmt" />
|
|
393
|
-
</div>
|
|
394
|
-
<div>
|
|
395
|
-
<label class="field-label">Target IDE / Shell Command:</label>
|
|
396
|
-
<input id="input-target-cmd" type="text" class="form-input" placeholder="e.g. editor.action.formatDocument or /snap" value="editor.action.formatDocument" />
|
|
397
|
-
</div>
|
|
398
|
-
<div style="display: flex; gap: 4px; margin-top: 2px;">
|
|
399
|
-
<button id="btn-save-slot" class="btn btn-primary" style="flex: 1;" onclick="saveSlotEdit()">
|
|
400
|
-
💾 Save & Update
|
|
401
|
-
</button>
|
|
402
|
-
<button class="btn" style="width: 70px;" onclick="testRunActiveSlot()">
|
|
403
|
-
▶ Test
|
|
404
|
-
</button>
|
|
405
|
-
</div>
|
|
406
|
-
</div>
|
|
407
|
-
</div>
|
|
408
|
-
</div>
|
|
409
|
-
|
|
410
|
-
<!-- D. Live Screen Preview Card (Collapsible) -->
|
|
411
|
-
<div id="card-screen" class="card reorderable-card" data-card-id="card-screen">
|
|
412
|
-
<div class="collapsible-header" onclick="toggleCard('card-body-screen', 'arrow-screen')">
|
|
413
|
-
<div style="display: flex; align-items: center; gap: 6px;">
|
|
414
|
-
<span class="section-title">🖥️ Live Screen Preview</span>
|
|
415
|
-
<span class="badge badge-live"><span class="pulse-dot"></span>LIVE FRAME</span>
|
|
416
|
-
</div>
|
|
417
|
-
<div class="card-reorder-bar">
|
|
418
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardUp('card-screen')" title="Move card up">▲</button>
|
|
419
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardDown('card-screen')" title="Move card down">▼</button>
|
|
420
|
-
<span class="drag-handle" title="Drag to reorder card">⠿</span>
|
|
421
|
-
</div>
|
|
422
|
-
<button class="collapse-toggle-btn" title="Toggle Preview" onclick="event.stopPropagation(); toggleCard('card-body-screen', 'arrow-screen')">
|
|
423
|
-
<span>Preview</span> <span id="arrow-screen" class="collapse-arrow open">▼</span>
|
|
424
|
-
</button>
|
|
425
|
-
</div>
|
|
426
|
-
|
|
427
|
-
<div id="card-body-screen" class="collapsible-body">
|
|
428
|
-
${data.isDaemonOnline === false ? `
|
|
429
|
-
<div class="daemon-offline-banner" style="background: rgba(255,165,0,0.12); border: 1px solid rgba(255,165,0,0.35); border-radius: 6px; padding: 10px; margin-bottom: 8px; text-align: center;">
|
|
430
|
-
<div style="font-weight: 700; font-size: 11px; color: #ffb84d; margin-bottom: 4px;">⚡ Companion Service Paused</div>
|
|
431
|
-
<div style="font-size: 10px; opacity: 0.85; margin-bottom: 8px; line-height: 1.35;">
|
|
432
|
-
Enable the local companion bridge (port 4588) to stream live IDE window frames.
|
|
433
|
-
</div>
|
|
434
|
-
<button onclick="enableCompanionService()" class="btn btn-primary" style="width: 100%; font-size: 10px; padding: 5px 8px; font-weight: 600;">
|
|
435
|
-
🚀 Start Companion Service
|
|
436
|
-
</button>
|
|
437
|
-
</div>
|
|
438
|
-
` : ''}
|
|
439
|
-
<div style="position: relative; background: #000; border: 1px solid var(--border); border-radius: 6px; overflow: hidden; min-height: 120px; display: flex; align-items: center; justify-content: center;">
|
|
440
|
-
<img id="screen-preview-img" src="" alt="IDE Screen Preview" style="width: 100%; height: auto; max-height: 220px; object-fit: contain; display: block;" />
|
|
441
|
-
</div>
|
|
442
|
-
<div style="display: flex; gap: 4px; margin-top: 6px;">
|
|
443
|
-
<button class="btn btn-primary" style="flex: 1;" onclick="refreshScreenPreview()">📸 Refresh Frame</button>
|
|
444
|
-
<button class="btn" style="width: 80px;" onclick="vscode.postMessage({command: 'remoteTerminal'})">💻 Shell</button>
|
|
445
|
-
</div>
|
|
446
|
-
</div>
|
|
447
|
-
</div>
|
|
448
|
-
|
|
449
|
-
<!-- E. Remote Quick Tools -->
|
|
450
|
-
<div id="card-quick-tools" class="card reorderable-card" data-card-id="card-quick-tools" style="padding: 6px 8px;">
|
|
451
|
-
<div style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 5px;">
|
|
452
|
-
<span style="font-weight: 700; font-size: 9px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.3px;">⚡ Quick Remote Tools</span>
|
|
453
|
-
<div class="card-reorder-bar">
|
|
454
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardUp('card-quick-tools')" title="Move card up">▲</button>
|
|
455
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardDown('card-quick-tools')" title="Move card down">▼</button>
|
|
456
|
-
<span class="drag-handle" title="Drag to reorder card">⠿</span>
|
|
457
|
-
</div>
|
|
458
|
-
</div>
|
|
459
|
-
<div class="action-grid">
|
|
460
|
-
<button class="btn" onclick="vscode.postMessage({command: 'captureScreen'})">📸 Screen Snap</button>
|
|
461
|
-
<button class="btn" onclick="vscode.postMessage({command: 'remoteTerminal'})">💻 Shell Exec</button>
|
|
462
|
-
<button class="btn" onclick="vscode.postMessage({command: 'remoteCommand', cmd: '/status'})">💬 Status Check</button>
|
|
463
|
-
<button class="btn" onclick="vscode.postMessage({command: 'openUrl', url: 'http://127.0.0.1:4588/api/report/pdf'})">📄 PDF Report</button>
|
|
464
|
-
</div>
|
|
465
|
-
</div>
|
|
466
|
-
</div>
|
|
467
|
-
|
|
468
|
-
<!-- ======================================================== -->
|
|
469
|
-
<!-- TAB 2: SETTINGS & CHANNELS -->
|
|
470
|
-
<!-- ======================================================== -->
|
|
471
|
-
<div id="tab-content-settings" class="tab-content ${isSettingsTab ? 'active' : ''}">
|
|
472
|
-
|
|
473
|
-
<!-- A. Connect Channels & Pairing (TOP of Settings, right below EditorMate header) -->
|
|
474
|
-
<div id="card-channels" class="card reorderable-card" data-card-id="card-channels">
|
|
475
|
-
<div class="header-row" style="margin-bottom: 6px;">
|
|
476
|
-
<div style="display: flex; align-items: center; gap: 6px;">
|
|
477
|
-
<span class="section-title">📱 Connect Channels & Pairing</span>
|
|
478
|
-
<span id="channel-status-badge" class="badge ${hasLinked ? 'badge-live' : 'badge-amber'}">${hasLinked ? 'PAIRED' : 'READY'}</span>
|
|
479
|
-
</div>
|
|
480
|
-
<div class="card-reorder-bar">
|
|
481
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardUp('card-channels')" title="Move card up">▲</button>
|
|
482
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardDown('card-channels')" title="Move card down">▼</button>
|
|
483
|
-
<span class="drag-handle" title="Drag to reorder card">⠿</span>
|
|
484
|
-
</div>
|
|
485
|
-
</div>
|
|
486
|
-
${(() => {
|
|
487
|
-
const isTgPaired = linkedAccounts.some(a => a.platform === 'telegram');
|
|
488
|
-
const isDcPaired = linkedAccounts.some(a => a.platform === 'discord');
|
|
489
|
-
const isWaPaired = linkedAccounts.some(a => a.platform === 'whatsapp');
|
|
490
|
-
const isSlPaired = linkedAccounts.some(a => a.platform === 'slack');
|
|
491
|
-
return `
|
|
492
|
-
<div class="channel-pills" style="margin-bottom: 7px;">
|
|
493
|
-
<button class="channel-btn channel-tg active" data-platform="telegram" onclick="switchChannel('telegram')">
|
|
494
|
-
<span>✈️</span><span>Telegram</span>
|
|
495
|
-
</button>
|
|
496
|
-
<button class="channel-btn channel-dc" data-platform="discord" onclick="switchChannel('discord')">
|
|
497
|
-
<span>🎮</span><span>Discord</span>
|
|
498
|
-
</button>
|
|
499
|
-
<button class="channel-btn channel-wa" data-platform="whatsapp" onclick="switchChannel('whatsapp')">
|
|
500
|
-
<span>💬</span><span>WhatsApp</span>
|
|
501
|
-
</button>
|
|
502
|
-
<button class="channel-btn channel-sl disabled" data-platform="slack" disabled title="Coming Soon" style="opacity: 0.55; cursor: not-allowed;" onclick="return false;">
|
|
503
|
-
<span>⚡</span><span>Slack</span>
|
|
504
|
-
<span style="font-size: 7.5px; background: rgba(255,255,255,0.08); padding: 1px 4px; border-radius: 3px; margin-left: 2px; color: var(--text-muted); font-weight: 600;">Coming Soon</span>
|
|
505
|
-
</button>
|
|
506
|
-
</div>
|
|
507
|
-
`;
|
|
508
|
-
})()}
|
|
509
|
-
|
|
510
|
-
<!-- Dynamic Per-Platform Linked Device Selector with Inline [ 🔌 Unlink ] Button -->
|
|
511
|
-
${(() => {
|
|
512
|
-
const getPlatformLinkedHtml = (platform, label) => {
|
|
513
|
-
const list = linkedAccounts.filter(a => a.platform === platform);
|
|
514
|
-
if (list.length === 0) {
|
|
515
|
-
return `
|
|
516
|
-
<div id="wrapper-linked-${platform}" class="platform-linked-device-wrapper" style="display: ${platform === 'telegram' ? 'block' : 'none'}; margin-bottom: 6px;">
|
|
517
|
-
<div style="font-size: 8.5px; color: var(--text-muted); padding: 5px 7px; background: rgba(255,255,255,0.02); border-radius: 4px; border: 1px dashed var(--border);">
|
|
518
|
-
No ${label} companion currently linked. Follow steps below to link.
|
|
519
|
-
</div>
|
|
520
|
-
</div>
|
|
521
|
-
`;
|
|
522
|
-
}
|
|
523
|
-
return `
|
|
524
|
-
<div id="wrapper-linked-${platform}" class="platform-linked-device-wrapper" style="display: ${platform === 'telegram' ? 'block' : 'none'}; margin-bottom: 7px;">
|
|
525
|
-
<div style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 3px;">
|
|
526
|
-
<span style="font-size: 8.5px; font-weight: 700; color: var(--emerald);">Linked ${label} Companion(s):</span>
|
|
527
|
-
<span class="badge badge-live" style="font-size: 8px; padding: 0 4px;">PAIRED</span>
|
|
528
|
-
</div>
|
|
529
|
-
<div style="display: flex; gap: 4px; align-items: center;">
|
|
530
|
-
<select id="select-linked-${platform}" class="select-field" style="flex: 1; height: 26px; font-size: 9.5px;">
|
|
531
|
-
${list.map(a => `<option value="${a.userId}">${a.userHandle || a.userId}</option>`).join('')}
|
|
532
|
-
</select>
|
|
533
|
-
<button class="btn btn-deny" style="height: 26px; padding: 0 8px; font-size: 9px; flex-shrink: 0;" onclick="unpairChannelDevice('${platform}')" title="Unlink this ${label} device">
|
|
534
|
-
🔌 Unlink
|
|
535
|
-
</button>
|
|
536
|
-
</div>
|
|
537
|
-
</div>
|
|
538
|
-
`;
|
|
539
|
-
};
|
|
540
|
-
return `
|
|
541
|
-
${getPlatformLinkedHtml('telegram', 'Telegram')}
|
|
542
|
-
${getPlatformLinkedHtml('discord', 'Discord')}
|
|
543
|
-
${getPlatformLinkedHtml('whatsapp', 'WhatsApp')}
|
|
544
|
-
${getPlatformLinkedHtml('slack', 'Slack')}
|
|
545
|
-
`;
|
|
546
|
-
})()}
|
|
547
|
-
|
|
548
|
-
<!-- Standard QR Box (For Telegram, Discord, Slack) -->
|
|
549
|
-
<div id="standard-qr-box" class="qr-box">
|
|
550
|
-
${data.isDaemonOnline === false ? `
|
|
551
|
-
<div class="daemon-offline-banner" style="background: rgba(255,165,0,0.12); border: 1px solid rgba(255,165,0,0.35); border-radius: 6px; padding: 10px; margin-bottom: 8px; text-align: center; width: 100%;">
|
|
552
|
-
<div style="font-weight: 700; font-size: 11px; color: #ffb84d; margin-bottom: 4px;">⚡ Companion Service Paused</div>
|
|
553
|
-
<div style="font-size: 10px; opacity: 0.85; margin-bottom: 8px; line-height: 1.35;">
|
|
554
|
-
Enable local service (port 4588) to render Telegram/WhatsApp pairing QR codes.
|
|
555
|
-
</div>
|
|
556
|
-
<button onclick="enableCompanionService()" class="btn btn-primary" style="width: 100%; font-size: 10px; padding: 5px 8px; font-weight: 600;">
|
|
557
|
-
🚀 Start Companion Service
|
|
558
|
-
</button>
|
|
559
|
-
</div>
|
|
560
|
-
` : ''}
|
|
561
|
-
<div style="display: flex; align-items: center; justify-content: space-between; width: 100%;">
|
|
562
|
-
<span id="qr-title" style="font-weight: 600; font-size: 11px;">Telegram Bot</span>
|
|
563
|
-
<span id="qr-badge" class="badge badge-live">LIVE</span>
|
|
564
|
-
</div>
|
|
565
|
-
<div id="qr-sub" style="font-size: 9.5px; color: var(--text-muted);">Scan QR to link with @EditorMate_bot</div>
|
|
566
|
-
<img id="qr-image" class="qr-img" src="" alt="Pairing QR Code" />
|
|
567
|
-
<div style="display: flex; gap: 4px; width: 100%;">
|
|
568
|
-
<button id="btn-open-link" class="btn btn-primary" style="flex: 1;">🔗 Open Link</button>
|
|
569
|
-
<button class="btn" style="width: 34px;" onclick="refreshCurrentQr()" title="Refresh QR">🔄</button>
|
|
570
|
-
</div>
|
|
571
|
-
</div>
|
|
572
|
-
|
|
573
|
-
<!-- WhatsApp Multi-Device with Direct Phone Setup + QR Image -->
|
|
574
|
-
<div id="whatsapp-qr-box" class="qr-box" style="display: none; padding: 8px;">
|
|
575
|
-
<div style="display: flex; align-items: center; justify-content: space-between; width: 100%; margin-bottom: 5px;">
|
|
576
|
-
<span style="font-weight: 700; font-size: 11px; color: #25d366;">💬 WhatsApp Direct Chat Line</span>
|
|
577
|
-
<span class="badge badge-live">BAILEYS</span>
|
|
578
|
-
</div>
|
|
579
|
-
|
|
580
|
-
<!-- WhatsApp Direct Phone Number Entry -->
|
|
581
|
-
<div style="width: 100%; margin-bottom: 6px; text-align: left;">
|
|
582
|
-
<div style="font-size: 9px; color: var(--text-muted); line-height: 1.3; margin-bottom: 4px;">
|
|
583
|
-
Enter your WhatsApp number with country code to receive instant greetings & chat directly from your phone:
|
|
584
|
-
</div>
|
|
585
|
-
<div style="display: flex; gap: 4px; align-items: center;">
|
|
586
|
-
<input id="input-wa-target-number" type="text" class="form-input" placeholder="+91 9876543210" value="${data.targetUserWaNumber ? '+' + data.targetUserWaNumber.replace(/^\+/, '') : ''}" style="font-size: 10px; height: 26px; flex: 1;" />
|
|
587
|
-
<button class="btn btn-primary" style="width: 80px; height: 26px; font-size: 9.5px; flex-shrink: 0;" onclick="saveWaTargetNumber()">💾 Save</button>
|
|
588
|
-
</div>
|
|
589
|
-
</div>
|
|
590
|
-
|
|
591
|
-
<!-- Dual-Mode Explainer Box -->
|
|
592
|
-
<div style="background: rgba(0, 0, 0, 0.4); border: 1px solid rgba(37, 211, 102, 0.3); border-radius: 5px; padding: 6px; text-align: left; width: 100%; font-size: 9px; line-height: 1.35; color: var(--text);">
|
|
593
|
-
<div style="color: #25d366; font-weight: 700; margin-bottom: 2px;">Pairing Instructions:</div>
|
|
594
|
-
<div>• Open WhatsApp on your phone ➔ <b>Settings</b> ➔ <b>Linked Devices</b>.</div>
|
|
595
|
-
<div style="margin-top: 2px;">• Tap <b>Link a Device</b> and point camera at the live QR code:</div>
|
|
596
|
-
</div>
|
|
597
|
-
|
|
598
|
-
<!-- Direct Image QR Render -->
|
|
599
|
-
<div style="background: #fff; padding: 6px; border-radius: 8px; display: inline-block; margin: 10px auto;">
|
|
600
|
-
<img
|
|
601
|
-
id="whatsapp-qr-image"
|
|
602
|
-
src="http://127.0.0.1:4588/api/pair/qr?platform=whatsapp"
|
|
603
|
-
alt="WhatsApp Multi-Device QR"
|
|
604
|
-
style="width: 160px; height: 160px; display: block;"
|
|
605
|
-
/>
|
|
606
|
-
</div>
|
|
607
|
-
<div style="display: flex; gap: 6px; width: 100%;">
|
|
608
|
-
<button class="btn btn-primary" style="flex: 1;" onclick="refreshWhatsAppQr()">🔄 Refresh QR Code</button>
|
|
609
|
-
<button class="btn" style="flex: 1;" onclick="vscode.postMessage({command: 'openUrl', url: 'http://127.0.0.1:4588/api/whatsapp/qr'})">🔗 Open in Browser</button>
|
|
610
|
-
</div>
|
|
611
|
-
</div>
|
|
612
|
-
</div>
|
|
613
|
-
|
|
614
|
-
<!-- B. TokenShield-Style Commercial License & 7-Day Trial Card (Below Channels) -->
|
|
615
|
-
<div id="card-license" class="card reorderable-card" data-card-id="card-license">
|
|
616
|
-
<div class="header-row" style="margin-bottom: 8px;">
|
|
617
|
-
<div style="display: flex; align-items: center; gap: 6px;">
|
|
618
|
-
<span class="section-title">🛡️ License & Commercial Entitlement</span>
|
|
619
|
-
<span class="badge ${data.isActivated ? 'badge-live' : 'badge-amber'}">
|
|
620
|
-
${data.isActivated ? 'PRO (LIFETIME)' : '7-DAY TRIAL'}
|
|
621
|
-
</span>
|
|
622
|
-
</div>
|
|
623
|
-
<div class="card-reorder-bar">
|
|
624
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardUp('card-license')" title="Move card up">▲</button>
|
|
625
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardDown('card-license')" title="Move card down">▼</button>
|
|
626
|
-
<span class="drag-handle" title="Drag to reorder card">⠿</span>
|
|
627
|
-
</div>
|
|
628
|
-
</div>
|
|
629
|
-
|
|
630
|
-
${data.isActivated ? `
|
|
631
|
-
<!-- Pro Active Banner -->
|
|
632
|
-
<div class="trial-box" style="border-color: rgba(52, 211, 153, 0.3); background: rgba(52, 211, 153, 0.05);">
|
|
633
|
-
<div style="display: flex; align-items: center; justify-content: space-between;">
|
|
634
|
-
<span style="font-weight: 700; color: var(--emerald); font-size: 11px;">✨ EditorMate Pro Lifetime Active</span>
|
|
635
|
-
<span class="badge badge-live">VERIFIED</span>
|
|
636
|
-
</div>
|
|
637
|
-
<div style="font-size: 9.5px; color: var(--text-muted);">
|
|
638
|
-
Device Seat: <span class="font-mono">${data.deviceSeat}</span>
|
|
639
|
-
</div>
|
|
640
|
-
<div style="font-size: 9.5px; color: var(--text-muted);">
|
|
641
|
-
License Key: <span class="font-mono">${data.licenseKeyMasked || 'EM-PRO-••••••••'}</span>
|
|
642
|
-
</div>
|
|
643
|
-
<div style="margin-top: 4px;">
|
|
644
|
-
<button class="btn btn-deny" onclick="deactivateLicense()">
|
|
645
|
-
🗑️ Remove Key From This Device (Unbind Seat)
|
|
646
|
-
</button>
|
|
647
|
-
</div>
|
|
648
|
-
</div>
|
|
649
|
-
` : `
|
|
650
|
-
<!-- Evaluation & License Activation (Clean & Compact) -->
|
|
651
|
-
<div class="trial-box">
|
|
652
|
-
<div style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 5px;">
|
|
653
|
-
<span style="font-weight: 600; font-size: 10px; color: var(--text);">Evaluation: <span style="color: var(--amber); font-weight: 700;">${trialDays}/7 days left</span></span>
|
|
654
|
-
<span style="font-size: 8.5px; color: var(--text-muted); font-family: monospace;">Seat: ${data.deviceSeat}</span>
|
|
655
|
-
</div>
|
|
656
|
-
<div class="trial-track" style="margin-bottom: 7px;">
|
|
657
|
-
<div class="trial-fill" style="width: ${trialPct}%;"></div>
|
|
658
|
-
</div>
|
|
659
|
-
<div style="display: flex; gap: 4px; align-items: center;">
|
|
660
|
-
<input id="input-license-key" type="text" class="form-input" placeholder="Enter Lifetime Pro Key (EM-PRO-...)" style="font-size: 9.5px; height: 26px;" />
|
|
661
|
-
<button class="btn btn-primary" style="width: 75px; height: 26px; font-size: 9.5px;" onclick="submitLicenseKey()">Activate</button>
|
|
662
|
-
</div>
|
|
663
|
-
<div style="margin-top: 5px; display: flex; justify-content: flex-end;">
|
|
664
|
-
<a href="#" style="font-size: 9px; color: var(--accent); text-decoration: none; font-weight: 600;" onclick="vscode.postMessage({command: 'openUrl', url: 'https://praveenojha.com/editormate#pricing'})">👉 Upgrade to Lifetime Pro ($5) ↗</a>
|
|
665
|
-
</div>
|
|
666
|
-
</div>
|
|
667
|
-
`}
|
|
668
|
-
</div>
|
|
669
|
-
|
|
670
|
-
<!-- C. Processing & Capture Engine Preferences (Below License) -->
|
|
671
|
-
<div id="card-preferences" class="card reorderable-card" data-card-id="card-preferences">
|
|
672
|
-
<div class="header-row" style="margin-bottom: 8px;">
|
|
673
|
-
<div style="display: flex; align-items: center; gap: 6px;">
|
|
674
|
-
<span class="section-title">⚙️ Processing & Capture Engine Preferences</span>
|
|
675
|
-
<span class="badge badge-live">ACTIVE</span>
|
|
676
|
-
</div>
|
|
677
|
-
<div class="card-reorder-bar">
|
|
678
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardUp('card-preferences')" title="Move card up">▲</button>
|
|
679
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardDown('card-preferences')" title="Move card down">▼</button>
|
|
680
|
-
<span class="drag-handle" title="Drag to reorder card">⠿</span>
|
|
681
|
-
</div>
|
|
682
|
-
</div>
|
|
683
|
-
|
|
684
|
-
<div class="settings-switch-list">
|
|
685
|
-
<!-- 1. Audio to Whisper STT -->
|
|
686
|
-
<div class="switch-row">
|
|
687
|
-
<div class="switch-meta">
|
|
688
|
-
<span class="switch-title">🎙️ Audio to Whisper Text</span>
|
|
689
|
-
<span class="switch-desc">Transcribe voice notes & audio clips using Whisper VAD</span>
|
|
690
|
-
</div>
|
|
691
|
-
<label class="toggle-switch">
|
|
692
|
-
<input type="checkbox" id="pref-whisper" ${data.preferences?.sttWhisperEnabled !== false ? 'checked' : ''} onchange="onUpdatePreference('sttWhisperEnabled', this.checked)" />
|
|
693
|
-
<span class="slider"></span>
|
|
694
|
-
</label>
|
|
695
|
-
</div>
|
|
696
|
-
|
|
697
|
-
<!-- 2. LLM Filtering of Whisper Text -->
|
|
698
|
-
<div class="switch-row">
|
|
699
|
-
<div class="switch-meta">
|
|
700
|
-
<span class="switch-title">✨ LLM Filtering of Whisper Text</span>
|
|
701
|
-
<span class="switch-desc">Filter filler words ('um', 'ah', 'like'), stuttering, and hesitations with local LLM</span>
|
|
702
|
-
</div>
|
|
703
|
-
<label class="toggle-switch">
|
|
704
|
-
<input type="checkbox" id="pref-llm-filtering" ${data.preferences?.sttLlmFiltering !== false ? 'checked' : ''} onchange="onUpdatePreference('sttLlmFiltering', this.checked)" />
|
|
705
|
-
<span class="slider"></span>
|
|
706
|
-
</label>
|
|
707
|
-
</div>
|
|
708
|
-
|
|
709
|
-
<!-- 3. Video to Text -->
|
|
710
|
-
<div class="switch-row">
|
|
711
|
-
<div class="switch-meta">
|
|
712
|
-
<span class="switch-title">🎬 Video to Text</span>
|
|
713
|
-
<span class="switch-desc">Extract audio track from video notes and transcribe directly to agent prompt</span>
|
|
714
|
-
</div>
|
|
715
|
-
<label class="toggle-switch">
|
|
716
|
-
<input type="checkbox" id="pref-video-stt" ${data.preferences?.videoToTextEnabled !== false ? 'checked' : ''} onchange="onUpdatePreference('videoToTextEnabled', this.checked)" />
|
|
717
|
-
<span class="slider"></span>
|
|
718
|
-
</label>
|
|
719
|
-
</div>
|
|
720
|
-
|
|
721
|
-
<!-- 4. Attachment Attached As-Is -->
|
|
722
|
-
<div class="switch-row">
|
|
723
|
-
<div class="switch-meta">
|
|
724
|
-
<span class="switch-title">📎 Attachment Attached As-Is</span>
|
|
725
|
-
<span class="switch-desc">Pass documents and files directly into workspace without alteration</span>
|
|
726
|
-
</div>
|
|
727
|
-
<label class="toggle-switch">
|
|
728
|
-
<input type="checkbox" id="pref-raw-attachments" ${data.preferences?.rawAttachmentsPassthrough !== false ? 'checked' : ''} onchange="onUpdatePreference('rawAttachmentsPassthrough', this.checked)" />
|
|
729
|
-
<span class="slider"></span>
|
|
730
|
-
</label>
|
|
731
|
-
</div>
|
|
732
|
-
|
|
733
|
-
<!-- 5. Screenshot Scope (3 Levels) -->
|
|
734
|
-
<div style="margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--border);">
|
|
735
|
-
<div class="switch-meta" style="margin-bottom: 6px;">
|
|
736
|
-
<span class="switch-title">📸 Screenshot Capture Scope (3 Levels)</span>
|
|
737
|
-
<span class="switch-desc">Choose snapshot boundary when capturing via /snap or Remote Deck</span>
|
|
738
|
-
</div>
|
|
739
|
-
<div class="scope-selector-grid">
|
|
740
|
-
<button class="scope-btn ${data.preferences?.screenshotScope === 'ide' || !data.preferences?.screenshotScope ? 'active' : ''}" onclick="onUpdatePreference('screenshotScope', 'ide')">
|
|
741
|
-
<span style="font-size: 14px;">🎯</span>
|
|
742
|
-
<span style="font-weight: 600;">Only IDE</span>
|
|
743
|
-
<span style="font-size: 8px; opacity: 0.7;">Active Editor</span>
|
|
744
|
-
</button>
|
|
745
|
-
<button class="scope-btn ${data.preferences?.screenshotScope === 'window' ? 'active' : ''}" onclick="onUpdatePreference('screenshotScope', 'window')">
|
|
746
|
-
<span style="font-size: 14px;">🪟</span>
|
|
747
|
-
<span style="font-weight: 600;">Active Window</span>
|
|
748
|
-
<span style="font-size: 8px; opacity: 0.7;">Foreground App</span>
|
|
749
|
-
</button>
|
|
750
|
-
<button class="scope-btn ${data.preferences?.screenshotScope === 'screen' ? 'active' : ''}" onclick="onUpdatePreference('screenshotScope', 'screen')">
|
|
751
|
-
<span style="font-size: 14px;">🖥️</span>
|
|
752
|
-
<span style="font-weight: 600;">Whole Screen</span>
|
|
753
|
-
<span style="font-size: 8px; opacity: 0.7;">Full Desktop</span>
|
|
754
|
-
</button>
|
|
755
|
-
</div>
|
|
756
|
-
</div>
|
|
757
|
-
</div>
|
|
758
|
-
</div>
|
|
759
|
-
|
|
760
|
-
<!-- D. Collapsible Discord Community & Channel QR Card -->
|
|
761
|
-
<div id="card-discord" class="card reorderable-card" data-card-id="card-discord">
|
|
762
|
-
<div class="collapsible-header" onclick="toggleDiscordChannelQr()">
|
|
763
|
-
<div style="display: flex; align-items: center; gap: 6px;">
|
|
764
|
-
<span style="font-size: 14px;">💬</span>
|
|
765
|
-
<span style="font-weight: 600; font-size: 11px; color: #818cf8;">Join Discord Community & Channel</span>
|
|
766
|
-
</div>
|
|
767
|
-
<div class="card-reorder-bar">
|
|
768
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardUp('card-discord')" title="Move card up">▲</button>
|
|
769
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardDown('card-discord')" title="Move card down">▼</button>
|
|
770
|
-
<span class="drag-handle" title="Drag to reorder card">⠿</span>
|
|
771
|
-
</div>
|
|
772
|
-
<span id="discord-arrow" class="collapse-arrow">▼</span>
|
|
773
|
-
</div>
|
|
774
|
-
<div id="discord-collapsible-content" class="collapsible-body" style="display: none;">
|
|
775
|
-
<div style="text-align: center; padding: 6px 0;">
|
|
776
|
-
<div style="font-size: 10px; color: var(--text-muted); margin-bottom: 8px;">
|
|
777
|
-
Scan with your phone to join the official EditorMate Discord Channel:
|
|
778
|
-
</div>
|
|
779
|
-
<div style="background: #ffffff; padding: 8px; border-radius: 8px; display: inline-block; box-shadow: 0 4px 14px rgba(0,0,0,0.4);">
|
|
780
|
-
<img
|
|
781
|
-
src="https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=https%3A%2F%2Fdiscord.gg%2FXEJhZ4UaY"
|
|
782
|
-
alt="Discord Channel QR"
|
|
783
|
-
style="width: 120px; height: 120px; display: block; border-radius: 4px;"
|
|
784
|
-
/>
|
|
785
|
-
</div>
|
|
786
|
-
<div style="margin-top: 8px;">
|
|
787
|
-
<button class="btn btn-primary" onclick="vscode.postMessage({command: 'openUrl', url: 'https://discord.gg/XEJhZ4UaY'})">
|
|
788
|
-
🔗 Open Discord Channel (discord.gg/XEJhZ4UaY)
|
|
789
|
-
</button>
|
|
790
|
-
</div>
|
|
791
|
-
</div>
|
|
792
|
-
</div>
|
|
793
|
-
</div>
|
|
794
|
-
|
|
795
|
-
<!-- E. Hardware & Customization Preferences -->
|
|
796
|
-
<div id="card-hardware" class="card reorderable-card" data-card-id="card-hardware">
|
|
797
|
-
<div class="header-row" style="margin-bottom: 6px;">
|
|
798
|
-
<span class="section-title">⚙️ Preferences & Hardware</span>
|
|
799
|
-
<div class="card-reorder-bar">
|
|
800
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardUp('card-hardware')" title="Move card up">▲</button>
|
|
801
|
-
<button class="reorder-btn" onclick="event.stopPropagation(); moveCardDown('card-hardware')" title="Move card down">▼</button>
|
|
802
|
-
<span class="drag-handle" title="Drag to reorder card">⠿</span>
|
|
803
|
-
</div>
|
|
804
|
-
</div>
|
|
805
|
-
<div style="display: flex; flex-direction: column; gap: 6px;">
|
|
806
|
-
<button class="btn" onclick="vscode.postMessage({command: 'renameDevice'})">📱 Rename Client Device</button>
|
|
807
|
-
<button class="btn" onclick="vscode.postMessage({command: 'changeIcon'})">🎨 Change Brand Icon</button>
|
|
808
|
-
<button class="btn" onclick="vscode.postMessage({command: 'viewLogs'})">📋 View Companion Daemon Logs</button>
|
|
809
|
-
</div>
|
|
810
|
-
</div>
|
|
811
|
-
</div>
|
|
812
|
-
|
|
813
|
-
<!-- Footer Copyright Banner -->
|
|
814
|
-
<div class="footer-copyright">
|
|
815
|
-
<div style="font-size: 8.5px; color: var(--text-muted); opacity: 0.85;">
|
|
816
|
-
⚖️ © <strong>Praveen Ojha</strong>
|
|
817
|
-
</div>
|
|
818
|
-
<div style="font-size: 7.5px; color: var(--text-muted); opacity: 0.7; margin-top: 2px;">
|
|
819
|
-
Not to reverse engineer, decompile, or copy.
|
|
820
|
-
</div>
|
|
821
|
-
</div>
|
|
822
|
-
|
|
823
|
-
<!-- Media Lightbox Modal -->
|
|
824
|
-
<div id="media-modal" style="display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.85); z-index: 9999; align-items: center; justify-content: center; padding: 16px;" onclick="closeMediaModal()">
|
|
825
|
-
<div id="media-modal-container" style="max-width: 95%; max-height: 90%; display: flex; align-items: center; justify-content: center;" onclick="event.stopPropagation()"></div>
|
|
826
|
-
<button style="position: absolute; top: 12px; right: 12px; background: rgba(255,255,255,0.2); border: none; color: #fff; font-size: 16px; border-radius: 50%; width: 28px; height: 28px; cursor: pointer;" onclick="closeMediaModal()">✕</button>
|
|
827
|
-
</div>
|
|
828
|
-
</div>
|
|
829
|
-
`;
|
|
830
|
-
}
|