@practicalkit/plugin-sdk 0.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 (310) hide show
  1. package/README.md +5 -0
  2. package/dist/src/PracticalKitSdk.d.ts +184 -0
  3. package/dist/src/PracticalKitSdk.d.ts.map +1 -0
  4. package/dist/src/PracticalKitSdk.js +230 -0
  5. package/dist/src/PracticalKitSdk.js.map +1 -0
  6. package/dist/src/index.d.ts +5 -0
  7. package/dist/src/index.d.ts.map +1 -0
  8. package/dist/src/index.js +6 -0
  9. package/dist/src/index.js.map +1 -0
  10. package/dist/src/keyboard/KeyboardShortcutForwarder.d.ts +18 -0
  11. package/dist/src/keyboard/KeyboardShortcutForwarder.d.ts.map +1 -0
  12. package/dist/src/keyboard/KeyboardShortcutForwarder.js +36 -0
  13. package/dist/src/keyboard/KeyboardShortcutForwarder.js.map +1 -0
  14. package/dist/src/keyboard/index.d.ts +2 -0
  15. package/dist/src/keyboard/index.d.ts.map +1 -0
  16. package/dist/src/keyboard/index.js +2 -0
  17. package/dist/src/keyboard/index.js.map +1 -0
  18. package/dist/src/llm/ToolRegistry.d.ts +49 -0
  19. package/dist/src/llm/ToolRegistry.d.ts.map +1 -0
  20. package/dist/src/llm/ToolRegistry.js +126 -0
  21. package/dist/src/llm/ToolRegistry.js.map +1 -0
  22. package/dist/src/logs/channel/IFrameLogChannelAdapter.d.ts +8 -0
  23. package/dist/src/logs/channel/IFrameLogChannelAdapter.d.ts.map +1 -0
  24. package/dist/src/logs/channel/IFrameLogChannelAdapter.js +34 -0
  25. package/dist/src/logs/channel/IFrameLogChannelAdapter.js.map +1 -0
  26. package/dist/src/logs/channel/ILogChannelAdapter.d.ts +5 -0
  27. package/dist/src/logs/channel/ILogChannelAdapter.d.ts.map +1 -0
  28. package/dist/src/logs/channel/ILogChannelAdapter.js +2 -0
  29. package/dist/src/logs/channel/ILogChannelAdapter.js.map +1 -0
  30. package/dist/src/logs/channel/LogChannel.d.ts +21 -0
  31. package/dist/src/logs/channel/LogChannel.d.ts.map +1 -0
  32. package/dist/src/logs/channel/LogChannel.js +41 -0
  33. package/dist/src/logs/channel/LogChannel.js.map +1 -0
  34. package/dist/src/logs/outputs/types.d.ts +18 -0
  35. package/dist/src/logs/outputs/types.d.ts.map +1 -0
  36. package/dist/src/logs/outputs/types.js +2 -0
  37. package/dist/src/logs/outputs/types.js.map +1 -0
  38. package/dist/src/messages/IFrameClient.d.ts +33 -0
  39. package/dist/src/messages/IFrameClient.d.ts.map +1 -0
  40. package/dist/src/messages/IFrameClient.js +88 -0
  41. package/dist/src/messages/IFrameClient.js.map +1 -0
  42. package/dist/src/messages/IFrameMessageBus.d.ts +10 -0
  43. package/dist/src/messages/IFrameMessageBus.d.ts.map +1 -0
  44. package/dist/src/messages/IFrameMessageBus.js +24 -0
  45. package/dist/src/messages/IFrameMessageBus.js.map +1 -0
  46. package/dist/src/messages/base/index.d.ts +8 -0
  47. package/dist/src/messages/base/index.d.ts.map +1 -0
  48. package/dist/src/messages/base/index.js +9 -0
  49. package/dist/src/messages/base/index.js.map +1 -0
  50. package/dist/src/messages/document/index.d.ts +5 -0
  51. package/dist/src/messages/document/index.d.ts.map +1 -0
  52. package/dist/src/messages/document/index.js +5 -0
  53. package/dist/src/messages/document/index.js.map +1 -0
  54. package/dist/src/messages/document/requestContent/message.schemas.d.ts +34 -0
  55. package/dist/src/messages/document/requestContent/message.schemas.d.ts.map +1 -0
  56. package/dist/src/messages/document/requestContent/message.schemas.js +21 -0
  57. package/dist/src/messages/document/requestContent/message.schemas.js.map +1 -0
  58. package/dist/src/messages/document/save/index.d.ts +2 -0
  59. package/dist/src/messages/document/save/index.d.ts.map +1 -0
  60. package/dist/src/messages/document/save/index.js +2 -0
  61. package/dist/src/messages/document/save/index.js.map +1 -0
  62. package/dist/src/messages/document/save/message.schemas.d.ts +34 -0
  63. package/dist/src/messages/document/save/message.schemas.d.ts.map +1 -0
  64. package/dist/src/messages/document/save/message.schemas.js +21 -0
  65. package/dist/src/messages/document/save/message.schemas.js.map +1 -0
  66. package/dist/src/messages/document/saveRequested/message.schemas.d.ts +41 -0
  67. package/dist/src/messages/document/saveRequested/message.schemas.d.ts.map +1 -0
  68. package/dist/src/messages/document/saveRequested/message.schemas.js +28 -0
  69. package/dist/src/messages/document/saveRequested/message.schemas.js.map +1 -0
  70. package/dist/src/messages/document/saved/message.schemas.d.ts +39 -0
  71. package/dist/src/messages/document/saved/message.schemas.d.ts.map +1 -0
  72. package/dist/src/messages/document/saved/message.schemas.js +26 -0
  73. package/dist/src/messages/document/saved/message.schemas.js.map +1 -0
  74. package/dist/src/messages/editor/index.d.ts +2 -0
  75. package/dist/src/messages/editor/index.d.ts.map +1 -0
  76. package/dist/src/messages/editor/index.js +2 -0
  77. package/dist/src/messages/editor/index.js.map +1 -0
  78. package/dist/src/messages/editor/openFile/message.schemas.d.ts +30 -0
  79. package/dist/src/messages/editor/openFile/message.schemas.d.ts.map +1 -0
  80. package/dist/src/messages/editor/openFile/message.schemas.js +17 -0
  81. package/dist/src/messages/editor/openFile/message.schemas.js.map +1 -0
  82. package/dist/src/messages/fs/fileChanged/message.schemas.d.ts +10 -0
  83. package/dist/src/messages/fs/fileChanged/message.schemas.d.ts.map +1 -0
  84. package/dist/src/messages/fs/fileChanged/message.schemas.js +10 -0
  85. package/dist/src/messages/fs/fileChanged/message.schemas.js.map +1 -0
  86. package/dist/src/messages/fs/index.d.ts +3 -0
  87. package/dist/src/messages/fs/index.d.ts.map +1 -0
  88. package/dist/src/messages/fs/index.js +3 -0
  89. package/dist/src/messages/fs/index.js.map +1 -0
  90. package/dist/src/messages/fs/subscribe/message.schemas.d.ts +54 -0
  91. package/dist/src/messages/fs/subscribe/message.schemas.d.ts.map +1 -0
  92. package/dist/src/messages/fs/subscribe/message.schemas.js +27 -0
  93. package/dist/src/messages/fs/subscribe/message.schemas.js.map +1 -0
  94. package/dist/src/messages/index.d.ts +15 -0
  95. package/dist/src/messages/index.d.ts.map +1 -0
  96. package/dist/src/messages/index.js +29 -0
  97. package/dist/src/messages/index.js.map +1 -0
  98. package/dist/src/messages/llm/index.d.ts +148 -0
  99. package/dist/src/messages/llm/index.d.ts.map +1 -0
  100. package/dist/src/messages/llm/index.js +124 -0
  101. package/dist/src/messages/llm/index.js.map +1 -0
  102. package/dist/src/messages/logs/index.d.ts +26 -0
  103. package/dist/src/messages/logs/index.d.ts.map +1 -0
  104. package/dist/src/messages/logs/index.js +24 -0
  105. package/dist/src/messages/logs/index.js.map +1 -0
  106. package/dist/src/messages/native/call/message.schemas.d.ts +34 -0
  107. package/dist/src/messages/native/call/message.schemas.d.ts.map +1 -0
  108. package/dist/src/messages/native/call/message.schemas.js +22 -0
  109. package/dist/src/messages/native/call/message.schemas.js.map +1 -0
  110. package/dist/src/messages/native/index.d.ts +2 -0
  111. package/dist/src/messages/native/index.d.ts.map +1 -0
  112. package/dist/src/messages/native/index.js +2 -0
  113. package/dist/src/messages/native/index.js.map +1 -0
  114. package/dist/src/messages/plugin/index.d.ts +78 -0
  115. package/dist/src/messages/plugin/index.d.ts.map +1 -0
  116. package/dist/src/messages/plugin/index.js +72 -0
  117. package/dist/src/messages/plugin/index.js.map +1 -0
  118. package/dist/src/messages/storage/index.d.ts +126 -0
  119. package/dist/src/messages/storage/index.d.ts.map +1 -0
  120. package/dist/src/messages/storage/index.js +109 -0
  121. package/dist/src/messages/storage/index.js.map +1 -0
  122. package/dist/src/messages/ui/UiChannel.d.ts +68 -0
  123. package/dist/src/messages/ui/UiChannel.d.ts.map +1 -0
  124. package/dist/src/messages/ui/UiChannel.js +81 -0
  125. package/dist/src/messages/ui/UiChannel.js.map +1 -0
  126. package/dist/src/messages/ui/confirm/index.d.ts +2 -0
  127. package/dist/src/messages/ui/confirm/index.d.ts.map +1 -0
  128. package/dist/src/messages/ui/confirm/index.js +2 -0
  129. package/dist/src/messages/ui/confirm/index.js.map +1 -0
  130. package/dist/src/messages/ui/confirm/message.schemas.d.ts +39 -0
  131. package/dist/src/messages/ui/confirm/message.schemas.d.ts.map +1 -0
  132. package/dist/src/messages/ui/confirm/message.schemas.js +25 -0
  133. package/dist/src/messages/ui/confirm/message.schemas.js.map +1 -0
  134. package/dist/src/messages/ui/getState/message.schemas.d.ts +38 -0
  135. package/dist/src/messages/ui/getState/message.schemas.d.ts.map +1 -0
  136. package/dist/src/messages/ui/getState/message.schemas.js +21 -0
  137. package/dist/src/messages/ui/getState/message.schemas.js.map +1 -0
  138. package/dist/src/messages/ui/index.d.ts +8 -0
  139. package/dist/src/messages/ui/index.d.ts.map +1 -0
  140. package/dist/src/messages/ui/index.js +8 -0
  141. package/dist/src/messages/ui/index.js.map +1 -0
  142. package/dist/src/messages/ui/setCollapseState/message.schemas.d.ts +33 -0
  143. package/dist/src/messages/ui/setCollapseState/message.schemas.d.ts.map +1 -0
  144. package/dist/src/messages/ui/setCollapseState/message.schemas.js +19 -0
  145. package/dist/src/messages/ui/setCollapseState/message.schemas.js.map +1 -0
  146. package/dist/src/messages/ui/showContextMenu/message.schemas.d.ts +61 -0
  147. package/dist/src/messages/ui/showContextMenu/message.schemas.d.ts.map +1 -0
  148. package/dist/src/messages/ui/showContextMenu/message.schemas.js +37 -0
  149. package/dist/src/messages/ui/showContextMenu/message.schemas.js.map +1 -0
  150. package/dist/src/messages/ui/showNotification/message.schemas.d.ts +38 -0
  151. package/dist/src/messages/ui/showNotification/message.schemas.d.ts.map +1 -0
  152. package/dist/src/messages/ui/showNotification/message.schemas.js +29 -0
  153. package/dist/src/messages/ui/showNotification/message.schemas.js.map +1 -0
  154. package/dist/src/messages/ui/tabsChanged/message.schemas.d.ts +24 -0
  155. package/dist/src/messages/ui/tabsChanged/message.schemas.d.ts.map +1 -0
  156. package/dist/src/messages/ui/tabsChanged/message.schemas.js +15 -0
  157. package/dist/src/messages/ui/tabsChanged/message.schemas.js.map +1 -0
  158. package/dist/src/messages/vfs/createDir/message.schemas.d.ts +30 -0
  159. package/dist/src/messages/vfs/createDir/message.schemas.d.ts.map +1 -0
  160. package/dist/src/messages/vfs/createDir/message.schemas.js +17 -0
  161. package/dist/src/messages/vfs/createDir/message.schemas.js.map +1 -0
  162. package/dist/src/messages/vfs/delete/message.schemas.d.ts +30 -0
  163. package/dist/src/messages/vfs/delete/message.schemas.d.ts.map +1 -0
  164. package/dist/src/messages/vfs/delete/message.schemas.js +17 -0
  165. package/dist/src/messages/vfs/delete/message.schemas.js.map +1 -0
  166. package/dist/src/messages/vfs/exists/message.schemas.d.ts +34 -0
  167. package/dist/src/messages/vfs/exists/message.schemas.d.ts.map +1 -0
  168. package/dist/src/messages/vfs/exists/message.schemas.js +21 -0
  169. package/dist/src/messages/vfs/exists/message.schemas.js.map +1 -0
  170. package/dist/src/messages/vfs/getAbsolutePath/message.schemas.d.ts +33 -0
  171. package/dist/src/messages/vfs/getAbsolutePath/message.schemas.d.ts.map +1 -0
  172. package/dist/src/messages/vfs/getAbsolutePath/message.schemas.js +20 -0
  173. package/dist/src/messages/vfs/getAbsolutePath/message.schemas.js.map +1 -0
  174. package/dist/src/messages/vfs/index.d.ts +9 -0
  175. package/dist/src/messages/vfs/index.d.ts.map +1 -0
  176. package/dist/src/messages/vfs/index.js +9 -0
  177. package/dist/src/messages/vfs/index.js.map +1 -0
  178. package/dist/src/messages/vfs/readDir/message.schemas.d.ts +41 -0
  179. package/dist/src/messages/vfs/readDir/message.schemas.d.ts.map +1 -0
  180. package/dist/src/messages/vfs/readDir/message.schemas.js +23 -0
  181. package/dist/src/messages/vfs/readDir/message.schemas.js.map +1 -0
  182. package/dist/src/messages/vfs/readFile/message.schemas.d.ts +31 -0
  183. package/dist/src/messages/vfs/readFile/message.schemas.d.ts.map +1 -0
  184. package/dist/src/messages/vfs/readFile/message.schemas.js +18 -0
  185. package/dist/src/messages/vfs/readFile/message.schemas.js.map +1 -0
  186. package/dist/src/messages/vfs/rename/message.schemas.d.ts +31 -0
  187. package/dist/src/messages/vfs/rename/message.schemas.d.ts.map +1 -0
  188. package/dist/src/messages/vfs/rename/message.schemas.js +18 -0
  189. package/dist/src/messages/vfs/rename/message.schemas.js.map +1 -0
  190. package/dist/src/messages/vfs/writeFile/message.schemas.d.ts +31 -0
  191. package/dist/src/messages/vfs/writeFile/message.schemas.d.ts.map +1 -0
  192. package/dist/src/messages/vfs/writeFile/message.schemas.js +18 -0
  193. package/dist/src/messages/vfs/writeFile/message.schemas.js.map +1 -0
  194. package/dist/src/messages/workspace/changed/message.schemas.d.ts +9 -0
  195. package/dist/src/messages/workspace/changed/message.schemas.d.ts.map +1 -0
  196. package/dist/src/messages/workspace/changed/message.schemas.js +9 -0
  197. package/dist/src/messages/workspace/changed/message.schemas.js.map +1 -0
  198. package/dist/src/messages/workspace/getDetails/message.schemas.d.ts +39 -0
  199. package/dist/src/messages/workspace/getDetails/message.schemas.d.ts.map +1 -0
  200. package/dist/src/messages/workspace/getDetails/message.schemas.js +22 -0
  201. package/dist/src/messages/workspace/getDetails/message.schemas.js.map +1 -0
  202. package/dist/src/messages/workspace/index.d.ts +4 -0
  203. package/dist/src/messages/workspace/index.d.ts.map +1 -0
  204. package/dist/src/messages/workspace/index.js +4 -0
  205. package/dist/src/messages/workspace/index.js.map +1 -0
  206. package/dist/src/messages/workspace/open/message.schemas.d.ts +29 -0
  207. package/dist/src/messages/workspace/open/message.schemas.d.ts.map +1 -0
  208. package/dist/src/messages/workspace/open/message.schemas.js +16 -0
  209. package/dist/src/messages/workspace/open/message.schemas.js.map +1 -0
  210. package/dist/src/namespaces/DocumentNamespace.d.ts +56 -0
  211. package/dist/src/namespaces/DocumentNamespace.d.ts.map +1 -0
  212. package/dist/src/namespaces/DocumentNamespace.js +129 -0
  213. package/dist/src/namespaces/DocumentNamespace.js.map +1 -0
  214. package/dist/src/namespaces/EditorNamespace.d.ts +11 -0
  215. package/dist/src/namespaces/EditorNamespace.d.ts.map +1 -0
  216. package/dist/src/namespaces/EditorNamespace.js +18 -0
  217. package/dist/src/namespaces/EditorNamespace.js.map +1 -0
  218. package/dist/src/namespaces/FsNamespace.d.ts +27 -0
  219. package/dist/src/namespaces/FsNamespace.d.ts.map +1 -0
  220. package/dist/src/namespaces/FsNamespace.js +52 -0
  221. package/dist/src/namespaces/FsNamespace.js.map +1 -0
  222. package/dist/src/namespaces/NativeNamespace.d.ts +11 -0
  223. package/dist/src/namespaces/NativeNamespace.d.ts.map +1 -0
  224. package/dist/src/namespaces/NativeNamespace.js +19 -0
  225. package/dist/src/namespaces/NativeNamespace.js.map +1 -0
  226. package/dist/src/namespaces/PluginNamespace.d.ts +56 -0
  227. package/dist/src/namespaces/PluginNamespace.d.ts.map +1 -0
  228. package/dist/src/namespaces/PluginNamespace.js +116 -0
  229. package/dist/src/namespaces/PluginNamespace.js.map +1 -0
  230. package/dist/src/namespaces/StorageNamespace.d.ts +56 -0
  231. package/dist/src/namespaces/StorageNamespace.d.ts.map +1 -0
  232. package/dist/src/namespaces/StorageNamespace.js +127 -0
  233. package/dist/src/namespaces/StorageNamespace.js.map +1 -0
  234. package/dist/src/namespaces/VfsNamespace.d.ts +25 -0
  235. package/dist/src/namespaces/VfsNamespace.d.ts.map +1 -0
  236. package/dist/src/namespaces/VfsNamespace.js +64 -0
  237. package/dist/src/namespaces/VfsNamespace.js.map +1 -0
  238. package/dist/src/namespaces/WorkspaceNamespace.d.ts +18 -0
  239. package/dist/src/namespaces/WorkspaceNamespace.d.ts.map +1 -0
  240. package/dist/src/namespaces/WorkspaceNamespace.js +48 -0
  241. package/dist/src/namespaces/WorkspaceNamespace.js.map +1 -0
  242. package/dist/src/namespaces/index.d.ts +9 -0
  243. package/dist/src/namespaces/index.d.ts.map +1 -0
  244. package/dist/src/namespaces/index.js +9 -0
  245. package/dist/src/namespaces/index.js.map +1 -0
  246. package/dist/tsconfig.tsbuildinfo +1 -0
  247. package/eslint.config.js +25 -0
  248. package/package.json +28 -0
  249. package/src/PracticalKitSdk.ts +325 -0
  250. package/src/index.ts +10 -0
  251. package/src/keyboard/KeyboardShortcutForwarder.ts +35 -0
  252. package/src/keyboard/index.ts +1 -0
  253. package/src/llm/ToolRegistry.ts +186 -0
  254. package/src/logs/channel/IFrameLogChannelAdapter.ts +44 -0
  255. package/src/logs/channel/ILogChannelAdapter.ts +5 -0
  256. package/src/logs/channel/LogChannel.ts +49 -0
  257. package/src/logs/outputs/types.ts +21 -0
  258. package/src/messages/IFrameClient.ts +113 -0
  259. package/src/messages/IFrameMessageBus.ts +28 -0
  260. package/src/messages/base/index.ts +16 -0
  261. package/src/messages/document/index.ts +4 -0
  262. package/src/messages/document/requestContent/message.schemas.ts +28 -0
  263. package/src/messages/document/save/index.ts +1 -0
  264. package/src/messages/document/save/message.schemas.ts +24 -0
  265. package/src/messages/document/saveRequested/message.schemas.ts +35 -0
  266. package/src/messages/document/saved/message.schemas.ts +29 -0
  267. package/src/messages/editor/index.ts +1 -0
  268. package/src/messages/editor/openFile/message.schemas.ts +22 -0
  269. package/src/messages/fs/fileChanged/message.schemas.ts +12 -0
  270. package/src/messages/fs/index.ts +2 -0
  271. package/src/messages/fs/subscribe/message.schemas.ts +33 -0
  272. package/src/messages/index.ts +41 -0
  273. package/src/messages/llm/index.ts +158 -0
  274. package/src/messages/logs/index.ts +39 -0
  275. package/src/messages/native/call/message.schemas.ts +25 -0
  276. package/src/messages/native/index.ts +1 -0
  277. package/src/messages/plugin/index.ts +95 -0
  278. package/src/messages/storage/index.ts +140 -0
  279. package/src/messages/ui/UiChannel.ts +156 -0
  280. package/src/messages/ui/confirm/index.ts +1 -0
  281. package/src/messages/ui/confirm/message.schemas.ts +36 -0
  282. package/src/messages/ui/getState/message.schemas.ts +33 -0
  283. package/src/messages/ui/index.ts +7 -0
  284. package/src/messages/ui/setCollapseState/message.schemas.ts +34 -0
  285. package/src/messages/ui/showContextMenu/message.schemas.ts +64 -0
  286. package/src/messages/ui/showNotification/message.schemas.ts +41 -0
  287. package/src/messages/ui/tabsChanged/message.schemas.ts +25 -0
  288. package/src/messages/vfs/createDir/message.schemas.ts +20 -0
  289. package/src/messages/vfs/delete/message.schemas.ts +20 -0
  290. package/src/messages/vfs/exists/message.schemas.ts +32 -0
  291. package/src/messages/vfs/getAbsolutePath/message.schemas.ts +27 -0
  292. package/src/messages/vfs/index.ts +8 -0
  293. package/src/messages/vfs/readDir/message.schemas.ts +36 -0
  294. package/src/messages/vfs/readFile/message.schemas.ts +21 -0
  295. package/src/messages/vfs/rename/message.schemas.ts +21 -0
  296. package/src/messages/vfs/writeFile/message.schemas.ts +21 -0
  297. package/src/messages/workspace/changed/message.schemas.ts +18 -0
  298. package/src/messages/workspace/getDetails/message.schemas.ts +39 -0
  299. package/src/messages/workspace/index.ts +3 -0
  300. package/src/messages/workspace/open/message.schemas.ts +27 -0
  301. package/src/namespaces/DocumentNamespace.ts +164 -0
  302. package/src/namespaces/EditorNamespace.ts +27 -0
  303. package/src/namespaces/FsNamespace.ts +77 -0
  304. package/src/namespaces/NativeNamespace.ts +34 -0
  305. package/src/namespaces/PluginNamespace.ts +156 -0
  306. package/src/namespaces/StorageNamespace.ts +186 -0
  307. package/src/namespaces/VfsNamespace.ts +135 -0
  308. package/src/namespaces/WorkspaceNamespace.ts +80 -0
  309. package/src/namespaces/index.ts +8 -0
  310. package/tsconfig.json +41 -0
