spidersan 0.6.0 → 0.9.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.
Files changed (214) hide show
  1. package/CHANGELOG.md +42 -52
  2. package/README.md +238 -3
  3. package/dist/bin/spidersan.d.ts.map +1 -1
  4. package/dist/bin/spidersan.js +13 -1
  5. package/dist/bin/spidersan.js.map +1 -1
  6. package/dist/commands/abandon.d.ts.map +1 -1
  7. package/dist/commands/abandon.js +1 -9
  8. package/dist/commands/abandon.js.map +1 -1
  9. package/dist/commands/ai.d.ts +15 -0
  10. package/dist/commands/ai.d.ts.map +1 -0
  11. package/dist/commands/ai.js +498 -0
  12. package/dist/commands/ai.js.map +1 -0
  13. package/dist/commands/auto.d.ts.map +1 -1
  14. package/dist/commands/auto.js +2 -1
  15. package/dist/commands/auto.js.map +1 -1
  16. package/dist/commands/bot.d.ts +16 -0
  17. package/dist/commands/bot.d.ts.map +1 -0
  18. package/dist/commands/bot.js +398 -0
  19. package/dist/commands/bot.js.map +1 -0
  20. package/dist/commands/conflicts.d.ts.map +1 -1
  21. package/dist/commands/conflicts.js +260 -277
  22. package/dist/commands/conflicts.js.map +1 -1
  23. package/dist/commands/context.d.ts +8 -0
  24. package/dist/commands/context.d.ts.map +1 -0
  25. package/dist/commands/context.js +104 -0
  26. package/dist/commands/context.js.map +1 -0
  27. package/dist/commands/cross-conflicts.d.ts.map +1 -1
  28. package/dist/commands/cross-conflicts.js +1 -41
  29. package/dist/commands/cross-conflicts.js.map +1 -1
  30. package/dist/commands/depends.d.ts.map +1 -1
  31. package/dist/commands/depends.js +1 -9
  32. package/dist/commands/depends.js.map +1 -1
  33. package/dist/commands/fleet-status.d.ts +14 -0
  34. package/dist/commands/fleet-status.d.ts.map +1 -0
  35. package/dist/commands/fleet-status.js +127 -0
  36. package/dist/commands/fleet-status.js.map +1 -0
  37. package/dist/commands/git-watch.d.ts +24 -0
  38. package/dist/commands/git-watch.d.ts.map +1 -0
  39. package/dist/commands/git-watch.js +84 -0
  40. package/dist/commands/git-watch.js.map +1 -0
  41. package/dist/commands/index.d.ts +5 -0
  42. package/dist/commands/index.d.ts.map +1 -1
  43. package/dist/commands/index.js +7 -0
  44. package/dist/commands/index.js.map +1 -1
  45. package/dist/commands/merge-order.d.ts.map +1 -1
  46. package/dist/commands/merge-order.js +18 -67
  47. package/dist/commands/merge-order.js.map +1 -1
  48. package/dist/commands/merged.d.ts.map +1 -1
  49. package/dist/commands/merged.js +1 -9
  50. package/dist/commands/merged.js.map +1 -1
  51. package/dist/commands/pulse.d.ts.map +1 -1
  52. package/dist/commands/pulse.js +134 -63
  53. package/dist/commands/pulse.js.map +1 -1
  54. package/dist/commands/queen.d.ts.map +1 -1
  55. package/dist/commands/queen.js +11 -7
  56. package/dist/commands/queen.js.map +1 -1
  57. package/dist/commands/ready-check.d.ts +2 -1
  58. package/dist/commands/ready-check.d.ts.map +1 -1
  59. package/dist/commands/ready-check.js +6 -30
  60. package/dist/commands/ready-check.js.map +1 -1
  61. package/dist/commands/register.d.ts.map +1 -1
  62. package/dist/commands/register.js +7 -29
  63. package/dist/commands/register.js.map +1 -1
  64. package/dist/commands/torrent.d.ts.map +1 -1
  65. package/dist/commands/torrent.js +29 -18
  66. package/dist/commands/torrent.js.map +1 -1
  67. package/dist/commands/watch.d.ts.map +1 -1
  68. package/dist/commands/watch.js +13 -34
  69. package/dist/commands/watch.js.map +1 -1
  70. package/dist/lib/ai/context-builder.d.ts +16 -0
  71. package/dist/lib/ai/context-builder.d.ts.map +1 -0
  72. package/dist/lib/ai/context-builder.js +216 -0
  73. package/dist/lib/ai/context-builder.js.map +1 -0
  74. package/dist/lib/ai/event-handler.d.ts +21 -0
  75. package/dist/lib/ai/event-handler.d.ts.map +1 -0
  76. package/dist/lib/ai/event-handler.js +98 -0
  77. package/dist/lib/ai/event-handler.js.map +1 -0
  78. package/dist/lib/ai/index.d.ts +13 -0
  79. package/dist/lib/ai/index.d.ts.map +1 -0
  80. package/dist/lib/ai/index.js +11 -0
  81. package/dist/lib/ai/index.js.map +1 -0
  82. package/dist/lib/ai/llm-client.d.ts +37 -0
  83. package/dist/lib/ai/llm-client.d.ts.map +1 -0
  84. package/dist/lib/ai/llm-client.js +225 -0
  85. package/dist/lib/ai/llm-client.js.map +1 -0
  86. package/dist/lib/ai/reasoner.d.ts +11 -0
  87. package/dist/lib/ai/reasoner.d.ts.map +1 -0
  88. package/dist/lib/ai/reasoner.js +246 -0
  89. package/dist/lib/ai/reasoner.js.map +1 -0
  90. package/dist/lib/ai/setup.d.ts +40 -0
  91. package/dist/lib/ai/setup.d.ts.map +1 -0
  92. package/dist/lib/ai/setup.js +154 -0
  93. package/dist/lib/ai/setup.js.map +1 -0
  94. package/dist/lib/ai/types.d.ts +135 -0
  95. package/dist/lib/ai/types.d.ts.map +1 -0
  96. package/dist/lib/ai/types.js +39 -0
  97. package/dist/lib/ai/types.js.map +1 -0
  98. package/dist/lib/colony-subscriber.d.ts +15 -12
  99. package/dist/lib/colony-subscriber.d.ts.map +1 -1
  100. package/dist/lib/colony-subscriber.js +146 -65
  101. package/dist/lib/colony-subscriber.js.map +1 -1
  102. package/dist/lib/config.d.ts.map +1 -1
  103. package/dist/lib/config.js +18 -4
  104. package/dist/lib/config.js.map +1 -1
  105. package/dist/lib/conflict-analyzer.d.ts +33 -0
  106. package/dist/lib/conflict-analyzer.d.ts.map +1 -0
  107. package/dist/lib/conflict-analyzer.js +114 -0
  108. package/dist/lib/conflict-analyzer.js.map +1 -0
  109. package/dist/lib/conflict-renderer.d.ts +7 -0
  110. package/dist/lib/conflict-renderer.d.ts.map +1 -0
  111. package/dist/lib/conflict-renderer.js +162 -0
  112. package/dist/lib/conflict-renderer.js.map +1 -0
  113. package/dist/lib/conflict-tier.d.ts +20 -0
  114. package/dist/lib/conflict-tier.d.ts.map +1 -0
  115. package/dist/lib/conflict-tier.js +49 -0
  116. package/dist/lib/conflict-tier.js.map +1 -0
  117. package/dist/lib/crypto.js +1 -1
  118. package/dist/lib/crypto.js.map +1 -1
  119. package/dist/lib/git-events-subscriber.d.ts +59 -0
  120. package/dist/lib/git-events-subscriber.d.ts.map +1 -0
  121. package/dist/lib/git-events-subscriber.js +779 -0
  122. package/dist/lib/git-events-subscriber.js.map +1 -0
  123. package/dist/lib/git.d.ts +15 -0
  124. package/dist/lib/git.d.ts.map +1 -0
  125. package/dist/lib/git.js +180 -0
  126. package/dist/lib/git.js.map +1 -0
  127. package/dist/lib/github.d.ts.map +1 -1
  128. package/dist/lib/github.js +14 -9
  129. package/dist/lib/github.js.map +1 -1
  130. package/dist/lib/graph.d.ts +23 -0
  131. package/dist/lib/graph.d.ts.map +1 -0
  132. package/dist/lib/graph.js +134 -0
  133. package/dist/lib/graph.js.map +1 -0
  134. package/dist/lib/hub.d.ts +31 -0
  135. package/dist/lib/hub.d.ts.map +1 -0
  136. package/dist/lib/hub.js +92 -0
  137. package/dist/lib/hub.js.map +1 -0
  138. package/dist/lib/remote-drift.d.ts +60 -0
  139. package/dist/lib/remote-drift.d.ts.map +1 -0
  140. package/dist/lib/remote-drift.js +225 -0
  141. package/dist/lib/remote-drift.js.map +1 -0
  142. package/dist/lib/salvage-analyzer.d.ts.map +1 -1
  143. package/dist/lib/salvage-analyzer.js +2 -3
  144. package/dist/lib/salvage-analyzer.js.map +1 -1
  145. package/dist/lib/security.d.ts +11 -0
  146. package/dist/lib/security.d.ts.map +1 -1
  147. package/dist/lib/security.js +24 -1
  148. package/dist/lib/security.js.map +1 -1
  149. package/dist/lib/session-logger.d.ts +54 -0
  150. package/dist/lib/session-logger.d.ts.map +1 -0
  151. package/dist/lib/session-logger.js +136 -0
  152. package/dist/lib/session-logger.js.map +1 -0
  153. package/dist/storage/adapter.d.ts +4 -0
  154. package/dist/storage/adapter.d.ts.map +1 -1
  155. package/dist/storage/branch-registry-store.d.ts +13 -0
  156. package/dist/storage/branch-registry-store.d.ts.map +1 -0
  157. package/dist/storage/branch-registry-store.js +2 -0
  158. package/dist/storage/branch-registry-store.js.map +1 -0
  159. package/dist/storage/factory.d.ts +4 -0
  160. package/dist/storage/factory.d.ts.map +1 -1
  161. package/dist/storage/factory.js +25 -9
  162. package/dist/storage/factory.js.map +1 -1
  163. package/dist/storage/git-messages.d.ts +53 -0
  164. package/dist/storage/git-messages.d.ts.map +1 -0
  165. package/dist/storage/git-messages.js +376 -0
  166. package/dist/storage/git-messages.js.map +1 -0
  167. package/dist/storage/index.d.ts +5 -0
  168. package/dist/storage/index.d.ts.map +1 -1
  169. package/dist/storage/index.js +5 -0
  170. package/dist/storage/index.js.map +1 -1
  171. package/dist/storage/json-branch-registry-store.d.ts +19 -0
  172. package/dist/storage/json-branch-registry-store.d.ts.map +1 -0
  173. package/dist/storage/json-branch-registry-store.js +112 -0
  174. package/dist/storage/json-branch-registry-store.js.map +1 -0
  175. package/dist/storage/local-messages.d.ts +37 -0
  176. package/dist/storage/local-messages.d.ts.map +1 -0
  177. package/dist/storage/local-messages.js +151 -0
  178. package/dist/storage/local-messages.js.map +1 -0
  179. package/dist/storage/local.d.ts +2 -6
  180. package/dist/storage/local.d.ts.map +1 -1
  181. package/dist/storage/local.js +13 -76
  182. package/dist/storage/local.js.map +1 -1
  183. package/dist/storage/memory-branch-registry-store.d.ts +16 -0
  184. package/dist/storage/memory-branch-registry-store.d.ts.map +1 -0
  185. package/dist/storage/memory-branch-registry-store.js +65 -0
  186. package/dist/storage/memory-branch-registry-store.js.map +1 -0
  187. package/dist/storage/message-adapter.d.ts +86 -0
  188. package/dist/storage/message-adapter.d.ts.map +1 -0
  189. package/dist/storage/message-adapter.js +28 -0
  190. package/dist/storage/message-adapter.js.map +1 -0
  191. package/dist/storage/message-factory.d.ts +36 -0
  192. package/dist/storage/message-factory.d.ts.map +1 -0
  193. package/dist/storage/message-factory.js +99 -0
  194. package/dist/storage/message-factory.js.map +1 -0
  195. package/dist/storage/mycmail-adapter.d.ts +38 -0
  196. package/dist/storage/mycmail-adapter.d.ts.map +1 -0
  197. package/dist/storage/mycmail-adapter.js +300 -0
  198. package/dist/storage/mycmail-adapter.js.map +1 -0
  199. package/dist/storage/supabase-registry-sync-client-impl.d.ts +46 -0
  200. package/dist/storage/supabase-registry-sync-client-impl.d.ts.map +1 -0
  201. package/dist/storage/supabase-registry-sync-client-impl.js +322 -0
  202. package/dist/storage/supabase-registry-sync-client-impl.js.map +1 -0
  203. package/dist/storage/supabase-registry-sync-client.d.ts +9 -0
  204. package/dist/storage/supabase-registry-sync-client.d.ts.map +1 -0
  205. package/dist/storage/supabase-registry-sync-client.js +2 -0
  206. package/dist/storage/supabase-registry-sync-client.js.map +1 -0
  207. package/dist/storage/supabase.d.ts +8 -46
  208. package/dist/storage/supabase.d.ts.map +1 -1
  209. package/dist/storage/supabase.js +30 -342
  210. package/dist/storage/supabase.js.map +1 -1
  211. package/dist/tui/screen.d.ts.map +1 -1
  212. package/dist/tui/screen.js +5 -3
  213. package/dist/tui/screen.js.map +1 -1
  214. package/package.json +92 -90
