editormate 0.0.0-stage → 1.0.2

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.
Files changed (485) hide show
  1. package/LICENSE.md +31 -0
  2. package/README.md +119 -2
  3. package/bin/cli.js +264 -0
  4. package/dist/adapters/ide/ide_adapters.d.ts +45 -0
  5. package/dist/adapters/ide/ide_adapters.d.ts.map +1 -0
  6. package/dist/adapters/ide/ide_adapters.js +9 -0
  7. package/dist/adapters/ide/ide_adapters.js.map +1 -0
  8. package/dist/adapters/messaging/discord_adapter.d.ts +56 -0
  9. package/dist/adapters/messaging/discord_adapter.d.ts.map +1 -0
  10. package/dist/adapters/messaging/discord_adapter.js +9 -0
  11. package/dist/adapters/messaging/discord_adapter.js.map +1 -0
  12. package/dist/adapters/messaging/discord_menu.d.ts +15 -0
  13. package/dist/adapters/messaging/discord_menu.d.ts.map +1 -0
  14. package/dist/adapters/messaging/discord_menu.js +9 -0
  15. package/dist/adapters/messaging/discord_menu.js.map +1 -0
  16. package/dist/adapters/messaging/matrix_adapter.d.ts +39 -0
  17. package/dist/adapters/messaging/matrix_adapter.d.ts.map +1 -0
  18. package/dist/adapters/messaging/matrix_adapter.js +9 -0
  19. package/dist/adapters/messaging/matrix_adapter.js.map +1 -0
  20. package/dist/adapters/messaging/slack_adapter.d.ts +115 -0
  21. package/dist/adapters/messaging/slack_adapter.d.ts.map +1 -0
  22. package/dist/adapters/messaging/slack_adapter.js +9 -0
  23. package/dist/adapters/messaging/slack_adapter.js.map +1 -0
  24. package/dist/adapters/messaging/telegram_adapter.d.ts +90 -0
  25. package/dist/adapters/messaging/telegram_adapter.d.ts.map +1 -0
  26. package/dist/adapters/messaging/telegram_adapter.js +9 -0
  27. package/dist/adapters/messaging/telegram_adapter.js.map +1 -0
  28. package/dist/adapters/messaging/telegram_client.d.ts +75 -0
  29. package/dist/adapters/messaging/telegram_client.d.ts.map +1 -0
  30. package/dist/adapters/messaging/telegram_client.js +9 -0
  31. package/dist/adapters/messaging/telegram_client.js.map +1 -0
  32. package/dist/adapters/messaging/telegram_keyboards.d.ts +55 -0
  33. package/dist/adapters/messaging/telegram_keyboards.d.ts.map +1 -0
  34. package/dist/adapters/messaging/telegram_keyboards.js +9 -0
  35. package/dist/adapters/messaging/telegram_keyboards.js.map +1 -0
  36. package/dist/adapters/messaging/whatsapp_adapter.d.ts +30 -0
  37. package/dist/adapters/messaging/whatsapp_adapter.d.ts.map +1 -0
  38. package/dist/adapters/messaging/whatsapp_adapter.js +9 -0
  39. package/dist/adapters/messaging/whatsapp_adapter.js.map +1 -0
  40. package/dist/adapters/messaging/whatsapp_baileys.d.ts +84 -0
  41. package/dist/adapters/messaging/whatsapp_baileys.d.ts.map +1 -0
  42. package/dist/adapters/messaging/whatsapp_baileys.js +9 -0
  43. package/dist/adapters/messaging/whatsapp_baileys.js.map +1 -0
  44. package/dist/core/blocking_prompt_bridge.d.ts +99 -0
  45. package/dist/core/blocking_prompt_bridge.d.ts.map +1 -0
  46. package/dist/core/blocking_prompt_bridge.js +9 -0
  47. package/dist/core/blocking_prompt_bridge.js.map +1 -0
  48. package/dist/core/chat_switchboard.d.ts +35 -0
  49. package/dist/core/chat_switchboard.d.ts.map +1 -0
  50. package/dist/core/chat_switchboard.js +9 -0
  51. package/dist/core/chat_switchboard.js.map +1 -0
  52. package/dist/core/companion_daemon.d.ts +23 -0
  53. package/dist/core/companion_daemon.d.ts.map +1 -0
  54. package/dist/core/companion_daemon.js +9 -0
  55. package/dist/core/companion_daemon.js.map +1 -0
  56. package/dist/core/email_reporter.d.ts +109 -0
  57. package/dist/core/email_reporter.d.ts.map +1 -0
  58. package/dist/core/email_reporter.js +9 -0
  59. package/dist/core/email_reporter.js.map +1 -0
  60. package/dist/core/licensing.d.ts +44 -0
  61. package/dist/core/licensing.d.ts.map +1 -0
  62. package/dist/core/licensing.js +9 -0
  63. package/dist/core/licensing.js.map +1 -0
  64. package/dist/core/media_handler.d.ts +67 -0
  65. package/dist/core/media_handler.d.ts.map +1 -0
  66. package/dist/core/media_handler.js +9 -0
  67. package/dist/core/media_handler.js.map +1 -0
  68. package/dist/core/os_keychain.d.ts +41 -0
  69. package/dist/core/os_keychain.d.ts.map +1 -0
  70. package/dist/core/os_keychain.js +9 -0
  71. package/dist/core/os_keychain.js.map +1 -0
  72. package/dist/core/outbound_dispatcher.d.ts +33 -0
  73. package/dist/core/outbound_dispatcher.d.ts.map +1 -0
  74. package/dist/core/outbound_dispatcher.js +9 -0
  75. package/dist/core/outbound_dispatcher.js.map +1 -0
  76. package/dist/core/pdf_generator.d.ts +66 -0
  77. package/dist/core/pdf_generator.d.ts.map +1 -0
  78. package/dist/core/pdf_generator.js +9 -0
  79. package/dist/core/pdf_generator.js.map +1 -0
  80. package/dist/core/process_checker.d.ts +10 -0
  81. package/dist/core/process_checker.d.ts.map +1 -0
  82. package/dist/core/process_checker.js +9 -0
  83. package/dist/core/process_checker.js.map +1 -0
  84. package/dist/core/prompt_sanitizer.d.ts +15 -0
  85. package/dist/core/prompt_sanitizer.d.ts.map +1 -0
  86. package/dist/core/prompt_sanitizer.js +9 -0
  87. package/dist/core/prompt_sanitizer.js.map +1 -0
  88. package/dist/core/security.d.ts +75 -0
  89. package/dist/core/security.d.ts.map +1 -0
  90. package/dist/core/security.js +9 -0
  91. package/dist/core/security.js.map +1 -0
  92. package/dist/core/session_manager.d.ts +67 -0
  93. package/dist/core/session_manager.d.ts.map +1 -0
  94. package/dist/core/session_manager.js +9 -0
  95. package/dist/core/session_manager.js.map +1 -0
  96. package/dist/core/standalone_dashboard/client_script.d.ts +5 -0
  97. package/dist/core/standalone_dashboard/client_script.d.ts.map +1 -0
  98. package/dist/core/standalone_dashboard/client_script.js +9 -0
  99. package/dist/core/standalone_dashboard/client_script.js.map +1 -0
  100. package/dist/core/standalone_dashboard/components/header.d.ts +5 -0
  101. package/dist/core/standalone_dashboard/components/header.d.ts.map +1 -0
  102. package/dist/core/standalone_dashboard/components/header.js +9 -0
  103. package/dist/core/standalone_dashboard/components/header.js.map +1 -0
  104. package/dist/core/standalone_dashboard/components/modals.d.ts +5 -0
  105. package/dist/core/standalone_dashboard/components/modals.d.ts.map +1 -0
  106. package/dist/core/standalone_dashboard/components/modals.js +9 -0
  107. package/dist/core/standalone_dashboard/components/modals.js.map +1 -0
  108. package/dist/core/standalone_dashboard/components/remote_deck.d.ts +5 -0
  109. package/dist/core/standalone_dashboard/components/remote_deck.d.ts.map +1 -0
  110. package/dist/core/standalone_dashboard/components/remote_deck.js +9 -0
  111. package/dist/core/standalone_dashboard/components/remote_deck.js.map +1 -0
  112. package/dist/core/standalone_dashboard/components/settings_deck.d.ts +5 -0
  113. package/dist/core/standalone_dashboard/components/settings_deck.d.ts.map +1 -0
  114. package/dist/core/standalone_dashboard/components/settings_deck.js +9 -0
  115. package/dist/core/standalone_dashboard/components/settings_deck.js.map +1 -0
  116. package/dist/core/standalone_dashboard/index.d.ts +13 -0
  117. package/dist/core/standalone_dashboard/index.d.ts.map +1 -0
  118. package/dist/core/standalone_dashboard/index.js +9 -0
  119. package/dist/core/standalone_dashboard/index.js.map +1 -0
  120. package/dist/core/standalone_dashboard/styles.d.ts +6 -0
  121. package/dist/core/standalone_dashboard/styles.d.ts.map +1 -0
  122. package/dist/core/standalone_dashboard/styles.js +9 -0
  123. package/dist/core/standalone_dashboard/styles.js.map +1 -0
  124. package/dist/core/standalone_dashboard.d.ts +6 -0
  125. package/dist/core/standalone_dashboard.d.ts.map +1 -0
  126. package/dist/core/standalone_dashboard.js +9 -0
  127. package/dist/core/standalone_dashboard.js.map +1 -0
  128. package/dist/core/telemetry.d.ts +62 -0
  129. package/dist/core/telemetry.d.ts.map +1 -0
  130. package/dist/core/telemetry.js +9 -0
  131. package/dist/core/telemetry.js.map +1 -0
  132. package/dist/core/transcript_watcher.d.ts +23 -0
  133. package/dist/core/transcript_watcher.d.ts.map +1 -0
  134. package/dist/core/transcript_watcher.js +9 -0
  135. package/dist/core/transcript_watcher.js.map +1 -0
  136. package/dist/core/transcription_refiner.d.ts +34 -0
  137. package/dist/core/transcription_refiner.d.ts.map +1 -0
  138. package/dist/core/transcription_refiner.js +9 -0
  139. package/dist/core/transcription_refiner.js.map +1 -0
  140. package/dist/core/tui_dashboard.d.ts +8 -0
  141. package/dist/core/tui_dashboard.d.ts.map +1 -0
  142. package/dist/core/tui_dashboard.js +9 -0
  143. package/dist/core/tui_dashboard.js.map +1 -0
  144. package/dist/index.d.ts +15 -0
  145. package/dist/index.d.ts.map +1 -0
  146. package/dist/index.js +9 -0
  147. package/dist/index.js.map +1 -0
  148. package/dist/types.d.ts +159 -0
  149. package/dist/types.d.ts.map +1 -0
  150. package/dist/types.js +9 -0
  151. package/dist/types.js.map +1 -0
  152. package/extension/.vscodeignore +4 -0
  153. package/extension/LICENSE.md +31 -0
  154. package/extension/README.md +55 -0
  155. package/extension/assets/icon.png +0 -0
  156. package/extension/assets/icon.svg +16 -0
  157. package/extension/bin/cli.js +264 -0
  158. package/extension/bin/package.json +3 -0
  159. package/extension/daemon/adapters/ide/ide_adapters.d.ts +45 -0
  160. package/extension/daemon/adapters/ide/ide_adapters.d.ts.map +1 -0
  161. package/extension/daemon/adapters/ide/ide_adapters.js +9 -0
  162. package/extension/daemon/adapters/ide/ide_adapters.js.map +1 -0
  163. package/extension/daemon/adapters/messaging/discord_adapter.d.ts +56 -0
  164. package/extension/daemon/adapters/messaging/discord_adapter.d.ts.map +1 -0
  165. package/extension/daemon/adapters/messaging/discord_adapter.js +9 -0
  166. package/extension/daemon/adapters/messaging/discord_adapter.js.map +1 -0
  167. package/extension/daemon/adapters/messaging/discord_menu.d.ts +15 -0
  168. package/extension/daemon/adapters/messaging/discord_menu.d.ts.map +1 -0
  169. package/extension/daemon/adapters/messaging/discord_menu.js +9 -0
  170. package/extension/daemon/adapters/messaging/discord_menu.js.map +1 -0
  171. package/extension/daemon/adapters/messaging/matrix_adapter.d.ts +39 -0
  172. package/extension/daemon/adapters/messaging/matrix_adapter.d.ts.map +1 -0
  173. package/extension/daemon/adapters/messaging/matrix_adapter.js +9 -0
  174. package/extension/daemon/adapters/messaging/matrix_adapter.js.map +1 -0
  175. package/extension/daemon/adapters/messaging/slack_adapter.d.ts +115 -0
  176. package/extension/daemon/adapters/messaging/slack_adapter.d.ts.map +1 -0
  177. package/extension/daemon/adapters/messaging/slack_adapter.js +9 -0
  178. package/extension/daemon/adapters/messaging/slack_adapter.js.map +1 -0
  179. package/extension/daemon/adapters/messaging/telegram_adapter.d.ts +90 -0
  180. package/extension/daemon/adapters/messaging/telegram_adapter.d.ts.map +1 -0
  181. package/extension/daemon/adapters/messaging/telegram_adapter.js +9 -0
  182. package/extension/daemon/adapters/messaging/telegram_adapter.js.map +1 -0
  183. package/extension/daemon/adapters/messaging/telegram_client.d.ts +75 -0
  184. package/extension/daemon/adapters/messaging/telegram_client.d.ts.map +1 -0
  185. package/extension/daemon/adapters/messaging/telegram_client.js +9 -0
  186. package/extension/daemon/adapters/messaging/telegram_client.js.map +1 -0
  187. package/extension/daemon/adapters/messaging/telegram_keyboards.d.ts +55 -0
  188. package/extension/daemon/adapters/messaging/telegram_keyboards.d.ts.map +1 -0
  189. package/extension/daemon/adapters/messaging/telegram_keyboards.js +9 -0
  190. package/extension/daemon/adapters/messaging/telegram_keyboards.js.map +1 -0
  191. package/extension/daemon/adapters/messaging/whatsapp_adapter.d.ts +30 -0
  192. package/extension/daemon/adapters/messaging/whatsapp_adapter.d.ts.map +1 -0
  193. package/extension/daemon/adapters/messaging/whatsapp_adapter.js +9 -0
  194. package/extension/daemon/adapters/messaging/whatsapp_adapter.js.map +1 -0
  195. package/extension/daemon/adapters/messaging/whatsapp_baileys.d.ts +84 -0
  196. package/extension/daemon/adapters/messaging/whatsapp_baileys.d.ts.map +1 -0
  197. package/extension/daemon/adapters/messaging/whatsapp_baileys.js +9 -0
  198. package/extension/daemon/adapters/messaging/whatsapp_baileys.js.map +1 -0
  199. package/extension/daemon/core/blocking_prompt_bridge.d.ts +99 -0
  200. package/extension/daemon/core/blocking_prompt_bridge.d.ts.map +1 -0
  201. package/extension/daemon/core/blocking_prompt_bridge.js +9 -0
  202. package/extension/daemon/core/blocking_prompt_bridge.js.map +1 -0
  203. package/extension/daemon/core/chat_switchboard.d.ts +35 -0
  204. package/extension/daemon/core/chat_switchboard.d.ts.map +1 -0
  205. package/extension/daemon/core/chat_switchboard.js +9 -0
  206. package/extension/daemon/core/chat_switchboard.js.map +1 -0
  207. package/extension/daemon/core/companion_daemon.d.ts +23 -0
  208. package/extension/daemon/core/companion_daemon.d.ts.map +1 -0
  209. package/extension/daemon/core/companion_daemon.js +9 -0
  210. package/extension/daemon/core/companion_daemon.js.map +1 -0
  211. package/extension/daemon/core/email_reporter.d.ts +109 -0
  212. package/extension/daemon/core/email_reporter.d.ts.map +1 -0
  213. package/extension/daemon/core/email_reporter.js +9 -0
  214. package/extension/daemon/core/email_reporter.js.map +1 -0
  215. package/extension/daemon/core/licensing.d.ts +44 -0
  216. package/extension/daemon/core/licensing.d.ts.map +1 -0
  217. package/extension/daemon/core/licensing.js +9 -0
  218. package/extension/daemon/core/licensing.js.map +1 -0
  219. package/extension/daemon/core/media_handler.d.ts +67 -0
  220. package/extension/daemon/core/media_handler.d.ts.map +1 -0
  221. package/extension/daemon/core/media_handler.js +9 -0
  222. package/extension/daemon/core/media_handler.js.map +1 -0
  223. package/extension/daemon/core/os_keychain.d.ts +41 -0
  224. package/extension/daemon/core/os_keychain.d.ts.map +1 -0
  225. package/extension/daemon/core/os_keychain.js +9 -0
  226. package/extension/daemon/core/os_keychain.js.map +1 -0
  227. package/extension/daemon/core/outbound_dispatcher.d.ts +33 -0
  228. package/extension/daemon/core/outbound_dispatcher.d.ts.map +1 -0
  229. package/extension/daemon/core/outbound_dispatcher.js +9 -0
  230. package/extension/daemon/core/outbound_dispatcher.js.map +1 -0
  231. package/extension/daemon/core/pdf_generator.d.ts +66 -0
  232. package/extension/daemon/core/pdf_generator.d.ts.map +1 -0
  233. package/extension/daemon/core/pdf_generator.js +9 -0
  234. package/extension/daemon/core/pdf_generator.js.map +1 -0
  235. package/extension/daemon/core/process_checker.d.ts +10 -0
  236. package/extension/daemon/core/process_checker.d.ts.map +1 -0
  237. package/extension/daemon/core/process_checker.js +9 -0
  238. package/extension/daemon/core/process_checker.js.map +1 -0
  239. package/extension/daemon/core/prompt_sanitizer.d.ts +15 -0
  240. package/extension/daemon/core/prompt_sanitizer.d.ts.map +1 -0
  241. package/extension/daemon/core/prompt_sanitizer.js +9 -0
  242. package/extension/daemon/core/prompt_sanitizer.js.map +1 -0
  243. package/extension/daemon/core/security.d.ts +75 -0
  244. package/extension/daemon/core/security.d.ts.map +1 -0
  245. package/extension/daemon/core/security.js +9 -0
  246. package/extension/daemon/core/security.js.map +1 -0
  247. package/extension/daemon/core/session_manager.d.ts +67 -0
  248. package/extension/daemon/core/session_manager.d.ts.map +1 -0
  249. package/extension/daemon/core/session_manager.js +9 -0
  250. package/extension/daemon/core/session_manager.js.map +1 -0
  251. package/extension/daemon/core/standalone_dashboard/client_script.d.ts +5 -0
  252. package/extension/daemon/core/standalone_dashboard/client_script.d.ts.map +1 -0
  253. package/extension/daemon/core/standalone_dashboard/client_script.js +9 -0
  254. package/extension/daemon/core/standalone_dashboard/client_script.js.map +1 -0
  255. package/extension/daemon/core/standalone_dashboard/components/header.d.ts +5 -0
  256. package/extension/daemon/core/standalone_dashboard/components/header.d.ts.map +1 -0
  257. package/extension/daemon/core/standalone_dashboard/components/header.js +9 -0
  258. package/extension/daemon/core/standalone_dashboard/components/header.js.map +1 -0
  259. package/extension/daemon/core/standalone_dashboard/components/modals.d.ts +5 -0
  260. package/extension/daemon/core/standalone_dashboard/components/modals.d.ts.map +1 -0
  261. package/extension/daemon/core/standalone_dashboard/components/modals.js +9 -0
  262. package/extension/daemon/core/standalone_dashboard/components/modals.js.map +1 -0
  263. package/extension/daemon/core/standalone_dashboard/components/remote_deck.d.ts +5 -0
  264. package/extension/daemon/core/standalone_dashboard/components/remote_deck.d.ts.map +1 -0
  265. package/extension/daemon/core/standalone_dashboard/components/remote_deck.js +9 -0
  266. package/extension/daemon/core/standalone_dashboard/components/remote_deck.js.map +1 -0
  267. package/extension/daemon/core/standalone_dashboard/components/settings_deck.d.ts +5 -0
  268. package/extension/daemon/core/standalone_dashboard/components/settings_deck.d.ts.map +1 -0
  269. package/extension/daemon/core/standalone_dashboard/components/settings_deck.js +9 -0
  270. package/extension/daemon/core/standalone_dashboard/components/settings_deck.js.map +1 -0
  271. package/extension/daemon/core/standalone_dashboard/index.d.ts +13 -0
  272. package/extension/daemon/core/standalone_dashboard/index.d.ts.map +1 -0
  273. package/extension/daemon/core/standalone_dashboard/index.js +9 -0
  274. package/extension/daemon/core/standalone_dashboard/index.js.map +1 -0
  275. package/extension/daemon/core/standalone_dashboard/styles.d.ts +6 -0
  276. package/extension/daemon/core/standalone_dashboard/styles.d.ts.map +1 -0
  277. package/extension/daemon/core/standalone_dashboard/styles.js +9 -0
  278. package/extension/daemon/core/standalone_dashboard/styles.js.map +1 -0
  279. package/extension/daemon/core/standalone_dashboard.d.ts +6 -0
  280. package/extension/daemon/core/standalone_dashboard.d.ts.map +1 -0
  281. package/extension/daemon/core/standalone_dashboard.js +9 -0
  282. package/extension/daemon/core/standalone_dashboard.js.map +1 -0
  283. package/extension/daemon/core/telemetry.d.ts +62 -0
  284. package/extension/daemon/core/telemetry.d.ts.map +1 -0
  285. package/extension/daemon/core/telemetry.js +9 -0
  286. package/extension/daemon/core/telemetry.js.map +1 -0
  287. package/extension/daemon/core/transcript_watcher.d.ts +23 -0
  288. package/extension/daemon/core/transcript_watcher.d.ts.map +1 -0
  289. package/extension/daemon/core/transcript_watcher.js +9 -0
  290. package/extension/daemon/core/transcript_watcher.js.map +1 -0
  291. package/extension/daemon/core/transcription_refiner.d.ts +34 -0
  292. package/extension/daemon/core/transcription_refiner.d.ts.map +1 -0
  293. package/extension/daemon/core/transcription_refiner.js +9 -0
  294. package/extension/daemon/core/transcription_refiner.js.map +1 -0
  295. package/extension/daemon/core/tui_dashboard.d.ts +8 -0
  296. package/extension/daemon/core/tui_dashboard.d.ts.map +1 -0
  297. package/extension/daemon/core/tui_dashboard.js +9 -0
  298. package/extension/daemon/core/tui_dashboard.js.map +1 -0
  299. package/extension/daemon/index.d.ts +15 -0
  300. package/extension/daemon/index.d.ts.map +1 -0
  301. package/extension/daemon/index.js +9 -0
  302. package/extension/daemon/index.js.map +1 -0
  303. package/extension/daemon/types.d.ts +159 -0
  304. package/extension/daemon/types.d.ts.map +1 -0
  305. package/extension/daemon/types.js +9 -0
  306. package/extension/daemon/types.js.map +1 -0
  307. package/extension/dist/adapters/ide/ide_adapters.d.ts +45 -0
  308. package/extension/dist/adapters/ide/ide_adapters.d.ts.map +1 -0
  309. package/extension/dist/adapters/ide/ide_adapters.js +9 -0
  310. package/extension/dist/adapters/ide/ide_adapters.js.map +1 -0
  311. package/extension/dist/adapters/messaging/discord_adapter.d.ts +56 -0
  312. package/extension/dist/adapters/messaging/discord_adapter.d.ts.map +1 -0
  313. package/extension/dist/adapters/messaging/discord_adapter.js +9 -0
  314. package/extension/dist/adapters/messaging/discord_adapter.js.map +1 -0
  315. package/extension/dist/adapters/messaging/discord_menu.d.ts +15 -0
  316. package/extension/dist/adapters/messaging/discord_menu.d.ts.map +1 -0
  317. package/extension/dist/adapters/messaging/discord_menu.js +9 -0
  318. package/extension/dist/adapters/messaging/discord_menu.js.map +1 -0
  319. package/extension/dist/adapters/messaging/matrix_adapter.d.ts +39 -0
  320. package/extension/dist/adapters/messaging/matrix_adapter.d.ts.map +1 -0
  321. package/extension/dist/adapters/messaging/matrix_adapter.js +9 -0
  322. package/extension/dist/adapters/messaging/matrix_adapter.js.map +1 -0
  323. package/extension/dist/adapters/messaging/slack_adapter.d.ts +115 -0
  324. package/extension/dist/adapters/messaging/slack_adapter.d.ts.map +1 -0
  325. package/extension/dist/adapters/messaging/slack_adapter.js +9 -0
  326. package/extension/dist/adapters/messaging/slack_adapter.js.map +1 -0
  327. package/extension/dist/adapters/messaging/telegram_adapter.d.ts +90 -0
  328. package/extension/dist/adapters/messaging/telegram_adapter.d.ts.map +1 -0
  329. package/extension/dist/adapters/messaging/telegram_adapter.js +9 -0
  330. package/extension/dist/adapters/messaging/telegram_adapter.js.map +1 -0
  331. package/extension/dist/adapters/messaging/telegram_client.d.ts +75 -0
  332. package/extension/dist/adapters/messaging/telegram_client.d.ts.map +1 -0
  333. package/extension/dist/adapters/messaging/telegram_client.js +9 -0
  334. package/extension/dist/adapters/messaging/telegram_client.js.map +1 -0
  335. package/extension/dist/adapters/messaging/telegram_keyboards.d.ts +55 -0
  336. package/extension/dist/adapters/messaging/telegram_keyboards.d.ts.map +1 -0
  337. package/extension/dist/adapters/messaging/telegram_keyboards.js +9 -0
  338. package/extension/dist/adapters/messaging/telegram_keyboards.js.map +1 -0
  339. package/extension/dist/adapters/messaging/whatsapp_adapter.d.ts +30 -0
  340. package/extension/dist/adapters/messaging/whatsapp_adapter.d.ts.map +1 -0
  341. package/extension/dist/adapters/messaging/whatsapp_adapter.js +9 -0
  342. package/extension/dist/adapters/messaging/whatsapp_adapter.js.map +1 -0
  343. package/extension/dist/adapters/messaging/whatsapp_baileys.d.ts +84 -0
  344. package/extension/dist/adapters/messaging/whatsapp_baileys.d.ts.map +1 -0
  345. package/extension/dist/adapters/messaging/whatsapp_baileys.js +9 -0
  346. package/extension/dist/adapters/messaging/whatsapp_baileys.js.map +1 -0
  347. package/extension/dist/adapters/package.json +3 -0
  348. package/extension/dist/command_guard.js +9 -0
  349. package/extension/dist/commands_manager.js +9 -0
  350. package/extension/dist/core/blocking_prompt_bridge.d.ts +99 -0
  351. package/extension/dist/core/blocking_prompt_bridge.d.ts.map +1 -0
  352. package/extension/dist/core/blocking_prompt_bridge.js +9 -0
  353. package/extension/dist/core/blocking_prompt_bridge.js.map +1 -0
  354. package/extension/dist/core/chat_switchboard.d.ts +35 -0
  355. package/extension/dist/core/chat_switchboard.d.ts.map +1 -0
  356. package/extension/dist/core/chat_switchboard.js +9 -0
  357. package/extension/dist/core/chat_switchboard.js.map +1 -0
  358. package/extension/dist/core/companion_daemon.d.ts +23 -0
  359. package/extension/dist/core/companion_daemon.d.ts.map +1 -0
  360. package/extension/dist/core/companion_daemon.js +9 -0
  361. package/extension/dist/core/companion_daemon.js.map +1 -0
  362. package/extension/dist/core/email_reporter.d.ts +109 -0
  363. package/extension/dist/core/email_reporter.d.ts.map +1 -0
  364. package/extension/dist/core/email_reporter.js +9 -0
  365. package/extension/dist/core/email_reporter.js.map +1 -0
  366. package/extension/dist/core/licensing.d.ts +44 -0
  367. package/extension/dist/core/licensing.d.ts.map +1 -0
  368. package/extension/dist/core/licensing.js +9 -0
  369. package/extension/dist/core/licensing.js.map +1 -0
  370. package/extension/dist/core/media_handler.d.ts +67 -0
  371. package/extension/dist/core/media_handler.d.ts.map +1 -0
  372. package/extension/dist/core/media_handler.js +9 -0
  373. package/extension/dist/core/media_handler.js.map +1 -0
  374. package/extension/dist/core/os_keychain.d.ts +41 -0
  375. package/extension/dist/core/os_keychain.d.ts.map +1 -0
  376. package/extension/dist/core/os_keychain.js +9 -0
  377. package/extension/dist/core/os_keychain.js.map +1 -0
  378. package/extension/dist/core/outbound_dispatcher.d.ts +33 -0
  379. package/extension/dist/core/outbound_dispatcher.d.ts.map +1 -0
  380. package/extension/dist/core/outbound_dispatcher.js +9 -0
  381. package/extension/dist/core/outbound_dispatcher.js.map +1 -0
  382. package/extension/dist/core/package.json +3 -0
  383. package/extension/dist/core/pdf_generator.d.ts +66 -0
  384. package/extension/dist/core/pdf_generator.d.ts.map +1 -0
  385. package/extension/dist/core/pdf_generator.js +9 -0
  386. package/extension/dist/core/pdf_generator.js.map +1 -0
  387. package/extension/dist/core/process_checker.d.ts +10 -0
  388. package/extension/dist/core/process_checker.d.ts.map +1 -0
  389. package/extension/dist/core/process_checker.js +9 -0
  390. package/extension/dist/core/process_checker.js.map +1 -0
  391. package/extension/dist/core/prompt_sanitizer.d.ts +15 -0
  392. package/extension/dist/core/prompt_sanitizer.d.ts.map +1 -0
  393. package/extension/dist/core/prompt_sanitizer.js +9 -0
  394. package/extension/dist/core/prompt_sanitizer.js.map +1 -0
  395. package/extension/dist/core/security.d.ts +75 -0
  396. package/extension/dist/core/security.d.ts.map +1 -0
  397. package/extension/dist/core/security.js +9 -0
  398. package/extension/dist/core/security.js.map +1 -0
  399. package/extension/dist/core/session_manager.d.ts +67 -0
  400. package/extension/dist/core/session_manager.d.ts.map +1 -0
  401. package/extension/dist/core/session_manager.js +9 -0
  402. package/extension/dist/core/session_manager.js.map +1 -0
  403. package/extension/dist/core/standalone_dashboard/client_script.d.ts +5 -0
  404. package/extension/dist/core/standalone_dashboard/client_script.d.ts.map +1 -0
  405. package/extension/dist/core/standalone_dashboard/client_script.js +9 -0
  406. package/extension/dist/core/standalone_dashboard/client_script.js.map +1 -0
  407. package/extension/dist/core/standalone_dashboard/components/header.d.ts +5 -0
  408. package/extension/dist/core/standalone_dashboard/components/header.d.ts.map +1 -0
  409. package/extension/dist/core/standalone_dashboard/components/header.js +9 -0
  410. package/extension/dist/core/standalone_dashboard/components/header.js.map +1 -0
  411. package/extension/dist/core/standalone_dashboard/components/modals.d.ts +5 -0
  412. package/extension/dist/core/standalone_dashboard/components/modals.d.ts.map +1 -0
  413. package/extension/dist/core/standalone_dashboard/components/modals.js +9 -0
  414. package/extension/dist/core/standalone_dashboard/components/modals.js.map +1 -0
  415. package/extension/dist/core/standalone_dashboard/components/remote_deck.d.ts +5 -0
  416. package/extension/dist/core/standalone_dashboard/components/remote_deck.d.ts.map +1 -0
  417. package/extension/dist/core/standalone_dashboard/components/remote_deck.js +9 -0
  418. package/extension/dist/core/standalone_dashboard/components/remote_deck.js.map +1 -0
  419. package/extension/dist/core/standalone_dashboard/components/settings_deck.d.ts +5 -0
  420. package/extension/dist/core/standalone_dashboard/components/settings_deck.d.ts.map +1 -0
  421. package/extension/dist/core/standalone_dashboard/components/settings_deck.js +9 -0
  422. package/extension/dist/core/standalone_dashboard/components/settings_deck.js.map +1 -0
  423. package/extension/dist/core/standalone_dashboard/index.d.ts +13 -0
  424. package/extension/dist/core/standalone_dashboard/index.d.ts.map +1 -0
  425. package/extension/dist/core/standalone_dashboard/index.js +9 -0
  426. package/extension/dist/core/standalone_dashboard/index.js.map +1 -0
  427. package/extension/dist/core/standalone_dashboard/styles.d.ts +6 -0
  428. package/extension/dist/core/standalone_dashboard/styles.d.ts.map +1 -0
  429. package/extension/dist/core/standalone_dashboard/styles.js +9 -0
  430. package/extension/dist/core/standalone_dashboard/styles.js.map +1 -0
  431. package/extension/dist/core/standalone_dashboard.d.ts +6 -0
  432. package/extension/dist/core/standalone_dashboard.d.ts.map +1 -0
  433. package/extension/dist/core/standalone_dashboard.js +9 -0
  434. package/extension/dist/core/standalone_dashboard.js.map +1 -0
  435. package/extension/dist/core/telemetry.d.ts +62 -0
  436. package/extension/dist/core/telemetry.d.ts.map +1 -0
  437. package/extension/dist/core/telemetry.js +9 -0
  438. package/extension/dist/core/telemetry.js.map +1 -0
  439. package/extension/dist/core/transcript_watcher.d.ts +23 -0
  440. package/extension/dist/core/transcript_watcher.d.ts.map +1 -0
  441. package/extension/dist/core/transcript_watcher.js +9 -0
  442. package/extension/dist/core/transcript_watcher.js.map +1 -0
  443. package/extension/dist/core/transcription_refiner.d.ts +34 -0
  444. package/extension/dist/core/transcription_refiner.d.ts.map +1 -0
  445. package/extension/dist/core/transcription_refiner.js +9 -0
  446. package/extension/dist/core/transcription_refiner.js.map +1 -0
  447. package/extension/dist/core/tui_dashboard.d.ts +8 -0
  448. package/extension/dist/core/tui_dashboard.d.ts.map +1 -0
  449. package/extension/dist/core/tui_dashboard.js +9 -0
  450. package/extension/dist/core/tui_dashboard.js.map +1 -0
  451. package/extension/dist/extension.js +9 -0
  452. package/extension/dist/ide_detector.js +9 -0
  453. package/extension/dist/index.js +9 -0
  454. package/extension/dist/remote_actions.js +9 -0
  455. package/extension/dist/sidebar_provider.js +9 -0
  456. package/extension/dist/types.js +9 -0
  457. package/extension/dist/webview/webview_html.js +830 -0
  458. package/extension/dist/webview/webview_scripts.js +701 -0
  459. package/extension/dist/webview/webview_styles.js +1075 -0
  460. package/extension/dist/webview_template.js +9 -0
  461. package/extension/editormate-1.0.0.vsix +0 -0
  462. package/extension/editormate-1.0.1.vsix +0 -0
  463. package/extension/editormate-1.0.2.vsix +0 -0
  464. package/extension/editormate-companion-1.0.0.vsix +0 -0
  465. package/extension/node_modules/.package-lock.json +15 -0
  466. package/extension/node_modules/@types/vscode/LICENSE +21 -0
  467. package/extension/node_modules/@types/vscode/README.md +15 -0
  468. package/extension/node_modules/@types/vscode/index.d.ts +21244 -0
  469. package/extension/node_modules/@types/vscode/package.json +26 -0
  470. package/extension/package-lock.json +25 -0
  471. package/extension/package.json +154 -0
  472. package/extension/scripts/build_protected.js +88 -0
  473. package/extension/scripts/transcribe_audio.py +42 -0
  474. package/extension/src/command_guard.ts +201 -0
  475. package/extension/src/commands_manager.ts +466 -0
  476. package/extension/src/extension.ts +458 -0
  477. package/extension/src/ide_detector.ts +60 -0
  478. package/extension/src/remote_actions.ts +284 -0
  479. package/extension/src/sidebar_provider.ts +471 -0
  480. package/extension/src/webview/webview_html.ts +895 -0
  481. package/extension/src/webview/webview_scripts.ts +698 -0
  482. package/extension/src/webview/webview_styles.ts +1073 -0
  483. package/extension/src/webview_template.ts +33 -0
  484. package/extension/tsconfig.json +16 -0
  485. package/package.json +52 -3
