@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,33 @@
1
+ import { string, array, object, boolean, type InferOutput } from "valibot";
2
+ import { respondableMessage } from "../../base/index.js";
3
+
4
+ const TabInfoSchema = object({
5
+ id: string(),
6
+ title: string(),
7
+ isActive: boolean(),
8
+ });
9
+
10
+ const UiGetStateRequestPayloadSchema = object({
11
+ requestId: string(),
12
+ });
13
+
14
+ const UiGetStateResponsePayloadSchema = object({
15
+ requestId: string(),
16
+ openTabs: array(TabInfoSchema),
17
+ });
18
+
19
+ export const UiGetState = {
20
+ Request: respondableMessage("ui.getState", {}),
21
+ Response: respondableMessage("ui.getState.response", {
22
+ openTabs: array(TabInfoSchema),
23
+ }),
24
+ };
25
+
26
+ export type UiGetStateRequest = InferOutput<typeof UiGetState.Request>;
27
+ export type UiGetStateResponse = InferOutput<typeof UiGetState.Response>;
28
+ export type UiGetStateRequestPayload = InferOutput<
29
+ typeof UiGetStateRequestPayloadSchema
30
+ >;
31
+ export type UiGetStateResponsePayload = InferOutput<
32
+ typeof UiGetStateResponsePayloadSchema
33
+ >;
@@ -0,0 +1,7 @@
1
+ export * from "./setCollapseState/message.schemas.js";
2
+ export * from "./showContextMenu/message.schemas.js";
3
+ export * from "./showNotification/message.schemas.js";
4
+ export * from "./tabsChanged/message.schemas.js";
5
+ export * from "./getState/message.schemas.js";
6
+ export * from "./confirm/message.schemas.js";
7
+ export * from "./UiChannel.js";
@@ -0,0 +1,34 @@
1
+ import { boolean, string, object, type InferOutput } from "valibot";
2
+ import { respondableMessage } from "../../base/index.js";
3
+
4
+ const UiSetCollapseStateRequestPayloadSchema = object({
5
+ requestId: string(),
6
+ collapsed: boolean(),
7
+ });
8
+
9
+ const UiSetCollapseStateResponsePayloadSchema = object({
10
+ requestId: string(),
11
+ success: boolean(),
12
+ });
13
+
14
+ export const UiSetCollapseState = {
15
+ Request: respondableMessage("ui.setCollapseState", {
16
+ collapsed: boolean(),
17
+ }),
18
+ Response: respondableMessage("ui.setCollapseState.response", {
19
+ success: boolean(),
20
+ }),
21
+ };
22
+
23
+ export type UiSetCollapseStateRequest = InferOutput<
24
+ typeof UiSetCollapseState.Request
25
+ >;
26
+ export type UiSetCollapseStateResponse = InferOutput<
27
+ typeof UiSetCollapseState.Response
28
+ >;
29
+ export type UiSetCollapseStateRequestPayload = InferOutput<
30
+ typeof UiSetCollapseStateRequestPayloadSchema
31
+ >;
32
+ export type UiSetCollapseStateResponsePayload = InferOutput<
33
+ typeof UiSetCollapseStateResponsePayloadSchema
34
+ >;
@@ -0,0 +1,64 @@
1
+ import {
2
+ number,
3
+ string,
4
+ array,
5
+ object,
6
+ nullable,
7
+ union,
8
+ literal,
9
+ optional,
10
+ type InferOutput,
11
+ } from "valibot";
12
+ import { respondableMessage } from "../../base/index.js";
13
+
14
+ /**
15
+ * Context menu item schema.
16
+ * Can be either a regular item with id/label, or a separator.
17
+ */
18
+ const ContextMenuItem = union([
19
+ object({
20
+ type: optional(literal("item")),
21
+ id: string(),
22
+ label: string(),
23
+ }),
24
+ object({
25
+ type: literal("separator"),
26
+ }),
27
+ ]);
28
+
29
+ export const UiShowContextMenu = {
30
+ Request: respondableMessage("ui.showContextMenu", {
31
+ x: number(),
32
+ y: number(),
33
+ items: array(ContextMenuItem),
34
+ }),
35
+ Response: respondableMessage("ui.showContextMenu.response", {
36
+ selectedItemId: nullable(string()),
37
+ }),
38
+ };
39
+
40
+ const UiShowContextMenuRequestPayloadSchema = object({
41
+ requestId: string(),
42
+ x: number(),
43
+ y: number(),
44
+ items: array(ContextMenuItem),
45
+ });
46
+
47
+ const UiShowContextMenuResponsePayloadSchema = object({
48
+ requestId: string(),
49
+ selectedItemId: nullable(string()),
50
+ });
51
+
52
+ export type ContextMenuItemType = InferOutput<typeof ContextMenuItem>;
53
+ export type UiShowContextMenuRequest = InferOutput<
54
+ typeof UiShowContextMenu.Request
55
+ >;
56
+ export type UiShowContextMenuResponse = InferOutput<
57
+ typeof UiShowContextMenu.Response
58
+ >;
59
+ export type UiShowContextMenuRequestPayload = InferOutput<
60
+ typeof UiShowContextMenuRequestPayloadSchema
61
+ >;
62
+ export type UiShowContextMenuResponsePayload = InferOutput<
63
+ typeof UiShowContextMenuResponsePayloadSchema
64
+ >;
@@ -0,0 +1,41 @@
1
+ import { string, object, literal, union, type InferOutput } from "valibot";
2
+ import { respondableMessage } from "../../base/index.js";
3
+
4
+ const NotificationTypeSchema = union([
5
+ literal("info"),
6
+ literal("success"),
7
+ literal("warning"),
8
+ literal("error"),
9
+ ]);
10
+
11
+ const UiShowNotificationRequestPayloadSchema = object({
12
+ requestId: string(),
13
+ message: string(),
14
+ type: NotificationTypeSchema,
15
+ });
16
+
17
+ export const UiShowNotification = {
18
+ Request: respondableMessage("ui.showNotification", {
19
+ message: string(),
20
+ type: NotificationTypeSchema,
21
+ }),
22
+ Response: union([
23
+ respondableMessage("ui.showNotification.response", {
24
+ success: literal(true),
25
+ }),
26
+ respondableMessage("ui.showNotification.response", {
27
+ success: literal(false),
28
+ error: string(),
29
+ }),
30
+ ]),
31
+ };
32
+
33
+ export type UiShowNotificationRequest = InferOutput<
34
+ typeof UiShowNotification.Request
35
+ >;
36
+ export type UiShowNotificationResponse = InferOutput<
37
+ typeof UiShowNotification.Response
38
+ >;
39
+ export type UiShowNotificationRequestPayload = InferOutput<
40
+ typeof UiShowNotificationRequestPayloadSchema
41
+ >;
@@ -0,0 +1,25 @@
1
+ import * as v from "valibot";
2
+
3
+ export const UI_TABS_CHANGED_EVENT = "ui.tabsChanged";
4
+
5
+ export const UiTabsChangedEventPayloadSchema = v.object({
6
+ openTabs: v.array(
7
+ v.object({
8
+ id: v.string(),
9
+ title: v.string(),
10
+ isActive: v.boolean(),
11
+ })
12
+ ),
13
+ hasOpenTabs: v.boolean(),
14
+ });
15
+
16
+ export type UiTabsChangedEventPayload = v.InferOutput<
17
+ typeof UiTabsChangedEventPayloadSchema
18
+ >;
19
+
20
+ export const UiTabsChangedEventSchema = v.object({
21
+ type: v.literal(UI_TABS_CHANGED_EVENT),
22
+ payload: UiTabsChangedEventPayloadSchema,
23
+ });
24
+
25
+ export type UiTabsChangedEvent = v.InferOutput<typeof UiTabsChangedEventSchema>;
@@ -0,0 +1,20 @@
1
+ import { string, literal, union, type InferOutput } from "valibot";
2
+ import { respondableMessage } from "../../base/index.js";
3
+
4
+ export const VfsCreateDir = {
5
+ Request: respondableMessage("vfs.createDir", {
6
+ path: string(),
7
+ }),
8
+ Response: union([
9
+ respondableMessage("vfs.createDir.response", {
10
+ success: literal(true),
11
+ }),
12
+ respondableMessage("vfs.createDir.response", {
13
+ success: literal(false),
14
+ error: string(),
15
+ }),
16
+ ]),
17
+ };
18
+
19
+ export type VfsCreateDirRequest = InferOutput<typeof VfsCreateDir.Request>;
20
+ export type VfsCreateDirResponse = InferOutput<typeof VfsCreateDir.Response>;
@@ -0,0 +1,20 @@
1
+ import { string, literal, union, type InferOutput } from "valibot";
2
+ import { respondableMessage } from "../../base/index.js";
3
+
4
+ export const VfsDelete = {
5
+ Request: respondableMessage("vfs.delete", {
6
+ path: string(),
7
+ }),
8
+ Response: union([
9
+ respondableMessage("vfs.delete.response", {
10
+ success: literal(true),
11
+ }),
12
+ respondableMessage("vfs.delete.response", {
13
+ success: literal(false),
14
+ error: string(),
15
+ }),
16
+ ]),
17
+ };
18
+
19
+ export type VfsDeleteRequest = InferOutput<typeof VfsDelete.Request>;
20
+ export type VfsDeleteResponse = InferOutput<typeof VfsDelete.Response>;
@@ -0,0 +1,32 @@
1
+ import {
2
+ string,
3
+ type InferOutput,
4
+ literal,
5
+ object,
6
+ union,
7
+ boolean,
8
+ nullable,
9
+ } from "valibot";
10
+ import { respondableMessage } from "../../base/index.js";
11
+
12
+ export const VfsExists = {
13
+ Request: respondableMessage("vfs.exists", {
14
+ path: string(),
15
+ }),
16
+ Response: union([
17
+ respondableMessage("vfs.exists.response", {
18
+ success: literal(true),
19
+ data: object({
20
+ exists: boolean(),
21
+ entryType: nullable(string()),
22
+ }),
23
+ }),
24
+ respondableMessage("vfs.exists.response", {
25
+ success: literal(false),
26
+ error: string(),
27
+ }),
28
+ ]),
29
+ };
30
+
31
+ export type VfsExistsRequest = InferOutput<typeof VfsExists.Request>;
32
+ export type VfsExistsResponse = InferOutput<typeof VfsExists.Response>;
@@ -0,0 +1,27 @@
1
+ import { string, type InferOutput, literal, object, union } from "valibot";
2
+ import { respondableMessage } from "../../base/index.js";
3
+
4
+ export const VfsGetAbsolutePath = {
5
+ Request: respondableMessage("vfs.getAbsolutePath", {
6
+ path: string(),
7
+ }),
8
+ Response: union([
9
+ respondableMessage("vfs.getAbsolutePath.response", {
10
+ success: literal(true),
11
+ data: object({
12
+ absolutePath: string(),
13
+ }),
14
+ }),
15
+ respondableMessage("vfs.getAbsolutePath.response", {
16
+ success: literal(false),
17
+ error: string(),
18
+ }),
19
+ ]),
20
+ };
21
+
22
+ export type VfsGetAbsolutePathRequest = InferOutput<
23
+ typeof VfsGetAbsolutePath.Request
24
+ >;
25
+ export type VfsGetAbsolutePathResponse = InferOutput<
26
+ typeof VfsGetAbsolutePath.Response
27
+ >;
@@ -0,0 +1,8 @@
1
+ export * from "./createDir/message.schemas.js";
2
+ export * from "./delete/message.schemas.js";
3
+ export * from "./exists/message.schemas.js";
4
+ export * from "./getAbsolutePath/message.schemas.js";
5
+ export * from "./readDir/message.schemas.js";
6
+ export * from "./readFile/message.schemas.js";
7
+ export * from "./rename/message.schemas.js";
8
+ export * from "./writeFile/message.schemas.js";
@@ -0,0 +1,36 @@
1
+ import {
2
+ string,
3
+ type InferOutput,
4
+ literal,
5
+ array,
6
+ object,
7
+ union,
8
+ number,
9
+ } from "valibot";
10
+ import { respondableMessage } from "../../base/index.js";
11
+
12
+ export const DirectoryEntrySchema = object({
13
+ name: string(),
14
+ type: union([literal("file"), literal("directory")]),
15
+ size: number(),
16
+ });
17
+
18
+ export const VfsReadDir = {
19
+ Request: respondableMessage("vfs.readDir", {
20
+ path: string(),
21
+ }),
22
+ Response: union([
23
+ respondableMessage("vfs.readDir.response", {
24
+ success: literal(true),
25
+ data: array(DirectoryEntrySchema),
26
+ }),
27
+ respondableMessage("vfs.readDir.response", {
28
+ success: literal(false),
29
+ error: string(),
30
+ }),
31
+ ]),
32
+ };
33
+
34
+ export type DirectoryEntry = InferOutput<typeof DirectoryEntrySchema>;
35
+ export type VfsReadDirRequest = InferOutput<typeof VfsReadDir.Request>;
36
+ export type VfsReadDirResponse = InferOutput<typeof VfsReadDir.Response>;
@@ -0,0 +1,21 @@
1
+ import { string, type InferOutput, literal, object, union } from "valibot";
2
+ import { respondableMessage } from "../../base/index.js";
3
+
4
+ export const VfsReadFile = {
5
+ Request: respondableMessage("vfs.readFile", {
6
+ path: string(),
7
+ }),
8
+ Response: union([
9
+ respondableMessage("vfs.readFile.response", {
10
+ success: literal(true),
11
+ data: string(),
12
+ }),
13
+ respondableMessage("vfs.readFile.response", {
14
+ success: literal(false),
15
+ error: string(),
16
+ }),
17
+ ]),
18
+ };
19
+
20
+ export type VfsReadFileRequest = InferOutput<typeof VfsReadFile.Request>;
21
+ export type VfsReadFileResponse = InferOutput<typeof VfsReadFile.Response>;
@@ -0,0 +1,21 @@
1
+ import { string, literal, union, type InferOutput } from "valibot";
2
+ import { respondableMessage } from "../../base/index.js";
3
+
4
+ export const VfsRename = {
5
+ Request: respondableMessage("vfs.rename", {
6
+ oldPath: string(),
7
+ newPath: string(),
8
+ }),
9
+ Response: union([
10
+ respondableMessage("vfs.rename.response", {
11
+ success: literal(true),
12
+ }),
13
+ respondableMessage("vfs.rename.response", {
14
+ success: literal(false),
15
+ error: string(),
16
+ }),
17
+ ]),
18
+ };
19
+
20
+ export type VfsRenameRequest = InferOutput<typeof VfsRename.Request>;
21
+ export type VfsRenameResponse = InferOutput<typeof VfsRename.Response>;
@@ -0,0 +1,21 @@
1
+ import { string, type InferOutput, literal, union } from "valibot";
2
+ import { respondableMessage } from "../../base/index.js";
3
+
4
+ export const VfsWriteFile = {
5
+ Request: respondableMessage("vfs.writeFile", {
6
+ path: string(),
7
+ content: string(),
8
+ }),
9
+ Response: union([
10
+ respondableMessage("vfs.writeFile.response", {
11
+ success: literal(true),
12
+ }),
13
+ respondableMessage("vfs.writeFile.response", {
14
+ success: literal(false),
15
+ error: string(),
16
+ }),
17
+ ]),
18
+ };
19
+
20
+ export type VfsWriteFileRequest = InferOutput<typeof VfsWriteFile.Request>;
21
+ export type VfsWriteFileResponse = InferOutput<typeof VfsWriteFile.Response>;
@@ -0,0 +1,18 @@
1
+ import {
2
+ string,
3
+ type InferOutput,
4
+ object,
5
+ boolean,
6
+ nullable,
7
+ literal,
8
+ } from "valibot";
9
+
10
+ // Broadcast message (no requestId, no response)
11
+ export const WorkspaceChangedSchema = object({
12
+ type: literal("workspace.changed"),
13
+ isOpen: boolean(),
14
+ path: nullable(string()),
15
+ name: nullable(string()),
16
+ });
17
+
18
+ export type WorkspaceChanged = InferOutput<typeof WorkspaceChangedSchema>;
@@ -0,0 +1,39 @@
1
+ import {
2
+ string,
3
+ type InferOutput,
4
+ literal,
5
+ union,
6
+ object,
7
+ boolean,
8
+ nullable,
9
+ } from "valibot";
10
+ import { respondableMessage } from "../../base/index.js";
11
+
12
+ // Shared workspace details shape
13
+ export const WorkspaceDetailsSchema = object({
14
+ isOpen: boolean(),
15
+ path: nullable(string()),
16
+ name: nullable(string()),
17
+ });
18
+
19
+ export const WorkspaceGetDetails = {
20
+ Request: respondableMessage("workspace.getDetails", {}),
21
+ Response: union([
22
+ respondableMessage("workspace.getDetails.response", {
23
+ success: literal(true),
24
+ data: WorkspaceDetailsSchema,
25
+ }),
26
+ respondableMessage("workspace.getDetails.response", {
27
+ success: literal(false),
28
+ error: string(),
29
+ }),
30
+ ]),
31
+ };
32
+
33
+ export type WorkspaceDetails = InferOutput<typeof WorkspaceDetailsSchema>;
34
+ export type WorkspaceGetDetailsRequest = InferOutput<
35
+ typeof WorkspaceGetDetails.Request
36
+ >;
37
+ export type WorkspaceGetDetailsResponse = InferOutput<
38
+ typeof WorkspaceGetDetails.Response
39
+ >;
@@ -0,0 +1,3 @@
1
+ export * from "./getDetails/message.schemas.js";
2
+ export * from "./changed/message.schemas.js";
3
+ export * from "./open/message.schemas.js";
@@ -0,0 +1,27 @@
1
+ import {
2
+ string,
3
+ type InferOutput,
4
+ literal,
5
+ union,
6
+ object,
7
+ boolean,
8
+ nullable,
9
+ } from "valibot";
10
+ import { respondableMessage } from "../../base/index.js";
11
+
12
+ export const WorkspaceOpen = {
13
+ Request: respondableMessage("workspace.open", {}),
14
+ Response: union([
15
+ respondableMessage("workspace.open.response", {
16
+ success: literal(true),
17
+ path: nullable(string()),
18
+ }),
19
+ respondableMessage("workspace.open.response", {
20
+ success: literal(false),
21
+ error: string(),
22
+ }),
23
+ ]),
24
+ };
25
+
26
+ export type WorkspaceOpenRequest = InferOutput<typeof WorkspaceOpen.Request>;
27
+ export type WorkspaceOpenResponse = InferOutput<typeof WorkspaceOpen.Response>;
@@ -0,0 +1,164 @@
1
+ import { safeParse } from "valibot";
2
+ import type { IFrameClient } from "../messages/IFrameClient.js";
3
+ import {
4
+ DocumentRequestContent,
5
+ DocumentSave,
6
+ DocumentSaveRequested,
7
+ DocumentSaved,
8
+ } from "../messages/index.js";
9
+
10
+ /**
11
+ * Document lifecycle namespace for editor plugins.
12
+ * This class is not part of the public SDK API.
13
+ *
14
+ * Editor plugins should:
15
+ * 1. Call requestContent() to get initial content when ready
16
+ * 2. Listen for onSaveRequested and respond with current content
17
+ * 3. Listen for onSaved to know when save completed
18
+ * 4. Call requestSave() when user presses Ctrl+S
19
+ */
20
+ export class DocumentNamespace {
21
+ private readonly client: IFrameClient;
22
+
23
+ constructor(client: IFrameClient) {
24
+ this.client = client;
25
+ }
26
+
27
+ /**
28
+ * Request initial content from the host.
29
+ * Call this when the plugin is ready to receive content.
30
+ * @returns Promise with the content and hash
31
+ */
32
+ async requestContent(): Promise<{ content: string; hash: string }> {
33
+ const response = await this.client.sendAndWait(
34
+ "document.requestContent",
35
+ {},
36
+ DocumentRequestContent.Request,
37
+ DocumentRequestContent.Response
38
+ );
39
+
40
+ if (!response.success) {
41
+ throw new Error((response as { error: string }).error);
42
+ }
43
+ return {
44
+ content: (response as { content: string }).content,
45
+ hash: (response as { hash: string }).hash,
46
+ };
47
+ }
48
+
49
+ /**
50
+ * Request the host to save the current document.
51
+ * Call this when the user presses Ctrl+S inside the plugin.
52
+ * The host will request content via onSaveRequested, then save to disk.
53
+ * @returns Promise with the new file hash on success
54
+ */
55
+ async requestSave(): Promise<string> {
56
+ const response = await this.client.sendAndWait(
57
+ "document.save",
58
+ {},
59
+ DocumentSave.Request,
60
+ DocumentSave.Response
61
+ );
62
+
63
+ if (!response.success) {
64
+ throw new Error((response as { error: string }).error);
65
+ }
66
+ return (response as { hash: string }).hash;
67
+ }
68
+
69
+ /**
70
+ * Listen for save requests from the host.
71
+ * The plugin should respond with the current document content.
72
+ * @param callback Function to handle save request, should return current content
73
+ * @returns Unsubscribe function
74
+ */
75
+ onSaveRequested(
76
+ callback: (payload: { requestId: string }) => Promise<string>
77
+ ): () => void {
78
+ return this.client.subscribe(async (evt) => {
79
+ const { type } = evt.data || {};
80
+ if (type !== "document.saveRequested") {
81
+ return;
82
+ }
83
+
84
+ const result = safeParse(DocumentSaveRequested.Request, evt.data);
85
+
86
+ if (!result.success) {
87
+ console.error(
88
+ "[SDK] Invalid document.saveRequested payload:",
89
+ result.issues
90
+ );
91
+ return;
92
+ }
93
+
94
+ try {
95
+ const content = await callback(result.output.payload);
96
+ this.client.send({
97
+ type: "document.saveRequested.response",
98
+ payload: {
99
+ requestId: result.output.payload.requestId,
100
+ success: true,
101
+ content,
102
+ },
103
+ });
104
+ } catch (error) {
105
+ this.client.send({
106
+ type: "document.saveRequested.response",
107
+ payload: {
108
+ requestId: result.output.payload.requestId,
109
+ success: false,
110
+ error: error instanceof Error ? error.message : String(error),
111
+ },
112
+ });
113
+ }
114
+ });
115
+ }
116
+
117
+ /**
118
+ * Listen for save completion notifications.
119
+ * Called after the host has successfully saved the document.
120
+ * @param callback Function called when save completes
121
+ * @returns Unsubscribe function
122
+ */
123
+ onSaved(
124
+ callback: (payload: { hash: string; requestId: string }) => void
125
+ ): () => void {
126
+ return this.client.subscribe((evt) => {
127
+ const { type } = evt.data || {};
128
+ if (type !== "document.saved") {
129
+ return;
130
+ }
131
+
132
+ const result = safeParse(DocumentSaved.Request, evt.data);
133
+
134
+ if (!result.success) {
135
+ console.error("[SDK] Invalid document.saved payload:", result.issues);
136
+ return;
137
+ }
138
+
139
+ callback(result.output.payload);
140
+ });
141
+ }
142
+
143
+ /**
144
+ * Send a response to a document.saved message.
145
+ * Call this after processing the saved notification in onSaved callback.
146
+ */
147
+ respondToSaved(requestId: string, success: boolean, error?: string): void {
148
+ if (success) {
149
+ this.client.send({
150
+ type: "document.saved.response",
151
+ payload: { requestId, success: true },
152
+ });
153
+ } else {
154
+ this.client.send({
155
+ type: "document.saved.response",
156
+ payload: {
157
+ requestId,
158
+ success: false,
159
+ error: error || "Unknown error",
160
+ },
161
+ });
162
+ }
163
+ }
164
+ }