@@ -0,0 +1,322 @@
1
+ import { classifyTier } from '../lib/conflict-tier.js';
2
+ export class SupabaseRegistrySyncClientImpl {
3
+ url;
4
+ key;
5
+ projectId;
6
+ fetchFn;
7
+ constructor(config) {
8
+ this.url = config.url;
9
+ this.key = config.key;
10
+ this.projectId = config.projectId || 'default';
11
+ this.fetchFn = config.fetchFn || fetch;
12
+ }
13
+ async push(machine, repoName, repoPath, branches) {
14
+ const result = { pushed: 0, updated: 0, abandoned: 0, errors: [] };
15
+ const now = new Date().toISOString();
16
+ const rows = branches.map((branch) => ({
17
+ branch_name: branch.name,
18
+ machine_id: machine.id,
19
+ machine_name: machine.name,
20
+ hostname: machine.hostname,
21
+ repo_name: repoName,
22
+ repo_path: repoPath,
23
+ status: branch.status === 'completed' ? 'merged' : branch.status,
24
+ files: branch.files,
25
+ agent: branch.agent || machine.name,
26
+ description: branch.description || null,
27
+ synced_at: now,
28
+ project_id: this.projectId,
29
+ }));
30
+ if (rows.length > 0) {
31
+ const upsertResp = await this.fetchFromSupabase('spider_registries?on_conflict=machine_id,repo_name,branch_name', {
32
+ method: 'POST',
33
+ headers: {
34
+ 'Content-Type': 'application/json',
35
+ Prefer: 'resolution=merge-duplicates',
36
+ },
37
+ body: JSON.stringify(rows),
38
+ });
39
+ if (upsertResp.ok) {
40
+ for (const branch of branches) {
41
+ if (branch.status === 'active') {
42
+ result.pushed++;
43
+ }
44
+ else {
45
+ result.updated++;
46
+ }
47
+ }
48
+ }
49
+ else {
50
+ result.errors.push(`Failed to bulk upsert: ${await upsertResp.text()}`);
51
+ }
52
+ }
53
+ const localNames = new Set(branches.map((branch) => branch.name));
54
+ const existingResp = await this.fetchFromSupabase(`spider_registries?machine_id=eq.${encodeURIComponent(machine.id)}` +
55
+ `&repo_name=eq.${encodeURIComponent(repoName)}` +
56
+ '&status=eq.active&select=branch_name');
57
+ if (existingResp.ok) {
58
+ const existing = await existingResp.json();
59
+ const toAbandon = existing.filter((row) => !localNames.has(row.branch_name));
60
+ if (toAbandon.length > 0) {
61
+ const encodedNames = toAbandon.map((row) => encodeURIComponent(row.branch_name));
62
+ const patchResp = await this.fetchFromSupabase(`spider_registries?machine_id=eq.${encodeURIComponent(machine.id)}` +
63
+ `&branch_name=in.(${encodedNames.join(',')})`, { method: 'PATCH', body: JSON.stringify({ status: 'abandoned', synced_at: now }) });
64
+ if (patchResp.ok) {
65
+ result.abandoned += toAbandon.length;
66
+ }
67
+ else {
68
+ result.errors.push(`Failed to batch abandon: ${await patchResp.text()}`);
69
+ }
70
+ }
71
+ }
72
+ return result;
73
+ }
74
+ async pull(repoName, excludeMachine) {
75
+ let query = `spider_registries?machine_id=not.is.null&repo_name=eq.${encodeURIComponent(repoName)}` +
76
+ '&status=eq.active&order=synced_at.desc';
77
+ if (excludeMachine) {
78
+ query += `&machine_id=neq.${encodeURIComponent(excludeMachine)}`;
79
+ }
80
+ const response = await this.fetchFromSupabase(query);
81
+ if (!response.ok) {
82
+ throw new Error(`Pull failed: ${await response.text()}`);
83
+ }
84
+ const rows = await response.json();
85
+ const byMachine = new Map();
86
+ for (const row of rows) {
87
+ if (!byMachine.has(row.machine_id)) {
88
+ byMachine.set(row.machine_id, {
89
+ machine_id: row.machine_id,
90
+ machine_name: row.machine_name,
91
+ hostname: row.hostname,
92
+ repo_name: row.repo_name,
93
+ repo_path: row.repo_path,
94
+ branches: [],
95
+ last_synced: row.synced_at,
96
+ });
97
+ }
98
+ const view = byMachine.get(row.machine_id);
99
+ view.branches.push({
100
+ name: row.branch_name,
101
+ files: row.files ?? [],
102
+ agent: row.agent ?? undefined,
103
+ description: row.description ?? undefined,
104
+ status: row.status === 'merged' ? 'completed' : row.status,
105
+ registeredAt: new Date(row.created_at),
106
+ });
107
+ if (row.synced_at > view.last_synced) {
108
+ view.last_synced = row.synced_at;
109
+ }
110
+ }
111
+ return Array.from(byMachine.values());
112
+ }
113
+ async getStatus(repoName) {
114
+ let query = 'spider_registries?machine_id=not.is.null&select=machine_id,machine_name,hostname,repo_name,status,synced_at';
115
+ if (repoName) {
116
+ query += `&repo_name=eq.${encodeURIComponent(repoName)}`;
117
+ }
118
+ const response = await this.fetchFromSupabase(query);
119
+ if (!response.ok) {
120
+ throw new Error(`Status failed: ${await response.text()}`);
121
+ }
122
+ const rows = await response.json();
123
+ const byMachine = new Map();
124
+ for (const row of rows) {
125
+ if (!byMachine.has(row.machine_id)) {
126
+ byMachine.set(row.machine_id, {
127
+ machine_id: row.machine_id,
128
+ machine_name: row.machine_name,
129
+ hostname: row.hostname,
130
+ branch_count: 0,
131
+ active_count: 0,
132
+ last_sync: row.synced_at,
133
+ repos: [],
134
+ });
135
+ }
136
+ const status = byMachine.get(row.machine_id);
137
+ status.branch_count++;
138
+ if (row.status === 'active') {
139
+ status.active_count++;
140
+ }
141
+ if (row.synced_at > status.last_sync) {
142
+ status.last_sync = row.synced_at;
143
+ }
144
+ if (!status.repos.includes(row.repo_name)) {
145
+ status.repos.push(row.repo_name);
146
+ }
147
+ }
148
+ return Array.from(byMachine.values());
149
+ }
150
+ async detectCrossMachineConflicts(repoName, excludeMachine) {
151
+ const machines = await this.pull(repoName, excludeMachine);
152
+ const fileMap = new Map();
153
+ for (const machine of machines) {
154
+ for (const branch of machine.branches) {
155
+ if (branch.status !== 'active') {
156
+ continue;
157
+ }
158
+ for (const file of branch.files) {
159
+ if (!fileMap.has(file)) {
160
+ fileMap.set(file, []);
161
+ }
162
+ fileMap.get(file).push({
163
+ branch_name: branch.name,
164
+ machine_id: machine.machine_id,
165
+ machine_name: machine.machine_name,
166
+ agent: branch.agent ?? null,
167
+ });
168
+ }
169
+ }
170
+ }
171
+ const conflicts = [];
172
+ for (const [file, refs] of fileMap.entries()) {
173
+ if (new Set(refs.map((ref) => ref.machine_id)).size < 2) {
174
+ continue;
175
+ }
176
+ conflicts.push({
177
+ file,
178
+ tier: classifyTier(file),
179
+ branches: refs.map((ref) => ({
180
+ branch_name: ref.branch_name,
181
+ machine_id: ref.machine_id,
182
+ machine_name: ref.machine_name,
183
+ agent: ref.agent,
184
+ })),
185
+ });
186
+ }
187
+ conflicts.sort((a, b) => b.tier - a.tier);
188
+ return conflicts;
189
+ }
190
+ async setDependencies(name, dependsOn) {
191
+ await this.fetchFromSupabase(`branch_registry?branch_name=eq.${encodeURIComponent(name)}`, {
192
+ method: 'PATCH',
193
+ body: JSON.stringify({ depends_on: dependsOn, updated_at: new Date().toISOString() }),
194
+ });
195
+ }
196
+ async setConflicts(name, conflictsWith) {
197
+ await this.fetchFromSupabase(`branch_registry?branch_name=eq.${encodeURIComponent(name)}`, {
198
+ method: 'PATCH',
199
+ body: JSON.stringify({ conflict_with: conflictsWith, updated_at: new Date().toISOString() }),
200
+ });
201
+ }
202
+ async markMerged(name, prNumber) {
203
+ const payload = { state: 'merged', updated_at: new Date().toISOString() };
204
+ if (prNumber) {
205
+ payload.pr_number = prNumber;
206
+ }
207
+ await this.fetchFromSupabase(`branch_registry?branch_name=eq.${encodeURIComponent(name)}`, {
208
+ method: 'PATCH',
209
+ body: JSON.stringify(payload),
210
+ });
211
+ }
212
+ async getStale() {
213
+ const response = await this.fetchFromSupabase('stale_branches?select=*');
214
+ if (!response.ok) {
215
+ throw new Error(`Failed to get stale: ${await response.text()}`);
216
+ }
217
+ const rows = await response.json();
218
+ return rows.map((row) => this.rowToBranch(row));
219
+ }
220
+ async getRaw(name) {
221
+ const response = await this.fetchFromSupabase(`branch_registry?branch_name=eq.${encodeURIComponent(name)}&limit=1`);
222
+ if (!response.ok) {
223
+ return null;
224
+ }
225
+ const rows = await response.json();
226
+ return rows[0] || null;
227
+ }
228
+ async pushGitHubBranches(rows) {
229
+ const response = await this.fetchFromSupabase('spider_github_branches', {
230
+ method: 'POST',
231
+ headers: { 'Content-Type': 'application/json', Prefer: 'resolution=merge-duplicates' },
232
+ body: JSON.stringify(rows),
233
+ });
234
+ if (!response.ok) {
235
+ const message = await response.text();
236
+ if (message.includes('does not exist') || message.includes('42P01')) {
237
+ return 0;
238
+ }
239
+ throw new Error(`pushGitHubBranches failed: ${message}`);
240
+ }
241
+ return rows.length;
242
+ }
243
+ async init() {
244
+ if (!this.url || !this.key) {
245
+ throw new Error('Supabase URL and key required. Set SUPABASE_URL and SUPABASE_KEY env vars.');
246
+ }
247
+ const response = await this.fetchFromSupabase('branch_registry?select=id&limit=1');
248
+ if (!response.ok) {
249
+ throw new Error(`Failed to connect to Supabase: ${await response.text()}`);
250
+ }
251
+ }
252
+ async isInitialized() {
253
+ try {
254
+ await this.init();
255
+ return true;
256
+ }
257
+ catch {
258
+ return false;
259
+ }
260
+ }
261
+ rowToBranch(row) {
262
+ return {
263
+ name: row.branch_name,
264
+ files: row.files_changed || [],
265
+ registeredAt: new Date(row.created_at),
266
+ agent: row.created_by_agent || undefined,
267
+ status: row.state === 'active'
268
+ ? 'active'
269
+ : row.state === 'merged'
270
+ ? 'completed'
271
+ : 'abandoned',
272
+ description: row.description || undefined,
273
+ };
274
+ }
275
+ async fetchFromSupabase(endpoint, options = {}) {
276
+ const url = `${this.url}/rest/v1/${endpoint}`;
277
+ try {
278
+ const response = await this.fetchFn(url, {
279
+ ...options,
280
+ headers: {
281
+ apikey: this.key,
282
+ Authorization: `Bearer ${this.key}`,
283
+ 'Content-Type': 'application/json',
284
+ Prefer: 'return=representation',
285
+ ...options.headers,
286
+ },
287
+ });
288
+ if (!response.ok) {
289
+ const text = await response.text();
290
+ let parsed = {};
291
+ try {
292
+ parsed = JSON.parse(text);
293
+ }
294
+ catch {
295
+ // ignore parse failures for non-JSON error bodies
296
+ }
297
+ if (parsed.message?.includes('Invalid API key')) {
298
+ throw new Error('Invalid Supabase API key.\n' +
299
+ ' Hint: Check your SUPABASE_KEY environment variable.\n' +
300
+ ' Note: A local .env file may be overriding your mycmail config.');
301
+ }
302
+ if (response.status === 401 || response.status === 403) {
303
+ throw new Error('Supabase authentication failed.\n' +
304
+ ' • Check SUPABASE_URL and SUPABASE_KEY are correct\n' +
305
+ ' • Verify RLS policies allow access\n' +
306
+ ' • Check for .env conflicts in current directory');
307
+ }
308
+ throw new Error(`Supabase error (${response.status}): ${parsed.message || text}`);
309
+ }
310
+ return response;
311
+ }
312
+ catch (error) {
313
+ if (error instanceof TypeError && error.message.includes('fetch')) {
314
+ throw new Error('Network error connecting to Supabase.\n' +
315
+ ' • Check your internet connection\n' +
316
+ ' • Verify SUPABASE_URL is correct');
317
+ }
318
+ throw error;
319
+ }
320
+ }
321
+ }
322
+ //# sourceMappingURL=supabase-registry-sync-client-impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase-registry-sync-client-impl.js","sourceRoot":"","sources":["../../src/storage/supabase-registry-sync-client-impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Branch } from './adapter.js';
2
+ import type { CrossMachineConflict, MachineIdentity, MachineRegistryView, RegistryStatus, RegistrySyncResult } from '../types/cloud.js';
3
+ export interface SupabaseRegistrySyncClient {
4
+ push(machine: MachineIdentity, repoName: string, repoPath: string, branches: Branch[]): Promise<RegistrySyncResult>;
5
+ pull(repoName: string, excludeMachine?: string): Promise<MachineRegistryView[]>;
6
+ getStatus(repoName?: string): Promise<RegistryStatus[]>;
7
+ detectCrossMachineConflicts(repoName: string, excludeMachine?: string): Promise<CrossMachineConflict[]>;
8
+ }
9
+ //# sourceMappingURL=supabase-registry-sync-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase-registry-sync-client.d.ts","sourceRoot":"","sources":["../../src/storage/supabase-registry-sync-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EACR,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EACrB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,0BAA0B;IACvC,IAAI,CACA,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC/B,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAChF,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACxD,2BAA2B,CACvB,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;CACtC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=supabase-registry-sync-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase-registry-sync-client.js","sourceRoot":"","sources":["../../src/storage/supabase-registry-sync-client.ts"],"names":[],"mappings":""}
@@ -1,39 +1,16 @@
1
1
  /**
2
2
  * Supabase Storage Adapter
3
3
  *
4
- * Cloud-based storage for team coordination.
5
- * Matches Recovery-Tree's branch_registry schema.
4
+ * Thin compatibility wrapper over a local JsonBranchRegistryStore plus
5
+ * SupabaseRegistrySyncClientImpl for cross-machine sync.
6
6
  */
