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
@@ -1,386 +1,74 @@
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
+ import { JsonBranchRegistryStore } from './json-branch-registry-store.js';
8
+ import { SupabaseRegistrySyncClientImpl, } from './supabase-registry-sync-client-impl.js';
7
9
  export class SupabaseStorage {
8
- url;
9
- key;
10
- projectId;
11
- initialized = false;
12
- constructor(config) {
13
- this.url = config.url;
14
- this.key = config.key;
15
- this.projectId = config.projectId || 'default';
16
- }
17
- async fetch(endpoint, options = {}) {
18
- const url = `${this.url}/rest/v1/${endpoint}`;
19
- try {
20
- const response = await fetch(url, {
21
- ...options,
22
- headers: {
23
- 'apikey': this.key,
24
- 'Authorization': `Bearer ${this.key}`,
25
- 'Content-Type': 'application/json',
26
- 'Prefer': 'return=representation',
27
- ...options.headers,
28
- },
29
- });
30
- // Check for common errors and provide helpful messages
31
- if (!response.ok) {
32
- const text = await response.text();
33
- let parsed = {};
34
- try {
35
- parsed = JSON.parse(text);
36
- }
37
- catch { /* ignore */ }
38
- if (parsed.message?.includes('Invalid API key')) {
39
- throw new Error('Invalid Supabase API key.\n' +
40
- ' Hint: Check your SUPABASE_KEY environment variable.\n' +
41
- ' Note: A local .env file may be overriding your mycmail config.');
42
- }
43
- if (response.status === 401 || response.status === 403) {
44
- throw new Error('Supabase authentication failed.\n' +
45
- ' • Check SUPABASE_URL and SUPABASE_KEY are correct\n' +
46
- ' • Verify RLS policies allow access\n' +
47
- ' • Check for .env conflicts in current directory');
48
- }
49
- throw new Error(`Supabase error (${response.status}): ${parsed.message || text}`);
50
- }
51
- return response;
52
- }
53
- catch (error) {
54
- if (error instanceof TypeError && error.message.includes('fetch')) {
55
- throw new Error('Network error connecting to Supabase.\n' +
56
- ' • Check your internet connection\n' +
57
- ' • Verify SUPABASE_URL is correct');
58
- }
59
- throw error;
60
- }
61
- }
62
- rowToBranch(row) {
63
- return {
64
- name: row.branch_name,
65
- files: row.files_changed || [],
66
- registeredAt: new Date(row.created_at),
67
- agent: row.created_by_agent || undefined,
68
- status: row.state === 'active' ? 'active' :
69
- row.state === 'merged' ? 'completed' : 'abandoned',
70
- description: row.description || undefined,
71
- };
10
+ store;
11
+ syncClient;
12
+ constructor(config, basePath = process.cwd()) {
13
+ this.store = new JsonBranchRegistryStore(basePath);
14
+ this.syncClient = new SupabaseRegistrySyncClientImpl(config);
72
15
  }
73
16
  async init() {
74
- if (!this.url || !this.key) {
75
- throw new Error('Supabase URL and key required. Set SUPABASE_URL and SUPABASE_KEY env vars.');
76
- }
77
- const response = await this.fetch('branch_registry?select=id&limit=1');
78
- if (!response.ok) {
79
- throw new Error(`Failed to connect to Supabase: ${await response.text()}`);
80
- }
81
- this.initialized = true;
17
+ await this.store.init();
82
18
  }
83
19
  async isInitialized() {
84
- if (this.initialized)
85
- return true;
86
- try {
87
- await this.init();
88
- return true;
89
- }
90
- catch {
91
- return false;
92
- }
20
+ return this.store.isInitialized();
93
21
  }
94
22
  async list() {
95
- const response = await this.fetch('active_branches?select=*&order=created_at.desc');
96
- if (!response.ok)
97
- throw new Error(`Failed to list: ${await response.text()}`);
98
- const rows = await response.json();
99
- return rows.map(r => this.rowToBranch(r));
23
+ return this.store.list();
100
24
  }
101
25
  async register(branch) {
102
- const payload = {
103
- branch_name: branch.name,
104
- files_changed: branch.files,
105
- state: branch.status || 'active',
106
- description: branch.description,
107
- created_by_agent: branch.agent || 'unknown',
108
- created_by_session: branch.agent || 'cli-session',
109
- parent_branch: 'main',
110
- };
111
- const response = await this.fetch('branch_registry', {
112
- method: 'POST',
113
- body: JSON.stringify(payload),
114
- });
115
- if (!response.ok) {
116
- const error = await response.text();
117
- if (error.includes('duplicate') || error.includes('unique')) {
118
- throw new Error(`Branch "${branch.name}" already registered`);
119
- }
120
- throw new Error(`Failed to register: ${error}`);
121
- }
122
- const [row] = await response.json();
123
- return this.rowToBranch(row);
26
+ return this.store.register(branch);
124
27
  }
125
28
  async update(name, updates) {
126
- const payload = { updated_at: new Date().toISOString() };
127
- if (updates.files)
128
- payload.files_changed = updates.files;
129
- if (updates.status)
130
- payload.state = updates.status;
131
- if (updates.description)
132
- payload.description = updates.description;
133
- if (updates.agent)
134
- payload.created_by_agent = updates.agent;
135
- const response = await this.fetch(`branch_registry?branch_name=eq.${encodeURIComponent(name)}`, {
136
- method: 'PATCH',
137
- body: JSON.stringify(payload),
138
- });
139
- if (!response.ok)
140
- throw new Error(`Failed to update: ${await response.text()}`);
141
- const rows = await response.json();
142
- return rows.length > 0 ? this.rowToBranch(rows[0]) : null;
29
+ return this.store.update(name, updates);
143
30
  }
144
31
  async unregister(name) {
145
- const response = await this.fetch(`branch_registry?branch_name=eq.${encodeURIComponent(name)}`, {
146
- method: 'PATCH',
147
- body: JSON.stringify({ state: 'abandoned', updated_at: new Date().toISOString() }),
148
- });
149
- if (!response.ok)
150
- throw new Error(`Failed to unregister: ${await response.text()}`);
151
- const rows = await response.json();
152
- return rows.length > 0;
32
+ return this.store.unregister(name);
153
33
  }
154
34
  async get(name) {
155
- const response = await this.fetch(`branch_registry?branch_name=eq.${encodeURIComponent(name)}&limit=1`);
156
- if (!response.ok)
157
- throw new Error(`Failed to get: ${await response.text()}`);
158
- const rows = await response.json();
159
- return rows.length > 0 ? this.rowToBranch(rows[0]) : null;
35
+ return this.store.get(name);
160
36
  }
161
37
  async findByFiles(files) {
162
- // Security: URL-encode file paths to prevent query injection
163
- const safeFiles = files.map(f => encodeURIComponent(f.replace(/[,{}]/g, '_')));
164
- const response = await this.fetch(`active_branches?files_changed=ov.{${safeFiles.join(',')}}`);
165
- if (!response.ok)
166
- throw new Error(`Failed to find by files: ${await response.text()}`);
167
- const rows = await response.json();
168
- return rows.map(r => this.rowToBranch(r));
38
+ return this.store.findByFiles(files);
169
39
  }
170
40
  async cleanup(olderThan) {
171
- const isoDate = olderThan.toISOString();
172
- const response = await this.fetch(`branch_registry?select=id,branch_name&state=eq.active&created_at=lt.${encodeURIComponent(isoDate)}`);
173
- if (!response.ok)
174
- throw new Error(`Failed to get stale branches: ${await response.text()}`);
175
- const rows = await response.json();
176
- if (rows.length === 0)
177
- return [];
178
- const ids = rows.map(r => r.id);
179
- const names = rows.map(r => r.branch_name);
180
- const patchResponse = await this.fetch(`branch_registry?id=in.(${ids.join(',')})`, {
181
- method: 'PATCH',
182
- body: JSON.stringify({ state: 'abandoned', updated_at: new Date().toISOString() }),
183
- });
184
- if (!patchResponse.ok)
185
- throw new Error(`Failed to cleanup branches: ${await patchResponse.text()}`);
186
- return names;
41
+ return this.store.cleanup(olderThan);
187
42
  }
188
- // Extended Supabase-specific methods
189
43
  async setDependencies(name, dependsOn) {
190
- await this.fetch(`branch_registry?branch_name=eq.${encodeURIComponent(name)}`, {
191
- method: 'PATCH',
192
- body: JSON.stringify({ depends_on: dependsOn, updated_at: new Date().toISOString() }),
193
- });
44
+ await this.syncClient.setDependencies(name, dependsOn);
194
45
  }
195
46
  async setConflicts(name, conflictsWith) {
196
- await this.fetch(`branch_registry?branch_name=eq.${encodeURIComponent(name)}`, {
197
- method: 'PATCH',
198
- body: JSON.stringify({ conflict_with: conflictsWith, updated_at: new Date().toISOString() }),
199
- });
47
+ await this.syncClient.setConflicts(name, conflictsWith);
200
48
  }
201
49
  async markMerged(name, prNumber) {
202
- const payload = { state: 'merged', updated_at: new Date().toISOString() };
203
- if (prNumber)
204
- payload.pr_number = prNumber;
205
- await this.fetch(`branch_registry?branch_name=eq.${encodeURIComponent(name)}`, {
206
- method: 'PATCH',
207
- body: JSON.stringify(payload),
208
- });
50
+ await this.syncClient.markMerged(name, prNumber);
209
51
  }
210
52
  async getStale() {
211
- const response = await this.fetch('stale_branches?select=*');
212
- if (!response.ok)
213
- throw new Error(`Failed to get stale: ${await response.text()}`);
214
- const rows = await response.json();
215
- return rows.map(r => this.rowToBranch(r));
53
+ return this.syncClient.getStale();
216
54
  }
217
55
  async getRaw(name) {
218
- const response = await this.fetch(`branch_registry?branch_name=eq.${encodeURIComponent(name)}&limit=1`);
219
- if (!response.ok)
220
- return null;
221
- const rows = await response.json();
222
- return rows[0] || null;
56
+ return this.syncClient.getRaw(name);
223
57
  }
224
- // ─── F1: Registry Sync (cross-machine awareness) ───
225
- /**
226
- * Push local branches to branch_registry table, stamping machine identity columns.
227
- * For branches NOT already in Supabase, skip (they're local-only).
228
- * For rows in Supabase with this machine_id that are no longer local, PATCH state to 'abandoned'.
229
- */
230
58
  async pushRegistry(machine, repoName, repoPath, branches) {
231
- const result = { pushed: 0, updated: 0, abandoned: 0, errors: [] };
232
- const now = new Date().toISOString();
233
- // Upsert local branches into spider_registries using a bulk POST request
234
- const rows = branches.map(b => ({
235
- branch_name: b.name,
236
- machine_id: machine.id,
237
- machine_name: machine.name,
238
- hostname: machine.hostname,
239
- repo_name: repoName,
240
- repo_path: repoPath,
241
- status: b.status === 'completed' ? 'merged' : b.status,
242
- files: b.files,
243
- agent: b.agent || machine.name,
244
- description: b.description || null,
245
- synced_at: now,
246
- }));
247
- if (rows.length > 0) {
248
- const upsertResp = await this.fetch(`spider_registries?on_conflict=machine_id,repo_name,branch_name`, {
249
- method: 'POST',
250
- headers: {
251
- 'Content-Type': 'application/json',
252
- 'Prefer': 'resolution=merge-duplicates',
253
- },
254
- body: JSON.stringify(rows),
255
- });
256
- if (upsertResp.ok) {
257
- for (const b of branches) {
258
- if (b.status === 'active')
259
- result.pushed++;
260
- else
261
- result.updated++;
262
- }
263
- }
264
- else {
265
- result.errors.push(`Failed to bulk upsert: ${await upsertResp.text()}`);
266
- }
267
- }
268
- // Mark branches tagged with this machine_id that are no longer local as abandoned
269
- const localNames = new Set(branches.map(b => b.name));
270
- const existingResp = await this.fetch(`spider_registries?machine_id=eq.${encodeURIComponent(machine.id)}` +
271
- `&repo_name=eq.${encodeURIComponent(repoName)}` +
272
- `&status=eq.active&select=branch_name`);
273
- if (existingResp.ok) {
274
- const existing = await existingResp.json();
275
- const toAbandon = existing.filter(e => !localNames.has(e.branch_name));
276
- if (toAbandon.length > 0) {
277
- // Batch PATCH requests using the 'in' filter to prevent N+1 queries
278
- const encodedNames = toAbandon.map(b => encodeURIComponent(b.branch_name));
279
- const patchResp = await this.fetch(`spider_registries?machine_id=eq.${encodeURIComponent(machine.id)}` +
280
- `&branch_name=in.(${encodedNames.join(',')})`, { method: 'PATCH', body: JSON.stringify({ status: 'abandoned', synced_at: now }) });
281
- if (patchResp.ok) {
282
- result.abandoned += toAbandon.length;
283
- }
284
- else {
285
- result.errors.push(`Failed to batch abandon: ${await patchResp.text()}`);
286
- }
287
- }
288
- }
289
- return result;
59
+ return this.syncClient.push(machine, repoName, repoPath, branches);
290
60
  }
291
- /**
292
- * Pull other machines' registries for a repo (read-only view).
293
- */
294
61
  async pullRegistries(repoName, excludeMachine) {
295
- let query = `spider_registries?machine_id=not.is.null&repo_name=eq.${encodeURIComponent(repoName)}&status=eq.active&order=synced_at.desc`;
296
- if (excludeMachine) {
297
- query += `&machine_id=neq.${encodeURIComponent(excludeMachine)}`;
298
- }
299
- const response = await this.fetch(query);
300
- if (!response.ok)
301
- throw new Error(`Pull failed: ${await response.text()}`);
302
- const rows = await response.json();
303
- const byMachine = new Map();
304
- for (const row of rows) {
305
- if (!byMachine.has(row.machine_id)) {
306
- byMachine.set(row.machine_id, {
307
- machine_id: row.machine_id,
308
- machine_name: row.machine_name,
309
- hostname: row.hostname,
310
- repo_name: row.repo_name,
311
- repo_path: row.repo_path,
312
- branches: [],
313
- last_synced: row.synced_at,
314
- });
315
- }
316
- const view = byMachine.get(row.machine_id);
317
- view.branches.push({
318
- name: row.branch_name,
319
- files: row.files ?? [],
320
- agent: row.agent ?? undefined,
321
- description: row.description ?? undefined,
322
- status: row.status === 'merged' ? 'completed' : row.status,
323
- registeredAt: new Date(row.created_at),
324
- });
325
- if (row.synced_at > view.last_synced)
326
- view.last_synced = row.synced_at;
327
- }
328
- return Array.from(byMachine.values());
62
+ return this.syncClient.pull(repoName, excludeMachine);
329
63
  }
330
- /**
331
- * Get sync status across all machines for a repo (or all repos).
332
- */
333
64
  async getRegistryStatus(repoName) {
334
- let query = 'spider_registries?machine_id=not.is.null&select=machine_id,machine_name,hostname,repo_name,status,synced_at';
335
- if (repoName)
336
- query += `&repo_name=eq.${encodeURIComponent(repoName)}`;
337
- const response = await this.fetch(query);
338
- if (!response.ok)
339
- throw new Error(`Status failed: ${await response.text()}`);
340
- const rows = await response.json();
341
- const byMachine = new Map();
342
- for (const row of rows) {
343
- if (!byMachine.has(row.machine_id)) {
344
- byMachine.set(row.machine_id, {
345
- machine_id: row.machine_id,
346
- machine_name: row.machine_name,
347
- hostname: row.hostname,
348
- branch_count: 0,
349
- active_count: 0,
350
- last_sync: row.synced_at,
351
- repos: [],
352
- });
353
- }
354
- const status = byMachine.get(row.machine_id);
355
- status.branch_count++;
356
- if (row.status === 'active')
357
- status.active_count++;
358
- if (row.synced_at > status.last_sync)
359
- status.last_sync = row.synced_at;
360
- if (!status.repos.includes(row.repo_name))
361
- status.repos.push(row.repo_name);
362
- }
363
- return Array.from(byMachine.values());
65
+ return this.syncClient.getStatus(repoName);
66
+ }
67
+ async detectCrossMachineConflicts(repoName, excludeMachine) {
68
+ return this.syncClient.detectCrossMachineConflicts(repoName, excludeMachine);
364
69
  }
365
- /**
366
- * Upsert GitHub branch inventory rows (F2).
367
- * Gracefully skips if the spider_github_branches table doesn't exist.
368
- */
369
70
  async pushGitHubBranches(rows) {
370
- const response = await this.fetch('spider_github_branches', {
371
- method: 'POST',
372
- headers: { 'Content-Type': 'application/json', Prefer: 'resolution=merge-duplicates' },
373
- body: JSON.stringify(rows),
374
- });
375
- if (!response.ok) {
376
- const msg = await response.text();
377
- if (msg.includes('does not exist') || msg.includes('42P01')) {
378
- // Table not yet created — skip gracefully
379
- return 0;
380
- }
381
- throw new Error(`pushGitHubBranches failed: ${msg}`);
382
- }
383
- return rows.length;
71
+ return this.syncClient.pushGitHubBranches(rows);
384
72
  }
385
73
  }
386
74
  //# sourceMappingURL=supabase.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"supabase.js","sourceRoot":"","sources":["../../src/storage/supabase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"supabase.js","sourceRoot":"","sources":["../../src/storage/supabase.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EACH,8BAA8B,GAGjC,MAAM,yCAAyC,CAAC;AASjD,MAAM,OAAO,eAAe;IAChB,KAAK,CAA0B;IAC/B,UAAU,CAAiC;IAEnD,YAAY,MAAwC,EAAE,WAAmB,OAAO,CAAC,GAAG,EAAE;QAClF,IAAI,CAAC,KAAK,GAAG,IAAI,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,GAAG,IAAI,8BAA8B,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,IAAI;QACN,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,aAAa;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAoC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,OAAwB;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAY;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAe;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAAe;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAY,EAAE,SAAmB;QACnD,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,aAAuB;QACpD,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,QAAiB;QAC5C,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,YAAY,CACd,OAAwB,EACxB,QAAgB,EAChB,QAAgB,EAChB,QAAkB;QAElB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE,cAAuB;QAC1D,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,QAAiB;QACrC,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,2BAA2B,CAC7B,QAAgB,EAChB,cAAuB;QAEvB,OAAO,IAAI,CAAC,UAAU,CAAC,2BAA2B,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,IAAe;QACpC,OAAO,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;CACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../src/tui/screen.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,MAAM,CAAqD;;IAgBnE,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,YAAY;IAwDd,OAAO;IA2Cb,KAAK;CAoBR"}
1
+ {"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../src/tui/screen.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,MAAM,CAAqD;;IAgBnE,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,YAAY;IAwDd,OAAO;IA4Cb,KAAK;CAoBR"}
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import blessed from 'blessed';
6
6
  import { getStorage } from '../storage/index.js';
7
+ import { escapeBlessed } from '../lib/security.js';
7
8
  export class SpidersanTUI {
8
9
  screen;
9
10
  panels = {};
@@ -90,11 +91,12 @@ export class SpidersanTUI {
90
91
  let content = '';
91
92
  for (const branch of branches) {
92
93
  const status = branch.status === 'active' ? '🟢' : '🔴';
93
- content += `${status} {bold}${branch.name}{/bold}\n`;
94
- content += ` Agent: ${branch.agent || 'unknown'}\n`;
94
+ const safeName = escapeBlessed(branch.name);
95
+ content += `${status} {bold}${safeName}{/bold}\n`;
96
+ content += ` Agent: ${escapeBlessed(branch.agent || 'unknown')}\n`;
95
97
  const files = branch.files?.slice(0, 3) || [];
96
98
  if (files.length > 0) {
97
- content += ` Files: ${files.join(', ')}\n`;
99
+ content += ` Files: ${escapeBlessed(files.join(', '))}\n`;
98
100
  }
99
101
  content += '\n';
100
102
  }
@@ -1 +1 @@
1
- {"version":3,"file":"screen.js","sourceRoot":"","sources":["../../src/tui/screen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"screen.js","sourceRoot":"","sources":["../../src/tui/screen.ts"],"names":[],"mappings":"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"}