@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,41 @@
|
|
|
1
|
+
// Base
|
|
2
|
+
export * from "./base/index.js";
|
|
3
|
+
|
|
4
|
+
// VFS
|
|
5
|
+
export * from "./vfs/index.js";
|
|
6
|
+
|
|
7
|
+
// Editor
|
|
8
|
+
export * from "./editor/index.js";
|
|
9
|
+
|
|
10
|
+
// Document
|
|
11
|
+
export * from "./document/index.js";
|
|
12
|
+
|
|
13
|
+
// Workspace
|
|
14
|
+
export * from "./workspace/index.js";
|
|
15
|
+
|
|
16
|
+
// Native
|
|
17
|
+
export * from "./native/index.js";
|
|
18
|
+
|
|
19
|
+
// FS (file system subscriptions)
|
|
20
|
+
export * from "./fs/index.js";
|
|
21
|
+
|
|
22
|
+
// Plugin (intra-plugin messaging)
|
|
23
|
+
export * from "./plugin/index.js";
|
|
24
|
+
|
|
25
|
+
// Storage (secrets management)
|
|
26
|
+
export * from "./storage/index.js";
|
|
27
|
+
|
|
28
|
+
// Logs
|
|
29
|
+
export * from "./logs/index.js";
|
|
30
|
+
|
|
31
|
+
// LLM (tool registry)
|
|
32
|
+
export * from "./llm/index.js";
|
|
33
|
+
|
|
34
|
+
// UI (state)
|
|
35
|
+
export * from "./ui/index.js";
|
|
36
|
+
|
|
37
|
+
// Message Bus
|
|
38
|
+
export * from "./IFrameMessageBus.js";
|
|
39
|
+
|
|
40
|
+
// Client
|
|
41
|
+
export * from "./IFrameClient.js";
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import {
|
|
2
|
+
object,
|
|
3
|
+
string,
|
|
4
|
+
literal,
|
|
5
|
+
boolean,
|
|
6
|
+
optional,
|
|
7
|
+
number,
|
|
8
|
+
array,
|
|
9
|
+
unknown,
|
|
10
|
+
record,
|
|
11
|
+
type InferOutput,
|
|
12
|
+
} from "valibot";
|
|
13
|
+
import { respondableMessage } from "../base/index.js";
|
|
14
|
+
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// JSON Schema type for tool parameters
|
|
17
|
+
// Using 'record' for properties to match JSONSchema7's structure
|
|
18
|
+
// ============================================================================
|
|
19
|
+
export const JsonSchemaObject = object({
|
|
20
|
+
type: literal("object"),
|
|
21
|
+
properties: record(string(), unknown()),
|
|
22
|
+
required: optional(array(string())),
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Tool definition as stored in the registry
|
|
27
|
+
// ============================================================================
|
|
28
|
+
export const LlmToolDefinition = object({
|
|
29
|
+
// Unique ID: "{pluginId}.{toolName}"
|
|
30
|
+
id: string(),
|
|
31
|
+
// Tool name (unique within plugin)
|
|
32
|
+
name: string(),
|
|
33
|
+
// Description for LLM
|
|
34
|
+
description: string(),
|
|
35
|
+
// JSON Schema for parameters
|
|
36
|
+
parameters: JsonSchemaObject,
|
|
37
|
+
// Provider info
|
|
38
|
+
provider: object({
|
|
39
|
+
pluginId: string(),
|
|
40
|
+
moduleId: string(),
|
|
41
|
+
}),
|
|
42
|
+
// Timeout in ms (default 30000, max 300000)
|
|
43
|
+
timeoutMs: optional(number()),
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
export type LlmToolDefinitionType = InferOutput<typeof LlmToolDefinition>;
|
|
47
|
+
|
|
48
|
+
// ============================================================================
|
|
49
|
+
// llm.tool.list - Get all registered tools
|
|
50
|
+
// ============================================================================
|
|
51
|
+
export namespace LlmToolList {
|
|
52
|
+
export const Request = respondableMessage("llm.tool.list", {});
|
|
53
|
+
|
|
54
|
+
export const Response = object({
|
|
55
|
+
type: literal("llm.tool.list.response"),
|
|
56
|
+
payload: object({
|
|
57
|
+
requestId: string(),
|
|
58
|
+
success: boolean(),
|
|
59
|
+
tools: array(LlmToolDefinition),
|
|
60
|
+
error: optional(string()),
|
|
61
|
+
}),
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
export type RequestType = InferOutput<typeof Request>;
|
|
65
|
+
export type ResponseType = InferOutput<typeof Response>;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// ============================================================================
|
|
69
|
+
// llm.tool.execute - Execute a tool (called by chat plugin)
|
|
70
|
+
// ============================================================================
|
|
71
|
+
export namespace LlmToolExecute {
|
|
72
|
+
export const Request = respondableMessage("llm.tool.execute", {
|
|
73
|
+
toolId: string(), // "{pluginId}.{toolName}"
|
|
74
|
+
arguments: unknown(),
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
export const Response = object({
|
|
78
|
+
type: literal("llm.tool.execute.response"),
|
|
79
|
+
payload: object({
|
|
80
|
+
requestId: string(),
|
|
81
|
+
success: boolean(),
|
|
82
|
+
result: optional(unknown()),
|
|
83
|
+
error: optional(string()),
|
|
84
|
+
}),
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
export type RequestType = InferOutput<typeof Request>;
|
|
88
|
+
export type ResponseType = InferOutput<typeof Response>;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// ============================================================================
|
|
92
|
+
// llm.tool.register - Register a tool (plugin -> host)
|
|
93
|
+
// ============================================================================
|
|
94
|
+
export namespace LlmToolRegister {
|
|
95
|
+
export const Request = respondableMessage("llm.tool.register", {
|
|
96
|
+
name: string(),
|
|
97
|
+
description: string(),
|
|
98
|
+
parameters: JsonSchemaObject,
|
|
99
|
+
timeoutMs: optional(number()),
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
export const Response = object({
|
|
103
|
+
type: literal("llm.tool.register.response"),
|
|
104
|
+
payload: object({
|
|
105
|
+
requestId: string(),
|
|
106
|
+
success: boolean(),
|
|
107
|
+
toolId: optional(string()), // Full tool ID assigned by host
|
|
108
|
+
error: optional(string()),
|
|
109
|
+
}),
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
export type RequestType = InferOutput<typeof Request>;
|
|
113
|
+
export type ResponseType = InferOutput<typeof Response>;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// ============================================================================
|
|
117
|
+
// llm.tool.unregister - Unregister a tool (plugin -> host)
|
|
118
|
+
// ============================================================================
|
|
119
|
+
export namespace LlmToolUnregister {
|
|
120
|
+
export const Request = respondableMessage("llm.tool.unregister", {
|
|
121
|
+
name: string(),
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
export const Response = object({
|
|
125
|
+
type: literal("llm.tool.unregister.response"),
|
|
126
|
+
payload: object({
|
|
127
|
+
requestId: string(),
|
|
128
|
+
success: boolean(),
|
|
129
|
+
error: optional(string()),
|
|
130
|
+
}),
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
export type RequestType = InferOutput<typeof Request>;
|
|
134
|
+
export type ResponseType = InferOutput<typeof Response>;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// ============================================================================
|
|
138
|
+
// llm.tool.call - Call a tool handler (host -> plugin)
|
|
139
|
+
// ============================================================================
|
|
140
|
+
export namespace LlmToolCall {
|
|
141
|
+
export const Request = respondableMessage("llm.tool.call", {
|
|
142
|
+
toolName: string(), // Just the name, not full ID
|
|
143
|
+
arguments: unknown(),
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
export const Response = object({
|
|
147
|
+
type: literal("llm.tool.call.response"),
|
|
148
|
+
payload: object({
|
|
149
|
+
requestId: string(),
|
|
150
|
+
success: boolean(),
|
|
151
|
+
result: optional(unknown()),
|
|
152
|
+
error: optional(string()),
|
|
153
|
+
}),
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
export type RequestType = InferOutput<typeof Request>;
|
|
157
|
+
export type ResponseType = InferOutput<typeof Response>;
|
|
158
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {
|
|
2
|
+
object,
|
|
3
|
+
string,
|
|
4
|
+
literal,
|
|
5
|
+
boolean,
|
|
6
|
+
optional,
|
|
7
|
+
picklist,
|
|
8
|
+
type InferOutput,
|
|
9
|
+
array,
|
|
10
|
+
unknown,
|
|
11
|
+
} from "valibot";
|
|
12
|
+
import { respondableMessage } from "../base/index.js";
|
|
13
|
+
|
|
14
|
+
// Log levels matching Rust LogLevel enum
|
|
15
|
+
export const LogLevelSchema = picklist(["debug", "info", "warn", "error"]);
|
|
16
|
+
export type LogLevel = InferOutput<typeof LogLevelSchema>;
|
|
17
|
+
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// logs.write - Write a log entry from a plugin
|
|
20
|
+
// ============================================================================
|
|
21
|
+
export namespace LogsWrite {
|
|
22
|
+
export const Request = respondableMessage("logs.write", {
|
|
23
|
+
level: LogLevelSchema,
|
|
24
|
+
channelName: string(),
|
|
25
|
+
args: array(unknown()),
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
export const Response = object({
|
|
29
|
+
type: literal("logs.write.response"),
|
|
30
|
+
payload: object({
|
|
31
|
+
requestId: string(),
|
|
32
|
+
success: boolean(),
|
|
33
|
+
error: optional(string()),
|
|
34
|
+
}),
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
export type RequestType = InferOutput<typeof Request>;
|
|
38
|
+
export type ResponseType = InferOutput<typeof Response>;
|
|
39
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { string, type InferOutput, literal, union, unknown } from "valibot";
|
|
2
|
+
import { respondableMessage } from "../../base/index.js";
|
|
3
|
+
import { ModuleIdSchema, PluginIdSchema } from "@practicalkit/commons";
|
|
4
|
+
|
|
5
|
+
export const NativeCall = {
|
|
6
|
+
Request: respondableMessage("native.call", {
|
|
7
|
+
pluginId: PluginIdSchema,
|
|
8
|
+
moduleId: ModuleIdSchema,
|
|
9
|
+
command: string(),
|
|
10
|
+
args: unknown(),
|
|
11
|
+
}),
|
|
12
|
+
Response: union([
|
|
13
|
+
respondableMessage("native.call.response", {
|
|
14
|
+
success: literal(true),
|
|
15
|
+
data: unknown(),
|
|
16
|
+
}),
|
|
17
|
+
respondableMessage("native.call.response", {
|
|
18
|
+
success: literal(false),
|
|
19
|
+
error: string(),
|
|
20
|
+
}),
|
|
21
|
+
]),
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export type NativeCallRequest = InferOutput<typeof NativeCall.Request>;
|
|
25
|
+
export type NativeCallResponse = InferOutput<typeof NativeCall.Response>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./call/message.schemas.js";
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import {
|
|
2
|
+
object,
|
|
3
|
+
string,
|
|
4
|
+
literal,
|
|
5
|
+
boolean,
|
|
6
|
+
unknown,
|
|
7
|
+
optional,
|
|
8
|
+
type InferOutput,
|
|
9
|
+
} from "valibot";
|
|
10
|
+
import { respondableMessage } from "../base/index.js";
|
|
11
|
+
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// plugin.sendMessage - Send a message to a specific sibling module
|
|
14
|
+
// ============================================================================
|
|
15
|
+
export namespace PluginSendMessage {
|
|
16
|
+
export const Request = respondableMessage("plugin.sendMessage", {
|
|
17
|
+
targetModuleId: string(),
|
|
18
|
+
message: unknown(),
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
export const Response = object({
|
|
22
|
+
type: literal("plugin.sendMessage.response"),
|
|
23
|
+
payload: object({
|
|
24
|
+
requestId: string(),
|
|
25
|
+
success: boolean(),
|
|
26
|
+
data: optional(unknown()),
|
|
27
|
+
error: optional(string()),
|
|
28
|
+
}),
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
export type RequestType = InferOutput<typeof Request>;
|
|
32
|
+
export type ResponseType = InferOutput<typeof Response>;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// ============================================================================
|
|
36
|
+
// plugin.message - Incoming message from a sibling module (forwarded by host)
|
|
37
|
+
// ============================================================================
|
|
38
|
+
export namespace PluginMessage {
|
|
39
|
+
export const Request = respondableMessage("plugin.message", {
|
|
40
|
+
fromModuleId: string(),
|
|
41
|
+
message: unknown(),
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
export const Response = object({
|
|
45
|
+
type: literal("plugin.message.response"),
|
|
46
|
+
payload: object({
|
|
47
|
+
requestId: string(),
|
|
48
|
+
success: boolean(),
|
|
49
|
+
data: optional(unknown()),
|
|
50
|
+
error: optional(string()),
|
|
51
|
+
}),
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
export type RequestType = InferOutput<typeof Request>;
|
|
55
|
+
export type ResponseType = InferOutput<typeof Response>;
|
|
56
|
+
/** Payload type without requestId, for public API handlers */
|
|
57
|
+
export type HandlerPayload = Omit<RequestType["payload"], "requestId">;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// ============================================================================
|
|
61
|
+
// plugin.sendBroadcast - Broadcast a message to all sibling modules
|
|
62
|
+
// ============================================================================
|
|
63
|
+
export namespace PluginSendBroadcast {
|
|
64
|
+
export const Request = respondableMessage("plugin.sendBroadcast", {
|
|
65
|
+
message: unknown(),
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
export const Response = object({
|
|
69
|
+
type: literal("plugin.sendBroadcast.response"),
|
|
70
|
+
payload: object({
|
|
71
|
+
requestId: string(),
|
|
72
|
+
success: boolean(),
|
|
73
|
+
error: optional(string()),
|
|
74
|
+
}),
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
export type RequestType = InferOutput<typeof Request>;
|
|
78
|
+
export type ResponseType = InferOutput<typeof Response>;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// ============================================================================
|
|
82
|
+
// plugin.broadcast - Incoming broadcast from a sibling module (forwarded by host)
|
|
83
|
+
// This is fire-and-forget, no response expected
|
|
84
|
+
// ============================================================================
|
|
85
|
+
export namespace PluginBroadcast {
|
|
86
|
+
export const Event = object({
|
|
87
|
+
type: literal("plugin.broadcast"),
|
|
88
|
+
payload: object({
|
|
89
|
+
fromModuleId: string(),
|
|
90
|
+
message: unknown(),
|
|
91
|
+
}),
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
export type EventType = InferOutput<typeof Event>;
|
|
95
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import {
|
|
2
|
+
object,
|
|
3
|
+
string,
|
|
4
|
+
literal,
|
|
5
|
+
boolean,
|
|
6
|
+
optional,
|
|
7
|
+
nullable,
|
|
8
|
+
type InferOutput,
|
|
9
|
+
} from "valibot";
|
|
10
|
+
import { respondableMessage } from "../base/index.js";
|
|
11
|
+
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// storage.get - Get a value for this plugin (base64-encoded bytes)
|
|
14
|
+
// ============================================================================
|
|
15
|
+
export namespace StorageGet {
|
|
16
|
+
export const Request = respondableMessage("storage.get", {
|
|
17
|
+
key: string(),
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
export const Response = object({
|
|
21
|
+
type: literal("storage.get.response"),
|
|
22
|
+
payload: object({
|
|
23
|
+
requestId: string(),
|
|
24
|
+
success: boolean(),
|
|
25
|
+
value: nullable(string()), // base64-encoded bytes or null
|
|
26
|
+
error: optional(string()),
|
|
27
|
+
}),
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
export type RequestType = InferOutput<typeof Request>;
|
|
31
|
+
export type ResponseType = InferOutput<typeof Response>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// ============================================================================
|
|
35
|
+
// storage.set - Set a value for this plugin (base64-encoded bytes)
|
|
36
|
+
// ============================================================================
|
|
37
|
+
export namespace StorageSet {
|
|
38
|
+
export const Request = respondableMessage("storage.set", {
|
|
39
|
+
key: string(),
|
|
40
|
+
value: string(), // base64-encoded bytes
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
export const Response = object({
|
|
44
|
+
type: literal("storage.set.response"),
|
|
45
|
+
payload: object({
|
|
46
|
+
requestId: string(),
|
|
47
|
+
success: boolean(),
|
|
48
|
+
error: optional(string()),
|
|
49
|
+
}),
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
export type RequestType = InferOutput<typeof Request>;
|
|
53
|
+
export type ResponseType = InferOutput<typeof Response>;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// ============================================================================
|
|
57
|
+
// storage.delete - Delete a value for this plugin
|
|
58
|
+
// ============================================================================
|
|
59
|
+
export namespace StorageDelete {
|
|
60
|
+
export const Request = respondableMessage("storage.delete", {
|
|
61
|
+
key: string(),
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
export const Response = object({
|
|
65
|
+
type: literal("storage.delete.response"),
|
|
66
|
+
payload: object({
|
|
67
|
+
requestId: string(),
|
|
68
|
+
success: boolean(),
|
|
69
|
+
error: optional(string()),
|
|
70
|
+
}),
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
export type RequestType = InferOutput<typeof Request>;
|
|
74
|
+
export type ResponseType = InferOutput<typeof Response>;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// ============================================================================
|
|
78
|
+
// storage.getSecret - Get a secret value for this plugin (base64-encoded bytes)
|
|
79
|
+
// ============================================================================
|
|
80
|
+
export namespace StorageGetSecret {
|
|
81
|
+
export const Request = respondableMessage("storage.getSecret", {
|
|
82
|
+
key: string(),
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
export const Response = object({
|
|
86
|
+
type: literal("storage.getSecret.response"),
|
|
87
|
+
payload: object({
|
|
88
|
+
requestId: string(),
|
|
89
|
+
success: boolean(),
|
|
90
|
+
value: nullable(string()), // base64-encoded bytes or null
|
|
91
|
+
error: optional(string()),
|
|
92
|
+
}),
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
export type RequestType = InferOutput<typeof Request>;
|
|
96
|
+
export type ResponseType = InferOutput<typeof Response>;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// ============================================================================
|
|
100
|
+
// storage.setSecret - Set a secret value for this plugin (base64-encoded bytes)
|
|
101
|
+
// ============================================================================
|
|
102
|
+
export namespace StorageSetSecret {
|
|
103
|
+
export const Request = respondableMessage("storage.setSecret", {
|
|
104
|
+
key: string(),
|
|
105
|
+
value: string(), // base64-encoded bytes
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
export const Response = object({
|
|
109
|
+
type: literal("storage.setSecret.response"),
|
|
110
|
+
payload: object({
|
|
111
|
+
requestId: string(),
|
|
112
|
+
success: boolean(),
|
|
113
|
+
error: optional(string()),
|
|
114
|
+
}),
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
export type RequestType = InferOutput<typeof Request>;
|
|
118
|
+
export type ResponseType = InferOutput<typeof Response>;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// ============================================================================
|
|
122
|
+
// storage.deleteSecret - Delete a secret value for this plugin
|
|
123
|
+
// ============================================================================
|
|
124
|
+
export namespace StorageDeleteSecret {
|
|
125
|
+
export const Request = respondableMessage("storage.deleteSecret", {
|
|
126
|
+
key: string(),
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
export const Response = object({
|
|
130
|
+
type: literal("storage.deleteSecret.response"),
|
|
131
|
+
payload: object({
|
|
132
|
+
requestId: string(),
|
|
133
|
+
success: boolean(),
|
|
134
|
+
error: optional(string()),
|
|
135
|
+
}),
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
export type RequestType = InferOutput<typeof Request>;
|
|
139
|
+
export type ResponseType = InferOutput<typeof Response>;
|
|
140
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { IFrameClient } from "../IFrameClient.js";
|
|
2
|
+
import { safeParse } from "valibot";
|
|
3
|
+
import type { UiTabsChangedEventPayload } from "../index.js";
|
|
4
|
+
import {
|
|
5
|
+
UI_TABS_CHANGED_EVENT,
|
|
6
|
+
UiConfirm,
|
|
7
|
+
UiGetState,
|
|
8
|
+
UiSetCollapseState,
|
|
9
|
+
UiShowContextMenu,
|
|
10
|
+
UiShowNotification,
|
|
11
|
+
UiTabsChangedEventSchema,
|
|
12
|
+
} from "../index.js";
|
|
13
|
+
|
|
14
|
+
export interface TabInfo {
|
|
15
|
+
id: string;
|
|
16
|
+
title: string;
|
|
17
|
+
isActive: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface UiState {
|
|
21
|
+
openTabs: TabInfo[];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export class UiChannel {
|
|
25
|
+
constructor(private client: IFrameClient) {}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Get the current UI state including open tabs.
|
|
29
|
+
* Requires 'ui:read' permission.
|
|
30
|
+
*/
|
|
31
|
+
async getState(): Promise<UiState> {
|
|
32
|
+
const response = await this.client.sendAndWait<
|
|
33
|
+
typeof UiGetState.Request,
|
|
34
|
+
typeof UiGetState.Response
|
|
35
|
+
>("ui.getState", {}, UiGetState.Request, UiGetState.Response);
|
|
36
|
+
|
|
37
|
+
return {
|
|
38
|
+
openTabs: response.openTabs,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Set the collapse state of this panel.
|
|
44
|
+
* @param collapsed - true to collapse the panel, false to expand it
|
|
45
|
+
*/
|
|
46
|
+
async setCollapseState(collapsed: boolean): Promise<void> {
|
|
47
|
+
const response = await this.client.sendAndWait<
|
|
48
|
+
typeof UiSetCollapseState.Request,
|
|
49
|
+
typeof UiSetCollapseState.Response
|
|
50
|
+
>(
|
|
51
|
+
"ui.setCollapseState",
|
|
52
|
+
{ collapsed },
|
|
53
|
+
UiSetCollapseState.Request,
|
|
54
|
+
UiSetCollapseState.Response
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
if (!response.success) {
|
|
58
|
+
throw new Error("Failed to set panel collapse state");
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Show a context menu at the specified position.
|
|
64
|
+
* @param options - Menu configuration including position and items
|
|
65
|
+
* @returns The ID of the selected menu item, or null if cancelled
|
|
66
|
+
*/
|
|
67
|
+
async showContextMenu(options: {
|
|
68
|
+
x: number;
|
|
69
|
+
y: number;
|
|
70
|
+
items: Array<
|
|
71
|
+
{ type?: "item"; id: string; label: string } | { type: "separator" }
|
|
72
|
+
>;
|
|
73
|
+
}): Promise<{ selectedItemId: string | null }> {
|
|
74
|
+
const response = await this.client.sendAndWait<
|
|
75
|
+
typeof UiShowContextMenu.Request,
|
|
76
|
+
typeof UiShowContextMenu.Response
|
|
77
|
+
>(
|
|
78
|
+
"ui.showContextMenu",
|
|
79
|
+
options,
|
|
80
|
+
UiShowContextMenu.Request,
|
|
81
|
+
UiShowContextMenu.Response
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
return { selectedItemId: response.selectedItemId };
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Show a notification message to the user.
|
|
89
|
+
* @param message - The message to display
|
|
90
|
+
* @param type - The type of notification (info, success, warning, error)
|
|
91
|
+
*/
|
|
92
|
+
async showNotification(
|
|
93
|
+
message: string,
|
|
94
|
+
type: "info" | "success" | "warning" | "error" = "info"
|
|
95
|
+
): Promise<void> {
|
|
96
|
+
const response = await this.client.sendAndWait<
|
|
97
|
+
typeof UiShowNotification.Request,
|
|
98
|
+
typeof UiShowNotification.Response
|
|
99
|
+
>(
|
|
100
|
+
"ui.showNotification",
|
|
101
|
+
{ message, type },
|
|
102
|
+
UiShowNotification.Request,
|
|
103
|
+
UiShowNotification.Response
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
if (!response.success) {
|
|
107
|
+
throw new Error(response.error);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Show a native confirmation dialog.
|
|
113
|
+
* @param options - Dialog configuration
|
|
114
|
+
* @returns true if user confirmed, false if cancelled
|
|
115
|
+
*/
|
|
116
|
+
async confirm(options: {
|
|
117
|
+
title: string;
|
|
118
|
+
message: string;
|
|
119
|
+
okLabel?: string;
|
|
120
|
+
cancelLabel?: string;
|
|
121
|
+
}): Promise<boolean> {
|
|
122
|
+
const response = await this.client.sendAndWait<
|
|
123
|
+
typeof UiConfirm.Request,
|
|
124
|
+
typeof UiConfirm.Response
|
|
125
|
+
>("ui.confirm", options, UiConfirm.Request, UiConfirm.Response);
|
|
126
|
+
|
|
127
|
+
return response.confirmed;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Listen for tab changes (tabs opened, closed, or switched).
|
|
132
|
+
* @param handler - Callback function that receives tab change events
|
|
133
|
+
* @returns Unsubscribe function
|
|
134
|
+
*/
|
|
135
|
+
onTabsChanged(
|
|
136
|
+
handler: (event: { payload: UiTabsChangedEventPayload }) => void
|
|
137
|
+
): () => void {
|
|
138
|
+
return this.client.subscribe((evt) => {
|
|
139
|
+
const { type, payload } = evt.data || {};
|
|
140
|
+
if (type === UI_TABS_CHANGED_EVENT) {
|
|
141
|
+
const result = safeParse(UiTabsChangedEventSchema, {
|
|
142
|
+
type,
|
|
143
|
+
payload,
|
|
144
|
+
});
|
|
145
|
+
if (result.success) {
|
|
146
|
+
handler({ payload: result.output.payload });
|
|
147
|
+
} else {
|
|
148
|
+
console.error(
|
|
149
|
+
`[SDK] Invalid ${UI_TABS_CHANGED_EVENT} payload:`,
|
|
150
|
+
result.issues
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./message.schemas.js";
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { string, object, type InferOutput, optional, boolean } from "valibot";
|
|
2
|
+
import { respondableMessage } from "../../base/index.js";
|
|
3
|
+
|
|
4
|
+
const UiConfirmRequestPayloadSchema = object({
|
|
5
|
+
requestId: string(),
|
|
6
|
+
title: string(),
|
|
7
|
+
message: string(),
|
|
8
|
+
okLabel: optional(string()),
|
|
9
|
+
cancelLabel: optional(string()),
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
const UiConfirmResponsePayloadSchema = object({
|
|
13
|
+
requestId: string(),
|
|
14
|
+
confirmed: boolean(),
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
export const UiConfirm = {
|
|
18
|
+
Request: respondableMessage("ui.confirm", {
|
|
19
|
+
title: string(),
|
|
20
|
+
message: string(),
|
|
21
|
+
okLabel: optional(string()),
|
|
22
|
+
cancelLabel: optional(string()),
|
|
23
|
+
}),
|
|
24
|
+
Response: respondableMessage("ui.confirm.response", {
|
|
25
|
+
confirmed: boolean(),
|
|
26
|
+
}),
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export type UiConfirmRequest = InferOutput<typeof UiConfirm.Request>;
|
|
30
|
+
export type UiConfirmResponse = InferOutput<typeof UiConfirm.Response>;
|
|
31
|
+
export type UiConfirmRequestPayload = InferOutput<
|
|
32
|
+
typeof UiConfirmRequestPayloadSchema
|
|
33
|
+
>;
|
|
34
|
+
export type UiConfirmResponsePayload = InferOutput<
|
|
35
|
+
typeof UiConfirmResponsePayloadSchema
|
|
36
|
+
>;
|