spidersan 0.6.0 → 0.10.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 (227) hide show
  1. package/CHANGELOG.md +65 -51
  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 +416 -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 +49 -77
  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 +10 -44
  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 +82 -82
  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 +22 -37
  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 +6 -0
  68. package/dist/commands/watch.d.ts.map +1 -1
  69. package/dist/commands/watch.js +117 -30
  70. package/dist/commands/watch.js.map +1 -1
  71. package/dist/lib/ai/context-builder.d.ts +16 -0
  72. package/dist/lib/ai/context-builder.d.ts.map +1 -0
  73. package/dist/lib/ai/context-builder.js +216 -0
  74. package/dist/lib/ai/context-builder.js.map +1 -0
  75. package/dist/lib/ai/event-handler.d.ts +21 -0
  76. package/dist/lib/ai/event-handler.d.ts.map +1 -0
  77. package/dist/lib/ai/event-handler.js +98 -0
  78. package/dist/lib/ai/event-handler.js.map +1 -0
  79. package/dist/lib/ai/index.d.ts +13 -0
  80. package/dist/lib/ai/index.d.ts.map +1 -0
  81. package/dist/lib/ai/index.js +11 -0
  82. package/dist/lib/ai/index.js.map +1 -0
  83. package/dist/lib/ai/llm-client.d.ts +37 -0
  84. package/dist/lib/ai/llm-client.d.ts.map +1 -0
  85. package/dist/lib/ai/llm-client.js +225 -0
  86. package/dist/lib/ai/llm-client.js.map +1 -0
  87. package/dist/lib/ai/reasoner.d.ts +11 -0
  88. package/dist/lib/ai/reasoner.d.ts.map +1 -0
  89. package/dist/lib/ai/reasoner.js +246 -0
  90. package/dist/lib/ai/reasoner.js.map +1 -0
  91. package/dist/lib/ai/setup.d.ts +40 -0
  92. package/dist/lib/ai/setup.d.ts.map +1 -0
  93. package/dist/lib/ai/setup.js +154 -0
  94. package/dist/lib/ai/setup.js.map +1 -0
  95. package/dist/lib/ai/types.d.ts +135 -0
  96. package/dist/lib/ai/types.d.ts.map +1 -0
  97. package/dist/lib/ai/types.js +39 -0
  98. package/dist/lib/ai/types.js.map +1 -0
  99. package/dist/lib/colony-subscriber.d.ts +15 -12
  100. package/dist/lib/colony-subscriber.d.ts.map +1 -1
  101. package/dist/lib/colony-subscriber.js +146 -65
  102. package/dist/lib/colony-subscriber.js.map +1 -1
  103. package/dist/lib/config.d.ts.map +1 -1
  104. package/dist/lib/config.js +18 -4
  105. package/dist/lib/config.js.map +1 -1
  106. package/dist/lib/conflict-analyzer.d.ts +33 -0
  107. package/dist/lib/conflict-analyzer.d.ts.map +1 -0
  108. package/dist/lib/conflict-analyzer.js +114 -0
  109. package/dist/lib/conflict-analyzer.js.map +1 -0
  110. package/dist/lib/conflict-renderer.d.ts +7 -0
  111. package/dist/lib/conflict-renderer.d.ts.map +1 -0
  112. package/dist/lib/conflict-renderer.js +162 -0
  113. package/dist/lib/conflict-renderer.js.map +1 -0
  114. package/dist/lib/conflict-tier.d.ts +20 -0
  115. package/dist/lib/conflict-tier.d.ts.map +1 -0
  116. package/dist/lib/conflict-tier.js +49 -0
  117. package/dist/lib/conflict-tier.js.map +1 -0
  118. package/dist/lib/crypto.js +1 -1
  119. package/dist/lib/crypto.js.map +1 -1
  120. package/dist/lib/git-events-subscriber.d.ts +59 -0
  121. package/dist/lib/git-events-subscriber.d.ts.map +1 -0
  122. package/dist/lib/git-events-subscriber.js +779 -0
  123. package/dist/lib/git-events-subscriber.js.map +1 -0
  124. package/dist/lib/git.d.ts +15 -0
  125. package/dist/lib/git.d.ts.map +1 -0
  126. package/dist/lib/git.js +180 -0
  127. package/dist/lib/git.js.map +1 -0
  128. package/dist/lib/github.d.ts.map +1 -1
  129. package/dist/lib/github.js +14 -9
  130. package/dist/lib/github.js.map +1 -1
  131. package/dist/lib/graph.d.ts +23 -0
  132. package/dist/lib/graph.d.ts.map +1 -0
  133. package/dist/lib/graph.js +134 -0
  134. package/dist/lib/graph.js.map +1 -0
  135. package/dist/lib/hub.d.ts +31 -0
  136. package/dist/lib/hub.d.ts.map +1 -0
  137. package/dist/lib/hub.js +92 -0
  138. package/dist/lib/hub.js.map +1 -0
  139. package/dist/lib/pulse-renderer.d.ts +19 -0
  140. package/dist/lib/pulse-renderer.d.ts.map +1 -0
  141. package/dist/lib/pulse-renderer.js +108 -0
  142. package/dist/lib/pulse-renderer.js.map +1 -0
  143. package/dist/lib/register-renderer.d.ts +10 -0
  144. package/dist/lib/register-renderer.d.ts.map +1 -0
  145. package/dist/lib/register-renderer.js +19 -0
  146. package/dist/lib/register-renderer.js.map +1 -0
  147. package/dist/lib/remote-drift.d.ts +61 -0
  148. package/dist/lib/remote-drift.d.ts.map +1 -0
  149. package/dist/lib/remote-drift.js +227 -0
  150. package/dist/lib/remote-drift.js.map +1 -0
  151. package/dist/lib/salvage-analyzer.d.ts.map +1 -1
  152. package/dist/lib/salvage-analyzer.js +2 -3
  153. package/dist/lib/salvage-analyzer.js.map +1 -1
  154. package/dist/lib/security.d.ts +11 -0
  155. package/dist/lib/security.d.ts.map +1 -1
  156. package/dist/lib/security.js +24 -1
  157. package/dist/lib/security.js.map +1 -1
  158. package/dist/lib/session-logger.d.ts +54 -0
  159. package/dist/lib/session-logger.d.ts.map +1 -0
  160. package/dist/lib/session-logger.js +136 -0
  161. package/dist/lib/session-logger.js.map +1 -0
  162. package/dist/lib/watch-renderer.d.ts +13 -0
  163. package/dist/lib/watch-renderer.d.ts.map +1 -0
  164. package/dist/lib/watch-renderer.js +35 -0
  165. package/dist/lib/watch-renderer.js.map +1 -0
  166. package/dist/storage/adapter.d.ts +4 -0
  167. package/dist/storage/adapter.d.ts.map +1 -1
  168. package/dist/storage/branch-registry-store.d.ts +13 -0
  169. package/dist/storage/branch-registry-store.d.ts.map +1 -0
  170. package/dist/storage/branch-registry-store.js +2 -0
  171. package/dist/storage/branch-registry-store.js.map +1 -0
  172. package/dist/storage/factory.d.ts +4 -0
  173. package/dist/storage/factory.d.ts.map +1 -1
  174. package/dist/storage/factory.js +25 -9
  175. package/dist/storage/factory.js.map +1 -1
  176. package/dist/storage/git-messages.d.ts +53 -0
  177. package/dist/storage/git-messages.d.ts.map +1 -0
  178. package/dist/storage/git-messages.js +376 -0
  179. package/dist/storage/git-messages.js.map +1 -0
  180. package/dist/storage/index.d.ts +5 -0
  181. package/dist/storage/index.d.ts.map +1 -1
  182. package/dist/storage/index.js +5 -0
  183. package/dist/storage/index.js.map +1 -1
  184. package/dist/storage/json-branch-registry-store.d.ts +19 -0
  185. package/dist/storage/json-branch-registry-store.d.ts.map +1 -0
  186. package/dist/storage/json-branch-registry-store.js +112 -0
  187. package/dist/storage/json-branch-registry-store.js.map +1 -0
  188. package/dist/storage/local-messages.d.ts +37 -0
  189. package/dist/storage/local-messages.d.ts.map +1 -0
  190. package/dist/storage/local-messages.js +151 -0
  191. package/dist/storage/local-messages.js.map +1 -0
  192. package/dist/storage/local.d.ts +2 -6
  193. package/dist/storage/local.d.ts.map +1 -1
  194. package/dist/storage/local.js +13 -76
  195. package/dist/storage/local.js.map +1 -1
  196. package/dist/storage/memory-branch-registry-store.d.ts +16 -0
  197. package/dist/storage/memory-branch-registry-store.d.ts.map +1 -0
  198. package/dist/storage/memory-branch-registry-store.js +65 -0
  199. package/dist/storage/memory-branch-registry-store.js.map +1 -0
  200. package/dist/storage/message-adapter.d.ts +86 -0
  201. package/dist/storage/message-adapter.d.ts.map +1 -0
  202. package/dist/storage/message-adapter.js +28 -0
  203. package/dist/storage/message-adapter.js.map +1 -0
  204. package/dist/storage/message-factory.d.ts +36 -0
  205. package/dist/storage/message-factory.d.ts.map +1 -0
  206. package/dist/storage/message-factory.js +99 -0
  207. package/dist/storage/message-factory.js.map +1 -0
  208. package/dist/storage/mycmail-adapter.d.ts +38 -0
  209. package/dist/storage/mycmail-adapter.d.ts.map +1 -0
  210. package/dist/storage/mycmail-adapter.js +300 -0
  211. package/dist/storage/mycmail-adapter.js.map +1 -0
  212. package/dist/storage/supabase-registry-sync-client-impl.d.ts +46 -0
  213. package/dist/storage/supabase-registry-sync-client-impl.d.ts.map +1 -0
  214. package/dist/storage/supabase-registry-sync-client-impl.js +322 -0
  215. package/dist/storage/supabase-registry-sync-client-impl.js.map +1 -0
  216. package/dist/storage/supabase-registry-sync-client.d.ts +9 -0
  217. package/dist/storage/supabase-registry-sync-client.d.ts.map +1 -0
  218. package/dist/storage/supabase-registry-sync-client.js +2 -0
  219. package/dist/storage/supabase-registry-sync-client.js.map +1 -0
  220. package/dist/storage/supabase.d.ts +8 -46
  221. package/dist/storage/supabase.d.ts.map +1 -1
  222. package/dist/storage/supabase.js +30 -342
  223. package/dist/storage/supabase.js.map +1 -1
  224. package/dist/tui/screen.d.ts.map +1 -1
  225. package/dist/tui/screen.js +5 -3
  226. package/dist/tui/screen.js.map +1 -1
  227. package/package.json +1 -1
@@ -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":"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"}
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spidersan",
3
- "version": "0.6.0",
3
+ "version": "0.10.0",
4
4
  "description": "Branch coordination for AI coding agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",