@stina/extension-api 0.5.0

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.
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Message protocol between Extension Host and Extension Workers
3
+ */
4
+
5
+ import type { AIProvider, ChatMessage, ChatOptions, GetModelsOptions, StreamEvent, Tool, ToolResult, ModelInfo } from './types.js'
6
+
7
+ // ============================================================================
8
+ // Host → Worker Messages
9
+ // ============================================================================
10
+
11
+ export type HostToWorkerMessage =
12
+ | ActivateMessage
13
+ | DeactivateMessage
14
+ | SettingsChangedMessage
15
+ | ProviderChatRequestMessage
16
+ | ProviderModelsRequestMessage
17
+ | ToolExecuteRequestMessage
18
+ | ResponseMessage
19
+
20
+ export interface ActivateMessage {
21
+ type: 'activate'
22
+ id: string
23
+ payload: {
24
+ extensionId: string
25
+ extensionVersion: string
26
+ storagePath: string
27
+ permissions: string[]
28
+ settings: Record<string, unknown>
29
+ }
30
+ }
31
+
32
+ export interface DeactivateMessage {
33
+ type: 'deactivate'
34
+ id: string
35
+ }
36
+
37
+ export interface SettingsChangedMessage {
38
+ type: 'settings-changed'
39
+ id: string
40
+ payload: {
41
+ key: string
42
+ value: unknown
43
+ }
44
+ }
45
+
46
+ export interface ProviderChatRequestMessage {
47
+ type: 'provider-chat-request'
48
+ id: string
49
+ payload: {
50
+ providerId: string
51
+ messages: ChatMessage[]
52
+ options: ChatOptions
53
+ }
54
+ }
55
+
56
+ export interface ProviderModelsRequestMessage {
57
+ type: 'provider-models-request'
58
+ id: string
59
+ payload: {
60
+ providerId: string
61
+ options?: GetModelsOptions
62
+ }
63
+ }
64
+
65
+ export interface ToolExecuteRequestMessage {
66
+ type: 'tool-execute-request'
67
+ id: string
68
+ payload: {
69
+ toolId: string
70
+ params: Record<string, unknown>
71
+ }
72
+ }
73
+
74
+ export interface ResponseMessage {
75
+ type: 'response'
76
+ id: string
77
+ payload: {
78
+ requestId: string
79
+ success: boolean
80
+ data?: unknown
81
+ error?: string
82
+ }
83
+ }
84
+
85
+ // ============================================================================
86
+ // Worker → Host Messages
87
+ // ============================================================================
88
+
89
+ export type WorkerToHostMessage =
90
+ | ReadyMessage
91
+ | RequestMessage
92
+ | ProviderRegisteredMessage
93
+ | ToolRegisteredMessage
94
+ | StreamEventMessage
95
+ | LogMessage
96
+ | ProviderModelsResponseMessage
97
+ | ToolExecuteResponseMessage
98
+
99
+ export interface ReadyMessage {
100
+ type: 'ready'
101
+ }
102
+
103
+ export interface RequestMessage {
104
+ type: 'request'
105
+ id: string
106
+ method: RequestMethod
107
+ payload: unknown
108
+ }
109
+
110
+ export type RequestMethod =
111
+ | 'network.fetch'
112
+ | 'settings.getAll'
113
+ | 'settings.get'
114
+ | 'settings.set'
115
+ | 'database.execute'
116
+ | 'storage.get'
117
+ | 'storage.set'
118
+ | 'storage.delete'
119
+ | 'storage.keys'
120
+
121
+ export interface ProviderRegisteredMessage {
122
+ type: 'provider-registered'
123
+ payload: {
124
+ id: string
125
+ name: string
126
+ }
127
+ }
128
+
129
+ export interface ToolRegisteredMessage {
130
+ type: 'tool-registered'
131
+ payload: {
132
+ id: string
133
+ name: string
134
+ description: string
135
+ parameters?: Record<string, unknown>
136
+ }
137
+ }
138
+
139
+ export interface StreamEventMessage {
140
+ type: 'stream-event'
141
+ payload: {
142
+ requestId: string
143
+ event: StreamEvent
144
+ }
145
+ }
146
+
147
+ export interface ProviderModelsResponseMessage {
148
+ type: 'provider-models-response'
149
+ payload: {
150
+ requestId: string
151
+ models: ModelInfo[]
152
+ error?: string
153
+ }
154
+ }
155
+
156
+ export interface ToolExecuteResponseMessage {
157
+ type: 'tool-execute-response'
158
+ payload: {
159
+ requestId: string
160
+ result: ToolResult
161
+ error?: string
162
+ }
163
+ }
164
+
165
+ export interface LogMessage {
166
+ type: 'log'
167
+ payload: {
168
+ level: 'debug' | 'info' | 'warn' | 'error'
169
+ message: string
170
+ data?: Record<string, unknown>
171
+ }
172
+ }
173
+
174
+ // ============================================================================
175
+ // Utility Types
176
+ // ============================================================================
177
+
178
+ export interface PendingRequest<T = unknown> {
179
+ resolve: (value: T) => void
180
+ reject: (error: Error) => void
181
+ timeout: ReturnType<typeof setTimeout>
182
+ }
183
+
184
+ /**
185
+ * Generate a unique message ID
186
+ */
187
+ export function generateMessageId(): string {
188
+ return `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`
189
+ }