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,458 @@
1
+ import * as vscode from 'vscode';
2
+ import * as http from 'http';
3
+ import * as os from 'os';
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ import * as child_process from 'child_process';
7
+ import { EditorMateViewProvider } from './sidebar_provider';
8
+ import { getRealIdeName } from './ide_detector';
9
+
10
+ export function activate(context: vscode.ExtensionContext) {
11
+ // 0. Check Companion Daemon health
12
+ ensureDaemonRunning(context);
13
+
14
+ // 1. Bottom Status Bar Item (Click directly opens sidebar)
15
+ const savedIcon = context.globalState.get<string>('editormate.icon') || 'remote';
16
+ const statusBar = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 100);
17
+ statusBar.text = `$(${savedIcon}) EditorMate`;
18
+ statusBar.tooltip = 'EditorMate — Companion Status & Workflow Monitor • Click to open sidebar';
19
+ statusBar.command = 'editormate.openSidebar';
20
+ statusBar.show();
21
+ context.subscriptions.push(statusBar);
22
+
23
+ // 2. Webview Control Panel Provider (Activity Bar & Explorer Sidebar)
24
+ const provider = new EditorMateViewProvider(context.extensionUri, context);
25
+ provider.setStatusBarItem(statusBar);
26
+ context.subscriptions.push(
27
+ vscode.window.registerWebviewViewProvider('editormate.controlPanel', provider, {
28
+ webviewOptions: { retainContextWhenHidden: true }
29
+ }),
30
+ vscode.window.registerWebviewViewProvider('editormate.explorerPanel', provider, {
31
+ webviewOptions: { retainContextWhenHidden: true }
32
+ })
33
+ );
34
+
35
+ // 3. Helper: Route incoming mobile message directly to the desired chat surface
36
+ async function dispatchToIdeAgent(text: string, autoSubmit: boolean = false): Promise<boolean> {
37
+ try {
38
+ const allCmds = new Set(await vscode.commands.getCommands(true));
39
+
40
+ // 1. Antigravity IDE Native AI Agent Panel
41
+ if (allCmds.has('antigravity.sendPromptToAgentPanel')) {
42
+ if (allCmds.has('antigravity.openAgent')) {
43
+ try { await vscode.commands.executeCommand('antigravity.openAgent'); } catch {}
44
+ }
45
+ await vscode.commands.executeCommand('antigravity.sendPromptToAgentPanel', text);
46
+ return true;
47
+ }
48
+
49
+ // 2. Cursor IDE Chat
50
+ if (allCmds.has('cursor.chat')) {
51
+ await vscode.commands.executeCommand('cursor.chat', text);
52
+ return true;
53
+ }
54
+
55
+ // 3. VS Code Copilot Chat
56
+ if (allCmds.has('workbench.action.chat.open')) {
57
+ await vscode.commands.executeCommand('workbench.action.chat.open', {
58
+ query: text,
59
+ isPartialQuery: !autoSubmit
60
+ });
61
+ if (autoSubmit) {
62
+ setTimeout(async () => {
63
+ try { await vscode.commands.executeCommand('workbench.action.chat.submit'); } catch {}
64
+ }, 150);
65
+ }
66
+ return true;
67
+ }
68
+
69
+ // 4. Quick Chat fallback
70
+ if (allCmds.has('workbench.action.quickchat.toggle')) {
71
+ await vscode.commands.executeCommand('workbench.action.quickchat.toggle');
72
+ return true;
73
+ }
74
+ } catch {}
75
+ return false;
76
+ }
77
+
78
+ function cleanIncomingPrompt(raw: string): string {
79
+ if (!raw) return '';
80
+ let text = raw;
81
+ const userReq = text.match(/<USER_REQUEST>([\s\S]*?)<\/USER_REQUEST>/i);
82
+ if (userReq) text = userReq[1];
83
+ text = text.replace(/<ADDITIONAL_METADATA>[\s\S]*?<\/ADDITIONAL_METADATA>/gi, '');
84
+ text = text.replace(/<ADDITIONAL_METADATA>[\s\S]*$/gi, '');
85
+ text = text.replace(/<\/?(USER_REQUEST|ADDITIONAL_METADATA|USER_SETTINGS_CHANGE|SYSTEM_MESSAGE)[^>]*>/gi, '');
86
+ text = text.replace(/The user has uploaded \d+ audio file\(s\)\. Consider them as a part of their message\./gi, '');
87
+ return text.trim();
88
+ }
89
+
90
+ async function routeMessageToChat(rawText: string, sender: string, forcedRouting?: string) {
91
+ const text = cleanIncomingPrompt(rawText) || rawText;
92
+ const config = vscode.workspace.getConfiguration('editormate');
93
+ const mode = forcedRouting ||
94
+ context.globalState.get<string>('editormate.chatRouting') ||
95
+ config.get<string>('chatRouting', 'autoPin');
96
+
97
+ // 1. Always copy to clipboard for instant pasting anywhere
98
+ try {
99
+ await vscode.env.clipboard.writeText(text);
100
+ } catch {}
101
+
102
+ // 2. Insert into active text editor if configured
103
+ if (mode === 'insertEditor') {
104
+ const activeEditor = vscode.window.activeTextEditor;
105
+ if (activeEditor) {
106
+ activeEditor.edit((builder) => {
107
+ builder.insert(activeEditor.selection.active, text);
108
+ });
109
+ }
110
+ }
111
+
112
+ // 3. Direct injection into active AI chat surface (clean message only)
113
+ const agentPayload = text;
114
+ const injected = await dispatchToIdeAgent(agentPayload, mode === 'autoSubmit');
115
+
116
+ // 4. Interactive Notification Toast
117
+ const preview = text.length > 60 ? text.substring(0, 57) + '...' : text;
118
+ vscode.window.showInformationMessage(
119
+ `📱 Mobile [${sender}]: ${preview}`,
120
+ '💬 Send to Agent',
121
+ '📝 Insert in Editor',
122
+ '📋 Copy'
123
+ ).then(async (action) => {
124
+ if (action === '💬 Send to Agent') {
125
+ await dispatchToIdeAgent(text, true);
126
+ } else if (action === '📝 Insert in Editor') {
127
+ const editor = vscode.window.activeTextEditor;
128
+ if (editor) {
129
+ editor.edit((builder) => {
130
+ builder.insert(editor.selection.active, text);
131
+ });
132
+ } else {
133
+ vscode.window.showWarningMessage('No active editor open to insert text.');
134
+ }
135
+ } else if (action === '📋 Copy') {
136
+ await vscode.env.clipboard.writeText(text);
137
+ }
138
+ });
139
+ }
140
+
141
+ async function resolvePendingIdeApprovals(type: 'allow' | 'allow_conversation' | 'allow_all' | 'deny'): Promise<void> {
142
+ try {
143
+ // 0. Resolve any active CommandGuard prompt promises
144
+ await provider.guard.resolvePendingExecution(type === 'deny' ? 'deny' : (type === 'allow_all' ? 'allow_all' : 'allow'));
145
+
146
+ // 1. If allow_all, update execution guard mode
147
+ if (type === 'allow_all') {
148
+ try { await provider.guard.setApprovalMode('allow_all'); } catch {}
149
+ }
150
+
151
+ if (type === 'allow' || type === 'allow_conversation' || type === 'allow_all') {
152
+ // 2. Cross-IDE Native Commands (Antigravity, Cursor, VS Code, Windsurf)
153
+ try { await vscode.commands.executeCommand('notifications.acceptPrimaryAction'); } catch {}
154
+ try { await vscode.commands.executeCommand('workbench.action.modalConfirmation.confirm'); } catch {}
155
+ try { await vscode.commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem'); } catch {}
156
+
157
+ vscode.window.setStatusBarMessage(`📱 EditorMate: Approved pending security dialog (${type}) via remote mobile command`, 4000);
158
+ } else if (type === 'deny') {
159
+ try { await vscode.commands.executeCommand('workbench.action.modalConfirmation.cancel'); } catch {}
160
+ try { await vscode.commands.executeCommand('notifications.hideToasts'); } catch {}
161
+
162
+ vscode.window.setStatusBarMessage('📱 EditorMate: Denied pending prompt via remote mobile command', 4000);
163
+ }
164
+ } catch (err: any) {
165
+ console.error('[EditorMate] Error resolving IDE approvals:', err);
166
+ }
167
+ }
168
+
169
+ // 4. Register VS Code Commands
170
+ context.subscriptions.push(
171
+ vscode.commands.registerCommand('editormate.openSidebar', () => {
172
+ vscode.commands.executeCommand('editormate.controlPanel.focus');
173
+ }),
174
+ vscode.commands.registerCommand('editormate.status', async () => {
175
+ vscode.commands.executeCommand('editormate.controlPanel.focus');
176
+ }),
177
+ vscode.commands.registerCommand('editormate.changeIcon', async () => {
178
+ await provider.remoteActions.triggerChangeIcon(statusBar);
179
+ }),
180
+ vscode.commands.registerCommand('editormate.terminal', async () => {
181
+ await provider.remoteActions.triggerRemoteTerminal();
182
+ }),
183
+ vscode.commands.registerCommand('editormate.connectTelegram', () => {
184
+ provider.remoteActions.triggerPairing('telegram');
185
+ }),
186
+ vscode.commands.registerCommand('editormate.connectDiscord', () => {
187
+ provider.remoteActions.triggerPairing('discord');
188
+ }),
189
+ vscode.commands.registerCommand('editormate.connectWhatsApp', () => {
190
+ provider.remoteActions.triggerPairing('whatsapp');
191
+ }),
192
+ vscode.commands.registerCommand('editormate.enterLicense', async () => {
193
+ await provider.remoteActions.triggerEnterLicense();
194
+ }),
195
+ vscode.commands.registerCommand('editormate.renameDevice', async () => {
196
+ await provider.remoteActions.triggerRenameDevice();
197
+ }),
198
+ vscode.commands.registerCommand('editormate.manageAliases', async () => {
199
+ await provider.commandsManager.promptManageAliases();
200
+ }),
201
+ vscode.commands.registerCommand('editormate.addAlias', async () => {
202
+ await provider.commandsManager.promptAddAlias();
203
+ }),
204
+ vscode.commands.registerCommand('editormate.enableCompanionService', async () => {
205
+ await startCompanionDaemon(context, true);
206
+ setTimeout(() => provider.refresh(), 1200);
207
+ }),
208
+ vscode.commands.registerCommand('editormate.startDaemon', async () => {
209
+ await startCompanionDaemon(context, true);
210
+ setTimeout(() => provider.refresh(), 1200);
211
+ })
212
+ );
213
+
214
+ // 5. Background Remote Inbox Stream & Session Sync
215
+ const processedMessageIds = new Set<string>();
216
+ let activeTargetSessionId = '';
217
+ const mySessionId = provider.getMySessionId();
218
+ const extensionStartTime = Date.now();
219
+
220
+ const pollInterval = setInterval(() => {
221
+ http.get('http://127.0.0.1:4588/api/inbox', (res) => {
222
+ let data = '';
223
+ res.on('data', (c) => (data += c));
224
+ res.on('end', async () => {
225
+ try {
226
+ const parsed = JSON.parse(data);
227
+ if (parsed.activeSessionId) {
228
+ activeTargetSessionId = parsed.activeSessionId;
229
+ }
230
+ if (parsed.success && Array.isArray(parsed.messages) && parsed.messages.length > 0) {
231
+ provider.updateCachedInbox(parsed.messages);
232
+
233
+ // Filter all unseen messages and mark as processed
234
+ const unseen = parsed.messages.filter((m: any) => m && m.id && !processedMessageIds.has(m.id));
235
+ for (const m of unseen) {
236
+ processedMessageIds.add(m.id);
237
+ }
238
+
239
+ // Only dispatch unseen messages arriving after or close to extension start (within 30s)
240
+ const freshMessages = unseen
241
+ .filter((m: any) => (m.timestamp || 0) > (extensionStartTime - 30000))
242
+ .reverse(); // Route chronologically
243
+
244
+ for (const newest of freshMessages) {
245
+ // CRITICAL: TARGET IDE CHECK
246
+ // If only 1 session is connected or activeTarget matches, route here
247
+ const designatedTarget = newest.targetSessionId || activeTargetSessionId;
248
+ const isTargetActive = designatedTarget ? designatedTarget === mySessionId : true;
249
+
250
+ if (isTargetActive) {
251
+ const rawTrimmed = (newest.text || '').trim().toLowerCase();
252
+ if (
253
+ rawTrimmed === '1' ||
254
+ rawTrimmed === '1.' ||
255
+ rawTrimmed === '/1' ||
256
+ rawTrimmed === '/allow' ||
257
+ rawTrimmed === 'allow' ||
258
+ rawTrimmed === '/approve' ||
259
+ rawTrimmed === 'approve' ||
260
+ rawTrimmed === '/yes' ||
261
+ rawTrimmed === 'yes' ||
262
+ rawTrimmed === '/ok' ||
263
+ rawTrimmed === 'ok'
264
+ ) {
265
+ await resolvePendingIdeApprovals('allow');
266
+ } else if (
267
+ rawTrimmed === '2' ||
268
+ rawTrimmed === '2.' ||
269
+ rawTrimmed === '/2' ||
270
+ rawTrimmed === '/allow_conversation' ||
271
+ rawTrimmed === 'allow conversation'
272
+ ) {
273
+ await resolvePendingIdeApprovals('allow_conversation');
274
+ } else if (
275
+ rawTrimmed === '3' ||
276
+ rawTrimmed === '3.' ||
277
+ rawTrimmed === '/3' ||
278
+ rawTrimmed === '/allowall' ||
279
+ rawTrimmed === '/allow_all' ||
280
+ rawTrimmed === 'allow all' ||
281
+ rawTrimmed === 'allowall' ||
282
+ rawTrimmed === '/whitelist' ||
283
+ rawTrimmed === 'always'
284
+ ) {
285
+ await resolvePendingIdeApprovals('allow_all');
286
+ } else if (
287
+ rawTrimmed === '4' ||
288
+ rawTrimmed === '4.' ||
289
+ rawTrimmed === '/4' ||
290
+ rawTrimmed === '/deny' ||
291
+ rawTrimmed === 'deny' ||
292
+ rawTrimmed === '/reject' ||
293
+ rawTrimmed === 'reject' ||
294
+ rawTrimmed === '/no' ||
295
+ rawTrimmed === 'no' ||
296
+ rawTrimmed === '/cancel'
297
+ ) {
298
+ await resolvePendingIdeApprovals('deny');
299
+ } else {
300
+ await routeMessageToChat(newest.text, newest.sender);
301
+ }
302
+ }
303
+ }
304
+ if (unseen.length > 0) {
305
+ provider.refresh();
306
+ }
307
+ }
308
+ } catch {}
309
+ });
310
+ }).on('error', () => {
311
+ ensureDaemonRunning(context);
312
+ });
313
+
314
+ // Session Sync: Synchronize custom shortcuts with daemon and check for pending remote executions
315
+ try {
316
+ const wsFolder = vscode.workspace.workspaceFolders?.[0];
317
+ const wsName = wsFolder?.name || 'editormate';
318
+ const wsPath = wsFolder?.uri.fsPath || '';
319
+ const shortcuts = context.globalState.get<any[]>('editormate.customShortcuts') || [];
320
+ const syncPayload = JSON.stringify({
321
+ sessionId: mySessionId,
322
+ workspaceName: wsName,
323
+ workspacePath: wsPath,
324
+ ideType: getRealIdeName(),
325
+ customShortcuts: shortcuts,
326
+ });
327
+
328
+ const sReq = http.request(
329
+ 'http://127.0.0.1:4588/api/session/sync',
330
+ {
331
+ method: 'POST',
332
+ headers: {
333
+ 'Content-Type': 'application/json',
334
+ 'Content-Length': Buffer.byteLength(syncPayload)
335
+ }
336
+ },
337
+ (sRes) => {
338
+ let sBuf = '';
339
+ sRes.on('data', (c) => (sBuf += c));
340
+ sRes.on('end', () => {
341
+ try {
342
+ const sJson = JSON.parse(sBuf);
343
+ if (sJson.success) {
344
+ if (sJson.activeSessionId) {
345
+ activeTargetSessionId = sJson.activeSessionId;
346
+ }
347
+ provider.updateDaemonStatus(sJson);
348
+ if (sJson.pendingExecutionCommand) {
349
+ provider.guard.requestExecution(sJson.pendingExecutionCommand, undefined, 'Connected Mobile Device');
350
+ }
351
+ }
352
+ } catch {}
353
+ });
354
+ }
355
+ );
356
+ sReq.on('error', () => {});
357
+ sReq.write(syncPayload);
358
+ sReq.end();
359
+ } catch {}
360
+
361
+ // Also fetch status to keep licensing and target WA number up to date
362
+ try {
363
+ http.get('http://127.0.0.1:4588/api/status', (res) => {
364
+ let buf = '';
365
+ res.on('data', (c) => (buf += c));
366
+ res.on('end', () => {
367
+ try {
368
+ const st = JSON.parse(buf);
369
+ if (st.status === 'OK') {
370
+ if (st.activeSessionId) activeTargetSessionId = st.activeSessionId;
371
+ provider.updateDaemonStatus(st);
372
+ }
373
+ } catch {}
374
+ });
375
+ }).on('error', () => {});
376
+ } catch {}
377
+ }, 2500);
378
+
379
+ context.subscriptions.push({ dispose: () => clearInterval(pollInterval) });
380
+ }
381
+
382
+ export function ensureDaemonRunning(context: vscode.ExtensionContext, interactive: boolean = false) {
383
+ const req = http.get('http://127.0.0.1:4588/health', () => {});
384
+ req.on('error', () => {
385
+ const autoStart = context.globalState.get<boolean>('editormate.autoStartService');
386
+ if (autoStart) {
387
+ startCompanionDaemon(context, false);
388
+ return;
389
+ }
390
+ const promptShown = context.globalState.get<boolean>('editormate.enablePromptShown');
391
+ if (!promptShown || interactive) {
392
+ context.globalState.update('editormate.enablePromptShown', true);
393
+ vscode.window.showInformationMessage(
394
+ '📱 EditorMate: Local companion service is required to render Telegram/WhatsApp QR codes & stream window frames.',
395
+ '⚡ Enable Companion Service',
396
+ 'Later'
397
+ ).then(async (selection) => {
398
+ if (selection === '⚡ Enable Companion Service') {
399
+ await context.globalState.update('editormate.autoStartService', true);
400
+ await startCompanionDaemon(context, true);
401
+ }
402
+ });
403
+ }
404
+ });
405
+ req.setTimeout(800, () => req.destroy());
406
+ }
407
+
408
+ export async function startCompanionDaemon(context: vscode.ExtensionContext, interactive: boolean = false): Promise<boolean> {
409
+ const candidates = [
410
+ path.join(context.extensionPath, 'bin', 'cli.js'),
411
+ path.join(context.extensionPath, 'daemon', 'bin', 'cli.js'),
412
+ path.join(context.extensionPath, 'daemon', 'index.js'),
413
+ path.join(context.extensionPath, '..', 'bin', 'cli.js'),
414
+ path.join(os.homedir(), 'Desktop', 'work', 'portfolio-engine', 'ai-tools', 'editormate', 'bin', 'cli.js'),
415
+ ];
416
+ const target = candidates.find((t) => fs.existsSync(t));
417
+ const isWin = process.platform === 'win32';
418
+ const env = { ...process.env, ELECTRON_RUN_AS_NODE: '1' };
419
+
420
+ if (target) {
421
+ try {
422
+ const child = child_process.spawn('node', [target, 'daemon'], {
423
+ detached: true,
424
+ stdio: 'ignore',
425
+ windowsHide: isWin,
426
+ env,
427
+ });
428
+ child.on('error', () => {
429
+ try {
430
+ const fallbackChild = child_process.spawn(process.execPath, [target, 'daemon'], {
431
+ detached: true,
432
+ stdio: 'ignore',
433
+ windowsHide: isWin,
434
+ env,
435
+ });
436
+ fallbackChild.unref();
437
+ } catch {
438
+ const term = vscode.window.createTerminal({ name: 'EditorMate Companion' });
439
+ term.sendText(`node "${target}" daemon`);
440
+ }
441
+ });
442
+ child.unref();
443
+ if (interactive) {
444
+ vscode.window.setStatusBarMessage('🚀 EditorMate: Companion service launched on port 4588', 3500);
445
+ }
446
+ return true;
447
+ } catch {
448
+ const term = vscode.window.createTerminal({ name: 'EditorMate Companion' });
449
+ term.sendText(`node "${target}" daemon`);
450
+ return true;
451
+ }
452
+ } else {
453
+ const term = vscode.window.createTerminal({ name: 'EditorMate Companion' });
454
+ term.sendText('npx editormate daemon || editormate daemon');
455
+ return true;
456
+ }
457
+ }
458
+
@@ -0,0 +1,60 @@
1
+ import * as vscode from 'vscode';
2
+
3
+ /**
4
+ * Returns the actual IDE application name where this extension is running.
5
+ * Dynamic and accurate across VS Code, Cursor, Antigravity, Windsurf, VSCodium, etc.
6
+ */
7
+ export function getRealIdeName(): string {
8
+ const appName = vscode.env.appName || '';
9
+ if (/antigravity/i.test(appName)) return 'Antigravity';
10
+ if (/cursor/i.test(appName)) return 'Cursor';
11
+ if (/windsurf/i.test(appName)) return 'Windsurf';
12
+ if (/codium/i.test(appName)) return 'VSCodium';
13
+ if (/code/i.test(appName)) return 'VS Code';
14
+ return appName || 'VS Code';
15
+ }
16
+
17
+ /**
18
+ * Validates that an account is a genuine, authenticated paired companion device.
19
+ * Excludes test mock accounts, test handles, fake 555 numbers, and WhatsApp group JIDs.
20
+ */
21
+ export function isRealPairedAccount(a: any): boolean {
22
+ if (!a || !a.userId || !a.platform) return false;
23
+ const uid = String(a.userId).trim();
24
+ const handle = String(a.userHandle || '').trim().toLowerCase();
25
+
26
+ const mockIds = new Set([
27
+ 'tg_test_user_777',
28
+ '777123',
29
+ 'disc_user_555',
30
+ 'u_slack_dev_123',
31
+ 'u12345678',
32
+ '8979609593',
33
+ 'test_user',
34
+ 'mock_user',
35
+ 'dummy_user',
36
+ '14155552671',
37
+ '23201547579578',
38
+ ]);
39
+ if (mockIds.has(uid.toLowerCase())) return false;
40
+ if (/^(test_|mock_|dummy_|fake_)/i.test(uid)) return false;
41
+ if (/^(devtester|telegramhacker|discordgamer|@slackdeveloper)$/i.test(handle)) return false;
42
+
43
+ // Filter mock 555 phone numbers
44
+ if (/\b555\d{4}\b/.test(uid)) return false;
45
+
46
+ // Filter WhatsApp groups
47
+ if (uid.includes('@g.us') || uid.startsWith('120363')) return false;
48
+
49
+ return ['whatsapp', 'telegram', 'discord', 'slack', 'matrix'].includes(a.platform);
50
+ }
51
+
52
+ /**
53
+ * Checks whether an IDE is currently active in this workspace context.
54
+ */
55
+ export function isHostIdeRunning(ide: string): boolean {
56
+ const norm = (ide || '').toLowerCase();
57
+ const currentIde = getRealIdeName().toLowerCase();
58
+ return currentIde.includes(norm) || norm.includes(currentIde);
59
+ }
60
+