@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,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin System API
|
|
3
|
+
*
|
|
4
|
+
* A proposal-based plugin/extension system. Plugins move through a
|
|
5
|
+
* lifecycle (draft → review → testing → deployed) coordinated by a backend
|
|
6
|
+
* "plugin host" that you provide. See {@link createPluginLoader} and the
|
|
7
|
+
* plugin store for the HTTP/SSE contract the host is expected to implement.
|
|
8
|
+
*
|
|
9
|
+
* Plugins can be:
|
|
10
|
+
* 1. UI Components (server-rendered by the plugin host)
|
|
11
|
+
* 2. JS Modules (executed by the plugin host, out of band)
|
|
12
|
+
* 3. Actions (commands that can be invoked)
|
|
13
|
+
* 4. Providers (services that provide data/functionality)
|
|
14
|
+
*/
|
|
15
|
+
import type { PluginManifest, PluginInstance, PluginCommand, PluginPanel } from '../types';
|
|
16
|
+
/**
|
|
17
|
+
* Plugin registry for managing loaded plugins
|
|
18
|
+
*/
|
|
19
|
+
declare class PluginRegistry {
|
|
20
|
+
private plugins;
|
|
21
|
+
private commands;
|
|
22
|
+
private panels;
|
|
23
|
+
/**
|
|
24
|
+
* Register a plugin instance
|
|
25
|
+
*/
|
|
26
|
+
register(plugin: PluginInstance): void;
|
|
27
|
+
/**
|
|
28
|
+
* Unregister a plugin
|
|
29
|
+
*/
|
|
30
|
+
unregister(pluginId: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* Get a plugin by ID
|
|
33
|
+
*/
|
|
34
|
+
get(pluginId: string): PluginInstance | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Get all plugins
|
|
37
|
+
*/
|
|
38
|
+
getAll(): PluginInstance[];
|
|
39
|
+
/**
|
|
40
|
+
* Register a command
|
|
41
|
+
*/
|
|
42
|
+
registerCommand(pluginId: string, command: PluginCommand): void;
|
|
43
|
+
/**
|
|
44
|
+
* Execute a command
|
|
45
|
+
*/
|
|
46
|
+
executeCommand(commandId: string): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Get all commands
|
|
49
|
+
*/
|
|
50
|
+
getCommands(): PluginCommand[];
|
|
51
|
+
/**
|
|
52
|
+
* Register a panel
|
|
53
|
+
*/
|
|
54
|
+
registerPanel(pluginId: string, panel: PluginPanel): void;
|
|
55
|
+
/**
|
|
56
|
+
* Get all panels
|
|
57
|
+
*/
|
|
58
|
+
getPanels(): PluginPanel[];
|
|
59
|
+
/**
|
|
60
|
+
* Get panels by position
|
|
61
|
+
*/
|
|
62
|
+
getPanelsByPosition(position: 'left' | 'right' | 'bottom'): PluginPanel[];
|
|
63
|
+
}
|
|
64
|
+
export declare const pluginRegistry: PluginRegistry;
|
|
65
|
+
/**
|
|
66
|
+
* Plugin loader for server-rendered components served by the plugin host
|
|
67
|
+
*/
|
|
68
|
+
export interface PluginLoader {
|
|
69
|
+
/**
|
|
70
|
+
* Load a plugin component from the server
|
|
71
|
+
*/
|
|
72
|
+
loadComponent(proposalId: string, componentPath: string): Promise<{
|
|
73
|
+
default: unknown;
|
|
74
|
+
}>;
|
|
75
|
+
/**
|
|
76
|
+
* Load a plugin module from the server
|
|
77
|
+
*/
|
|
78
|
+
loadModule(proposalId: string, entryPoint: string): Promise<Record<string, unknown>>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Create a plugin loader bound to a plugin-host HTTP API.
|
|
82
|
+
*
|
|
83
|
+
* @param apiBase - Base path of the plugin host's REST API (same-origin).
|
|
84
|
+
* Defaults to `/api/plugins`.
|
|
85
|
+
*/
|
|
86
|
+
export declare function createPluginLoader(apiBase?: string): PluginLoader;
|
|
87
|
+
/**
|
|
88
|
+
* Define a plugin manifest
|
|
89
|
+
*/
|
|
90
|
+
export declare function definePlugin(manifest: PluginManifest): PluginManifest;
|
|
91
|
+
/**
|
|
92
|
+
* Define a plugin command
|
|
93
|
+
*/
|
|
94
|
+
export declare function defineCommand(command: Omit<PluginCommand, 'id'> & {
|
|
95
|
+
id: string;
|
|
96
|
+
}): PluginCommand;
|
|
97
|
+
/**
|
|
98
|
+
* Define a plugin panel
|
|
99
|
+
*/
|
|
100
|
+
export declare function definePanel(panel: Omit<PluginPanel, 'id'> & {
|
|
101
|
+
id: string;
|
|
102
|
+
}): PluginPanel;
|
|
103
|
+
export {};
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin System API
|
|
3
|
+
*
|
|
4
|
+
* A proposal-based plugin/extension system. Plugins move through a
|
|
5
|
+
* lifecycle (draft → review → testing → deployed) coordinated by a backend
|
|
6
|
+
* "plugin host" that you provide. See {@link createPluginLoader} and the
|
|
7
|
+
* plugin store for the HTTP/SSE contract the host is expected to implement.
|
|
8
|
+
*
|
|
9
|
+
* Plugins can be:
|
|
10
|
+
* 1. UI Components (server-rendered by the plugin host)
|
|
11
|
+
* 2. JS Modules (executed by the plugin host, out of band)
|
|
12
|
+
* 3. Actions (commands that can be invoked)
|
|
13
|
+
* 4. Providers (services that provide data/functionality)
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Plugin registry for managing loaded plugins
|
|
17
|
+
*/
|
|
18
|
+
class PluginRegistry {
|
|
19
|
+
plugins = new Map();
|
|
20
|
+
commands = new Map();
|
|
21
|
+
panels = new Map();
|
|
22
|
+
/**
|
|
23
|
+
* Register a plugin instance
|
|
24
|
+
*/
|
|
25
|
+
register(plugin) {
|
|
26
|
+
this.plugins.set(plugin.id, plugin);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Unregister a plugin
|
|
30
|
+
*/
|
|
31
|
+
unregister(pluginId) {
|
|
32
|
+
const plugin = this.plugins.get(pluginId);
|
|
33
|
+
if (plugin) {
|
|
34
|
+
plugin.dispose?.();
|
|
35
|
+
this.plugins.delete(pluginId);
|
|
36
|
+
// Remove associated commands and panels
|
|
37
|
+
for (const [id] of this.commands) {
|
|
38
|
+
if (id.startsWith(`${pluginId}:`)) {
|
|
39
|
+
this.commands.delete(id);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
for (const [id] of this.panels) {
|
|
43
|
+
if (id.startsWith(`${pluginId}:`)) {
|
|
44
|
+
this.panels.delete(id);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get a plugin by ID
|
|
51
|
+
*/
|
|
52
|
+
get(pluginId) {
|
|
53
|
+
return this.plugins.get(pluginId);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get all plugins
|
|
57
|
+
*/
|
|
58
|
+
getAll() {
|
|
59
|
+
return Array.from(this.plugins.values());
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Register a command
|
|
63
|
+
*/
|
|
64
|
+
registerCommand(pluginId, command) {
|
|
65
|
+
const fullId = `${pluginId}:${command.id}`;
|
|
66
|
+
this.commands.set(fullId, { ...command, id: fullId });
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Execute a command
|
|
70
|
+
*/
|
|
71
|
+
async executeCommand(commandId) {
|
|
72
|
+
const command = this.commands.get(commandId);
|
|
73
|
+
if (command) {
|
|
74
|
+
await command.handler();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get all commands
|
|
79
|
+
*/
|
|
80
|
+
getCommands() {
|
|
81
|
+
return Array.from(this.commands.values());
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Register a panel
|
|
85
|
+
*/
|
|
86
|
+
registerPanel(pluginId, panel) {
|
|
87
|
+
const fullId = `${pluginId}:${panel.id}`;
|
|
88
|
+
this.panels.set(fullId, { ...panel, id: fullId });
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get all panels
|
|
92
|
+
*/
|
|
93
|
+
getPanels() {
|
|
94
|
+
return Array.from(this.panels.values());
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get panels by position
|
|
98
|
+
*/
|
|
99
|
+
getPanelsByPosition(position) {
|
|
100
|
+
return this.getPanels().filter((p) => p.position === position);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Global plugin registry
|
|
104
|
+
export const pluginRegistry = new PluginRegistry();
|
|
105
|
+
/**
|
|
106
|
+
* Create a plugin loader bound to a plugin-host HTTP API.
|
|
107
|
+
*
|
|
108
|
+
* @param apiBase - Base path of the plugin host's REST API (same-origin).
|
|
109
|
+
* Defaults to `/api/plugins`.
|
|
110
|
+
*/
|
|
111
|
+
export function createPluginLoader(apiBase = '/api/plugins') {
|
|
112
|
+
return {
|
|
113
|
+
async loadComponent(proposalId, componentPath) {
|
|
114
|
+
const url = `${apiBase}/plugins/${proposalId}/component?path=${encodeURIComponent(componentPath)}`;
|
|
115
|
+
const response = await fetch(url);
|
|
116
|
+
if (!response.ok) {
|
|
117
|
+
throw new Error(`Failed to load component: ${response.status}`);
|
|
118
|
+
}
|
|
119
|
+
// The server returns a compiled Svelte component
|
|
120
|
+
// (the plugin host compiles and returns the component)
|
|
121
|
+
const module = await response.json();
|
|
122
|
+
return module;
|
|
123
|
+
},
|
|
124
|
+
async loadModule(proposalId, entryPoint) {
|
|
125
|
+
const url = `${apiBase}/plugins/${proposalId}/module?entry=${encodeURIComponent(entryPoint)}`;
|
|
126
|
+
const response = await fetch(url);
|
|
127
|
+
if (!response.ok) {
|
|
128
|
+
throw new Error(`Failed to load module: ${response.status}`);
|
|
129
|
+
}
|
|
130
|
+
// The server executes the module in a sandbox and returns the exports
|
|
131
|
+
const exports = await response.json();
|
|
132
|
+
return exports;
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Define a plugin manifest
|
|
138
|
+
*/
|
|
139
|
+
export function definePlugin(manifest) {
|
|
140
|
+
return manifest;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Define a plugin command
|
|
144
|
+
*/
|
|
145
|
+
export function defineCommand(command) {
|
|
146
|
+
return command;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Define a plugin panel
|
|
150
|
+
*/
|
|
151
|
+
export function definePanel(panel) {
|
|
152
|
+
return panel;
|
|
153
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Handling Service
|
|
3
|
+
*
|
|
4
|
+
* Provides structured error types, recovery strategies, and user-friendly error messages.
|
|
5
|
+
*/
|
|
6
|
+
export type VFSErrorCode = 'NETWORK_ERROR' | 'CONNECTION_LOST' | 'TIMEOUT' | 'FILE_LOCKED' | 'LOCK_EXPIRED' | 'LOCK_CONFLICT' | 'VERSION_CONFLICT' | 'FILE_NOT_FOUND' | 'PERMISSION_DENIED' | 'WORKSPACE_NOT_FOUND' | 'INVALID_OPERATION' | 'SERVER_ERROR' | 'RATE_LIMITED' | 'UNKNOWN';
|
|
7
|
+
export interface VFSError extends Error {
|
|
8
|
+
code: VFSErrorCode;
|
|
9
|
+
statusCode?: number;
|
|
10
|
+
path?: string;
|
|
11
|
+
workspaceId?: string;
|
|
12
|
+
retryable: boolean;
|
|
13
|
+
userMessage: string;
|
|
14
|
+
technicalDetails?: string;
|
|
15
|
+
recoveryOptions: RecoveryOption[];
|
|
16
|
+
}
|
|
17
|
+
export interface RecoveryOption {
|
|
18
|
+
id: string;
|
|
19
|
+
label: string;
|
|
20
|
+
description: string;
|
|
21
|
+
action: 'retry' | 'force' | 'merge' | 'discard' | 'refresh' | 'wait' | 'cancel';
|
|
22
|
+
recommended?: boolean;
|
|
23
|
+
dangerous?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create a structured VFS error
|
|
27
|
+
*/
|
|
28
|
+
export declare function createVFSError(code: VFSErrorCode, message: string, options?: {
|
|
29
|
+
statusCode?: number;
|
|
30
|
+
path?: string;
|
|
31
|
+
workspaceId?: string;
|
|
32
|
+
cause?: Error;
|
|
33
|
+
}): VFSError;
|
|
34
|
+
/**
|
|
35
|
+
* Parse an error response into a VFSError
|
|
36
|
+
*/
|
|
37
|
+
export declare function parseError(error: unknown, context?: {
|
|
38
|
+
path?: string;
|
|
39
|
+
workspaceId?: string;
|
|
40
|
+
}): VFSError;
|
|
41
|
+
/**
|
|
42
|
+
* Check if error is a VFSError
|
|
43
|
+
*/
|
|
44
|
+
export declare function isVFSError(error: unknown): error is VFSError;
|
|
45
|
+
/**
|
|
46
|
+
* Check if error is a conflict that needs user resolution
|
|
47
|
+
*/
|
|
48
|
+
export declare function isConflictError(error: VFSError): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Check if error is recoverable with user action
|
|
51
|
+
*/
|
|
52
|
+
export declare function isRecoverableError(error: VFSError): boolean;
|
|
53
|
+
export interface ErrorRecoveryHandler {
|
|
54
|
+
onRetry: () => Promise<void>;
|
|
55
|
+
onForce: () => Promise<void>;
|
|
56
|
+
onMerge: () => Promise<void>;
|
|
57
|
+
onDiscard: () => Promise<void>;
|
|
58
|
+
onRefresh: () => Promise<void>;
|
|
59
|
+
onWait: () => Promise<void>;
|
|
60
|
+
onCancel: () => void;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Execute a recovery action
|
|
64
|
+
*/
|
|
65
|
+
export declare function executeRecovery(option: RecoveryOption, handlers: Partial<ErrorRecoveryHandler>): Promise<void>;
|
|
66
|
+
export interface AggregatedErrors {
|
|
67
|
+
total: number;
|
|
68
|
+
byCode: Map<VFSErrorCode, VFSError[]>;
|
|
69
|
+
retryable: VFSError[];
|
|
70
|
+
needsUserAction: VFSError[];
|
|
71
|
+
fatal: VFSError[];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Aggregate multiple errors for batch operations
|
|
75
|
+
*/
|
|
76
|
+
export declare function aggregateErrors(errors: VFSError[]): AggregatedErrors;
|
|
77
|
+
export type ErrorLogLevel = 'error' | 'warn' | 'info' | 'debug';
|
|
78
|
+
export interface ErrorLogEntry {
|
|
79
|
+
timestamp: number;
|
|
80
|
+
error: VFSError;
|
|
81
|
+
level: ErrorLogLevel;
|
|
82
|
+
context?: Record<string, unknown>;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Log an error
|
|
86
|
+
*/
|
|
87
|
+
export declare function logError(error: VFSError, level?: ErrorLogLevel, context?: Record<string, unknown>): void;
|
|
88
|
+
/**
|
|
89
|
+
* Get recent errors
|
|
90
|
+
*/
|
|
91
|
+
export declare function getRecentErrors(limit?: number): ErrorLogEntry[];
|
|
92
|
+
/**
|
|
93
|
+
* Clear error log
|
|
94
|
+
*/
|
|
95
|
+
export declare function clearErrorLog(): void;
|