@kbve/droid 0.0.6 → 0.1.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.
Files changed (190) hide show
  1. package/droid.mjs +2312 -74
  2. package/index.d.ts +32 -0
  3. package/lib/agents/api-types.d.ts +121 -0
  4. package/lib/agents/api-types.d.ts.map +1 -0
  5. package/lib/agents/auth/init.d.ts +8 -0
  6. package/lib/agents/auth/init.d.ts.map +1 -0
  7. package/lib/agents/cache.d.ts +9 -0
  8. package/lib/agents/cache.d.ts.map +1 -0
  9. package/lib/agents/client/callGuildVault.d.ts +3 -0
  10. package/lib/agents/client/callGuildVault.d.ts.map +1 -0
  11. package/lib/agents/client/callJson.d.ts +3 -0
  12. package/lib/agents/client/callJson.d.ts.map +1 -0
  13. package/lib/agents/config.d.ts +36 -0
  14. package/lib/agents/config.d.ts.map +1 -0
  15. package/lib/agents/constants.d.ts +11 -0
  16. package/lib/agents/constants.d.ts.map +1 -0
  17. package/lib/agents/createAgents.d.ts +4 -0
  18. package/lib/agents/createAgents.d.ts.map +1 -0
  19. package/lib/agents/ctx.d.ts +46 -0
  20. package/lib/agents/ctx.d.ts.map +1 -0
  21. package/lib/agents/discord/bot.d.ts +21 -0
  22. package/lib/agents/discord/bot.d.ts.map +1 -0
  23. package/lib/agents/discord/guilds.d.ts +8 -0
  24. package/lib/agents/discord/guilds.d.ts.map +1 -0
  25. package/lib/agents/formDrafts.d.ts +5 -0
  26. package/lib/agents/formDrafts.d.ts.map +1 -0
  27. package/lib/agents/generated/agents-schema.d.ts +73 -0
  28. package/lib/agents/generated/agents-schema.d.ts.map +1 -0
  29. package/lib/agents/generated/discordsh-agents-schema.d.ts +71 -0
  30. package/lib/agents/generated/discordsh-agents-schema.d.ts.map +1 -0
  31. package/lib/agents/github/backfill.d.ts +23 -0
  32. package/lib/agents/github/backfill.d.ts.map +1 -0
  33. package/lib/agents/github/events.d.ts +10 -0
  34. package/lib/agents/github/events.d.ts.map +1 -0
  35. package/lib/agents/github/pat.d.ts +13 -0
  36. package/lib/agents/github/pat.d.ts.map +1 -0
  37. package/lib/agents/github/repoConfig.d.ts +25 -0
  38. package/lib/agents/github/repoConfig.d.ts.map +1 -0
  39. package/lib/agents/github/tokens.d.ts +22 -0
  40. package/lib/agents/github/tokens.d.ts.map +1 -0
  41. package/lib/agents/github/webhook.d.ts +37 -0
  42. package/lib/agents/github/webhook.d.ts.map +1 -0
  43. package/lib/agents/index.d.ts +8 -0
  44. package/lib/agents/index.d.ts.map +1 -0
  45. package/lib/agents/state/atoms.d.ts +122 -0
  46. package/lib/agents/state/atoms.d.ts.map +1 -0
  47. package/lib/agents/types.d.ts +65 -0
  48. package/lib/agents/types.d.ts.map +1 -0
  49. package/lib/gateway/SupabaseGateway.d.ts +38 -0
  50. package/lib/gateway/SupabaseGateway.d.ts.map +1 -0
  51. package/lib/gateway/WorkerCommunication.d.ts +39 -0
  52. package/lib/gateway/WorkerCommunication.d.ts.map +1 -0
  53. package/lib/gateway/WorkerPool.d.ts +55 -0
  54. package/lib/gateway/WorkerPool.d.ts.map +1 -0
  55. package/lib/gateway/capabilities.d.ts +23 -0
  56. package/lib/gateway/capabilities.d.ts.map +1 -0
  57. package/lib/gateway/index.d.ts +9 -0
  58. package/lib/gateway/index.d.ts.map +1 -0
  59. package/lib/gateway/strategies/DirectStrategy.d.ts +52 -0
  60. package/lib/gateway/strategies/DirectStrategy.d.ts.map +1 -0
  61. package/lib/gateway/strategies/SharedWorkerStrategy.d.ts +46 -0
  62. package/lib/gateway/strategies/SharedWorkerStrategy.d.ts.map +1 -0
  63. package/lib/gateway/strategies/WebWorkerStrategy.d.ts +45 -0
  64. package/lib/gateway/strategies/WebWorkerStrategy.d.ts.map +1 -0
  65. package/lib/gateway/types.d.ts +81 -0
  66. package/lib/gateway/types.d.ts.map +1 -0
  67. package/lib/workers/canvas-ui-renderer.d.ts +25 -0
  68. package/lib/workers/canvas-ui-renderer.d.ts.map +1 -0
  69. package/lib/workers/canvas-worker.d.ts +14 -0
  70. package/lib/workers/canvas-worker.d.ts.map +1 -0
  71. package/lib/workers/canvas-worker.js +5 -302
  72. package/lib/workers/data.d.ts +40 -0
  73. package/lib/workers/data.d.ts.map +1 -0
  74. package/lib/workers/db-worker.d.ts +69 -0
  75. package/lib/workers/db-worker.d.ts.map +1 -0
  76. package/lib/workers/db-worker.js +13 -3636
  77. package/lib/workers/events.d.ts +11 -0
  78. package/lib/workers/events.d.ts.map +1 -0
  79. package/lib/workers/flexbuilder.d.ts +4 -0
  80. package/lib/workers/flexbuilder.d.ts.map +1 -0
  81. package/lib/workers/init.d.ts +11 -0
  82. package/lib/workers/init.d.ts.map +1 -0
  83. package/lib/workers/main.d.ts +105 -0
  84. package/lib/workers/main.d.ts.map +1 -0
  85. package/lib/workers/supabase-db-worker.d.ts +2 -0
  86. package/lib/workers/supabase-db-worker.d.ts.map +1 -0
  87. package/lib/workers/supabase-db-worker.js +23 -0
  88. package/lib/workers/supabase-shared-worker.d.ts +2 -0
  89. package/lib/workers/supabase-shared-worker.d.ts.map +1 -0
  90. package/lib/workers/supabase-shared-worker.js +25 -0
  91. package/lib/workers/tools.d.ts +4 -0
  92. package/lib/workers/tools.d.ts.map +1 -0
  93. package/lib/workers/validate.d.ts +15 -0
  94. package/lib/workers/validate.d.ts.map +1 -0
  95. package/lib/workers/ws-worker.d.ts +10 -0
  96. package/lib/workers/ws-worker.d.ts.map +1 -0
  97. package/lib/workers/ws-worker.js +5 -273
  98. package/main.js +5711 -0
  99. package/package.json +18 -6
  100. package/src/index.ts +41 -13
  101. package/src/lib/agents/api-types.ts +170 -0
  102. package/src/lib/agents/auth/init.ts +200 -0
  103. package/src/lib/agents/cache.ts +127 -0
  104. package/src/lib/agents/client/callGuildVault.ts +71 -0
  105. package/src/lib/agents/client/callJson.ts +64 -0
  106. package/src/lib/agents/config.ts +83 -0
  107. package/src/lib/agents/constants.ts +11 -0
  108. package/src/lib/agents/createAgents.ts +62 -0
  109. package/src/lib/agents/ctx.ts +63 -0
  110. package/src/lib/agents/discord/bot.ts +169 -0
  111. package/src/lib/agents/discord/guilds.ts +106 -0
  112. package/src/lib/agents/formDrafts.ts +55 -0
  113. package/src/lib/agents/generated/agents-schema.ts +155 -0
  114. package/src/lib/agents/generated/discordsh-agents-schema.ts +96 -0
  115. package/src/lib/agents/github/backfill.ts +126 -0
  116. package/src/lib/agents/github/events.ts +131 -0
  117. package/src/lib/agents/github/pat.ts +150 -0
  118. package/src/lib/agents/github/repoConfig.ts +240 -0
  119. package/src/lib/agents/github/tokens.ts +222 -0
  120. package/src/lib/agents/github/webhook.ts +349 -0
  121. package/src/lib/agents/index.ts +35 -0
  122. package/src/lib/agents/state/atoms.ts +122 -0
  123. package/src/lib/agents/types.ts +83 -0
  124. package/src/lib/api.ts +71 -0
  125. package/src/lib/droid.spec.ts +14 -19
  126. package/src/lib/droid.ts +48 -4
  127. package/src/lib/gateway/SupabaseGateway.ts +236 -0
  128. package/src/lib/gateway/WorkerCommunication.ts +132 -0
  129. package/src/lib/gateway/WorkerPool.ts +304 -0
  130. package/src/lib/gateway/capabilities.spec.ts +144 -0
  131. package/src/lib/gateway/capabilities.ts +80 -0
  132. package/src/lib/gateway/index.ts +15 -0
  133. package/src/lib/gateway/strategies/DirectStrategy.ts +443 -0
  134. package/src/lib/gateway/strategies/SharedWorkerStrategy.ts +278 -0
  135. package/src/lib/gateway/strategies/WebWorkerStrategy.ts +278 -0
  136. package/src/lib/gateway/types.ts +139 -0
  137. package/src/lib/mod/mod-manager.ts +13 -8
  138. package/src/lib/mod/module/bento/mod-bento.worker.ts +1 -1
  139. package/src/lib/mod/module/supabase/mod-supabase.spec.ts +21 -25
  140. package/src/lib/mod/module/supabase/mod-supabase.ts +73 -0
  141. package/src/lib/mod/module/supabase/mod-supabase.worker.ts +1 -56
  142. package/src/lib/state/auth.spec.ts +58 -0
  143. package/src/lib/state/auth.ts +148 -0
  144. package/src/lib/state/bento.spec.ts +76 -0
  145. package/src/lib/state/bento.ts +51 -0
  146. package/src/lib/state/index.ts +98 -0
  147. package/src/lib/state/overlay-manager.ts +125 -0
  148. package/src/lib/state/profile-sync.ts +214 -0
  149. package/src/lib/state/profile.ts +155 -0
  150. package/src/lib/state/router.ts +24 -0
  151. package/src/lib/state/staff.ts +128 -0
  152. package/src/lib/state/sync-bus.ts +109 -0
  153. package/src/lib/state/theme-sync.ts +75 -0
  154. package/src/lib/state/toasts.spec.ts +106 -0
  155. package/src/lib/state/toasts.ts +34 -0
  156. package/src/lib/state/ui.spec.ts +148 -0
  157. package/src/lib/state/ui.ts +45 -0
  158. package/src/lib/state/welcome-toast.spec.ts +101 -0
  159. package/src/lib/state/welcome-toast.ts +76 -0
  160. package/src/lib/sw-recovery.spec.ts +165 -0
  161. package/src/lib/sw-recovery.ts +141 -0
  162. package/src/lib/types/bento.spec.ts +116 -0
  163. package/src/lib/types/bento.ts +94 -55
  164. package/src/lib/types/event-schemas.spec.ts +120 -0
  165. package/src/lib/types/event-types.spec.ts +96 -0
  166. package/src/lib/types/event-types.ts +113 -3
  167. package/src/lib/types/modules.ts +12 -5
  168. package/src/lib/types/ui-event-types.ts +66 -0
  169. package/src/lib/workers/canvas-ui-renderer.ts +266 -0
  170. package/src/lib/workers/canvas-worker.ts +94 -9
  171. package/src/lib/workers/data.ts +64 -37
  172. package/src/lib/workers/db-worker.ts +105 -32
  173. package/src/lib/workers/events.spec.ts +208 -0
  174. package/src/lib/workers/events.ts +27 -14
  175. package/src/lib/workers/flexbuilder.ts +2 -2
  176. package/src/lib/workers/init.ts +25 -17
  177. package/src/lib/workers/main.ts +506 -327
  178. package/src/lib/workers/supabase-db-worker.ts +243 -0
  179. package/src/lib/workers/supabase-shared-worker.ts +607 -0
  180. package/src/lib/workers/validate.ts +64 -0
  181. package/src/lib/workers/ws-worker.spec.ts +41 -0
  182. package/src/lib/workers/ws-worker.ts +255 -31
  183. package/src/setup-vitest.ts +4 -2
  184. package/src/types.ts +30 -0
  185. package/src/vite-env.d.ts +1 -0
  186. package/workers/main.js +2 -1125
  187. package/comlink.js +0 -253
  188. package/index.js +0 -2972
  189. package/reference.js +0 -259
  190. package/src/types.d.ts +0 -31