@@ -0,0 +1,27 @@
1
+ import type { IFrameClient } from "../messages/IFrameClient.js";
2
+ import { EditorOpenFile } from "../messages/index.js";
3
+
4
+ /**
5
+ * Editor namespace for editor operations.
6
+ * This class is not part of the public SDK API.
7
+ */
8
+ export class EditorNamespace {
9
+ private readonly client: IFrameClient;
10
+
11
+ constructor(client: IFrameClient) {
12
+ this.client = client;
13
+ }
14
+
15
+ async openFile(path: string): Promise<void> {
16
+ const response = await this.client.sendAndWait(
17
+ "editor.openFile",
18
+ { path },
19
+ EditorOpenFile.Request,
20
+ EditorOpenFile.Response
21
+ );
22
+
23
+ if (!response.success) {
24
+ throw new Error(response.error);
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,77 @@
1
+ import { safeParse } from "valibot";
2
+ import type { IFrameClient } from "../messages/IFrameClient.js";
3
+ import {
4
+ FsSubscribe,
5
+ FsUnsubscribe,
6
+ FsFileChangedSchema,
7
+ type FsFileChanged,
8
+ } from "../messages/index.js";
9
+
10
+ /**
11
+ * File system namespace for file watching operations.
12
+ * This class is not part of the public SDK API.
13
+ */
14
+ export class FsNamespace {
15
+ private readonly client: IFrameClient;
16
+
17
+ constructor(client: IFrameClient) {
18
+ this.client = client;
19
+ }
20
+
21
+ /**
22
+ * Subscribe to file system change events.
23
+ * Requires the "fs.watch" permission in the plugin manifest.
24
+ */
25
+ async subscribe(): Promise<void> {
26
+ const response = await this.client.sendAndWait(
27
+ "fs.subscribe",
28
+ {},
29
+ FsSubscribe.Request,
30
+ FsSubscribe.Response
31
+ );
32
+
33
+ if (!response.success) {
34
+ throw new Error(response.error);
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Unsubscribe from file system change events.
40
+ */
41
+ async unsubscribe(): Promise<void> {
42
+ const response = await this.client.sendAndWait(
43
+ "fs.unsubscribe",
44
+ {},
45
+ FsUnsubscribe.Request,
46
+ FsUnsubscribe.Response
47
+ );
48
+
49
+ if (!response.success) {
50
+ throw new Error(response.error);
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Listen for file change events.
56
+ * Must call fs.subscribe() first.
57
+ * @param callback Function called when a file changes
58
+ * @returns Unsubscribe function
59
+ */
60
+ onFileChanged(callback: (event: FsFileChanged) => void): () => void {
61
+ return this.client.subscribe((evt) => {
62
+ const { type } = evt.data || {};
63
+ if (type !== "fs.fileChanged") {
64
+ return;
65
+ }
66
+
67
+ const result = safeParse(FsFileChangedSchema, evt.data);
68
+
69
+ if (!result.success) {
70
+ console.error("[SDK] Invalid fs.fileChanged payload:", result.issues);
71
+ return;
72
+ }
73
+
74
+ callback(result.output);
75
+ });
76
+ }
77
+ }
@@ -0,0 +1,34 @@
1
+ import type { IFrameClient } from "../messages/IFrameClient.js";
2
+ import { NativeCall } from "../messages/index.js";
3
+
4
+ /**
5
+ * Native namespace for calling native plugin modules.
6
+ * This class is not part of the public SDK API.
7
+ */
8
+ export class NativeNamespace {
9
+ private readonly client: IFrameClient;
10
+
11
+ constructor(client: IFrameClient) {
12
+ this.client = client;
13
+ }
14
+
15
+ async call(
16
+ pluginId: string,
17
+ moduleId: string,
18
+ command: string,
19
+ args: unknown
20
+ ): Promise<unknown> {
21
+ const response = await this.client.sendAndWait(
22
+ "native.call",
23
+ { pluginId, moduleId, command, args },
24
+ NativeCall.Request,
25
+ NativeCall.Response
26
+ );
27
+
28
+ if (!response.success) {
29
+ throw new Error(response.error);
30
+ }
31
+
32
+ return response.data;
33
+ }
34
+ }
@@ -0,0 +1,156 @@
1
+ import { safeParse } from "valibot";
2
+ import type { IFrameClient } from "../messages/IFrameClient.js";
3
+ import {
4
+ PluginSendMessage,
5
+ PluginMessage,
6
+ PluginSendBroadcast,
7
+ PluginBroadcast,
8
+ } from "../messages/index.js";
9
+
10
+ /**
11
+ * Intra-plugin messaging namespace.
12
+ * This class is not part of the public SDK API.
13
+ *
14
+ * Allows modules within the same plugin to communicate with each other.
15
+ * Messages are routed through the host - modules cannot communicate directly.
16
+ *
17
+ * Use cases:
18
+ * - A panel module sending commands to a backgroundService module
19
+ * - A backgroundService module notifying UI modules of state changes
20
+ * - Coordinating work between multiple UI modules
21
+ */
22
+ export class PluginNamespace {
23
+ private readonly client: IFrameClient;
24
+
25
+ constructor(client: IFrameClient) {
26
+ this.client = client;
27
+ }
28
+
29
+ /**
30
+ * Send a message to a specific sibling module within the same plugin.
31
+ * Returns a promise that resolves with the response from the target module.
32
+ *
33
+ * @param targetModuleId - The module ID to send the message to
34
+ * @param message - The message payload (any serializable value)
35
+ * @returns Promise resolving to the response data from the target module
36
+ * @throws Error if the target module doesn't exist or fails to respond
37
+ */
38
+ async sendMessage<T = unknown>(
39
+ targetModuleId: string,
40
+ message: unknown
41
+ ): Promise<T> {
42
+ const response = await this.client.sendAndWait(
43
+ "plugin.sendMessage",
44
+ { targetModuleId, message },
45
+ PluginSendMessage.Request,
46
+ PluginSendMessage.Response
47
+ );
48
+
49
+ if (!response.success) {
50
+ throw new Error(response.error || "Failed to send message");
51
+ }
52
+
53
+ return response.data as T;
54
+ }
55
+
56
+ /**
57
+ * Listen for incoming messages from sibling modules.
58
+ * The handler should return a response that will be sent back to the sender.
59
+ * Supports both sync and async handlers.
60
+ *
61
+ * @param handler - Function that handles incoming messages and returns a response (sync or async)
62
+ * @returns Unsubscribe function
63
+ */
64
+ onMessage(
65
+ handler: (
66
+ payload: PluginMessage.HandlerPayload
67
+ ) => unknown | Promise<unknown>
68
+ ): () => void {
69
+ return this.client.subscribe((evt) => {
70
+ const { type } = evt.data || {};
71
+ if (type !== "plugin.message") {
72
+ return;
73
+ }
74
+
75
+ const result = safeParse(PluginMessage.Request, evt.data);
76
+
77
+ if (!result.success) {
78
+ console.error("[SDK] Invalid plugin.message payload:", result.issues);
79
+ return;
80
+ }
81
+
82
+ const requestId = result.output.payload.requestId;
83
+
84
+ // Wrap in Promise.resolve to handle both sync and async handlers
85
+ Promise.resolve()
86
+ .then(() => handler(result.output.payload))
87
+ .then((responseData) => {
88
+ this.client.send({
89
+ type: "plugin.message.response",
90
+ payload: {
91
+ requestId,
92
+ success: true,
93
+ data: responseData,
94
+ },
95
+ });
96
+ })
97
+ .catch((error) => {
98
+ console.error("[SDK] Error in plugin.onMessage handler:", error);
99
+ this.client.send({
100
+ type: "plugin.message.response",
101
+ payload: {
102
+ requestId,
103
+ success: false,
104
+ error: error instanceof Error ? error.message : String(error),
105
+ },
106
+ });
107
+ });
108
+ });
109
+ }
110
+
111
+ /**
112
+ * Broadcast a message to all sibling modules within the same plugin.
113
+ * This is fire-and-forget - no response is expected.
114
+ *
115
+ * @param message - The message payload (any serializable value)
116
+ */
117
+ async sendBroadcast(message: unknown): Promise<void> {
118
+ const response = await this.client.sendAndWait(
119
+ "plugin.sendBroadcast",
120
+ { message },
121
+ PluginSendBroadcast.Request,
122
+ PluginSendBroadcast.Response
123
+ );
124
+
125
+ if (!response.success) {
126
+ throw new Error(response.error || "Failed to send broadcast");
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Listen for broadcast messages from sibling modules.
132
+ * Broadcasts are fire-and-forget - no response is expected.
133
+ *
134
+ * @param handler - Function that handles incoming broadcasts
135
+ * @returns Unsubscribe function
136
+ */
137
+ onBroadcast(
138
+ handler: (payload: { fromModuleId: string; message: unknown }) => void
139
+ ): () => void {
140
+ return this.client.subscribe((evt) => {
141
+ const { type } = evt.data || {};
142
+ if (type !== "plugin.broadcast") {
143
+ return;
144
+ }
145
+
146
+ const result = safeParse(PluginBroadcast.Event, evt.data);
147
+
148
+ if (!result.success) {
149
+ console.error("[SDK] Invalid plugin.broadcast payload:", result.issues);
150
+ return;
151
+ }
152
+
153
+ handler(result.output.payload);
154
+ });
155
+ }
156
+ }
@@ -0,0 +1,186 @@
1
+ import type { IFrameClient } from "../messages/IFrameClient.js";
2
+ import {
3
+ StorageGet,
4
+ StorageSet,
5
+ StorageDelete,
6
+ StorageGetSecret,
7
+ StorageSetSecret,
8
+ StorageDeleteSecret,
9
+ } from "../messages/index.js";
10
+
11
+ /**
12
+ * Encode Uint8Array to base64 string.
13
+ */
14
+ function encodeBase64(bytes: Uint8Array): string {
15
+ let binary = "";
16
+ const len = bytes.length;
17
+ for (let i = 0; i < len; i++) {
18
+ binary += String.fromCharCode(bytes[i]!);
19
+ }
20
+ return btoa(binary);
21
+ }
22
+
23
+ /**
24
+ * Decode base64 string to Uint8Array.
25
+ */
26
+ function decodeBase64(base64: string): Uint8Array {
27
+ const binary = atob(base64);
28
+ const len = binary.length;
29
+ const bytes = new Uint8Array(len);
30
+ for (let i = 0; i < len; i++) {
31
+ bytes[i] = binary.charCodeAt(i);
32
+ }
33
+ return bytes;
34
+ }
35
+
36
+ /**
37
+ * Storage namespace for plugin data and secrets.
38
+ *
39
+ * Provides two storage types:
40
+ * - `get`/`set`/`delete`: Non-secret storage for any binary data
41
+ * - `getSecret`/`setSecret`/`deleteSecret`: Encrypted storage for sensitive data
42
+ *
43
+ * Both use Uint8Array for values to support any binary data.
44
+ * Data is isolated per plugin (plugins cannot access each other's storage).
45
+ */
46
+ export class StorageNamespace {
47
+ private readonly client: IFrameClient;
48
+
49
+ constructor(client: IFrameClient) {
50
+ this.client = client;
51
+ }
52
+
53
+ // ===========================================================================
54
+ // Non-secret storage (raw bytes, unencrypted)
55
+ // ===========================================================================
56
+
57
+ /**
58
+ * Get a value from storage.
59
+ *
60
+ * @param key - The storage key
61
+ * @returns The value as Uint8Array, or null if not found
62
+ */
63
+ async get(key: string): Promise<Uint8Array | null> {
64
+ const response = await this.client.sendAndWait(
65
+ "storage.get",
66
+ { key },
67
+ StorageGet.Request,
68
+ StorageGet.Response
69
+ );
70
+
71
+ if (!response.success) {
72
+ throw new Error(response.error || "Failed to get value");
73
+ }
74
+
75
+ if (response.value === null) {
76
+ return null;
77
+ }
78
+
79
+ return decodeBase64(response.value);
80
+ }
81
+
82
+ /**
83
+ * Set a value in storage.
84
+ *
85
+ * @param key - The storage key
86
+ * @param value - The value to store as Uint8Array
87
+ */
88
+ async set(key: string, value: Uint8Array): Promise<void> {
89
+ const base64 = encodeBase64(value);
90
+ const response = await this.client.sendAndWait(
91
+ "storage.set",
92
+ { key, value: base64 },
93
+ StorageSet.Request,
94
+ StorageSet.Response
95
+ );
96
+
97
+ if (!response.success) {
98
+ throw new Error(response.error || "Failed to set value");
99
+ }
100
+ }
101
+
102
+ /**
103
+ * Delete a value from storage.
104
+ *
105
+ * @param key - The storage key to delete
106
+ */
107
+ async delete(key: string): Promise<void> {
108
+ const response = await this.client.sendAndWait(
109
+ "storage.delete",
110
+ { key },
111
+ StorageDelete.Request,
112
+ StorageDelete.Response
113
+ );
114
+
115
+ if (!response.success) {
116
+ throw new Error(response.error || "Failed to delete value");
117
+ }
118
+ }
119
+
120
+ // ===========================================================================
121
+ // Secret storage (encrypted at rest)
122
+ // ===========================================================================
123
+
124
+ /**
125
+ * Get a secret value for this plugin.
126
+ *
127
+ * @param key - The secret key (e.g., "apiKey", "token")
128
+ * @returns The secret value as Uint8Array, or null if not found
129
+ */
130
+ async getSecret(key: string): Promise<Uint8Array | null> {
131
+ const response = await this.client.sendAndWait(
132
+ "storage.getSecret",
133
+ { key },
134
+ StorageGetSecret.Request,
135
+ StorageGetSecret.Response
136
+ );
137
+
138
+ if (!response.success) {
139
+ throw new Error(response.error || "Failed to get secret");
140
+ }
141
+
142
+ if (response.value === null) {
143
+ return null;
144
+ }
145
+
146
+ return decodeBase64(response.value);
147
+ }
148
+
149
+ /**
150
+ * Set a secret value for this plugin.
151
+ *
152
+ * @param key - The secret key (e.g., "apiKey", "token")
153
+ * @param value - The secret value to store as Uint8Array
154
+ */
155
+ async setSecret(key: string, value: Uint8Array): Promise<void> {
156
+ const base64 = encodeBase64(value);
157
+ const response = await this.client.sendAndWait(
158
+ "storage.setSecret",
159
+ { key, value: base64 },
160
+ StorageSetSecret.Request,
161
+ StorageSetSecret.Response
162
+ );
163
+
164
+ if (!response.success) {
165
+ throw new Error(response.error || "Failed to set secret");
166
+ }
167
+ }
168
+
169
+ /**
170
+ * Delete a secret value for this plugin.
171
+ *
172
+ * @param key - The secret key to delete
173
+ */
174
+ async deleteSecret(key: string): Promise<void> {
175
+ const response = await this.client.sendAndWait(
176
+ "storage.deleteSecret",
177
+ { key },
178
+ StorageDeleteSecret.Request,
179
+ StorageDeleteSecret.Response
180
+ );
181
+
182
+ if (!response.success) {
183
+ throw new Error(response.error || "Failed to delete secret");
184
+ }
185
+ }
186
+ }
@@ -0,0 +1,135 @@
1
+ import type { IFrameClient } from "../messages/IFrameClient.js";
2
+ import {
3
+ VfsCreateDir,
4
+ VfsDelete,
5
+ VfsExists,
6
+ VfsGetAbsolutePath,
7
+ VfsReadDir,
8
+ VfsReadFile,
9
+ VfsRename,
10
+ VfsWriteFile,
11
+ } from "../messages/index.js";
12
+
13
+ /**
14
+ * Virtual file system namespace for file operations.
15
+ * This class is not part of the public SDK API.
16
+ */
17
+ export class VfsNamespace {
18
+ private readonly client: IFrameClient;
19
+
20
+ constructor(client: IFrameClient) {
21
+ this.client = client;
22
+ }
23
+
24
+ async exists(path: string) {
25
+ const response = await this.client.sendAndWait(
26
+ "vfs.exists",
27
+ { path },
28
+ VfsExists.Request,
29
+ VfsExists.Response
30
+ );
31
+
32
+ if (!response.success) {
33
+ throw new Error(response.error);
34
+ }
35
+
36
+ return response.data;
37
+ }
38
+
39
+ async readDir(path: string) {
40
+ const response = await this.client.sendAndWait(
41
+ "vfs.readDir",
42
+ { path },
43
+ VfsReadDir.Request,
44
+ VfsReadDir.Response
45
+ );
46
+
47
+ if (!response.success) {
48
+ throw new Error(response.error);
49
+ }
50
+
51
+ return response.data;
52
+ }
53
+
54
+ async readFile(path: string): Promise<string> {
55
+ const response = await this.client.sendAndWait(
56
+ "vfs.readFile",
57
+ { path },
58
+ VfsReadFile.Request,
59
+ VfsReadFile.Response
60
+ );
61
+
62
+ if (!response.success) {
63
+ throw new Error(response.error);
64
+ }
65
+
66
+ return response.data;
67
+ }
68
+
69
+ async writeFile(path: string, content: string): Promise<void> {
70
+ const response = await this.client.sendAndWait(
71
+ "vfs.writeFile",
72
+ { path, content },
73
+ VfsWriteFile.Request,
74
+ VfsWriteFile.Response
75
+ );
76
+
77
+ if (!response.success) {
78
+ throw new Error(response.error);
79
+ }
80
+ }
81
+
82
+ async getAbsolutePath(path: string): Promise<string> {
83
+ const response = await this.client.sendAndWait(
84
+ "vfs.getAbsolutePath",
85
+ { path },
86
+ VfsGetAbsolutePath.Request,
87
+ VfsGetAbsolutePath.Response
88
+ );
89
+
90
+ if (!response.success) {
91
+ throw new Error(response.error);
92
+ }
93
+
94
+ return response.data.absolutePath;
95
+ }
96
+
97
+ async rename(oldPath: string, newPath: string): Promise<void> {
98
+ const response = await this.client.sendAndWait(
99
+ "vfs.rename",
100
+ { oldPath, newPath },
101
+ VfsRename.Request,
102
+ VfsRename.Response
103
+ );
104
+
105
+ if (!response.success) {
106
+ throw new Error(response.error);
107
+ }
108
+ }
109
+
110
+ async delete(path: string): Promise<void> {
111
+ const response = await this.client.sendAndWait(
112
+ "vfs.delete",
113
+ { path },
114
+ VfsDelete.Request,
115
+ VfsDelete.Response
116
+ );
117
+
118
+ if (!response.success) {
119
+ throw new Error(response.error);
120
+ }
121
+ }
122
+
123
+ async createDir(path: string): Promise<void> {
124
+ const response = await this.client.sendAndWait(
125
+ "vfs.createDir",
126
+ { path },
127
+ VfsCreateDir.Request,
128
+ VfsCreateDir.Response
129
+ );
130
+
131
+ if (!response.success) {
132
+ throw new Error(response.error);
133
+ }
134
+ }
135
+ }
@@ -0,0 +1,80 @@
1
+ import { safeParse } from "valibot";
2
+ import type { IFrameClient } from "../messages/IFrameClient.js";
3
+ import {
4
+ WorkspaceGetDetails,
5
+ WorkspaceOpen,
6
+ WorkspaceChangedSchema,
7
+ type WorkspaceChanged,
8
+ type WorkspaceDetails,
9
+ } from "../messages/index.js";
10
+
11
+ /**
12
+ * Workspace namespace for workspace operations.
13
+ * This class is not part of the public SDK API.
14
+ */
15
+ export class WorkspaceNamespace {
16
+ private readonly client: IFrameClient;
17
+
18
+ constructor(client: IFrameClient) {
19
+ this.client = client;
20
+ }
21
+
22
+ async getDetails(): Promise<WorkspaceDetails> {
23
+ const response = await this.client.sendAndWait(
24
+ "workspace.getDetails",
25
+ {},
26
+ WorkspaceGetDetails.Request,
27
+ WorkspaceGetDetails.Response
28
+ );
29
+
30
+ if (!response.success) {
31
+ throw new Error(response.error);
32
+ }
33
+
34
+ return response.data;
35
+ }
36
+
37
+ onChanged(callback: (payload: WorkspaceChanged) => void): () => void {
38
+ return this.client.subscribe((evt) => {
39
+ const { type, payload } = evt.data || {};
40
+
41
+ if (type !== "workspace.changed") {
42
+ return;
43
+ }
44
+
45
+ const result = safeParse(WorkspaceChangedSchema, {
46
+ type,
47
+ ...payload,
48
+ });
49
+
50
+ if (!result.success) {
51
+ console.error(
52
+ "[SDK] Invalid workspace.changed payload:",
53
+ result.issues
54
+ );
55
+ return;
56
+ }
57
+
58
+ callback(result.output);
59
+ });
60
+ }
61
+
62
+ /**
63
+ * Open a folder picker dialog to select a workspace.
64
+ * @returns The selected workspace path, or null if cancelled
65
+ */
66
+ async open(): Promise<string | null> {
67
+ const response = await this.client.sendAndWait(
68
+ "workspace.open",
69
+ {},
70
+ WorkspaceOpen.Request,
71
+ WorkspaceOpen.Response
72
+ );
73
+
74
+ if (!response.success) {
75
+ throw new Error(response.error);
76
+ }
77
+
78
+ return response.path;
79
+ }
80
+ }
@@ -0,0 +1,8 @@
1
+ export { VfsNamespace } from "./VfsNamespace.js";
2
+ export { WorkspaceNamespace } from "./WorkspaceNamespace.js";
3
+ export { EditorNamespace } from "./EditorNamespace.js";
4
+ export { NativeNamespace } from "./NativeNamespace.js";
5
+ export { FsNamespace } from "./FsNamespace.js";
6
+ export { DocumentNamespace } from "./DocumentNamespace.js";
7
+ export { PluginNamespace } from "./PluginNamespace.js";
8
+ export { StorageNamespace } from "./StorageNamespace.js";