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,26 @@
1
+ {
2
+ "name": "@types/vscode",
3
+ "version": "1.140.0",
4
+ "description": "TypeScript definitions for vscode",
5
+ "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/vscode",
6
+ "license": "MIT",
7
+ "contributors": [
8
+ {
9
+ "name": "Visual Studio Code Team, Microsoft",
10
+ "githubUsername": "microsoft",
11
+ "url": "https://github.com/microsoft"
12
+ }
13
+ ],
14
+ "main": "",
15
+ "types": "index.d.ts",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
19
+ "directory": "types/vscode"
20
+ },
21
+ "scripts": {},
22
+ "dependencies": {},
23
+ "peerDependencies": {},
24
+ "typesPublisherContentHash": "427dc5ba4504c5fd5e109ddcb5dddf9fbb3123fbc69ed3b5e767842a869a1e1a",
25
+ "typeScriptVersion": "5.6"
26
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "editormate",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "editormate",
9
+ "version": "1.0.0",
10
+ "devDependencies": {
11
+ "@types/vscode": "^1.140.0"
12
+ },
13
+ "engines": {
14
+ "vscode": "^1.80.0"
15
+ }
16
+ },
17
+ "node_modules/@types/vscode": {
18
+ "version": "1.140.0",
19
+ "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.140.0.tgz",
20
+ "integrity": "sha512-KAB5RBZIgnUhpp4mKsVJPPHLOQKu6WtGy2xpfWjaajEXO4xIIC+UESAXLiQ9ewx6QD1uBmvC/S8BJzkbvv4bRA==",
21
+ "dev": true,
22
+ "license": "MIT"
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,154 @@
1
+ {
2
+ "name": "editormate",
3
+ "displayName": "EditorMate",
4
+ "description": "Mobile companion and status monitor for AI coding workflows.",
5
+ "version": "1.0.2",
6
+ "publisher": "praveenojha",
7
+ "author": {
8
+ "name": "Praveen Ojha",
9
+ "url": "https://praveenojha.com"
10
+ },
11
+ "homepage": "https://praveenojha.com/store/editormate",
12
+ "bugs": {
13
+ "url": "https://praveenojha.com/store/editormate#support"
14
+ },
15
+ "license": "Commercial",
16
+ "icon": "assets/icon.png",
17
+ "engines": {
18
+ "vscode": "^1.80.0"
19
+ },
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "https://github.com/PraveenOjha/editormate"
23
+ },
24
+ "categories": [
25
+ "Programming Languages",
26
+ "Machine Learning",
27
+ "Other"
28
+ ],
29
+ "keywords": [
30
+ "companion",
31
+ "productivity",
32
+ "status",
33
+ "workflow",
34
+ "editormate"
35
+ ],
36
+ "main": "./dist/extension.js",
37
+ "activationEvents": [
38
+ "onView:editormate.controlPanel",
39
+ "onView:editormate.explorerPanel"
40
+ ],
41
+ "contributes": {
42
+ "viewsContainers": {
43
+ "activitybar": [
44
+ {
45
+ "id": "editormate-sidebar",
46
+ "title": "EditorMate",
47
+ "icon": "assets/icon.svg"
48
+ }
49
+ ]
50
+ },
51
+ "views": {
52
+ "editormate-sidebar": [
53
+ {
54
+ "type": "webview",
55
+ "id": "editormate.controlPanel",
56
+ "name": "EditorMate"
57
+ }
58
+ ],
59
+ "explorer": [
60
+ {
61
+ "type": "webview",
62
+ "id": "editormate.explorerPanel",
63
+ "name": "EditorMate"
64
+ }
65
+ ]
66
+ },
67
+ "commands": [
68
+ {
69
+ "command": "editormate.status",
70
+ "title": "EditorMate: Dashboard"
71
+ },
72
+ {
73
+ "command": "editormate.openSidebar",
74
+ "title": "EditorMate: Open Sidebar"
75
+ },
76
+ {
77
+ "command": "editormate.connectTelegram",
78
+ "title": "EditorMate: Connect Telegram"
79
+ },
80
+ {
81
+ "command": "editormate.connectDiscord",
82
+ "title": "EditorMate: Connect Discord"
83
+ },
84
+ {
85
+ "command": "editormate.connectWhatsApp",
86
+ "title": "EditorMate: Connect WhatsApp"
87
+ },
88
+ {
89
+ "command": "editormate.testPrompt",
90
+ "title": "EditorMate: Send Test Card"
91
+ },
92
+ {
93
+ "command": "editormate.pinToChat",
94
+ "title": "EditorMate: Pin Response"
95
+ },
96
+ {
97
+ "command": "editormate.manageAliases",
98
+ "title": "EditorMate: Manage Aliases"
99
+ },
100
+ {
101
+ "command": "editormate.addAlias",
102
+ "title": "EditorMate: Add Alias"
103
+ },
104
+ {
105
+ "command": "editormate.enableCompanionService",
106
+ "title": "EditorMate: Enable Companion Service"
107
+ }
108
+ ],
109
+ "configuration": {
110
+ "title": "EditorMate",
111
+ "properties": {
112
+ "editormate.chatRouting": {
113
+ "type": "string",
114
+ "enum": [
115
+ "autoPin",
116
+ "autoSubmit",
117
+ "quickChat",
118
+ "manualToast"
119
+ ],
120
+ "enumDescriptions": [
121
+ "Pin incoming message into active chat prompt",
122
+ "Submit incoming message to active agent",
123
+ "Open Quick Chat prompt with message",
124
+ "Show notification toast with action button"
125
+ ],
126
+ "default": "autoPin",
127
+ "description": "Select routing mode for incoming messages"
128
+ },
129
+ "editormate.daemonPort": {
130
+ "type": "number",
131
+ "default": 4588,
132
+ "description": "Port of the companion daemon"
133
+ },
134
+ "editormate.botUsername": {
135
+ "type": "string",
136
+ "default": "EditorMate_bot",
137
+ "description": "Telegram bot username"
138
+ },
139
+ "editormate.showStatusBar": {
140
+ "type": "boolean",
141
+ "default": true,
142
+ "description": "Show status in the status bar"
143
+ }
144
+ }
145
+ }
146
+ },
147
+ "scripts": {
148
+ "prepackage": "mkdir -p daemon bin scripts && cp -r ../dist/* daemon/ && cp -r ../bin/* bin/ && cp -r ../scripts/* scripts/ 2>/dev/null || true",
149
+ "package": "npm run prepackage && npx @vscode/vsce package --no-dependencies --allow-missing-repository --allow-star-activation"
150
+ },
151
+ "devDependencies": {
152
+ "@types/vscode": "^1.80.0"
153
+ }
154
+ }
@@ -0,0 +1,88 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import JavaScriptObfuscator from 'javascript-obfuscator';
5
+
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = path.dirname(__filename);
8
+ const rootDir = path.resolve(__dirname, '..');
9
+
10
+ const obfuscationOptions = {
11
+ compact: true,
12
+ controlFlowFlattening: true,
13
+ controlFlowFlatteningThreshold: 0.75,
14
+ deadCodeInjection: true,
15
+ deadCodeInjectionThreshold: 0.3,
16
+ debugProtection: false,
17
+ disableConsoleOutput: false,
18
+ identifierNamesGenerator: 'hexadecimal',
19
+ log: false,
20
+ numbersToExpressions: true,
21
+ renameGlobals: false,
22
+ selfDefending: false,
23
+ simplify: true,
24
+ splitStrings: true,
25
+ splitStringsChunkLength: 8,
26
+ stringArray: true,
27
+ stringArrayCallsTransform: true,
28
+ stringArrayEncoding: ['base64'],
29
+ stringArrayIndexShift: true,
30
+ stringArrayRotate: true,
31
+ stringArrayShuffle: true,
32
+ stringArrayWrappersCount: 2,
33
+ stringArrayWrappersChainedCalls: true,
34
+ stringArrayWrappersParametersMaxCount: 4,
35
+ stringArrayWrappersType: 'function',
36
+ stringArrayThreshold: 0.8,
37
+ target: 'node',
38
+ unicodeEscapeSequence: false
39
+ };
40
+
41
+ const legalBanner = `/**
42
+ * EditorMate — Universal AI Remote Control & Companion
43
+ * Copyright (c) 2026 Praveen Ojha (https://praveenojha.com). All Rights Reserved.
44
+ * PROPRIETARY AND CONFIDENTIAL.
45
+ * Designed & written by Praveen Ojha.
46
+ * Even if you can inspect or read this compiled code, you may NOT copy, modify,
47
+ * distribute, or reverse-engineer any part of this software without prior written consent.
48
+ */
49
+ `;
50
+
51
+ function obfuscateDirectory(dirPath) {
52
+ if (!fs.existsSync(dirPath)) return;
53
+ const entries = fs.readdirSync(dirPath, { withFileTypes: true });
54
+
55
+ for (const entry of entries) {
56
+ const fullPath = path.join(dirPath, entry.name);
57
+ if (entry.isDirectory()) {
58
+ if (entry.name !== 'node_modules' && entry.name !== '.git' && entry.name !== 'webview') {
59
+ obfuscateDirectory(fullPath);
60
+ }
61
+ } else if (entry.isFile() && entry.name.endsWith('.js') && !entry.name.endsWith('.d.ts')) {
62
+ try {
63
+ const sourceCode = fs.readFileSync(fullPath, 'utf8');
64
+ const obfuscationResult = JavaScriptObfuscator.obfuscate(sourceCode, obfuscationOptions);
65
+ const finalCode = legalBanner + obfuscationResult.getObfuscatedCode();
66
+ fs.writeFileSync(fullPath, finalCode, 'utf8');
67
+ console.log(`🛡️ Obfuscated: ${path.relative(rootDir, fullPath)}`);
68
+ } catch (err) {
69
+ console.error(`❌ Failed to obfuscate ${fullPath}:`, err.message);
70
+ }
71
+ }
72
+ }
73
+ }
74
+
75
+ console.log('🚀 Starting EditorMate Proprietary Code Obfuscation...');
76
+ const targetDirs = [
77
+ path.join(rootDir, 'dist'),
78
+ path.join(rootDir, 'extension', 'dist')
79
+ ];
80
+
81
+ for (const dir of targetDirs) {
82
+ if (fs.existsSync(dir)) {
83
+ console.log(`\n📦 Protecting folder: ${path.relative(rootDir, dir)}`);
84
+ obfuscateDirectory(dir);
85
+ }
86
+ }
87
+
88
+ console.log('\n✅ All proprietary code successfully obfuscated and secured for distribution!');
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ EditorMate Whisper Speech-to-Text Transcriber
4
+ Fast sub-second local CPU/GPU speech transcription for incoming voice notes.
5
+ """
6
+
7
+ import sys
8
+ import os
9
+ import json
10
+
11
+ def transcribe(audio_path: str):
12
+ if not os.path.exists(audio_path):
13
+ print(json.dumps({"error": f"Audio file not found: {audio_path}", "text": ""}))
14
+ sys.exit(1)
15
+
16
+ try:
17
+ from faster_whisper import WhisperModel
18
+ # Use tiny model for sub-second CPU inference (~39 MB, int8 quantized)
19
+ model = WhisperModel("tiny", device="cpu", compute_type="int8")
20
+ segments, info = model.transcribe(audio_path, beam_size=3, language=None)
21
+
22
+ text_parts = []
23
+ for segment in segments:
24
+ text_parts.append(segment.text.strip())
25
+
26
+ full_text = " ".join(text_parts).strip()
27
+ result = {
28
+ "success": True,
29
+ "text": full_text,
30
+ "language": info.language if hasattr(info, "language") else "en",
31
+ "duration": round(info.duration, 2) if hasattr(info, "duration") else 0
32
+ }
33
+ print(json.dumps(result))
34
+ except Exception as e:
35
+ print(json.dumps({"success": False, "error": str(e), "text": ""}))
36
+ sys.exit(1)
37
+
38
+ if __name__ == "__main__":
39
+ if len(sys.argv) < 2:
40
+ print(json.dumps({"error": "Usage: transcribe_audio.py <audio_path>", "text": ""}))
41
+ sys.exit(1)
42
+ transcribe(sys.argv[1])
@@ -0,0 +1,201 @@
1
+ /**
2
+ * EditorMate — Remote Execution Security Guard
3
+ * Enforces execution policies: Allow, Deny, and Allow All (Whitelist).
4
+ */
5
+
6
+ import * as vscode from 'vscode';
7
+
8
+ export type ApprovalMode = 'prompt' | 'allow_all' | 'deny_all';
9
+
10
+ export interface CommandExecutionRecord {
11
+ timestamp: number;
12
+ command: string;
13
+ alias?: string;
14
+ source: string;
15
+ status: 'allowed' | 'denied' | 'auto_allowed';
16
+ }
17
+
18
+ export class CommandGuard {
19
+ private _mode: ApprovalMode = 'prompt';
20
+ private _whitelist = new Set<string>();
21
+ private _history: CommandExecutionRecord[] = [];
22
+ private _pendingExecutions: Array<{
23
+ id: string;
24
+ command: string;
25
+ alias?: string;
26
+ resolve: (action: 'allow' | 'allow_all' | 'deny') => void;
27
+ }> = [];
28
+
29
+ constructor(private readonly _context: vscode.ExtensionContext) {
30
+ const savedMode = this._context.globalState.get<ApprovalMode>('editormate.approvalMode');
31
+ if (savedMode) this._mode = savedMode;
32
+
33
+ const savedWhitelist = this._context.globalState.get<string[]>('editormate.whitelistedCommands') || [];
34
+ this._whitelist = new Set(savedWhitelist);
35
+ }
36
+
37
+ public getApprovalMode(): ApprovalMode {
38
+ return this._mode;
39
+ }
40
+
41
+ public async setApprovalMode(mode: ApprovalMode): Promise<void> {
42
+ this._mode = mode;
43
+ await this._context.globalState.update('editormate.approvalMode', mode);
44
+ vscode.window.setStatusBarMessage(`🛡️ EditorMate Guard Mode: ${mode.toUpperCase().replace('_', ' ')}`, 3000);
45
+ if (mode === 'allow_all') {
46
+ while (this._pendingExecutions.length > 0) {
47
+ const p = this._pendingExecutions.shift();
48
+ if (p) p.resolve('allow_all');
49
+ }
50
+ } else if (mode === 'deny_all') {
51
+ while (this._pendingExecutions.length > 0) {
52
+ const p = this._pendingExecutions.shift();
53
+ if (p) p.resolve('deny');
54
+ }
55
+ }
56
+ }
57
+
58
+ public getWhitelist(): string[] {
59
+ return Array.from(this._whitelist);
60
+ }
61
+
62
+ public async addToWhitelist(command: string): Promise<void> {
63
+ this._whitelist.add(command);
64
+ await this._context.globalState.update('editormate.whitelistedCommands', Array.from(this._whitelist));
65
+ }
66
+
67
+ public async clearWhitelist(): Promise<void> {
68
+ this._whitelist.clear();
69
+ await this._context.globalState.update('editormate.whitelistedCommands', []);
70
+ }
71
+
72
+ public getHistory(): CommandExecutionRecord[] {
73
+ return this._history.slice(-20);
74
+ }
75
+
76
+ public getPendingCount(): number {
77
+ return this._pendingExecutions.length;
78
+ }
79
+
80
+ public getPendingExecutions(): Array<{ id: string; command: string; alias?: string; source?: string }> {
81
+ return this._pendingExecutions.map((p) => ({
82
+ id: p.id,
83
+ command: p.command,
84
+ alias: p.alias,
85
+ source: (p as any).source,
86
+ }));
87
+ }
88
+
89
+ /**
90
+ * Resolves the earliest pending execution via external signal (/approve, /deny, mobile action, sidebar button)
91
+ */
92
+ public async resolvePendingExecution(action: 'allow' | 'allow_all' | 'deny'): Promise<boolean> {
93
+ if (this._pendingExecutions.length === 0) return false;
94
+ const pending = this._pendingExecutions.shift();
95
+ if (pending) {
96
+ pending.resolve(action);
97
+ return true;
98
+ }
99
+ return false;
100
+ }
101
+
102
+ /**
103
+ * Evaluates inbound execution request and prompts user if not pre-approved.
104
+ */
105
+ public async requestExecution(command: string, alias?: string, source: string = 'Mobile Remote'): Promise<boolean> {
106
+ const record: CommandExecutionRecord = {
107
+ timestamp: Date.now(),
108
+ command,
109
+ alias,
110
+ source,
111
+ status: 'denied',
112
+ };
113
+
114
+ // Policy 1: Global Deny
115
+ if (this._mode === 'deny_all') {
116
+ record.status = 'denied';
117
+ this._history.push(record);
118
+ vscode.window.showWarningMessage(`🚫 EditorMate: Remote command "${command}" blocked by Deny All policy.`);
119
+ return false;
120
+ }
121
+
122
+ // Policy 2: Global Allow All or Specific Command Whitelisted
123
+ if (this._mode === 'allow_all' || this._whitelist.has(command)) {
124
+ record.status = 'auto_allowed';
125
+ this._history.push(record);
126
+ await this.executeSafely(command);
127
+ vscode.window.setStatusBarMessage(`⚡ EditorMate: Auto-approved command: ${alias ? `[${alias}] ` : ''}${command}`, 3000);
128
+ return true;
129
+ }
130
+
131
+ // Policy 3: Interactive Prompt (Allow | Deny | Allow All)
132
+ // Supports both UI buttons AND remote programmatic resolution (/approve, /deny from mobile or chat)
133
+ const promptLabel = alias ? `Command "${command}" (Alias: "${alias}")` : `Command "${command}"`;
134
+ const execId = 'exec_' + Date.now() + '_' + Math.random().toString(36).substring(2, 6);
135
+
136
+ const promptPromise = new Promise<'allow' | 'allow_all' | 'deny'>((resolve) => {
137
+ let resolved = false;
138
+ const safeResolve = (action: 'allow' | 'allow_all' | 'deny') => {
139
+ if (!resolved) {
140
+ resolved = true;
141
+ const idx = this._pendingExecutions.findIndex((p) => p.id === execId);
142
+ if (idx !== -1) {
143
+ this._pendingExecutions.splice(idx, 1);
144
+ }
145
+ resolve(action);
146
+ }
147
+ };
148
+
149
+ this._pendingExecutions.push({ id: execId, command, alias, source, resolve: safeResolve } as any);
150
+
151
+ vscode.window
152
+ .showWarningMessage(
153
+ `⚡ EditorMate Execution Request (${source}):\nDo you want to run ${promptLabel}?`,
154
+ { modal: false },
155
+ '✅ Allow',
156
+ '❌ Deny',
157
+ '⚡ Allow All'
158
+ )
159
+ .then((uiAction) => {
160
+ if (uiAction === '✅ Allow') safeResolve('allow');
161
+ else if (uiAction === '⚡ Allow All') safeResolve('allow_all');
162
+ else if (uiAction === '❌ Deny') safeResolve('deny');
163
+ });
164
+
165
+ // 60-second safety timeout so promises do not leak indefinitely
166
+ setTimeout(() => {
167
+ safeResolve('deny');
168
+ }, 60000);
169
+ });
170
+
171
+ const resolution = await promptPromise;
172
+
173
+ if (resolution === 'allow') {
174
+ record.status = 'allowed';
175
+ this._history.push(record);
176
+ await this.executeSafely(command);
177
+ vscode.window.setStatusBarMessage(`⚡ EditorMate: Allowed remote command: ${command}`, 3000);
178
+ return true;
179
+ } else if (resolution === 'allow_all') {
180
+ await this.addToWhitelist(command);
181
+ record.status = 'auto_allowed';
182
+ this._history.push(record);
183
+ await this.executeSafely(command);
184
+ vscode.window.showInformationMessage(`🛡️ EditorMate: "${command}" added to whitelist (Pre-Approved).`);
185
+ return true;
186
+ } else {
187
+ record.status = 'denied';
188
+ this._history.push(record);
189
+ vscode.window.setStatusBarMessage(`🚫 EditorMate: Denied remote command: ${command}`, 3000);
190
+ return false;
191
+ }
192
+ }
193
+
194
+ private async executeSafely(command: string): Promise<void> {
195
+ try {
196
+ await vscode.commands.executeCommand(command);
197
+ } catch (err: any) {
198
+ vscode.window.showErrorMessage(`EditorMate: Failed executing "${command}": ${err.message}`);
199
+ }
200
+ }
201
+ }