@nocturnium/svelte-ide 1.0.0-rc.1
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/LICENSE +21 -0
- package/README.md +251 -0
- package/dist/components/agents/AgentActivityPanel.svelte +565 -0
- package/dist/components/agents/AgentActivityPanel.svelte.d.ts +24 -0
- package/dist/components/agents/AgentAvatar.svelte +417 -0
- package/dist/components/agents/AgentAvatar.svelte.d.ts +23 -0
- package/dist/components/agents/AgentCursor.svelte +224 -0
- package/dist/components/agents/AgentCursor.svelte.d.ts +35 -0
- package/dist/components/agents/AgentPresenceBar.svelte +261 -0
- package/dist/components/agents/AgentPresenceBar.svelte.d.ts +20 -0
- package/dist/components/agents/index.d.ts +4 -0
- package/dist/components/agents/index.js +5 -0
- package/dist/components/ai/AIConversationList.svelte +524 -0
- package/dist/components/ai/AIConversationList.svelte.d.ts +17 -0
- package/dist/components/ai/AIEditPreview.svelte +132 -0
- package/dist/components/ai/AIEditPreview.svelte.d.ts +8 -0
- package/dist/components/ai/AIInlineEdit.svelte +155 -0
- package/dist/components/ai/AIInlineEdit.svelte.d.ts +10 -0
- package/dist/components/ai/AIMessage.svelte +239 -0
- package/dist/components/ai/AIMessage.svelte.d.ts +13 -0
- package/dist/components/ai/AIMessageActions.svelte +176 -0
- package/dist/components/ai/AIMessageActions.svelte.d.ts +12 -0
- package/dist/components/ai/AIMessageContent.svelte +355 -0
- package/dist/components/ai/AIMessageContent.svelte.d.ts +7 -0
- package/dist/components/ai/AIPanel.svelte +561 -0
- package/dist/components/ai/AIPanel.svelte.d.ts +7 -0
- package/dist/components/ai/AISuggestionWidget.svelte +132 -0
- package/dist/components/ai/AISuggestionWidget.svelte.d.ts +10 -0
- package/dist/components/ai/AIToolCallDisplay.svelte +317 -0
- package/dist/components/ai/AIToolCallDisplay.svelte.d.ts +12 -0
- package/dist/components/ai/index.d.ts +9 -0
- package/dist/components/ai/index.js +10 -0
- package/dist/components/core/Avatar.svelte +110 -0
- package/dist/components/core/Avatar.svelte.d.ts +12 -0
- package/dist/components/core/Badge.svelte +98 -0
- package/dist/components/core/Badge.svelte.d.ts +11 -0
- package/dist/components/core/Button.svelte +175 -0
- package/dist/components/core/Button.svelte.d.ts +18 -0
- package/dist/components/core/ConnectionStatus.svelte +294 -0
- package/dist/components/core/ConnectionStatus.svelte.d.ts +20 -0
- package/dist/components/core/ContextMenu.svelte +176 -0
- package/dist/components/core/ContextMenu.svelte.d.ts +19 -0
- package/dist/components/core/ErrorBoundary.svelte +277 -0
- package/dist/components/core/ErrorBoundary.svelte.d.ts +23 -0
- package/dist/components/core/Icon.svelte +107 -0
- package/dist/components/core/Icon.svelte.d.ts +8 -0
- package/dist/components/core/Input.svelte +138 -0
- package/dist/components/core/Input.svelte.d.ts +20 -0
- package/dist/components/core/Kbd.svelte +34 -0
- package/dist/components/core/Kbd.svelte.d.ts +7 -0
- package/dist/components/core/ResizeHandle.svelte +200 -0
- package/dist/components/core/ResizeHandle.svelte.d.ts +23 -0
- package/dist/components/core/Spinner.svelte +35 -0
- package/dist/components/core/Spinner.svelte.d.ts +7 -0
- package/dist/components/core/Textarea.svelte +112 -0
- package/dist/components/core/Textarea.svelte.d.ts +18 -0
- package/dist/components/core/Tooltip.svelte +103 -0
- package/dist/components/core/Tooltip.svelte.d.ts +11 -0
- package/dist/components/core/index.d.ts +13 -0
- package/dist/components/core/index.js +14 -0
- package/dist/components/editor/AIFocusLayer.svelte +430 -0
- package/dist/components/editor/AIFocusLayer.svelte.d.ts +32 -0
- package/dist/components/editor/Breadcrumbs.svelte +435 -0
- package/dist/components/editor/Breadcrumbs.svelte.d.ts +33 -0
- package/dist/components/editor/BreakpointLayer.svelte +642 -0
- package/dist/components/editor/BreakpointLayer.svelte.d.ts +20 -0
- package/dist/components/editor/CognitiveLoadMeter.svelte +324 -0
- package/dist/components/editor/CognitiveLoadMeter.svelte.d.ts +18 -0
- package/dist/components/editor/CollaborativeEditor.svelte +218 -0
- package/dist/components/editor/CollaborativeEditor.svelte.d.ts +32 -0
- package/dist/components/editor/CommandPalette.svelte +434 -0
- package/dist/components/editor/CommandPalette.svelte.d.ts +11 -0
- package/dist/components/editor/ComplexityLayer.svelte +293 -0
- package/dist/components/editor/ComplexityLayer.svelte.d.ts +23 -0
- package/dist/components/editor/ConflictZoneLayer.svelte +441 -0
- package/dist/components/editor/ConflictZoneLayer.svelte.d.ts +25 -0
- package/dist/components/editor/ContextLens.svelte +262 -0
- package/dist/components/editor/ContextLens.svelte.d.ts +27 -0
- package/dist/components/editor/CustomEditor.svelte +1242 -0
- package/dist/components/editor/CustomEditor.svelte.d.ts +37 -0
- package/dist/components/editor/DebugConsole.svelte +646 -0
- package/dist/components/editor/DebugConsole.svelte.d.ts +41 -0
- package/dist/components/editor/EchoCursorLayer.svelte +363 -0
- package/dist/components/editor/EchoCursorLayer.svelte.d.ts +24 -0
- package/dist/components/editor/Editor.svelte +61 -0
- package/dist/components/editor/Editor.svelte.d.ts +22 -0
- package/dist/components/editor/EditorGutter.svelte +119 -0
- package/dist/components/editor/EditorGutter.svelte.d.ts +19 -0
- package/dist/components/editor/EditorLines.svelte +182 -0
- package/dist/components/editor/EditorLines.svelte.d.ts +43 -0
- package/dist/components/editor/EditorPane.svelte +134 -0
- package/dist/components/editor/EditorPane.svelte.d.ts +9 -0
- package/dist/components/editor/EditorSelections.svelte +186 -0
- package/dist/components/editor/EditorSelections.svelte.d.ts +25 -0
- package/dist/components/editor/EditorTabs.svelte +170 -0
- package/dist/components/editor/EditorTabs.svelte.d.ts +12 -0
- package/dist/components/editor/FileExplorer.svelte +811 -0
- package/dist/components/editor/FileExplorer.svelte.d.ts +67 -0
- package/dist/components/editor/FileIcon.svelte +110 -0
- package/dist/components/editor/FileIcon.svelte.d.ts +10 -0
- package/dist/components/editor/FindReplace.svelte +448 -0
- package/dist/components/editor/FindReplace.svelte.d.ts +40 -0
- package/dist/components/editor/GhostBracketLayer.svelte +391 -0
- package/dist/components/editor/GhostBracketLayer.svelte.d.ts +24 -0
- package/dist/components/editor/GitBlameLayer.svelte +436 -0
- package/dist/components/editor/GitBlameLayer.svelte.d.ts +18 -0
- package/dist/components/editor/InlineDiagnosticsLayer.svelte +540 -0
- package/dist/components/editor/InlineDiagnosticsLayer.svelte.d.ts +35 -0
- package/dist/components/editor/InlineDiffLayer.svelte +337 -0
- package/dist/components/editor/InlineDiffLayer.svelte.d.ts +31 -0
- package/dist/components/editor/MinimalEditor.svelte +75 -0
- package/dist/components/editor/MinimalEditor.svelte.d.ts +6 -0
- package/dist/components/editor/MinimalEditor2.svelte +84 -0
- package/dist/components/editor/MinimalEditor2.svelte.d.ts +6 -0
- package/dist/components/editor/Minimap.svelte +327 -0
- package/dist/components/editor/Minimap.svelte.d.ts +34 -0
- package/dist/components/editor/PluginPreviewSandbox.svelte +793 -0
- package/dist/components/editor/PluginPreviewSandbox.svelte.d.ts +49 -0
- package/dist/components/editor/ProblemsPanel.svelte +628 -0
- package/dist/components/editor/ProblemsPanel.svelte.d.ts +25 -0
- package/dist/components/editor/QuickActionsMenu.svelte +403 -0
- package/dist/components/editor/QuickActionsMenu.svelte.d.ts +18 -0
- package/dist/components/editor/SnippetPalette.svelte +530 -0
- package/dist/components/editor/SnippetPalette.svelte.d.ts +16 -0
- package/dist/components/editor/StructureMap.svelte +431 -0
- package/dist/components/editor/StructureMap.svelte.d.ts +37 -0
- package/dist/components/editor/SymbolOutline.svelte +722 -0
- package/dist/components/editor/SymbolOutline.svelte.d.ts +44 -0
- package/dist/components/editor/TimelineScrubber.svelte +470 -0
- package/dist/components/editor/TimelineScrubber.svelte.d.ts +40 -0
- package/dist/components/editor/TokenRenderer.svelte +69 -0
- package/dist/components/editor/TokenRenderer.svelte.d.ts +15 -0
- package/dist/components/editor/constants.d.ts +32 -0
- package/dist/components/editor/constants.js +36 -0
- package/dist/components/editor/core/ai-awareness.d.ts +176 -0
- package/dist/components/editor/core/ai-awareness.js +210 -0
- package/dist/components/editor/core/bracket-healer.d.ts +189 -0
- package/dist/components/editor/core/bracket-healer.js +406 -0
- package/dist/components/editor/core/breakpoints.d.ts +203 -0
- package/dist/components/editor/core/breakpoints.js +414 -0
- package/dist/components/editor/core/commands.d.ts +108 -0
- package/dist/components/editor/core/commands.js +246 -0
- package/dist/components/editor/core/complexity-analyzer.d.ts +123 -0
- package/dist/components/editor/core/complexity-analyzer.js +376 -0
- package/dist/components/editor/core/conflict-predictor.d.ts +135 -0
- package/dist/components/editor/core/conflict-predictor.js +316 -0
- package/dist/components/editor/core/crdt-binding.d.ts +118 -0
- package/dist/components/editor/core/crdt-binding.js +286 -0
- package/dist/components/editor/core/diagnostics.d.ts +210 -0
- package/dist/components/editor/core/diagnostics.js +335 -0
- package/dist/components/editor/core/echo-cursor.d.ts +201 -0
- package/dist/components/editor/core/echo-cursor.js +267 -0
- package/dist/components/editor/core/folding.d.ts +124 -0
- package/dist/components/editor/core/folding.js +672 -0
- package/dist/components/editor/core/ghost-pair.d.ts +122 -0
- package/dist/components/editor/core/ghost-pair.js +221 -0
- package/dist/components/editor/core/git-blame.d.ts +170 -0
- package/dist/components/editor/core/git-blame.js +324 -0
- package/dist/components/editor/core/index.d.ts +26 -0
- package/dist/components/editor/core/index.js +24 -0
- package/dist/components/editor/core/keybindings.d.ts +79 -0
- package/dist/components/editor/core/keybindings.js +357 -0
- package/dist/components/editor/core/multi-cursor.d.ts +196 -0
- package/dist/components/editor/core/multi-cursor.js +521 -0
- package/dist/components/editor/core/navigation.d.ts +107 -0
- package/dist/components/editor/core/navigation.js +408 -0
- package/dist/components/editor/core/quick-actions.d.ts +189 -0
- package/dist/components/editor/core/quick-actions.js +427 -0
- package/dist/components/editor/core/search.d.ts +88 -0
- package/dist/components/editor/core/search.js +192 -0
- package/dist/components/editor/core/semantic-analyzer.d.ts +77 -0
- package/dist/components/editor/core/semantic-analyzer.js +424 -0
- package/dist/components/editor/core/snippet-manager.d.ts +202 -0
- package/dist/components/editor/core/snippet-manager.js +565 -0
- package/dist/components/editor/core/state.d.ts +367 -0
- package/dist/components/editor/core/state.js +900 -0
- package/dist/components/editor/core/timeline.d.ts +204 -0
- package/dist/components/editor/core/timeline.js +349 -0
- package/dist/components/editor/editor-find.d.ts +56 -0
- package/dist/components/editor/editor-find.js +148 -0
- package/dist/components/editor/editor-input.d.ts +77 -0
- package/dist/components/editor/editor-input.js +445 -0
- package/dist/components/editor/editor-multicursor.d.ts +21 -0
- package/dist/components/editor/editor-multicursor.js +196 -0
- package/dist/components/editor/editor-scroll.d.ts +14 -0
- package/dist/components/editor/editor-scroll.js +34 -0
- package/dist/components/editor/index.d.ts +15 -0
- package/dist/components/editor/index.js +21 -0
- package/dist/components/editor/languages.d.ts +62 -0
- package/dist/components/editor/languages.js +285 -0
- package/dist/components/editor/theme.d.ts +88 -0
- package/dist/components/editor/theme.js +139 -0
- package/dist/components/editor/tokenizer/base.d.ts +40 -0
- package/dist/components/editor/tokenizer/base.js +203 -0
- package/dist/components/editor/tokenizer/index.d.ts +56 -0
- package/dist/components/editor/tokenizer/index.js +215 -0
- package/dist/components/editor/tokenizer/languages/css.d.ts +17 -0
- package/dist/components/editor/tokenizer/languages/css.js +194 -0
- package/dist/components/editor/tokenizer/languages/go.d.ts +17 -0
- package/dist/components/editor/tokenizer/languages/go.js +220 -0
- package/dist/components/editor/tokenizer/languages/html.d.ts +24 -0
- package/dist/components/editor/tokenizer/languages/html.js +145 -0
- package/dist/components/editor/tokenizer/languages/javascript.d.ts +56 -0
- package/dist/components/editor/tokenizer/languages/javascript.js +452 -0
- package/dist/components/editor/tokenizer/languages/json.d.ts +12 -0
- package/dist/components/editor/tokenizer/languages/json.js +91 -0
- package/dist/components/editor/tokenizer/languages/markdown.d.ts +16 -0
- package/dist/components/editor/tokenizer/languages/markdown.js +156 -0
- package/dist/components/editor/tokenizer/languages/python.d.ts +20 -0
- package/dist/components/editor/tokenizer/languages/python.js +227 -0
- package/dist/components/editor/tokenizer/languages/svelte.d.ts +40 -0
- package/dist/components/editor/tokenizer/languages/svelte.js +326 -0
- package/dist/components/editor/tokenizer/types.d.ts +86 -0
- package/dist/components/editor/tokenizer/types.js +4 -0
- package/dist/components/layout/IDELayout.svelte +274 -0
- package/dist/components/layout/IDELayout.svelte.d.ts +29 -0
- package/dist/components/layout/StatusBar.svelte +511 -0
- package/dist/components/layout/StatusBar.svelte.d.ts +47 -0
- package/dist/components/layout/index.d.ts +2 -0
- package/dist/components/layout/index.js +3 -0
- package/dist/components/lsp/AutocompleteWidget.svelte +364 -0
- package/dist/components/lsp/AutocompleteWidget.svelte.d.ts +33 -0
- package/dist/components/lsp/DiagnosticMarker.svelte +166 -0
- package/dist/components/lsp/DiagnosticMarker.svelte.d.ts +19 -0
- package/dist/components/lsp/DiagnosticsPanel.svelte +388 -0
- package/dist/components/lsp/DiagnosticsPanel.svelte.d.ts +21 -0
- package/dist/components/lsp/HoverTooltip.svelte +274 -0
- package/dist/components/lsp/HoverTooltip.svelte.d.ts +24 -0
- package/dist/components/lsp/LSPEditor.svelte +486 -0
- package/dist/components/lsp/LSPEditor.svelte.d.ts +39 -0
- package/dist/components/lsp/SignatureHelpWidget.svelte +216 -0
- package/dist/components/lsp/SignatureHelpWidget.svelte.d.ts +22 -0
- package/dist/components/lsp/index.d.ts +6 -0
- package/dist/components/lsp/index.js +7 -0
- package/dist/components/plugins/PluginCard.svelte +153 -0
- package/dist/components/plugins/PluginCard.svelte.d.ts +19 -0
- package/dist/components/plugins/PluginPanel.svelte +280 -0
- package/dist/components/plugins/PluginPanel.svelte.d.ts +8 -0
- package/dist/components/plugins/PluginProposalForm.svelte +250 -0
- package/dist/components/plugins/PluginProposalForm.svelte.d.ts +6 -0
- package/dist/components/plugins/PluginStatusBadge.svelte +14 -0
- package/dist/components/plugins/PluginStatusBadge.svelte.d.ts +8 -0
- package/dist/components/plugins/index.d.ts +4 -0
- package/dist/components/plugins/index.js +5 -0
- package/dist/components/vfs/LockConflictDialog.svelte +705 -0
- package/dist/components/vfs/LockConflictDialog.svelte.d.ts +21 -0
- package/dist/components/vfs/LockIndicator.svelte +194 -0
- package/dist/components/vfs/LockIndicator.svelte.d.ts +29 -0
- package/dist/components/vfs/LockOverlay.svelte +344 -0
- package/dist/components/vfs/LockOverlay.svelte.d.ts +17 -0
- package/dist/components/vfs/VersionConflictDialog.svelte +549 -0
- package/dist/components/vfs/VersionConflictDialog.svelte.d.ts +24 -0
- package/dist/components/vfs/index.d.ts +4 -0
- package/dist/components/vfs/index.js +5 -0
- package/dist/crdt/awareness.d.ts +42 -0
- package/dist/crdt/awareness.js +109 -0
- package/dist/crdt/document.d.ts +101 -0
- package/dist/crdt/document.js +187 -0
- package/dist/crdt/index.d.ts +9 -0
- package/dist/crdt/index.js +8 -0
- package/dist/crdt/provider.d.ts +85 -0
- package/dist/crdt/provider.js +150 -0
- package/dist/crdt/types.d.ts +61 -0
- package/dist/crdt/types.js +4 -0
- package/dist/crdt/undo.d.ts +34 -0
- package/dist/crdt/undo.js +70 -0
- package/dist/index.d.ts +277 -0
- package/dist/index.js +280 -0
- package/dist/plugins/index.d.ts +103 -0
- package/dist/plugins/index.js +153 -0
- package/dist/services/error-handling.d.ts +95 -0
- package/dist/services/error-handling.js +413 -0
- package/dist/services/ide-integration.d.ts +83 -0
- package/dist/services/ide-integration.js +367 -0
- package/dist/services/lsp-client.d.ts +69 -0
- package/dist/services/lsp-client.js +667 -0
- package/dist/services/mock-ai.d.ts +37 -0
- package/dist/services/mock-ai.js +318 -0
- package/dist/services/optimistic.d.ts +141 -0
- package/dist/services/optimistic.js +367 -0
- package/dist/services/vfs-client.d.ts +81 -0
- package/dist/services/vfs-client.js +348 -0
- package/dist/stores/agents.svelte.d.ts +85 -0
- package/dist/stores/agents.svelte.js +459 -0
- package/dist/stores/ai-persistence.svelte.d.ts +76 -0
- package/dist/stores/ai-persistence.svelte.js +334 -0
- package/dist/stores/ai.svelte.d.ts +140 -0
- package/dist/stores/ai.svelte.js +383 -0
- package/dist/stores/collaboration.svelte.d.ts +164 -0
- package/dist/stores/collaboration.svelte.js +334 -0
- package/dist/stores/editor.svelte.d.ts +131 -0
- package/dist/stores/editor.svelte.js +250 -0
- package/dist/stores/index.d.ts +10 -0
- package/dist/stores/index.js +29 -0
- package/dist/stores/layout.svelte.d.ts +171 -0
- package/dist/stores/layout.svelte.js +351 -0
- package/dist/stores/plugin.svelte.d.ts +121 -0
- package/dist/stores/plugin.svelte.js +410 -0
- package/dist/stores/vfs.svelte.d.ts +123 -0
- package/dist/stores/vfs.svelte.js +680 -0
- package/dist/styles/theme.css +623 -0
- package/dist/types/agents.d.ts +127 -0
- package/dist/types/agents.js +5 -0
- package/dist/types/ai.d.ts +137 -0
- package/dist/types/ai.js +4 -0
- package/dist/types/crdt.d.ts +222 -0
- package/dist/types/crdt.js +5 -0
- package/dist/types/editor.d.ts +52 -0
- package/dist/types/editor.js +18 -0
- package/dist/types/events.d.ts +133 -0
- package/dist/types/events.js +4 -0
- package/dist/types/filesystem.d.ts +77 -0
- package/dist/types/filesystem.js +4 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.js +12 -0
- package/dist/types/lsp.d.ts +691 -0
- package/dist/types/lsp.js +108 -0
- package/dist/types/plugin.d.ts +239 -0
- package/dist/types/plugin.js +5 -0
- package/dist/types/vfs.d.ts +191 -0
- package/dist/types/vfs.js +18 -0
- package/dist/utils/format.d.ts +55 -0
- package/dist/utils/format.js +152 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/keybindings.d.ts +33 -0
- package/dist/utils/keybindings.js +171 -0
- package/dist/utils/language.d.ts +27 -0
- package/dist/utils/language.js +222 -0
- package/package.json +178 -0
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin store using Svelte 5 runes.
|
|
3
|
+
*
|
|
4
|
+
* Manages the proposal-based plugin lifecycle (draft → review → testing →
|
|
5
|
+
* deployed) against a backend "plugin host". The host is expected to expose a
|
|
6
|
+
* REST + Server-Sent-Events API under a configurable base path (default
|
|
7
|
+
* `/api/plugins`); see {@link connect} and the fetch helpers below for the
|
|
8
|
+
* exact contract.
|
|
9
|
+
*
|
|
10
|
+
* Note: Svelte 5 modules cannot directly export $derived values.
|
|
11
|
+
* We use getter functions to expose reactive derived state.
|
|
12
|
+
*/
|
|
13
|
+
// Reactive state
|
|
14
|
+
let state = $state({
|
|
15
|
+
proposals: [],
|
|
16
|
+
instances: new Map(),
|
|
17
|
+
commands: new Map(),
|
|
18
|
+
panels: new Map(),
|
|
19
|
+
eventSource: null,
|
|
20
|
+
connected: false,
|
|
21
|
+
loadingProposals: false,
|
|
22
|
+
loadingInstance: null,
|
|
23
|
+
error: null
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* Offline seeding: populate the store with proposals without any network call.
|
|
27
|
+
* When seeded, connect()/fetchProposals() no-op so an embedded panel renders the
|
|
28
|
+
* seeded data on a static host (e.g. the docs demo) with no spinner or error.
|
|
29
|
+
* Internal utility — intentionally NOT re-exported from the package root.
|
|
30
|
+
*/
|
|
31
|
+
let demoOffline = false;
|
|
32
|
+
export function seedProposals(proposals) {
|
|
33
|
+
demoOffline = true;
|
|
34
|
+
state.proposals = proposals;
|
|
35
|
+
state.loadingProposals = false;
|
|
36
|
+
state.connected = true;
|
|
37
|
+
state.error = null;
|
|
38
|
+
}
|
|
39
|
+
// Getter functions for derived values (Svelte 5 module-safe)
|
|
40
|
+
export function getProposals() {
|
|
41
|
+
return state.proposals;
|
|
42
|
+
}
|
|
43
|
+
export function getInstances() {
|
|
44
|
+
return Array.from(state.instances.values());
|
|
45
|
+
}
|
|
46
|
+
export function getActiveInstances() {
|
|
47
|
+
return getInstances().filter((i) => i.status === 'active');
|
|
48
|
+
}
|
|
49
|
+
export function getCommands() {
|
|
50
|
+
return Array.from(state.commands.values());
|
|
51
|
+
}
|
|
52
|
+
export function getPanels() {
|
|
53
|
+
return Array.from(state.panels.values());
|
|
54
|
+
}
|
|
55
|
+
export function getConnected() {
|
|
56
|
+
return state.connected;
|
|
57
|
+
}
|
|
58
|
+
export function getLoadingProposals() {
|
|
59
|
+
return state.loadingProposals;
|
|
60
|
+
}
|
|
61
|
+
export function getLoadingInstance() {
|
|
62
|
+
return state.loadingInstance;
|
|
63
|
+
}
|
|
64
|
+
export function getError() {
|
|
65
|
+
return state.error;
|
|
66
|
+
}
|
|
67
|
+
export function getDraftProposals() {
|
|
68
|
+
return state.proposals.filter((p) => p.status === 'draft');
|
|
69
|
+
}
|
|
70
|
+
export function getReviewingProposals() {
|
|
71
|
+
return state.proposals.filter((p) => p.status === 'reviewing');
|
|
72
|
+
}
|
|
73
|
+
export function getDeployedProposals() {
|
|
74
|
+
return state.proposals.filter((p) => p.status === 'deployed');
|
|
75
|
+
}
|
|
76
|
+
// Legacy aliases for backward compatibility
|
|
77
|
+
export const proposals = { get current() { return getProposals(); } };
|
|
78
|
+
export const instances = { get current() { return getInstances(); } };
|
|
79
|
+
export const activeInstances = { get current() { return getActiveInstances(); } };
|
|
80
|
+
export const commands = { get current() { return getCommands(); } };
|
|
81
|
+
export const panels = { get current() { return getPanels(); } };
|
|
82
|
+
export const connected = { get current() { return getConnected(); } };
|
|
83
|
+
export const loadingProposals = { get current() { return getLoadingProposals(); } };
|
|
84
|
+
export const loadingInstance = { get current() { return getLoadingInstance(); } };
|
|
85
|
+
export const error = { get current() { return getError(); } };
|
|
86
|
+
export const draftProposals = { get current() { return getDraftProposals(); } };
|
|
87
|
+
export const reviewingProposals = { get current() { return getReviewingProposals(); } };
|
|
88
|
+
export const deployedProposals = { get current() { return getDeployedProposals(); } };
|
|
89
|
+
// Event handlers
|
|
90
|
+
const eventHandlers = new Map();
|
|
91
|
+
/**
|
|
92
|
+
* Connect to the plugin host's Server-Sent-Events stream.
|
|
93
|
+
*
|
|
94
|
+
* @param endpoint - SSE endpoint on your plugin host. Defaults to
|
|
95
|
+
* `/api/plugins/stream` (same-origin).
|
|
96
|
+
*/
|
|
97
|
+
export function connect(endpoint = '/api/plugins/stream') {
|
|
98
|
+
if (demoOffline) {
|
|
99
|
+
state.connected = true;
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (state.eventSource) {
|
|
103
|
+
state.eventSource.close();
|
|
104
|
+
}
|
|
105
|
+
const eventSource = new EventSource(endpoint);
|
|
106
|
+
eventSource.onopen = () => {
|
|
107
|
+
state.connected = true;
|
|
108
|
+
state.error = null;
|
|
109
|
+
};
|
|
110
|
+
eventSource.onerror = () => {
|
|
111
|
+
state.connected = false;
|
|
112
|
+
state.error = 'Connection to plugin server lost';
|
|
113
|
+
};
|
|
114
|
+
eventSource.onmessage = (event) => {
|
|
115
|
+
try {
|
|
116
|
+
const pluginEvent = JSON.parse(event.data);
|
|
117
|
+
handleEvent(pluginEvent);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
console.error('Failed to parse plugin event');
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
state.eventSource = eventSource;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Disconnect from the event stream
|
|
127
|
+
*/
|
|
128
|
+
export function disconnect() {
|
|
129
|
+
if (state.eventSource) {
|
|
130
|
+
state.eventSource.close();
|
|
131
|
+
state.eventSource = null;
|
|
132
|
+
}
|
|
133
|
+
state.connected = false;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Handle incoming plugin events
|
|
137
|
+
*/
|
|
138
|
+
function handleEvent(event) {
|
|
139
|
+
// Update proposal state based on event
|
|
140
|
+
switch (event.type) {
|
|
141
|
+
case 'created':
|
|
142
|
+
// Proposal created - refresh list
|
|
143
|
+
fetchProposals();
|
|
144
|
+
break;
|
|
145
|
+
case 'submitted':
|
|
146
|
+
case 'review_started':
|
|
147
|
+
case 'approved':
|
|
148
|
+
case 'rejected':
|
|
149
|
+
case 'testing_started':
|
|
150
|
+
case 'deploying':
|
|
151
|
+
case 'deployed':
|
|
152
|
+
case 'rolled_back':
|
|
153
|
+
// Status change - update the proposal
|
|
154
|
+
updateProposalStatus(event.proposalId, event.type);
|
|
155
|
+
break;
|
|
156
|
+
case 'vote_cast':
|
|
157
|
+
// Vote received - could update UI to show vote progress
|
|
158
|
+
break;
|
|
159
|
+
case 'test_completed':
|
|
160
|
+
// Test completed - could update test results display
|
|
161
|
+
break;
|
|
162
|
+
case 'rollout_step':
|
|
163
|
+
// Rollout progress - could show progress bar
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
// Notify subscribed handlers
|
|
167
|
+
const handlers = eventHandlers.get(event.type);
|
|
168
|
+
if (handlers) {
|
|
169
|
+
handlers.forEach((handler) => handler(event));
|
|
170
|
+
}
|
|
171
|
+
// Notify wildcard handlers
|
|
172
|
+
const wildcardHandlers = eventHandlers.get('*');
|
|
173
|
+
if (wildcardHandlers) {
|
|
174
|
+
wildcardHandlers.forEach((handler) => handler(event));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Subscribe to plugin events
|
|
179
|
+
*/
|
|
180
|
+
export function onEvent(type, handler) {
|
|
181
|
+
if (!eventHandlers.has(type)) {
|
|
182
|
+
eventHandlers.set(type, new Set());
|
|
183
|
+
}
|
|
184
|
+
eventHandlers.get(type).add(handler);
|
|
185
|
+
return () => {
|
|
186
|
+
eventHandlers.get(type)?.delete(handler);
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Fetch all proposals from the server
|
|
191
|
+
*/
|
|
192
|
+
export async function fetchProposals() {
|
|
193
|
+
if (demoOffline) {
|
|
194
|
+
state.loadingProposals = false;
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
state.loadingProposals = true;
|
|
198
|
+
state.error = null;
|
|
199
|
+
try {
|
|
200
|
+
const response = await fetch('/api/plugins/proposals');
|
|
201
|
+
if (!response.ok)
|
|
202
|
+
throw new Error(`Failed to fetch proposals: ${response.status}`);
|
|
203
|
+
const data = await response.json();
|
|
204
|
+
state.proposals = data.proposals ?? [];
|
|
205
|
+
}
|
|
206
|
+
catch (err) {
|
|
207
|
+
state.error = err instanceof Error ? err.message : 'Failed to fetch proposals';
|
|
208
|
+
}
|
|
209
|
+
finally {
|
|
210
|
+
state.loadingProposals = false;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Create a new plugin proposal
|
|
215
|
+
*/
|
|
216
|
+
export async function createProposal(proposal) {
|
|
217
|
+
state.error = null;
|
|
218
|
+
try {
|
|
219
|
+
const response = await fetch('/api/plugins/proposals', {
|
|
220
|
+
method: 'POST',
|
|
221
|
+
headers: { 'Content-Type': 'application/json' },
|
|
222
|
+
body: JSON.stringify(proposal)
|
|
223
|
+
});
|
|
224
|
+
if (!response.ok)
|
|
225
|
+
throw new Error(`Failed to create proposal: ${response.status}`);
|
|
226
|
+
const data = await response.json();
|
|
227
|
+
state.proposals = [...state.proposals, data];
|
|
228
|
+
return data.id;
|
|
229
|
+
}
|
|
230
|
+
catch (err) {
|
|
231
|
+
state.error = err instanceof Error ? err.message : 'Failed to create proposal';
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Submit a proposal for review
|
|
237
|
+
*/
|
|
238
|
+
export async function submitProposal(proposalId) {
|
|
239
|
+
state.error = null;
|
|
240
|
+
try {
|
|
241
|
+
const response = await fetch(`/api/plugins/proposals/${proposalId}/submit`, {
|
|
242
|
+
method: 'POST'
|
|
243
|
+
});
|
|
244
|
+
if (!response.ok)
|
|
245
|
+
throw new Error(`Failed to submit proposal: ${response.status}`);
|
|
246
|
+
updateProposalStatus(proposalId, 'submitted');
|
|
247
|
+
return true;
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
state.error = err instanceof Error ? err.message : 'Failed to submit proposal';
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Update local proposal status
|
|
256
|
+
*/
|
|
257
|
+
function updateProposalStatus(proposalId, status) {
|
|
258
|
+
// Map event types to status if needed
|
|
259
|
+
const statusMap = {
|
|
260
|
+
review_started: 'reviewing',
|
|
261
|
+
testing_started: 'testing'
|
|
262
|
+
};
|
|
263
|
+
const newStatus = (statusMap[status] ?? status);
|
|
264
|
+
state.proposals = state.proposals.map((p) => p.id === proposalId ? { ...p, status: newStatus, updatedAt: new Date() } : p);
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Load and activate a deployed plugin
|
|
268
|
+
*/
|
|
269
|
+
export async function loadPlugin(proposalId) {
|
|
270
|
+
const proposal = state.proposals.find((p) => p.id === proposalId);
|
|
271
|
+
if (!proposal || proposal.status !== 'deployed') {
|
|
272
|
+
state.error = 'Plugin must be deployed before loading';
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
state.loadingInstance = proposalId;
|
|
276
|
+
state.error = null;
|
|
277
|
+
try {
|
|
278
|
+
// For SSR-rendered components, fetch the component from the server
|
|
279
|
+
if (proposal.implementation.type === 'component' && proposal.implementation.componentPath) {
|
|
280
|
+
const response = await fetch(`/api/plugins/plugins/${proposalId}/component?path=${encodeURIComponent(proposal.implementation.componentPath)}`);
|
|
281
|
+
if (!response.ok)
|
|
282
|
+
throw new Error('Failed to load plugin component');
|
|
283
|
+
// The server renders the component and returns it
|
|
284
|
+
// (server-side rendering performed by the plugin host)
|
|
285
|
+
}
|
|
286
|
+
// Create plugin instance
|
|
287
|
+
const instance = {
|
|
288
|
+
id: proposalId,
|
|
289
|
+
manifest: proposalToManifest(proposal),
|
|
290
|
+
status: 'active'
|
|
291
|
+
};
|
|
292
|
+
state.instances.set(proposalId, instance);
|
|
293
|
+
// Register contributions
|
|
294
|
+
registerContributions(proposalId, proposal);
|
|
295
|
+
return true;
|
|
296
|
+
}
|
|
297
|
+
catch (err) {
|
|
298
|
+
const errorMessage = err instanceof Error ? err.message : 'Failed to load plugin';
|
|
299
|
+
state.error = errorMessage;
|
|
300
|
+
state.instances.set(proposalId, {
|
|
301
|
+
id: proposalId,
|
|
302
|
+
manifest: proposalToManifest(proposal),
|
|
303
|
+
status: 'error',
|
|
304
|
+
error: errorMessage
|
|
305
|
+
});
|
|
306
|
+
return false;
|
|
307
|
+
}
|
|
308
|
+
finally {
|
|
309
|
+
state.loadingInstance = null;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Unload a plugin
|
|
314
|
+
*/
|
|
315
|
+
export function unloadPlugin(proposalId) {
|
|
316
|
+
const instance = state.instances.get(proposalId);
|
|
317
|
+
if (!instance)
|
|
318
|
+
return;
|
|
319
|
+
// Call dispose if available
|
|
320
|
+
instance.dispose?.();
|
|
321
|
+
// Unregister contributions
|
|
322
|
+
unregisterContributions(proposalId);
|
|
323
|
+
state.instances.delete(proposalId);
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Convert proposal to manifest format
|
|
327
|
+
*/
|
|
328
|
+
function proposalToManifest(proposal) {
|
|
329
|
+
return {
|
|
330
|
+
name: proposal.name,
|
|
331
|
+
version: `${proposal.version}.0.0`,
|
|
332
|
+
description: proposal.description,
|
|
333
|
+
author: proposal.author,
|
|
334
|
+
category: proposal.category,
|
|
335
|
+
tags: proposal.tags,
|
|
336
|
+
permissions: proposal.implementation.permissions
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Register plugin contributions (commands, panels, etc.)
|
|
341
|
+
*/
|
|
342
|
+
function registerContributions(pluginId, proposal) {
|
|
343
|
+
// This would parse the plugin and register its contributions
|
|
344
|
+
// For now, we'll just note that this is where dynamic registration happens
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Unregister plugin contributions
|
|
348
|
+
*/
|
|
349
|
+
function unregisterContributions(pluginId) {
|
|
350
|
+
// Remove commands registered by this plugin
|
|
351
|
+
for (const [id] of state.commands) {
|
|
352
|
+
if (id.startsWith(`${pluginId}:`)) {
|
|
353
|
+
state.commands.delete(id);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
// Remove panels registered by this plugin
|
|
357
|
+
for (const [id] of state.panels) {
|
|
358
|
+
if (id.startsWith(`${pluginId}:`)) {
|
|
359
|
+
state.panels.delete(id);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Register a command from a plugin
|
|
365
|
+
*/
|
|
366
|
+
export function registerCommand(pluginId, command) {
|
|
367
|
+
const fullId = `${pluginId}:${command.id}`;
|
|
368
|
+
state.commands.set(fullId, { ...command, id: fullId });
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Register a panel from a plugin
|
|
372
|
+
*/
|
|
373
|
+
export function registerPanel(pluginId, panel) {
|
|
374
|
+
const fullId = `${pluginId}:${panel.id}`;
|
|
375
|
+
state.panels.set(fullId, { ...panel, id: fullId });
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Execute a command
|
|
379
|
+
*/
|
|
380
|
+
export async function executeCommand(commandId) {
|
|
381
|
+
const command = state.commands.get(commandId);
|
|
382
|
+
if (!command) {
|
|
383
|
+
state.error = `Command not found: ${commandId}`;
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
try {
|
|
387
|
+
await command.handler();
|
|
388
|
+
}
|
|
389
|
+
catch (err) {
|
|
390
|
+
state.error = err instanceof Error ? err.message : 'Command execution failed';
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Get a proposal by ID
|
|
395
|
+
*/
|
|
396
|
+
export function getProposal(proposalId) {
|
|
397
|
+
return state.proposals.find((p) => p.id === proposalId);
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Get an instance by ID
|
|
401
|
+
*/
|
|
402
|
+
export function getInstance(pluginId) {
|
|
403
|
+
return state.instances.get(pluginId);
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Clear error state
|
|
407
|
+
*/
|
|
408
|
+
export function clearError() {
|
|
409
|
+
state.error = null;
|
|
410
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VFS store using Svelte 5 runes
|
|
3
|
+
* Manages workspace state, file tree, locks, and SSE events
|
|
4
|
+
*
|
|
5
|
+
* Note: Svelte 5 modules cannot directly export $derived values.
|
|
6
|
+
* We use getter functions to expose reactive derived state.
|
|
7
|
+
*/
|
|
8
|
+
import type { VFSWorkspace, VFSFileInfo, VFSFileLock, VFSEvent, VFSTransaction, VFSLockStatus, VFSErrorCode } from '../types';
|
|
9
|
+
import { type VFSError } from '../services/error-handling';
|
|
10
|
+
import { type OptimisticResult } from '../services/optimistic';
|
|
11
|
+
export declare function getWorkspace(): VFSWorkspace | null;
|
|
12
|
+
export declare function getWorkspaceLoading(): boolean;
|
|
13
|
+
export declare function getFiles(): VFSFileInfo[];
|
|
14
|
+
export declare function getFileTree(): VFSFileInfo[];
|
|
15
|
+
export declare function getFile(path: string): VFSFileInfo | undefined;
|
|
16
|
+
export declare function getLocks(): VFSFileLock[];
|
|
17
|
+
export declare function getLock(path: string): VFSFileLock | undefined;
|
|
18
|
+
export declare function getLockStatus(path: string): VFSLockStatus;
|
|
19
|
+
export declare function isLocked(path: string): boolean;
|
|
20
|
+
export declare function isLockedByMe(path: string): boolean;
|
|
21
|
+
export declare function isLockedByOther(path: string): boolean;
|
|
22
|
+
export declare function getMyLocks(): VFSFileLock[];
|
|
23
|
+
export declare function getOtherLocks(): VFSFileLock[];
|
|
24
|
+
export declare function getDirtyFiles(): string[];
|
|
25
|
+
export declare function isDirty(path: string): boolean;
|
|
26
|
+
export declare function getActiveTransactions(): VFSTransaction[];
|
|
27
|
+
export declare function getTransactionHistory(): VFSTransaction[];
|
|
28
|
+
export declare function getConnected(): boolean;
|
|
29
|
+
export declare function getSyncing(): boolean;
|
|
30
|
+
export declare function getError(): string | null;
|
|
31
|
+
export declare function getErrorCode(): VFSErrorCode | null;
|
|
32
|
+
export declare function getVersion(): number;
|
|
33
|
+
export declare function getReconnectAttempts(): number;
|
|
34
|
+
export declare function getStructuredError(): VFSError | null;
|
|
35
|
+
export declare function getConflictQueue(): Array<{
|
|
36
|
+
path: string;
|
|
37
|
+
localContent: string;
|
|
38
|
+
serverVersion: number;
|
|
39
|
+
}>;
|
|
40
|
+
export declare function hasConflicts(): boolean;
|
|
41
|
+
export declare function getPendingRetryCount(operationId: string): number;
|
|
42
|
+
export declare function getLockedFiles(): VFSFileInfo[];
|
|
43
|
+
export declare function getMyLockedFiles(): VFSFileInfo[];
|
|
44
|
+
export declare function getDirectories(): VFSFileInfo[];
|
|
45
|
+
export declare function getFilesInDirectory(dirPath: string): VFSFileInfo[];
|
|
46
|
+
export declare const workspace: {
|
|
47
|
+
readonly current: VFSWorkspace | null;
|
|
48
|
+
};
|
|
49
|
+
export declare const workspaceLoading: {
|
|
50
|
+
readonly current: boolean;
|
|
51
|
+
};
|
|
52
|
+
export declare const files: {
|
|
53
|
+
readonly current: VFSFileInfo[];
|
|
54
|
+
};
|
|
55
|
+
export declare const fileTree: {
|
|
56
|
+
readonly current: VFSFileInfo[];
|
|
57
|
+
};
|
|
58
|
+
export declare const locks: {
|
|
59
|
+
readonly current: VFSFileLock[];
|
|
60
|
+
};
|
|
61
|
+
export declare const dirtyFiles: {
|
|
62
|
+
readonly current: string[];
|
|
63
|
+
};
|
|
64
|
+
export declare const activeTransactions: {
|
|
65
|
+
readonly current: VFSTransaction[];
|
|
66
|
+
};
|
|
67
|
+
export declare const connected: {
|
|
68
|
+
readonly current: boolean;
|
|
69
|
+
};
|
|
70
|
+
export declare const syncing: {
|
|
71
|
+
readonly current: boolean;
|
|
72
|
+
};
|
|
73
|
+
export declare const error: {
|
|
74
|
+
readonly current: string | null;
|
|
75
|
+
};
|
|
76
|
+
export declare function initialize(userId: string, workspaceId?: string): void;
|
|
77
|
+
export declare function loadWorkspace(workspaceId: string): Promise<void>;
|
|
78
|
+
export declare function updateFileInfo(fileInfo: VFSFileInfo): void;
|
|
79
|
+
export declare function removeFileInfo(path: string): void;
|
|
80
|
+
export declare function markDirty(path: string): void;
|
|
81
|
+
export declare function markClean(path: string): void;
|
|
82
|
+
export declare function setFiles(files: VFSFileInfo[]): void;
|
|
83
|
+
/**
|
|
84
|
+
* Write file content with optimistic update and automatic rollback on failure
|
|
85
|
+
*/
|
|
86
|
+
export declare function writeFileOptimistic(path: string, content: string, options?: {
|
|
87
|
+
createIfNotExists?: boolean;
|
|
88
|
+
}): Promise<OptimisticResult<VFSFileInfo>>;
|
|
89
|
+
/**
|
|
90
|
+
* Delete file with optimistic update
|
|
91
|
+
*/
|
|
92
|
+
export declare function deleteFileOptimistic(path: string): Promise<OptimisticResult<void>>;
|
|
93
|
+
/**
|
|
94
|
+
* Resolve a file conflict
|
|
95
|
+
*/
|
|
96
|
+
export declare function resolveConflict(path: string, resolution: 'use_local' | 'use_server' | 'merge', mergedContent?: string): void;
|
|
97
|
+
/**
|
|
98
|
+
* Dismiss all conflicts (use server versions)
|
|
99
|
+
*/
|
|
100
|
+
export declare function dismissAllConflicts(): void;
|
|
101
|
+
/**
|
|
102
|
+
* Retry a failed operation
|
|
103
|
+
*/
|
|
104
|
+
export declare function retryOperation(operationId: string): Promise<boolean>;
|
|
105
|
+
/**
|
|
106
|
+
* Clear structured error
|
|
107
|
+
*/
|
|
108
|
+
export declare function clearStructuredError(): void;
|
|
109
|
+
export declare function setLock(lock: VFSFileLock): void;
|
|
110
|
+
export declare function removeLock(path: string): void;
|
|
111
|
+
export declare function setLockStatus(path: string, status: VFSLockStatus): void;
|
|
112
|
+
export declare function setLocks(locks: VFSFileLock[]): void;
|
|
113
|
+
export declare function acquireLock(path: string, purpose?: VFSFileLock['purpose']): Promise<VFSFileLock | null>;
|
|
114
|
+
export declare function releaseLock(path: string): Promise<void>;
|
|
115
|
+
export declare function releaseAllMyLocks(): Promise<void>;
|
|
116
|
+
export declare function startTransaction(transaction: VFSTransaction): void;
|
|
117
|
+
export declare function completeTransaction(transactionId: string, status: 'committed' | 'rolledback'): void;
|
|
118
|
+
export declare function connect(workspaceId: string): void;
|
|
119
|
+
export declare function disconnect(): void;
|
|
120
|
+
export declare function onEvent(type: VFSEvent['type'] | '*', handler: (event: VFSEvent) => void): () => void;
|
|
121
|
+
export declare function clearError(): void;
|
|
122
|
+
export declare function reset(): void;
|
|
123
|
+
export declare function setSyncing(syncing: boolean): void;
|