7
7
  import type { StorageAdapter, Branch } from './adapter.js';
8
- import type { MachineIdentity, MachineRegistryView, RegistryStatus, RegistrySyncResult } from '../types/cloud.js';
9
- interface SupabaseConfig {
10
- url: string;
11
- key: string;
12
- projectId?: string;
13
- }
14
- interface SupabaseBranchRow {
15
- id: string;
16
- branch_name: string;
17
- created_by_session: string | null;
18
- created_by_agent: string | null;
19
- parent_branch: string;
20
- state: string;
21
- depends_on: string[] | null;
22
- conflict_with: string[] | null;
23
- files_changed: string[] | null;
24
- description: string | null;
25
- pr_number: number | null;
26
- created_at: string;
27
- updated_at: string;
28
- }
8
+ import { type SupabaseBranchRow, type SupabaseRegistrySyncClientConfig } from './supabase-registry-sync-client-impl.js';
9
+ import type { CrossMachineConflict, MachineIdentity, MachineRegistryView, RegistryStatus, RegistrySyncResult } from '../types/cloud.js';
29
10
  export declare class SupabaseStorage implements StorageAdapter {
30
- private url;
31
- private key;
32
- private projectId;
33
- private initialized;
34
- constructor(config: SupabaseConfig);
35
- private fetch;
36
- private rowToBranch;
11
+ private store;
12
+ private syncClient;
13
+ constructor(config: SupabaseRegistrySyncClientConfig, basePath?: string);
37
14
  init(): Promise<void>;
38
15
  isInitialized(): Promise<boolean>;
39
16
  list(): Promise<Branch[]>;
@@ -48,25 +25,10 @@ export declare class SupabaseStorage implements StorageAdapter {
48
25
  markMerged(name: string, prNumber?: number): Promise<void>;
49
26
  getStale(): Promise<Branch[]>;
50
27
  getRaw(name: string): Promise<SupabaseBranchRow | null>;
51
- /**
52
- * Push local branches to branch_registry table, stamping machine identity columns.
53
- * For branches NOT already in Supabase, skip (they're local-only).
54
- * For rows in Supabase with this machine_id that are no longer local, PATCH state to 'abandoned'.
55
- */
56
28
  pushRegistry(machine: MachineIdentity, repoName: string, repoPath: string, branches: Branch[]): Promise<RegistrySyncResult>;
57
- /**
58
- * Pull other machines' registries for a repo (read-only view).
59
- */
60
29
  pullRegistries(repoName: string, excludeMachine?: string): Promise<MachineRegistryView[]>;
61
- /**
62
- * Get sync status across all machines for a repo (or all repos).
63
- */
64
30
  getRegistryStatus(repoName?: string): Promise<RegistryStatus[]>;
65
- /**
66
- * Upsert GitHub branch inventory rows (F2).
67
- * Gracefully skips if the spider_github_branches table doesn't exist.
68
- */
31
+ detectCrossMachineConflicts(repoName: string, excludeMachine?: string): Promise<CrossMachineConflict[]>;
69
32
  pushGitHubBranches(rows: unknown[]): Promise<number>;
70
33
  }
71
- export {};
72
34
  //# sourceMappingURL=supabase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../src/storage/supabase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../src/storage/supabase.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAEH,KAAK,iBAAiB,EACtB,KAAK,gCAAgC,EACxC,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EACR,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EACrB,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,eAAgB,YAAW,cAAc;IAClD,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,UAAU,CAAiC;gBAEvC,MAAM,EAAE,gCAAgC,EAAE,QAAQ,GAAE,MAAsB;IAKhF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAIjC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIzB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAItE,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI1C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIzC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAI/C,OAAO,CAAC,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAI3C,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI7B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAIvD,YAAY,CACd,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,kBAAkB,CAAC;IAIxB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAIzF,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAI/D,2BAA2B,CAC7B,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAI5B,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAG7D"}