@@ -0,0 +1,701 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getWebviewClientScripts = getWebviewClientScripts;
4
+ function getWebviewClientScripts(channelDataJson, initialTab = 'dashboard', initialMessagesJson = '[]') {
5
+ return `
6
+ const vscode = acquireVsCodeApi();
7
+ const channels = ${channelDataJson};
8
+ let allRecentMessages = ${initialMessagesJson};
9
+ const savedState = vscode.getState() || {};
10
+ let currentMainTab = savedState.currentMainTab || '${initialTab}';
11
+ let currentPlatform = savedState.currentPlatform || 'telegram';
12
+ let isDiscordChannelOpen = false;
13
+ let selectedSlotIndex = 1;
14
+ let currentEditType = 'slot';
15
+ let currentEditTargetCmd = '';
16
+
17
+ // --- Tab Switching & Top Cog Persistence ---
18
+ function switchMainTab(tabName) {
19
+ currentMainTab = tabName;
20
+ vscode.setState({ ...(vscode.getState() || {}), currentMainTab: tabName });
21
+ vscode.postMessage({ command: 'setMainTab', tab: tabName });
22
+
23
+ const dashboardTab = document.getElementById('tab-content-dashboard');
24
+ const settingsTab = document.getElementById('tab-content-settings');
25
+ const topCog = document.getElementById('top-cog-btn');
26
+
27
+ if (tabName === 'settings') {
28
+ if (dashboardTab) dashboardTab.classList.remove('active');
29
+ if (settingsTab) settingsTab.classList.add('active');
30
+ if (topCog) {
31
+ topCog.classList.add('active');
32
+ topCog.innerText = '✕';
33
+ topCog.title = 'Close Settings (Back to Remote Deck)';
34
+ }
35
+ } else {
36
+ if (settingsTab) settingsTab.classList.remove('active');
37
+ if (dashboardTab) dashboardTab.classList.add('active');
38
+ if (topCog) {
39
+ topCog.classList.remove('active');
40
+ topCog.innerText = '⚙️';
41
+ topCog.title = 'Settings & Channels';
42
+ }
43
+ }
44
+ }
45
+
46
+ function toggleSettingsTab() {
47
+ if (currentMainTab === 'settings') {
48
+ switchMainTab('dashboard');
49
+ } else {
50
+ switchMainTab('settings');
51
+ }
52
+ }
53
+
54
+ // --- Collapsible Cards (Device, Guard, Commands, Screen, Settings) ---
55
+ function toggleCard(bodyId, arrowId) {
56
+ const body = document.getElementById(bodyId);
57
+ const arrow = document.getElementById(arrowId);
58
+ if (!body) return;
59
+ const isClosed = body.style.display === 'none';
60
+ body.style.display = isClosed ? 'block' : 'none';
61
+ if (arrow) {
62
+ arrow.classList.toggle('open', isClosed);
63
+ }
64
+ const collapseBtn = document.getElementById('collapse-btn-' + bodyId);
65
+ if (collapseBtn) {
66
+ collapseBtn.innerText = isClosed ? '▴ Collapse' : '▾ Expand';
67
+ }
68
+ }
69
+
70
+ // --- Dynamic Inline Alias Quick-Add & Chip Removal ---
71
+ function toggleInlineAliasDrawer(cmdCleanId) {
72
+ const drawer = document.getElementById('alias-drawer-' + cmdCleanId);
73
+ if (!drawer) return;
74
+ const isHidden = drawer.style.display === 'none' || !drawer.style.display;
75
+ drawer.style.display = isHidden ? 'block' : 'none';
76
+ if (isHidden) {
77
+ const inp = document.getElementById('input-alias-' + cmdCleanId);
78
+ if (inp) inp.focus();
79
+ }
80
+ }
81
+
82
+ function saveInlineAlias(targetCommand, cmdCleanId) {
83
+ const input = document.getElementById('input-alias-' + cmdCleanId);
84
+ if (!input) return;
85
+ const alias = input.value.trim().replace(/^\\//, '');
86
+ if (!alias) {
87
+ alert('Please specify an alias name (without slash)');
88
+ return;
89
+ }
90
+ vscode.postMessage({
91
+ command: 'addAlias',
92
+ alias: alias,
93
+ targetCommand: targetCommand
94
+ });
95
+ input.value = '';
96
+ toggleInlineAliasDrawer(cmdCleanId);
97
+ }
98
+
99
+ function removeAlias(alias) {
100
+ if (!alias) return;
101
+ vscode.postMessage({
102
+ command: 'deleteAlias',
103
+ alias: alias
104
+ });
105
+ }
106
+
107
+ let isEditMode = false;
108
+ let draggedCard = null;
109
+
110
+ // --- Edit Mode & Card Reordering ---
111
+ function toggleEditMode() {
112
+ isEditMode = !isEditMode;
113
+ const container = document.getElementById('main-container') || document.querySelector('.container');
114
+ const editBtn = document.getElementById('top-edit-btn');
115
+ if (container) {
116
+ container.classList.toggle('is-edit-mode', isEditMode);
117
+ }
118
+ if (editBtn) {
119
+ editBtn.classList.toggle('active', isEditMode);
120
+ editBtn.title = isEditMode ? 'Exit Edit Mode (Layout Locked)' : 'Edit Layout (Reorder Cards)';
121
+ }
122
+ updateDraggableCards();
123
+ }
124
+
125
+ function moveCardUp(cardId) {
126
+ const card = document.getElementById(cardId) || document.querySelector('[data-card-id="' + cardId + '"]');
127
+ if (!card || !card.parentElement) return;
128
+ const prev = card.previousElementSibling;
129
+ if (prev && prev.classList.contains('reorderable-card')) {
130
+ card.parentElement.insertBefore(card, prev);
131
+ saveCardOrder();
132
+ }
133
+ }
134
+
135
+ function moveCardDown(cardId) {
136
+ const card = document.getElementById(cardId) || document.querySelector('[data-card-id="' + cardId + '"]');
137
+ if (!card || !card.parentElement) return;
138
+ const next = card.nextElementSibling;
139
+ if (next && next.classList.contains('reorderable-card')) {
140
+ card.parentElement.insertBefore(card, next.nextSibling);
141
+ saveCardOrder();
142
+ }
143
+ }
144
+
145
+ function saveCardOrder() {
146
+ const dashContainer = document.getElementById('tab-content-dashboard');
147
+ const setContainer = document.getElementById('tab-content-settings');
148
+ const dashCards = dashContainer ? Array.from(dashContainer.querySelectorAll('.reorderable-card')).map(c => c.getAttribute('data-card-id')).filter(Boolean) : [];
149
+ const setCards = setContainer ? Array.from(setContainer.querySelectorAll('.reorderable-card')).map(c => c.getAttribute('data-card-id')).filter(Boolean) : [];
150
+
151
+ const current = vscode.getState() || {};
152
+ vscode.setState({
153
+ ...current,
154
+ dashboardCardOrder: dashCards,
155
+ settingsCardOrder: setCards
156
+ });
157
+ }
158
+
159
+ function restoreCardOrder() {
160
+ const state = vscode.getState() || {};
161
+ if (state.dashboardCardOrder && state.dashboardCardOrder.length > 0) {
162
+ const dashContainer = document.getElementById('tab-content-dashboard');
163
+ if (dashContainer) {
164
+ state.dashboardCardOrder.forEach(id => {
165
+ const card = dashContainer.querySelector('[data-card-id="' + id + '"]');
166
+ if (card) dashContainer.appendChild(card);
167
+ });
168
+ }
169
+ }
170
+ if (state.settingsCardOrder && state.settingsCardOrder.length > 0) {
171
+ const setContainer = document.getElementById('tab-content-settings');
172
+ if (setContainer) {
173
+ state.settingsCardOrder.forEach(id => {
174
+ const card = setContainer.querySelector('[data-card-id="' + id + '"]');
175
+ if (card) setContainer.appendChild(card);
176
+ });
177
+ }
178
+ }
179
+ }
180
+
181
+ function updateDraggableCards() {
182
+ const cards = document.querySelectorAll('.reorderable-card');
183
+ cards.forEach(card => {
184
+ card.setAttribute('draggable', isEditMode ? 'true' : 'false');
185
+ });
186
+ }
187
+
188
+ function initCardDragAndDrop() {
189
+ const cards = document.querySelectorAll('.reorderable-card');
190
+ cards.forEach(card => {
191
+ card.addEventListener('dragstart', (e) => {
192
+ if (!isEditMode) {
193
+ e.preventDefault();
194
+ return;
195
+ }
196
+ draggedCard = card;
197
+ e.dataTransfer.effectAllowed = 'move';
198
+ card.style.opacity = '0.5';
199
+ });
200
+
201
+ card.addEventListener('dragend', () => {
202
+ card.style.opacity = '1';
203
+ draggedCard = null;
204
+ saveCardOrder();
205
+ });
206
+
207
+ card.addEventListener('dragover', (e) => {
208
+ if (!isEditMode || !draggedCard || draggedCard === card) return;
209
+ if (draggedCard.parentElement !== card.parentElement) return;
210
+ e.preventDefault();
211
+ e.dataTransfer.dropEffect = 'move';
212
+
213
+ const bounding = card.getBoundingClientRect();
214
+ const offset = bounding.y + (bounding.height / 2);
215
+ if (e.clientY - offset > 0) {
216
+ card.parentElement.insertBefore(draggedCard, card.nextSibling);
217
+ } else {
218
+ card.parentElement.insertBefore(draggedCard, card);
219
+ }
220
+ });
221
+ });
222
+ }
223
+
224
+ // --- Companion Device Make Active & Unlink ---
225
+ function makeSelectedCompanionActive() {
226
+ const select = document.getElementById('select-active-companion');
227
+ const val = select ? select.value : '';
228
+ vscode.postMessage({ command: 'setThisIdeActive' });
229
+ if (val) {
230
+ vscode.postMessage({ command: 'setActiveCompanion', companion: val });
231
+ }
232
+ }
233
+
234
+ function unpairChannelDevice(platform) {
235
+ const select = document.getElementById('select-linked-' + platform) || document.getElementById('select-linked-device-' + platform);
236
+ const accountId = select ? select.value : '';
237
+ if (!accountId) {
238
+ return;
239
+ }
240
+ vscode.postMessage({
241
+ command: 'unpairAccount',
242
+ platform: platform,
243
+ userId: accountId
244
+ });
245
+ }
246
+
247
+ function onCompanionDeviceChange(val) {
248
+ const cur = vscode.getState() || {};
249
+ vscode.setState(Object.assign({}, cur, { selectedCompanion: val }));
250
+ vscode.postMessage({ command: 'setSelectedCompanion', companion: val });
251
+ renderChatStream();
252
+ }
253
+
254
+ // --- Mobile Prompt Routing Tooltip & Info ---
255
+ function toggleRoutingTip() {
256
+ const box = document.getElementById('routing-explainer-box');
257
+ if (box) {
258
+ const isHidden = box.style.display === 'none' || !box.style.display;
259
+ box.style.display = isHidden ? 'block' : 'none';
260
+ }
261
+ }
262
+
263
+ // --- Media Lightbox Modal (Audio, Video, Image) ---
264
+ function openMediaModal(mediaUrl, mediaType) {
265
+ enlargeMedia(mediaUrl, mediaType);
266
+ }
267
+
268
+ function enlargeMedia(mediaUrl, mediaType) {
269
+ const modal = document.getElementById('media-modal');
270
+ const container = document.getElementById('media-modal-container');
271
+ if (!modal || !container) return;
272
+
273
+ if (mediaType === 'audio') {
274
+ container.innerHTML =
275
+ '<div style="background: var(--card-bg); border: 1px solid var(--border); padding: 18px 24px; border-radius: 10px; width: 340px; text-align: center; box-shadow: 0 8px 32px rgba(0,0,0,0.6);">' +
276
+ ' <div style="font-size: 28px; margin-bottom: 8px;">🎙️</div>' +
277
+ ' <div style="font-size: 13px; font-weight: 700; color: var(--emerald); margin-bottom: 4px;">Companion Voice Note</div>' +
278
+ ' <div style="font-size: 9.5px; color: var(--text-muted); margin-bottom: 14px;">High-Fidelity Audio Playback</div>' +
279
+ ' <audio controls autoplay src="' + mediaUrl + '" style="width: 100%; outline: none; border-radius: 6px;"></audio>' +
280
+ '</div>';
281
+ } else if (mediaType === 'video') {
282
+ container.innerHTML =
283
+ '<div style="background: var(--card-bg); border: 1px solid var(--border); padding: 12px; border-radius: 10px; max-width: 90vw; text-align: center; box-shadow: 0 8px 32px rgba(0,0,0,0.6);">' +
284
+ ' <div style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px;">' +
285
+ ' <span style="font-size: 12px; font-weight: 700; color: var(--purple);">🎬 Companion Video Note</span>' +
286
+ ' <span style="font-size: 9.5px; color: var(--text-muted);">Preview</span>' +
287
+ ' </div>' +
288
+ ' <video controls autoplay src="' + mediaUrl + '" style="max-width: 100%; max-height: 70vh; border-radius: 6px;"></video>' +
289
+ '</div>';
290
+ } else {
291
+ container.innerHTML =
292
+ '<div style="background: var(--card-bg); border: 1px solid var(--border); padding: 10px; border-radius: 10px; max-width: 90vw; text-align: center; box-shadow: 0 8px 32px rgba(0,0,0,0.6);">' +
293
+ ' <img src="' + mediaUrl + '" alt="Attachment Lightbox" style="max-width: 100%; max-height: 75vh; border-radius: 6px; object-fit: contain;" />' +
294
+ '</div>';
295
+ }
296
+ modal.style.display = 'flex';
297
+ }
298
+
299
+ function closeMediaModal() {
300
+ const modal = document.getElementById('media-modal');
301
+ const container = document.getElementById('media-modal-container');
302
+ if (container) container.innerHTML = '';
303
+ if (modal) modal.style.display = 'none';
304
+ }
305
+
306
+ window.addEventListener('keydown', (e) => {
307
+ if (e.key === 'Escape') closeMediaModal();
308
+ });
309
+
310
+ // --- Processing & Capture Engine Preferences (Optimistic Update) ---
311
+ function onUpdatePreference(key, value) {
312
+ // Optimistically update Screenshot Scope buttons in DOM immediately
313
+ if (key === 'screenshotScope') {
314
+ const buttons = document.querySelectorAll('.scope-selector-grid .scope-btn');
315
+ buttons.forEach(btn => {
316
+ const onclickAttr = btn.getAttribute('onclick') || '';
317
+ if (onclickAttr.includes("'" + value + "'")) {
318
+ btn.classList.add('active');
319
+ } else {
320
+ btn.classList.remove('active');
321
+ }
322
+ });
323
+ }
324
+
325
+ vscode.postMessage({
326
+ command: 'updatePreferences',
327
+ preferences: { [key]: value }
328
+ });
329
+ }
330
+
331
+ // --- Active Target IDE Selection (No Blasting Protocol) ---
332
+ function setThisIdeActive() {
333
+ vscode.postMessage({ command: 'setThisIdeActive' });
334
+ }
335
+
336
+ function onSelectActiveSession(sessionId) {
337
+ if (sessionId) {
338
+ vscode.postMessage({ command: 'setActiveSession', sessionId });
339
+ }
340
+ }
341
+
342
+ // --- Command & Slot Inspector / Inline Form ---
343
+ function selectItemForEdit(type, slotIndex, alias, command, desc) {
344
+ currentEditType = type;
345
+ currentEditTargetCmd = command || '';
346
+ selectedSlotIndex = slotIndex || 1;
347
+ const formTitle = document.getElementById('editor-form-title');
348
+ const formType = document.getElementById('editor-form-type');
349
+ const inputAlias = document.getElementById('input-alias');
350
+ const inputCmd = document.getElementById('input-target-cmd');
351
+ const btnSave = document.getElementById('btn-save-slot');
352
+
353
+ if (inputAlias) inputAlias.value = alias || '';
354
+ if (inputCmd) inputCmd.value = command || '';
355
+
356
+ if (type === 'builtin') {
357
+ if (formTitle) formTitle.innerText = '✏️ Assign / Edit Alias for ' + command;
358
+ if (formType) formType.innerText = 'Built-in Command';
359
+ if (btnSave) btnSave.innerText = '💾 Save Alias for ' + command;
360
+ if (inputCmd) inputCmd.readOnly = true;
361
+ } else {
362
+ if (formTitle) formTitle.innerText = '✏️ Edit Custom Slot ' + selectedSlotIndex;
363
+ if (formType) formType.innerText = 'Slot ' + selectedSlotIndex;
364
+ if (btnSave) btnSave.innerText = '💾 Save & Update Slot ' + selectedSlotIndex;
365
+ if (inputCmd) inputCmd.readOnly = false;
366
+ }
367
+
368
+ // Highlight selected row
369
+ document.querySelectorAll('.cmd-row-clickable').forEach(r => r.classList.remove('selected'));
370
+ if (window.event && window.event.currentTarget) {
371
+ window.event.currentTarget.classList.add('selected');
372
+ }
373
+ }
374
+
375
+ function saveSlotEdit() {
376
+ const inputAlias = document.getElementById('input-alias');
377
+ const inputCmd = document.getElementById('input-target-cmd');
378
+ const alias = inputAlias ? inputAlias.value.trim().replace(/^\\//, '') : '';
379
+ const command = inputCmd ? inputCmd.value.trim() : '';
380
+
381
+ if (!alias) {
382
+ alert('Please specify an alias name (without slash)');
383
+ return;
384
+ }
385
+
386
+ if (currentEditType === 'builtin') {
387
+ vscode.postMessage({
388
+ command: 'addAlias',
389
+ alias: alias,
390
+ targetCommand: currentEditTargetCmd || command
391
+ });
392
+ } else {
393
+ if (!command) {
394
+ alert('Please specify target IDE command');
395
+ return;
396
+ }
397
+ vscode.postMessage({
398
+ command: 'updateSlot',
399
+ slotIndex: selectedSlotIndex,
400
+ alias: alias,
401
+ targetCommand: command
402
+ });
403
+ }
404
+ }
405
+
406
+ function testRunActiveSlot() {
407
+ const inputAlias = document.getElementById('input-alias');
408
+ const inputCmd = document.getElementById('input-target-cmd');
409
+ const cmd = inputCmd ? inputCmd.value.trim() : '';
410
+ const alias = inputAlias ? inputAlias.value.trim() : '';
411
+
412
+ if (cmd.startsWith('/')) {
413
+ vscode.postMessage({ command: 'remoteCommand', cmd });
414
+ } else if (alias) {
415
+ vscode.postMessage({ command: 'runAlias', alias });
416
+ }
417
+ }
418
+
419
+ function refreshScreenPreview() {
420
+ const img = document.getElementById('screen-preview-img');
421
+ if (img) {
422
+ img.style.opacity = '0.5';
423
+ }
424
+ vscode.postMessage({ command: 'captureScreen' });
425
+ }
426
+
427
+ // --- Channel Switching & WhatsApp Dual-Number Setup ---
428
+ function switchChannel(platform) {
429
+ if (platform === 'slack') {
430
+ return; // Slack in development / coming soon
431
+ }
432
+ currentPlatform = platform;
433
+ vscode.setState({ ...(vscode.getState() || {}), currentPlatform: platform });
434
+ document.querySelectorAll('.channel-btn').forEach(btn => {
435
+ btn.classList.toggle('active', btn.dataset.platform === platform);
436
+ });
437
+
438
+ // Show the selected platform's linked devices wrapper and hide others
439
+ ['telegram', 'discord', 'whatsapp', 'slack'].forEach(p => {
440
+ const wrap = document.getElementById('wrapper-linked-' + p);
441
+ if (wrap) {
442
+ wrap.style.display = p === platform ? 'block' : 'none';
443
+ }
444
+ });
445
+
446
+ const standardBox = document.getElementById('standard-qr-box');
447
+ const whatsappBox = document.getElementById('whatsapp-qr-box');
448
+ const badgePill = document.getElementById('channel-status-badge');
449
+
450
+ if (platform === 'whatsapp') {
451
+ if (standardBox) standardBox.style.display = 'none';
452
+ if (whatsappBox) whatsappBox.style.display = 'block';
453
+ if (badgePill) {
454
+ badgePill.innerText = 'BAILEYS';
455
+ badgePill.className = 'badge badge-live';
456
+ }
457
+ reloadWhatsAppFrame();
458
+ } else {
459
+ if (whatsappBox) whatsappBox.style.display = 'none';
460
+ if (standardBox) standardBox.style.display = 'flex';
461
+
462
+ const data = channels[platform] || {};
463
+ const titleEl = document.getElementById('qr-title');
464
+ const subEl = document.getElementById('qr-sub');
465
+ const badgeEl = document.getElementById('qr-badge');
466
+ const qrEl = document.getElementById('qr-image');
467
+ const linkBtn = document.getElementById('btn-open-link');
468
+
469
+ if (titleEl) titleEl.innerText = data.title || 'Connect';
470
+ if (subEl) subEl.innerText = data.subtitle || '';
471
+ if (badgeEl) {
472
+ badgeEl.innerText = data.badge || 'READY';
473
+ badgeEl.className = 'badge ' + (data.badgeClass || 'badge-live');
474
+ }
475
+ if (badgePill) {
476
+ badgePill.innerText = data.badge || 'READY';
477
+ badgePill.className = 'badge ' + (data.badgeClass || 'badge-live');
478
+ }
479
+ if (qrEl) qrEl.src = data.qrUrl || '';
480
+ if (linkBtn) {
481
+ linkBtn.onclick = () => {
482
+ if (data.link) {
483
+ vscode.postMessage({ command: 'openUrl', url: data.link });
484
+ } else {
485
+ vscode.postMessage({ command: 'pair', platform });
486
+ }
487
+ };
488
+ }
489
+ }
490
+ }
491
+
492
+ let isWaConnected = false;
493
+
494
+ async function pollWhatsAppStatus() {
495
+ try {
496
+ const res = await fetch('http://127.0.0.1:4588/api/pair/status?platform=whatsapp', { cache: 'no-store' });
497
+ if (!res.ok) return;
498
+ const data = await res.json();
499
+ const img = document.getElementById('whatsapp-qr-image');
500
+ const badgePill = document.getElementById('badge-whatsapp') || document.getElementById('channel-badge');
501
+
502
+ if (data.connected) {
503
+ if (!isWaConnected) {
504
+ isWaConnected = true;
505
+ if (badgePill && currentPlatform === 'whatsapp') {
506
+ badgePill.innerText = 'CONNECTED';
507
+ badgePill.className = 'badge badge-live';
508
+ }
509
+ if (img) {
510
+ img.src = 'http://127.0.0.1:4588/api/pair/qr?platform=whatsapp&t=' + Date.now();
511
+ }
512
+ }
513
+ } else {
514
+ if (isWaConnected) {
515
+ isWaConnected = false;
516
+ if (badgePill && currentPlatform === 'whatsapp') {
517
+ badgePill.innerText = 'PAIRING';
518
+ badgePill.className = 'badge badge-amber';
519
+ }
520
+ if (img) {
521
+ img.src = 'http://127.0.0.1:4588/api/pair/qr?platform=whatsapp&t=' + Date.now();
522
+ }
523
+ }
524
+ }
525
+ } catch (e) {}
526
+ }
527
+
528
+ // Start background live polling so scanning automatically transitions without manual reload
529
+ setInterval(pollWhatsAppStatus, 2000);
530
+
531
+ function reloadWhatsAppFrame(reset = false) {
532
+ const resetParam = reset ? '&reset=true' : '';
533
+ const img = document.getElementById('whatsapp-qr-image');
534
+ if (img) {
535
+ img.src = 'http://127.0.0.1:4588/api/pair/qr?platform=whatsapp' + resetParam + '&t=' + Date.now();
536
+ }
537
+ const frame = document.getElementById('whatsapp-frame');
538
+ if (frame) {
539
+ frame.src = 'http://127.0.0.1:4588/api/whatsapp/qr?t=' + Date.now() + (reset ? '&reset=true' : '');
540
+ }
541
+ setTimeout(pollWhatsAppStatus, 500);
542
+ }
543
+
544
+ function refreshWhatsAppQr() {
545
+ isWaConnected = false;
546
+ reloadWhatsAppFrame(true);
547
+ }
548
+
549
+ function refreshCurrentQr() {
550
+ if (currentPlatform === 'whatsapp') {
551
+ reloadWhatsAppFrame();
552
+ } else {
553
+ const qrEl = document.getElementById('qr-image');
554
+ const data = channels[currentPlatform] || {};
555
+ if (qrEl && data.qrUrl) {
556
+ qrEl.src = data.qrUrl.split('?')[0] + '?platform=' + currentPlatform + '&t=' + Date.now();
557
+ }
558
+ }
559
+ }
560
+
561
+ function saveWaTargetNumber() {
562
+ const input = document.getElementById('input-wa-target-number');
563
+ const phone = input ? input.value.trim() : '';
564
+ vscode.postMessage({ command: 'setTargetWaNumber', phone });
565
+ }
566
+
567
+ // --- Collapsible Discord Community QR ---
568
+ function toggleDiscordChannelQr() {
569
+ isDiscordChannelOpen = !isDiscordChannelOpen;
570
+ const content = document.getElementById('discord-collapsible-content');
571
+ const arrow = document.getElementById('discord-arrow');
572
+
573
+ if (content) {
574
+ content.style.display = isDiscordChannelOpen ? 'block' : 'none';
575
+ }
576
+ if (arrow) {
577
+ arrow.classList.toggle('open', isDiscordChannelOpen);
578
+ }
579
+ }
580
+
581
+ // --- Licensing ---
582
+ function submitLicenseKey() {
583
+ const input = document.getElementById('input-license-key');
584
+ const key = input ? input.value.trim() : '';
585
+ if (!key) {
586
+ alert('Please enter a license key');
587
+ return;
588
+ }
589
+ vscode.postMessage({ command: 'enterLicense', licenseKey: key });
590
+ }
591
+
592
+ function deactivateLicense() {
593
+ vscode.postMessage({ command: 'deactivateLicense' });
594
+ }
595
+
596
+ function changeRouting(val) {
597
+ vscode.postMessage({ command: 'setChatRouting', routing: val });
598
+ }
599
+
600
+ function setGuardMode(mode) {
601
+ vscode.postMessage({ command: 'setGuardMode', mode });
602
+ }
603
+
604
+ function resolvePending(action) {
605
+ vscode.postMessage({ command: 'resolveExecution', action: action });
606
+ }
607
+
608
+ function getSelectedCompanionPlatform() {
609
+ const compSelect = document.getElementById('select-active-companion');
610
+ const val = compSelect ? compSelect.value : '';
611
+ if (!val || val === 'all') return '';
612
+ const colonIdx = val.indexOf(':');
613
+ return (colonIdx !== -1 ? val.substring(0, colonIdx) : val).toLowerCase();
614
+ }
615
+
616
+ function renderChatStream() {
617
+ const stream = document.getElementById('live-chat-stream');
618
+ if (!stream) return;
619
+ const platform = getSelectedCompanionPlatform();
620
+ const badge = document.getElementById('live-feed-badge');
621
+ if (badge) {
622
+ badge.textContent = platform ? platform.toUpperCase() : 'ALL CHANNELS';
623
+ }
624
+ let msgs = allRecentMessages || [];
625
+ if (platform) {
626
+ msgs = msgs.filter(function(m) {
627
+ const p = (m.platform || '').toLowerCase();
628
+ const s = (m.sender || '').toLowerCase();
629
+ return p === platform || (platform === 'whatsapp' && (p === 'whatsapp' || s.indexOf('whatsapp') !== -1));
630
+ });
631
+ }
632
+ if (!msgs || msgs.length === 0) {
633
+ stream.innerHTML = '<div style="color: var(--text-muted); font-size: 9.5px; text-align: center; padding: 8px 0;">' +
634
+ (platform ? 'No messages yet for ' + platform.toUpperCase() + '.' : 'No recent messages yet. Speak or type to EditorMate!') +
635
+ '</div>';
636
+ return;
637
+ }
638
+ stream.innerHTML = msgs.slice(-6).map(function(m) {
639
+ const isOut = m.sender === 'EditorMate';
640
+ let mediaTag = '';
641
+ if (m.mediaUrl) {
642
+ if (m.mediaType === 'audio' || m.mediaUrl.endsWith('.ogg') || m.mediaUrl.endsWith('.wav') || m.mediaUrl.endsWith('.mp3')) {
643
+ mediaTag = '<div style="margin-top: 4px; display: flex; flex-direction: column; gap: 4px;"><button class="media-preview-btn audio" onclick="openMediaModal(\\\'' + m.mediaUrl + '\\\', \\\'audio\\\')">🎙️ Play Audio Note ▶</button><audio src="' + m.mediaUrl + '" controls style="width: 100%; height: 26px; border-radius: 4px;"></audio></div>';
644
+ } else if (m.mediaType === 'image' || m.mediaUrl.endsWith('.jpg') || m.mediaUrl.endsWith('.png') || m.mediaUrl.endsWith('.jpeg')) {
645
+ mediaTag = '<div style="margin-top: 4px; display: flex; flex-direction: column; gap: 4px;"><button class="media-preview-btn" onclick="openMediaModal(\\\'' + m.mediaUrl + '\\\', \\\'image\\\')">🖼️ View Full Image 🔍</button><img src="' + m.mediaUrl + '" style="max-width: 100%; max-height: 120px; border-radius: 4px; cursor: pointer;" onclick="openMediaModal(\\\'' + m.mediaUrl + '\\\', \\\'image\\\')" /></div>';
646
+ } else if (m.mediaType === 'video' || m.mediaUrl.endsWith('.mp4') || m.mediaUrl.endsWith('.webm')) {
647
+ mediaTag = '<div style="margin-top: 4px; display: flex; flex-direction: column; gap: 4px;"><button class="media-preview-btn video" onclick="openMediaModal(\\\'' + m.mediaUrl + '\\\', \\\'video\\\')">🎬 Watch Video Note ▶</button><video src="' + m.mediaUrl + '" controls style="max-width: 100%; max-height: 120px; border-radius: 4px;"></video></div>';
648
+ }
649
+ }
650
+ return (
651
+ '<div class="chat-bubble ' + (isOut ? 'outbound' : 'inbound') + '">' +
652
+ ' <div class="chat-meta"><span>' + (m.sender || (m.platform ? m.platform.toUpperCase() : 'Companion')) + '</span></div>' +
653
+ ' <div style="word-break: break-word;">' + m.text + '</div>' +
654
+ mediaTag +
655
+ '</div>'
656
+ );
657
+ }).join('');
658
+ }
659
+
660
+ // Listen to messages from extension
661
+ window.addEventListener('message', event => {
662
+ const msg = event.data;
663
+ if (msg.command === 'updateScreenFrame' && msg.dataUrl) {
664
+ const frame = document.getElementById('screen-preview-img');
665
+ if (frame) {
666
+ frame.src = msg.dataUrl;
667
+ frame.style.opacity = '1';
668
+ }
669
+ }
670
+ if (msg.command === 'updateFeed' && msg.messages) {
671
+ allRecentMessages = msg.messages;
672
+ renderChatStream();
673
+ }
674
+ });
675
+
676
+ function enableCompanionService() {
677
+ vscode.postMessage({ command: 'enableCompanionService' });
678
+ }
679
+
680
+ // Default initialization (restore saved tab, platform, card layout & drag-and-drop immediately)
681
+ restoreCardOrder();
682
+ initCardDragAndDrop();
683
+
684
+ const curState = vscode.getState() || {};
685
+ if (curState.selectedCompanion) {
686
+ const compSelect = document.getElementById('select-active-companion');
687
+ if (compSelect && compSelect.querySelector('option[value="' + curState.selectedCompanion + '"]')) {
688
+ compSelect.value = curState.selectedCompanion;
689
+ }
690
+ }
691
+
692
+ if (currentMainTab === 'settings') {
693
+ switchMainTab('settings');
694
+ } else {
695
+ switchMainTab('dashboard');
696
+ }
697
+ switchChannel(currentPlatform);
698
+ renderChatStream();
699
+ vscode.postMessage({ command: 'captureScreen' });
700
+ `;
701
+ }