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,99 @@
1
+ /**
2
+ * Message Storage Factory - Tiered Selection Logic
3
+ *
4
+ * Selects the best available message storage backend:
5
+ * Tier 1: Mycmail/Supabase (real-time, full features)
6
+ * Tier 2: Git coordination branch (near-real-time on pull)
7
+ * Tier 3: Local JSON (single-machine only)
8
+ */
9
+ import { MycmailAdapter } from './mycmail-adapter.js';
10
+ import { GitMessagesAdapter } from './git-messages.js';
11
+ import { LocalMessagesAdapter } from './local-messages.js';
12
+ /**
13
+ * Get the best available message storage adapter
14
+ */
15
+ export async function getMessageStorage(options = {}) {
16
+ const { forceTier, agentId, basePath, verbose } = options;
17
+ // Create all adapters
18
+ const tier1 = new MycmailAdapter(agentId);
19
+ const tier2 = new GitMessagesAdapter(basePath);
20
+ const tier3 = new LocalMessagesAdapter(basePath);
21
+ // If tier is forced, return that adapter (even if unavailable)
22
+ if (forceTier === 1) {
23
+ if (verbose)
24
+ console.error('🔗 Forced Tier 1: mycmail-supabase');
25
+ return tier1;
26
+ }
27
+ if (forceTier === 2) {
28
+ if (verbose)
29
+ console.error('🔗 Forced Tier 2: git-coordination-branch');
30
+ return tier2;
31
+ }
32
+ if (forceTier === 3) {
33
+ if (verbose)
34
+ console.error('🔗 Forced Tier 3: local-json');
35
+ return tier3;
36
+ }
37
+ // Auto-detect best available tier
38
+ if (await tier1.isAvailable()) {
39
+ if (verbose)
40
+ console.error('🔗 Using Tier 1: mycmail-supabase');
41
+ return tier1;
42
+ }
43
+ if (await tier2.isAvailable()) {
44
+ if (verbose)
45
+ console.error('🔗 Using Tier 2: git-coordination-branch');
46
+ return tier2;
47
+ }
48
+ if (verbose)
49
+ console.error('🔗 Using Tier 3: local-json');
50
+ return tier3;
51
+ }
52
+ /**
53
+ * Get status of all message storage tiers
54
+ */
55
+ export async function getAllTierStatus(options = {}) {
56
+ const { agentId, basePath } = options;
57
+ const tier1 = new MycmailAdapter(agentId);
58
+ const tier2 = new GitMessagesAdapter(basePath);
59
+ const tier3 = new LocalMessagesAdapter(basePath);
60
+ const [status1, status2, status3] = await Promise.all([
61
+ tier1.getStatus(),
62
+ tier2.getStatus(),
63
+ tier3.getStatus(),
64
+ ]);
65
+ return [status1, status2, status3];
66
+ }
67
+ /**
68
+ * Print tier status to console
69
+ */
70
+ export async function printTierStatus(options = {}) {
71
+ const statuses = await getAllTierStatus(options);
72
+ console.log('\n📡 Message Tier Status\n');
73
+ console.log('┌─────────────────────────────────────────────────────────────┐');
74
+ for (const status of statuses) {
75
+ const icon = status.available ? '✅' : '❌';
76
+ const tierLabel = `Tier ${status.tier}`;
77
+ const nameLabel = status.name.padEnd(25);
78
+ console.log(`│ ${icon} ${tierLabel}: ${nameLabel} │`);
79
+ console.log(`│ ${(status.reason || '').padEnd(53)} │`);
80
+ }
81
+ console.log('└─────────────────────────────────────────────────────────────┘');
82
+ // Show which tier would be selected
83
+ const adapter = await getMessageStorage(options);
84
+ console.log(`\n🎯 Active: Tier ${adapter.getTier()} (${adapter.getTierName()})\n`);
85
+ }
86
+ /**
87
+ * Parse tier option from command line
88
+ */
89
+ export function parseTierOption(tierArg) {
90
+ if (!tierArg)
91
+ return undefined;
92
+ const tier = parseInt(tierArg, 10);
93
+ if (isNaN(tier) || tier < 1 || tier > 3) {
94
+ console.error(`❌ Invalid tier: ${tierArg}. Must be 1, 2, or 3.`);
95
+ process.exit(1);
96
+ }
97
+ return tier;
98
+ }
99
+ //# sourceMappingURL=message-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-factory.js","sourceRoot":"","sources":["../../src/storage/message-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Mycmail Message Storage Adapter (Tier 1)
3
+ *
4
+ * Wraps the existing mycmail CLI for Supabase-backed messaging.
5
+ * This is the highest tier with real-time, full features.
6
+ */
7
+ import type { MessageStorageAdapter, Message, SendMessageInput, InboxOptions, TierStatus } from './message-adapter.js';
8
+ export declare class MycmailAdapter implements MessageStorageAdapter {
9
+ private agentId;
10
+ private mycmailAvailable;
11
+ private supabaseAvailable;
12
+ constructor(agentId?: string);
13
+ getTier(): number;
14
+ getTierName(): string;
15
+ /**
16
+ * Check if mycmail CLI is installed
17
+ */
18
+ private isMycmailInstalled;
19
+ /**
20
+ * Check if Supabase is configured and responding
21
+ */
22
+ private isSupabaseAvailable;
23
+ isAvailable(): Promise<boolean>;
24
+ getStatus(): Promise<TierStatus>;
25
+ /**
26
+ * Format message body with Spidersan context
27
+ */
28
+ private formatMessageBody;
29
+ /**
30
+ * Parse message body to extract Spidersan context
31
+ */
32
+ private parseMessageBody;
33
+ send(input: SendMessageInput): Promise<Message>;
34
+ inbox(agentId: string, options?: InboxOptions): Promise<Message[]>;
35
+ read(messageId: string): Promise<Message | null>;
36
+ markRead(messageId: string): Promise<boolean>;
37
+ }
38
+ //# sourceMappingURL=mycmail-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mycmail-adapter.d.ts","sourceRoot":"","sources":["../../src/storage/mycmail-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACR,qBAAqB,EACrB,OAAO,EACP,gBAAgB,EAChB,YAAY,EACZ,UAAU,EAEb,MAAM,sBAAsB,CAAC;AAa9B,qBAAa,cAAe,YAAW,qBAAqB;IACxD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,gBAAgB,CAAwB;IAChD,OAAO,CAAC,iBAAiB,CAAwB;gBAErC,OAAO,CAAC,EAAE,MAAM;IAK5B,OAAO,IAAI,MAAM;IAIjB,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;YACW,mBAAmB;IA6B3B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAO/B,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;IAqCtC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA0ClB,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IA6C/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAsDtE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IA2ChD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAKtD"}
@@ -0,0 +1,300 @@
1
+ /**
2
+ * Mycmail Message Storage Adapter (Tier 1)
3
+ *
4
+ * Wraps the existing mycmail CLI for Supabase-backed messaging.
5
+ * This is the highest tier with real-time, full features.
6
+ */
7
+ import { execFileSync, spawnSync } from 'child_process';
8
+ import { generateMessageId } from './message-adapter.js';
9
+ // Security: Input validation
10
+ const VALID_AGENT_ID = /^[a-z0-9][a-z0-9_-]{0,30}$/i;
11
+ function validateAgentId(agentId) {
12
+ if (!VALID_AGENT_ID.test(agentId)) {
13
+ throw new Error(`Invalid agent ID: "${agentId.slice(0, 20)}..." (must be alphanumeric with - or _)`);
14
+ }
15
+ return agentId;
16
+ }
17
+ export class MycmailAdapter {
18
+ agentId;
19
+ mycmailAvailable = null;
20
+ supabaseAvailable = null;
21
+ constructor(agentId) {
22
+ const rawAgentId = agentId || process.env.SPIDERSAN_AGENT || 'cli-agent';
23
+ this.agentId = validateAgentId(rawAgentId);
24
+ }
25
+ getTier() {
26
+ return 1;
27
+ }
28
+ getTierName() {
29
+ return 'mycmail-supabase';
30
+ }
31
+ /**
32
+ * Check if mycmail CLI is installed
33
+ */
34
+ isMycmailInstalled() {
35
+ if (this.mycmailAvailable !== null) {
36
+ return this.mycmailAvailable;
37
+ }
38
+ try {
39
+ execFileSync('which', ['mycmail'], { stdio: 'ignore' });
40
+ this.mycmailAvailable = true;
41
+ return true;
42
+ }
43
+ catch {
44
+ this.mycmailAvailable = false;
45
+ return false;
46
+ }
47
+ }
48
+ /**
49
+ * Check if Supabase is configured and responding
50
+ */
51
+ async isSupabaseAvailable() {
52
+ if (this.supabaseAvailable !== null) {
53
+ return this.supabaseAvailable;
54
+ }
55
+ // Check for Supabase environment variables
56
+ if (!process.env.SUPABASE_URL || !process.env.SUPABASE_KEY) {
57
+ this.supabaseAvailable = false;
58
+ return false;
59
+ }
60
+ // Try a simple mycmail command to verify connectivity
61
+ try {
62
+ const safeAgentId = validateAgentId(this.agentId);
63
+ const result = spawnSync('mycmail', ['inbox'], {
64
+ encoding: 'utf-8',
65
+ env: { ...process.env, MYCELIUMAIL_AGENT_ID: safeAgentId },
66
+ timeout: 5000, // 5 second timeout
67
+ });
68
+ // If mycmail works without error, Supabase is available
69
+ this.supabaseAvailable = result.status === 0;
70
+ return this.supabaseAvailable;
71
+ }
72
+ catch {
73
+ this.supabaseAvailable = false;
74
+ return false;
75
+ }
76
+ }
77
+ async isAvailable() {
78
+ if (!this.isMycmailInstalled()) {
79
+ return false;
80
+ }
81
+ return this.isSupabaseAvailable();
82
+ }
83
+ async getStatus() {
84
+ if (!this.isMycmailInstalled()) {
85
+ return {
86
+ tier: 1,
87
+ name: this.getTierName(),
88
+ available: false,
89
+ reason: 'mycmail CLI not installed (npm install -g myceliumail)',
90
+ };
91
+ }
92
+ if (!process.env.SUPABASE_URL || !process.env.SUPABASE_KEY) {
93
+ return {
94
+ tier: 1,
95
+ name: this.getTierName(),
96
+ available: false,
97
+ reason: 'SUPABASE_URL and SUPABASE_KEY not configured',
98
+ };
99
+ }
100
+ const supabaseUp = await this.isSupabaseAvailable();
101
+ if (!supabaseUp) {
102
+ return {
103
+ tier: 1,
104
+ name: this.getTierName(),
105
+ available: false,
106
+ reason: 'Supabase not responding',
107
+ };
108
+ }
109
+ return {
110
+ tier: 1,
111
+ name: this.getTierName(),
112
+ available: true,
113
+ reason: 'Mycmail + Supabase available',
114
+ };
115
+ }
116
+ /**
117
+ * Format message body with Spidersan context
118
+ */
119
+ formatMessageBody(input) {
120
+ let contextHeader = '';
121
+ if (input.type && input.type !== 'info') {
122
+ contextHeader += `Type: ${input.type}\n`;
123
+ }
124
+ if (input.branch) {
125
+ contextHeader += `Branch: ${input.branch}\n`;
126
+ }
127
+ if (input.files && input.files.length > 0) {
128
+ contextHeader += `Files: ${input.files.join(', ')}\n`;
129
+ }
130
+ return contextHeader ? `${contextHeader}\n${input.body}` : input.body;
131
+ }
132
+ /**
133
+ * Parse message body to extract Spidersan context
134
+ */
135
+ parseMessageBody(rawBody) {
136
+ const lines = rawBody.split('\n');
137
+ let body = rawBody;
138
+ let type = 'info';
139
+ let branch;
140
+ let files;
141
+ // Look for context header
142
+ let headerEnd = 0;
143
+ for (let i = 0; i < lines.length; i++) {
144
+ const line = lines[i];
145
+ if (line.startsWith('Type: ')) {
146
+ type = line.substring(6);
147
+ headerEnd = i + 1;
148
+ }
149
+ else if (line.startsWith('Branch: ')) {
150
+ branch = line.substring(8);
151
+ headerEnd = i + 1;
152
+ }
153
+ else if (line.startsWith('Files: ')) {
154
+ files = line.substring(7).split(', ');
155
+ headerEnd = i + 1;
156
+ }
157
+ else if (line === '' && headerEnd > 0) {
158
+ // Empty line after headers - skip it
159
+ headerEnd = i + 1;
160
+ break;
161
+ }
162
+ else if (headerEnd === 0) {
163
+ // No header found
164
+ break;
165
+ }
166
+ }
167
+ if (headerEnd > 0) {
168
+ body = lines.slice(headerEnd).join('\n');
169
+ }
170
+ return { body, type, branch, files };
171
+ }
172
+ async send(input) {
173
+ const safeFrom = validateAgentId(input.from);
174
+ const safeTo = validateAgentId(input.to);
175
+ // Security Pattern: Subject and body are passed via argument arrays in spawnSync,
176
+ // safely preventing shell injection while preserving data integrity
177
+ const safeSubject = input.subject;
178
+ const fullMessage = this.formatMessageBody(input);
179
+ const safeMessage = fullMessage;
180
+ const args = ['send', safeTo, safeSubject, '--message', safeMessage];
181
+ if (input.encrypted) {
182
+ args.push('--encrypt');
183
+ }
184
+ const result = spawnSync('mycmail', args, {
185
+ encoding: 'utf-8',
186
+ env: { ...process.env, MYCELIUMAIL_AGENT_ID: safeFrom },
187
+ });
188
+ if (result.error) {
189
+ throw result.error;
190
+ }
191
+ if (result.status !== 0) {
192
+ throw new Error(`mycmail send failed: ${result.stderr || result.stdout}`);
193
+ }
194
+ // Create synthetic message object since mycmail doesn't return structured data
195
+ const message = {
196
+ id: generateMessageId(),
197
+ from: input.from,
198
+ to: input.to,
199
+ subject: input.subject,
200
+ body: input.body,
201
+ timestamp: new Date(),
202
+ type: input.type || 'info',
203
+ encrypted: input.encrypted || false,
204
+ read: false,
205
+ branch: input.branch,
206
+ files: input.files,
207
+ };
208
+ return message;
209
+ }
210
+ async inbox(agentId, options = {}) {
211
+ const safeAgentId = validateAgentId(agentId);
212
+ const result = spawnSync('mycmail', ['inbox', '--json'], {
213
+ encoding: 'utf-8',
214
+ env: { ...process.env, MYCELIUMAIL_AGENT_ID: safeAgentId },
215
+ });
216
+ if (result.error) {
217
+ throw result.error;
218
+ }
219
+ // Try to parse JSON output
220
+ try {
221
+ const data = JSON.parse(result.stdout);
222
+ // Map mycmail format to our Message format
223
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
224
+ let messages = (data.messages || data || []).map((msg) => {
225
+ const parsed = this.parseMessageBody(msg.body || msg.content || '');
226
+ return {
227
+ id: msg.id || generateMessageId(),
228
+ from: msg.from || msg.sender || 'unknown',
229
+ to: msg.to || msg.recipient || agentId,
230
+ subject: msg.subject || '(no subject)',
231
+ body: parsed.body,
232
+ timestamp: new Date(msg.timestamp || msg.created_at || Date.now()),
233
+ type: parsed.type,
234
+ encrypted: msg.encrypted || false,
235
+ read: msg.read || false,
236
+ branch: parsed.branch,
237
+ files: parsed.files,
238
+ };
239
+ });
240
+ // Sort by timestamp descending
241
+ messages.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
242
+ if (options.unread) {
243
+ messages = messages.filter(msg => !msg.read);
244
+ }
245
+ if (options.limit && options.limit > 0) {
246
+ messages = messages.slice(0, options.limit);
247
+ }
248
+ return messages;
249
+ }
250
+ catch {
251
+ // If JSON parsing fails, return empty array
252
+ // (mycmail might not support --json yet)
253
+ return [];
254
+ }
255
+ }
256
+ async read(messageId) {
257
+ // Validate message ID format
258
+ const VALID_MESSAGE_ID = /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,64}$/;
259
+ if (!VALID_MESSAGE_ID.test(messageId)) {
260
+ throw new Error(`Invalid message ID: "${messageId.slice(0, 20)}..."`);
261
+ }
262
+ const safeAgentId = validateAgentId(this.agentId);
263
+ const result = spawnSync('mycmail', ['read', messageId, '--json'], {
264
+ encoding: 'utf-8',
265
+ env: { ...process.env, MYCELIUMAIL_AGENT_ID: safeAgentId },
266
+ });
267
+ if (result.error) {
268
+ throw result.error;
269
+ }
270
+ if (result.status !== 0) {
271
+ return null;
272
+ }
273
+ try {
274
+ const msg = JSON.parse(result.stdout);
275
+ const parsed = this.parseMessageBody(msg.body || msg.content || '');
276
+ return {
277
+ id: msg.id || messageId,
278
+ from: msg.from || msg.sender || 'unknown',
279
+ to: msg.to || msg.recipient || this.agentId,
280
+ subject: msg.subject || '(no subject)',
281
+ body: parsed.body,
282
+ timestamp: new Date(msg.timestamp || msg.created_at || Date.now()),
283
+ type: parsed.type,
284
+ encrypted: msg.encrypted || false,
285
+ read: true, // Reading marks it as read
286
+ branch: parsed.branch,
287
+ files: parsed.files,
288
+ };
289
+ }
290
+ catch {
291
+ return null;
292
+ }
293
+ }
294
+ async markRead(messageId) {
295
+ // mycmail's read command automatically marks as read
296
+ const message = await this.read(messageId);
297
+ return message !== null;
298
+ }
299
+ }
300
+ //# sourceMappingURL=mycmail-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mycmail-adapter.js","sourceRoot":"","sources":["../../src/storage/mycmail-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { Branch } from './adapter.js';
2
+ import type { SupabaseRegistrySyncClient } from './supabase-registry-sync-client.js';
3
+ import type { CrossMachineConflict, MachineIdentity, MachineRegistryView, RegistryStatus, RegistrySyncResult } from '../types/cloud.js';
4
+ export interface SupabaseRegistrySyncClientConfig {
5
+ url: string;
6
+ key: string;
7
+ projectId?: string;
8
+ fetchFn?: typeof fetch;
9
+ }
10
+ export interface SupabaseBranchRow {
11
+ id: string;
12
+ branch_name: string;
13
+ created_by_session: string | null;
14
+ created_by_agent: string | null;
15
+ parent_branch: string;
16
+ state: string;
17
+ depends_on: string[] | null;
18
+ conflict_with: string[] | null;
19
+ files_changed: string[] | null;
20
+ description: string | null;
21
+ pr_number: number | null;
22
+ created_at: string;
23
+ updated_at: string;
24
+ }
25
+ export declare class SupabaseRegistrySyncClientImpl implements SupabaseRegistrySyncClient {
26
+ private url;
27
+ private key;
28
+ private projectId;
29
+ private fetchFn;
30
+ constructor(config: SupabaseRegistrySyncClientConfig);
31
+ push(machine: MachineIdentity, repoName: string, repoPath: string, branches: Branch[]): Promise<RegistrySyncResult>;
32
+ pull(repoName: string, excludeMachine?: string): Promise<MachineRegistryView[]>;
33
+ getStatus(repoName?: string): Promise<RegistryStatus[]>;
34
+ detectCrossMachineConflicts(repoName: string, excludeMachine?: string): Promise<CrossMachineConflict[]>;
35
+ setDependencies(name: string, dependsOn: string[]): Promise<void>;
36
+ setConflicts(name: string, conflictsWith: string[]): Promise<void>;
37
+ markMerged(name: string, prNumber?: number): Promise<void>;
38
+ getStale(): Promise<Branch[]>;
39
+ getRaw(name: string): Promise<SupabaseBranchRow | null>;
40
+ pushGitHubBranches(rows: unknown[]): Promise<number>;
41
+ init(): Promise<void>;
42
+ isInitialized(): Promise<boolean>;
43
+ private rowToBranch;
44
+ private fetchFromSupabase;
45
+ }
46
+ //# sourceMappingURL=supabase-registry-sync-client-impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase-registry-sync-client-impl.d.ts","sourceRoot":"","sources":["../../src/storage/supabase-registry-sync-client-impl.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AACrF,OAAO,KAAK,EACR,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EACrB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,gCAAgC;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACtB;AAwBD,qBAAa,8BAA+B,YAAW,0BAA0B;IAC7E,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAe;gBAElB,MAAM,EAAE,gCAAgC;IAO9C,IAAI,CACN,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,kBAAkB,CAAC;IA2ExB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IA8C/E,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAmDvD,2BAA2B,CAC7B,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,oBAAoB,EAAE,CAAC;IA8C5B,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1D,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAU7B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAYvD,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBpD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IASvC,OAAO,CAAC,WAAW;YAeL,iBAAiB;CAyDlC"}