@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.
- package/README.md +5 -0
- package/dist/src/PracticalKitSdk.d.ts +184 -0
- package/dist/src/PracticalKitSdk.d.ts.map +1 -0
- package/dist/src/PracticalKitSdk.js +230 -0
- package/dist/src/PracticalKitSdk.js.map +1 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +6 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/keyboard/KeyboardShortcutForwarder.d.ts +18 -0
- package/dist/src/keyboard/KeyboardShortcutForwarder.d.ts.map +1 -0
- package/dist/src/keyboard/KeyboardShortcutForwarder.js +36 -0
- package/dist/src/keyboard/KeyboardShortcutForwarder.js.map +1 -0
- package/dist/src/keyboard/index.d.ts +2 -0
- package/dist/src/keyboard/index.d.ts.map +1 -0
- package/dist/src/keyboard/index.js +2 -0
- package/dist/src/keyboard/index.js.map +1 -0
- package/dist/src/llm/ToolRegistry.d.ts +49 -0
- package/dist/src/llm/ToolRegistry.d.ts.map +1 -0
- package/dist/src/llm/ToolRegistry.js +126 -0
- package/dist/src/llm/ToolRegistry.js.map +1 -0
- package/dist/src/logs/channel/IFrameLogChannelAdapter.d.ts +8 -0
- package/dist/src/logs/channel/IFrameLogChannelAdapter.d.ts.map +1 -0
- package/dist/src/logs/channel/IFrameLogChannelAdapter.js +34 -0
- package/dist/src/logs/channel/IFrameLogChannelAdapter.js.map +1 -0
- package/dist/src/logs/channel/ILogChannelAdapter.d.ts +5 -0
- package/dist/src/logs/channel/ILogChannelAdapter.d.ts.map +1 -0
- package/dist/src/logs/channel/ILogChannelAdapter.js +2 -0
- package/dist/src/logs/channel/ILogChannelAdapter.js.map +1 -0
- package/dist/src/logs/channel/LogChannel.d.ts +21 -0
- package/dist/src/logs/channel/LogChannel.d.ts.map +1 -0
- package/dist/src/logs/channel/LogChannel.js +41 -0
- package/dist/src/logs/channel/LogChannel.js.map +1 -0
- package/dist/src/logs/outputs/types.d.ts +18 -0
- package/dist/src/logs/outputs/types.d.ts.map +1 -0
- package/dist/src/logs/outputs/types.js +2 -0
- package/dist/src/logs/outputs/types.js.map +1 -0
- package/dist/src/messages/IFrameClient.d.ts +33 -0
- package/dist/src/messages/IFrameClient.d.ts.map +1 -0
- package/dist/src/messages/IFrameClient.js +88 -0
- package/dist/src/messages/IFrameClient.js.map +1 -0
- package/dist/src/messages/IFrameMessageBus.d.ts +10 -0
- package/dist/src/messages/IFrameMessageBus.d.ts.map +1 -0
- package/dist/src/messages/IFrameMessageBus.js +24 -0
- package/dist/src/messages/IFrameMessageBus.js.map +1 -0
- package/dist/src/messages/base/index.d.ts +8 -0
- package/dist/src/messages/base/index.d.ts.map +1 -0
- package/dist/src/messages/base/index.js +9 -0
- package/dist/src/messages/base/index.js.map +1 -0
- package/dist/src/messages/document/index.d.ts +5 -0
- package/dist/src/messages/document/index.d.ts.map +1 -0
- package/dist/src/messages/document/index.js +5 -0
- package/dist/src/messages/document/index.js.map +1 -0
- package/dist/src/messages/document/requestContent/message.schemas.d.ts +34 -0
- package/dist/src/messages/document/requestContent/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/document/requestContent/message.schemas.js +21 -0
- package/dist/src/messages/document/requestContent/message.schemas.js.map +1 -0
- package/dist/src/messages/document/save/index.d.ts +2 -0
- package/dist/src/messages/document/save/index.d.ts.map +1 -0
- package/dist/src/messages/document/save/index.js +2 -0
- package/dist/src/messages/document/save/index.js.map +1 -0
- package/dist/src/messages/document/save/message.schemas.d.ts +34 -0
- package/dist/src/messages/document/save/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/document/save/message.schemas.js +21 -0
- package/dist/src/messages/document/save/message.schemas.js.map +1 -0
- package/dist/src/messages/document/saveRequested/message.schemas.d.ts +41 -0
- package/dist/src/messages/document/saveRequested/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/document/saveRequested/message.schemas.js +28 -0
- package/dist/src/messages/document/saveRequested/message.schemas.js.map +1 -0
- package/dist/src/messages/document/saved/message.schemas.d.ts +39 -0
- package/dist/src/messages/document/saved/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/document/saved/message.schemas.js +26 -0
- package/dist/src/messages/document/saved/message.schemas.js.map +1 -0
- package/dist/src/messages/editor/index.d.ts +2 -0
- package/dist/src/messages/editor/index.d.ts.map +1 -0
- package/dist/src/messages/editor/index.js +2 -0
- package/dist/src/messages/editor/index.js.map +1 -0
- package/dist/src/messages/editor/openFile/message.schemas.d.ts +30 -0
- package/dist/src/messages/editor/openFile/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/editor/openFile/message.schemas.js +17 -0
- package/dist/src/messages/editor/openFile/message.schemas.js.map +1 -0
- package/dist/src/messages/fs/fileChanged/message.schemas.d.ts +10 -0
- package/dist/src/messages/fs/fileChanged/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/fs/fileChanged/message.schemas.js +10 -0
- package/dist/src/messages/fs/fileChanged/message.schemas.js.map +1 -0
- package/dist/src/messages/fs/index.d.ts +3 -0
- package/dist/src/messages/fs/index.d.ts.map +1 -0
- package/dist/src/messages/fs/index.js +3 -0
- package/dist/src/messages/fs/index.js.map +1 -0
- package/dist/src/messages/fs/subscribe/message.schemas.d.ts +54 -0
- package/dist/src/messages/fs/subscribe/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/fs/subscribe/message.schemas.js +27 -0
- package/dist/src/messages/fs/subscribe/message.schemas.js.map +1 -0
- package/dist/src/messages/index.d.ts +15 -0
- package/dist/src/messages/index.d.ts.map +1 -0
- package/dist/src/messages/index.js +29 -0
- package/dist/src/messages/index.js.map +1 -0
- package/dist/src/messages/llm/index.d.ts +148 -0
- package/dist/src/messages/llm/index.d.ts.map +1 -0
- package/dist/src/messages/llm/index.js +124 -0
- package/dist/src/messages/llm/index.js.map +1 -0
- package/dist/src/messages/logs/index.d.ts +26 -0
- package/dist/src/messages/logs/index.d.ts.map +1 -0
- package/dist/src/messages/logs/index.js +24 -0
- package/dist/src/messages/logs/index.js.map +1 -0
- package/dist/src/messages/native/call/message.schemas.d.ts +34 -0
- package/dist/src/messages/native/call/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/native/call/message.schemas.js +22 -0
- package/dist/src/messages/native/call/message.schemas.js.map +1 -0
- package/dist/src/messages/native/index.d.ts +2 -0
- package/dist/src/messages/native/index.d.ts.map +1 -0
- package/dist/src/messages/native/index.js +2 -0
- package/dist/src/messages/native/index.js.map +1 -0
- package/dist/src/messages/plugin/index.d.ts +78 -0
- package/dist/src/messages/plugin/index.d.ts.map +1 -0
- package/dist/src/messages/plugin/index.js +72 -0
- package/dist/src/messages/plugin/index.js.map +1 -0
- package/dist/src/messages/storage/index.d.ts +126 -0
- package/dist/src/messages/storage/index.d.ts.map +1 -0
- package/dist/src/messages/storage/index.js +109 -0
- package/dist/src/messages/storage/index.js.map +1 -0
- package/dist/src/messages/ui/UiChannel.d.ts +68 -0
- package/dist/src/messages/ui/UiChannel.d.ts.map +1 -0
- package/dist/src/messages/ui/UiChannel.js +81 -0
- package/dist/src/messages/ui/UiChannel.js.map +1 -0
- package/dist/src/messages/ui/confirm/index.d.ts +2 -0
- package/dist/src/messages/ui/confirm/index.d.ts.map +1 -0
- package/dist/src/messages/ui/confirm/index.js +2 -0
- package/dist/src/messages/ui/confirm/index.js.map +1 -0
- package/dist/src/messages/ui/confirm/message.schemas.d.ts +39 -0
- package/dist/src/messages/ui/confirm/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/ui/confirm/message.schemas.js +25 -0
- package/dist/src/messages/ui/confirm/message.schemas.js.map +1 -0
- package/dist/src/messages/ui/getState/message.schemas.d.ts +38 -0
- package/dist/src/messages/ui/getState/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/ui/getState/message.schemas.js +21 -0
- package/dist/src/messages/ui/getState/message.schemas.js.map +1 -0
- package/dist/src/messages/ui/index.d.ts +8 -0
- package/dist/src/messages/ui/index.d.ts.map +1 -0
- package/dist/src/messages/ui/index.js +8 -0
- package/dist/src/messages/ui/index.js.map +1 -0
- package/dist/src/messages/ui/setCollapseState/message.schemas.d.ts +33 -0
- package/dist/src/messages/ui/setCollapseState/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/ui/setCollapseState/message.schemas.js +19 -0
- package/dist/src/messages/ui/setCollapseState/message.schemas.js.map +1 -0
- package/dist/src/messages/ui/showContextMenu/message.schemas.d.ts +61 -0
- package/dist/src/messages/ui/showContextMenu/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/ui/showContextMenu/message.schemas.js +37 -0
- package/dist/src/messages/ui/showContextMenu/message.schemas.js.map +1 -0
- package/dist/src/messages/ui/showNotification/message.schemas.d.ts +38 -0
- package/dist/src/messages/ui/showNotification/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/ui/showNotification/message.schemas.js +29 -0
- package/dist/src/messages/ui/showNotification/message.schemas.js.map +1 -0
- package/dist/src/messages/ui/tabsChanged/message.schemas.d.ts +24 -0
- package/dist/src/messages/ui/tabsChanged/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/ui/tabsChanged/message.schemas.js +15 -0
- package/dist/src/messages/ui/tabsChanged/message.schemas.js.map +1 -0
- package/dist/src/messages/vfs/createDir/message.schemas.d.ts +30 -0
- package/dist/src/messages/vfs/createDir/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/vfs/createDir/message.schemas.js +17 -0
- package/dist/src/messages/vfs/createDir/message.schemas.js.map +1 -0
- package/dist/src/messages/vfs/delete/message.schemas.d.ts +30 -0
- package/dist/src/messages/vfs/delete/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/vfs/delete/message.schemas.js +17 -0
- package/dist/src/messages/vfs/delete/message.schemas.js.map +1 -0
- package/dist/src/messages/vfs/exists/message.schemas.d.ts +34 -0
- package/dist/src/messages/vfs/exists/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/vfs/exists/message.schemas.js +21 -0
- package/dist/src/messages/vfs/exists/message.schemas.js.map +1 -0
- package/dist/src/messages/vfs/getAbsolutePath/message.schemas.d.ts +33 -0
- package/dist/src/messages/vfs/getAbsolutePath/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/vfs/getAbsolutePath/message.schemas.js +20 -0
- package/dist/src/messages/vfs/getAbsolutePath/message.schemas.js.map +1 -0
- package/dist/src/messages/vfs/index.d.ts +9 -0
- package/dist/src/messages/vfs/index.d.ts.map +1 -0
- package/dist/src/messages/vfs/index.js +9 -0
- package/dist/src/messages/vfs/index.js.map +1 -0
- package/dist/src/messages/vfs/readDir/message.schemas.d.ts +41 -0
- package/dist/src/messages/vfs/readDir/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/vfs/readDir/message.schemas.js +23 -0
- package/dist/src/messages/vfs/readDir/message.schemas.js.map +1 -0
- package/dist/src/messages/vfs/readFile/message.schemas.d.ts +31 -0
- package/dist/src/messages/vfs/readFile/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/vfs/readFile/message.schemas.js +18 -0
- package/dist/src/messages/vfs/readFile/message.schemas.js.map +1 -0
- package/dist/src/messages/vfs/rename/message.schemas.d.ts +31 -0
- package/dist/src/messages/vfs/rename/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/vfs/rename/message.schemas.js +18 -0
- package/dist/src/messages/vfs/rename/message.schemas.js.map +1 -0
- package/dist/src/messages/vfs/writeFile/message.schemas.d.ts +31 -0
- package/dist/src/messages/vfs/writeFile/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/vfs/writeFile/message.schemas.js +18 -0
- package/dist/src/messages/vfs/writeFile/message.schemas.js.map +1 -0
- package/dist/src/messages/workspace/changed/message.schemas.d.ts +9 -0
- package/dist/src/messages/workspace/changed/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/workspace/changed/message.schemas.js +9 -0
- package/dist/src/messages/workspace/changed/message.schemas.js.map +1 -0
- package/dist/src/messages/workspace/getDetails/message.schemas.d.ts +39 -0
- package/dist/src/messages/workspace/getDetails/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/workspace/getDetails/message.schemas.js +22 -0
- package/dist/src/messages/workspace/getDetails/message.schemas.js.map +1 -0
- package/dist/src/messages/workspace/index.d.ts +4 -0
- package/dist/src/messages/workspace/index.d.ts.map +1 -0
- package/dist/src/messages/workspace/index.js +4 -0
- package/dist/src/messages/workspace/index.js.map +1 -0
- package/dist/src/messages/workspace/open/message.schemas.d.ts +29 -0
- package/dist/src/messages/workspace/open/message.schemas.d.ts.map +1 -0
- package/dist/src/messages/workspace/open/message.schemas.js +16 -0
- package/dist/src/messages/workspace/open/message.schemas.js.map +1 -0
- package/dist/src/namespaces/DocumentNamespace.d.ts +56 -0
- package/dist/src/namespaces/DocumentNamespace.d.ts.map +1 -0
- package/dist/src/namespaces/DocumentNamespace.js +129 -0
- package/dist/src/namespaces/DocumentNamespace.js.map +1 -0
- package/dist/src/namespaces/EditorNamespace.d.ts +11 -0
- package/dist/src/namespaces/EditorNamespace.d.ts.map +1 -0
- package/dist/src/namespaces/EditorNamespace.js +18 -0
- package/dist/src/namespaces/EditorNamespace.js.map +1 -0
- package/dist/src/namespaces/FsNamespace.d.ts +27 -0
- package/dist/src/namespaces/FsNamespace.d.ts.map +1 -0
- package/dist/src/namespaces/FsNamespace.js +52 -0
- package/dist/src/namespaces/FsNamespace.js.map +1 -0
- package/dist/src/namespaces/NativeNamespace.d.ts +11 -0
- package/dist/src/namespaces/NativeNamespace.d.ts.map +1 -0
- package/dist/src/namespaces/NativeNamespace.js +19 -0
- package/dist/src/namespaces/NativeNamespace.js.map +1 -0
- package/dist/src/namespaces/PluginNamespace.d.ts +56 -0
- package/dist/src/namespaces/PluginNamespace.d.ts.map +1 -0
- package/dist/src/namespaces/PluginNamespace.js +116 -0
- package/dist/src/namespaces/PluginNamespace.js.map +1 -0
- package/dist/src/namespaces/StorageNamespace.d.ts +56 -0
- package/dist/src/namespaces/StorageNamespace.d.ts.map +1 -0
- package/dist/src/namespaces/StorageNamespace.js +127 -0
- package/dist/src/namespaces/StorageNamespace.js.map +1 -0
- package/dist/src/namespaces/VfsNamespace.d.ts +25 -0
- package/dist/src/namespaces/VfsNamespace.d.ts.map +1 -0
- package/dist/src/namespaces/VfsNamespace.js +64 -0
- package/dist/src/namespaces/VfsNamespace.js.map +1 -0
- package/dist/src/namespaces/WorkspaceNamespace.d.ts +18 -0
- package/dist/src/namespaces/WorkspaceNamespace.d.ts.map +1 -0
- package/dist/src/namespaces/WorkspaceNamespace.js +48 -0
- package/dist/src/namespaces/WorkspaceNamespace.js.map +1 -0
- package/dist/src/namespaces/index.d.ts +9 -0
- package/dist/src/namespaces/index.d.ts.map +1 -0
- package/dist/src/namespaces/index.js +9 -0
- package/dist/src/namespaces/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/eslint.config.js +25 -0
- package/package.json +28 -0
- package/src/PracticalKitSdk.ts +325 -0
- package/src/index.ts +10 -0
- package/src/keyboard/KeyboardShortcutForwarder.ts +35 -0
- package/src/keyboard/index.ts +1 -0
- package/src/llm/ToolRegistry.ts +186 -0
- package/src/logs/channel/IFrameLogChannelAdapter.ts +44 -0
- package/src/logs/channel/ILogChannelAdapter.ts +5 -0
- package/src/logs/channel/LogChannel.ts +49 -0
- package/src/logs/outputs/types.ts +21 -0
- package/src/messages/IFrameClient.ts +113 -0
- package/src/messages/IFrameMessageBus.ts +28 -0
- package/src/messages/base/index.ts +16 -0
- package/src/messages/document/index.ts +4 -0
- package/src/messages/document/requestContent/message.schemas.ts +28 -0
- package/src/messages/document/save/index.ts +1 -0
- package/src/messages/document/save/message.schemas.ts +24 -0
- package/src/messages/document/saveRequested/message.schemas.ts +35 -0
- package/src/messages/document/saved/message.schemas.ts +29 -0
- package/src/messages/editor/index.ts +1 -0
- package/src/messages/editor/openFile/message.schemas.ts +22 -0
- package/src/messages/fs/fileChanged/message.schemas.ts +12 -0
- package/src/messages/fs/index.ts +2 -0
- package/src/messages/fs/subscribe/message.schemas.ts +33 -0
- package/src/messages/index.ts +41 -0
- package/src/messages/llm/index.ts +158 -0
- package/src/messages/logs/index.ts +39 -0
- package/src/messages/native/call/message.schemas.ts +25 -0
- package/src/messages/native/index.ts +1 -0
- package/src/messages/plugin/index.ts +95 -0
- package/src/messages/storage/index.ts +140 -0
- package/src/messages/ui/UiChannel.ts +156 -0
- package/src/messages/ui/confirm/index.ts +1 -0
- package/src/messages/ui/confirm/message.schemas.ts +36 -0
- package/src/messages/ui/getState/message.schemas.ts +33 -0
- package/src/messages/ui/index.ts +7 -0
- package/src/messages/ui/setCollapseState/message.schemas.ts +34 -0
- package/src/messages/ui/showContextMenu/message.schemas.ts +64 -0
- package/src/messages/ui/showNotification/message.schemas.ts +41 -0
- package/src/messages/ui/tabsChanged/message.schemas.ts +25 -0
- package/src/messages/vfs/createDir/message.schemas.ts +20 -0
- package/src/messages/vfs/delete/message.schemas.ts +20 -0
- package/src/messages/vfs/exists/message.schemas.ts +32 -0
- package/src/messages/vfs/getAbsolutePath/message.schemas.ts +27 -0
- package/src/messages/vfs/index.ts +8 -0
- package/src/messages/vfs/readDir/message.schemas.ts +36 -0
- package/src/messages/vfs/readFile/message.schemas.ts +21 -0
- package/src/messages/vfs/rename/message.schemas.ts +21 -0
- package/src/messages/vfs/writeFile/message.schemas.ts +21 -0
- package/src/messages/workspace/changed/message.schemas.ts +18 -0
- package/src/messages/workspace/getDetails/message.schemas.ts +39 -0
- package/src/messages/workspace/index.ts +3 -0
- package/src/messages/workspace/open/message.schemas.ts +27 -0
- package/src/namespaces/DocumentNamespace.ts +164 -0
- package/src/namespaces/EditorNamespace.ts +27 -0
- package/src/namespaces/FsNamespace.ts +77 -0
- package/src/namespaces/NativeNamespace.ts +34 -0
- package/src/namespaces/PluginNamespace.ts +156 -0
- package/src/namespaces/StorageNamespace.ts +186 -0
- package/src/namespaces/VfsNamespace.ts +135 -0
- package/src/namespaces/WorkspaceNamespace.ts +80 -0
- package/src/namespaces/index.ts +8 -0
- 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,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
|
+
}
|