@@ -0,0 +1,243 @@
1
+ /// <reference lib="webworker" />
2
+ // Database worker for Supabase operations (used in worker pool)
3
+ // Uses in-memory storage — the SharedWorker is the single auth writer to IndexedDB.
4
+
5
+ import { createClient, type SupabaseClient } from '@supabase/supabase-js';
6
+
7
+ type WorkerMessage =
8
+ | { id: string; type: 'ping'; payload?: unknown }
9
+ | {
10
+ id: string;
11
+ type: 'init';
12
+ payload: {
13
+ url: string;
14
+ anonKey: string;
15
+ options?: Record<string, unknown>;
16
+ };
17
+ }
18
+ | {
19
+ id: string;
20
+ type: 'from.select';
21
+ payload: {
22
+ table: string;
23
+ columns?: string;
24
+ match?: Record<string, unknown>;
25
+ limit?: number;
26
+ };
27
+ }
28
+ | {
29
+ id: string;
30
+ type: 'from.insert';
31
+ payload: {
32
+ table: string;
33
+ data: Record<string, unknown> | Record<string, unknown>[];
34
+ };
35
+ }
36
+ | {
37
+ id: string;
38
+ type: 'from.update';
39
+ payload: {
40
+ table: string;
41
+ data: Record<string, unknown>;
42
+ match: Record<string, unknown>;
43
+ };
44
+ }
45
+ | {
46
+ id: string;
47
+ type: 'from.upsert';
48
+ payload: {
49
+ table: string;
50
+ data: Record<string, unknown> | Record<string, unknown>[];
51
+ };
52
+ }
53
+ | {
54
+ id: string;
55
+ type: 'from.delete';
56
+ payload: { table: string; match: Record<string, unknown> };
57
+ }
58
+ | {
59
+ id: string;
60
+ type: 'rpc';
61
+ payload: { fn: string; args?: Record<string, unknown> };
62
+ };
63
+
64
+ declare const self: DedicatedWorkerGlobalScope;
65
+
66
+ let client: SupabaseClient | null = null;
67
+
68
+ /**
69
+ * In-memory storage for DB workers.
70
+ * DB workers only need the access token to make authenticated API calls.
71
+ * The SharedWorker is the single writer to IndexedDB (sb-auth-v2).
72
+ */
73
+ const memoryStore = new Map<string, string>();
74
+ const memoryStorage = {
75
+ async getItem(key: string): Promise<string | null> {
76
+ return memoryStore.get(key) ?? null;
77
+ },
78
+ async setItem(key: string, value: string): Promise<void> {
79
+ memoryStore.set(key, value);
80
+ },
81
+ async removeItem(key: string): Promise<void> {
82
+ memoryStore.delete(key);
83
+ },
84
+ };
85
+
86
+ console.log('[DB Worker] Initializing...');
87
+
88
+ // Dedicated workers receive `event.origin === ''` from their owning page;
89
+ // reject anything else to satisfy CodeQL js/missing-origin-check.
90
+ function isAllowedOrigin(event: MessageEvent): boolean {
91
+ return event.origin === '' || event.origin === self.location.origin;
92
+ }
93
+
94
+ self.onmessage = async (e: MessageEvent<WorkerMessage>) => {
95
+ if (!isAllowedOrigin(e)) {
96
+ console.warn('[DB Worker] Rejected message from origin:', e.origin);
97
+ return;
98
+ }
99
+ const msg = e.data;
100
+ const { id, type, payload } = msg;
101
+
102
+ try {
103
+ switch (type) {
104
+ case 'ping': {
105
+ respond(id, { ok: true, data: 'pong' });
106
+ break;
107
+ }
108
+ case 'init': {
109
+ const { url, anonKey, options } = payload;
110
+
111
+ const authOverrides =
112
+ options?.['auth'] && typeof options['auth'] === 'object'
113
+ ? (options['auth'] as Record<string, unknown>)
114
+ : {};
115
+
116
+ client = createClient(url, anonKey, {
117
+ ...options,
118
+ auth: {
119
+ ...authOverrides,
120
+ storage: memoryStorage,
121
+ storageKey: 'sb-auth-token',
122
+ // DB pool workers are stateless (memoryStorage) — token
123
+ // refresh is handled by the SharedWorker which owns the
124
+ // IDB-backed session. Disabling here avoids SDK-internal
125
+ // callbacks that produce non-cloneable objects.
126
+ autoRefreshToken: false,
127
+ persistSession: false,
128
+ detectSessionInUrl: false,
129
+ },
130
+ });
131
+
132
+ const {
133
+ data: { session },
134
+ error,
135
+ } = await client.auth.getSession();
136
+ if (error) console.error('[DB Worker] Session error:', error);
137
+
138
+ respond(id, {
139
+ ok: true,
140
+ data: { session, user: session?.user || null },
141
+ });
142
+ break;
143
+ }
144
+ case 'from.select': {
145
+ if (!client) throw new Error('Client not initialized');
146
+ const { table, columns, match, limit } = payload;
147
+ let query = client.from(table).select(columns || '*');
148
+ if (match) {
149
+ for (const [key, value] of Object.entries(match)) {
150
+ query = query.eq(key, value);
151
+ }
152
+ }
153
+ if (limit) query = query.limit(limit);
154
+ const { data, error } = await query;
155
+ if (error) throw error;
156
+ respond(id, { ok: true, data });
157
+ break;
158
+ }
159
+ case 'from.insert': {
160
+ if (!client) throw new Error('Client not initialized');
161
+ const { table, data } = payload;
162
+ const { data: result, error } = await client
163
+ .from(table)
164
+ .insert(data)
165
+ .select();
166
+ if (error) throw error;
167
+ respond(id, { ok: true, data: result });
168
+ break;
169
+ }
170
+ case 'from.update': {
171
+ if (!client) throw new Error('Client not initialized');
172
+ const { table, data, match } = payload;
173
+ let query = client.from(table).update(data);
174
+ for (const [key, value] of Object.entries(match)) {
175
+ query = query.eq(key, value);
176
+ }
177
+ const { data: result, error } = await query.select();
178
+ if (error) throw error;
179
+ respond(id, { ok: true, data: result });
180
+ break;
181
+ }
182
+ case 'from.upsert': {
183
+ if (!client) throw new Error('Client not initialized');
184
+ const { table, data } = payload;
185
+ const { data: result, error } = await client
186
+ .from(table)
187
+ .upsert(data)
188
+ .select();
189
+ if (error) throw error;
190
+ respond(id, { ok: true, data: result });
191
+ break;
192
+ }
193
+ case 'from.delete': {
194
+ if (!client) throw new Error('Client not initialized');
195
+ const { table, match } = payload;
196
+ let query = client.from(table).delete();
197
+ for (const [key, value] of Object.entries(match)) {
198
+ query = query.eq(key, value);
199
+ }
200
+ const { data: result, error } = await query.select();
201
+ if (error) throw error;
202
+ respond(id, { ok: true, data: result });
203
+ break;
204
+ }
205
+ case 'rpc': {
206
+ if (!client) throw new Error('Client not initialized');
207
+ const { fn, args } = payload;
208
+ const { data, error } = await client.rpc(fn, args || {});
209
+ if (error) throw error;
210
+ respond(id, { ok: true, data });
211
+ break;
212
+ }
213
+ default:
214
+ respond(id, {
215
+ ok: false,
216
+ error: `Unknown message type: ${type}`,
217
+ });
218
+ }
219
+ } catch (err: unknown) {
220
+ console.error('[DB Worker] Error handling %s:', String(type), err);
221
+ respond(id, {
222
+ ok: false,
223
+ error: err instanceof Error ? err.message : String(err),
224
+ });
225
+ }
226
+ };
227
+
228
+ function respond(
229
+ id: string,
230
+ response: { ok: true; data?: unknown } | { ok: false; error: string },
231
+ ) {
232
+ // JSON round-trip strips non-cloneable SDK internals (functions, circular
233
+ // refs) that would cause DataCloneError in postMessage.
234
+ let safe: typeof response;
235
+ try {
236
+ safe = JSON.parse(JSON.stringify(response));
237
+ } catch {
238
+ safe = { ok: false, error: 'Response contained non-serializable data' };
239
+ }
240
+ self.postMessage({ id, ...safe });
241
+ }
242
+
243
+ console.log('[DB Worker] Ready');