spidersan 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/LICENSE +21 -0
  3. package/LICENSE.md +85 -0
  4. package/README.md +217 -0
  5. package/dist/bin/spidersan.d.ts +9 -0
  6. package/dist/bin/spidersan.d.ts.map +1 -0
  7. package/dist/bin/spidersan.js +152 -0
  8. package/dist/bin/spidersan.js.map +1 -0
  9. package/dist/commands/abandon.d.ts +8 -0
  10. package/dist/commands/abandon.d.ts.map +1 -0
  11. package/dist/commands/abandon.js +49 -0
  12. package/dist/commands/abandon.js.map +1 -0
  13. package/dist/commands/activate.d.ts +9 -0
  14. package/dist/commands/activate.d.ts.map +1 -0
  15. package/dist/commands/activate.js +45 -0
  16. package/dist/commands/activate.js.map +1 -0
  17. package/dist/commands/active-windows.d.ts +16 -0
  18. package/dist/commands/active-windows.d.ts.map +1 -0
  19. package/dist/commands/active-windows.js +373 -0
  20. package/dist/commands/active-windows.js.map +1 -0
  21. package/dist/commands/audit-mark.d.ts +12 -0
  22. package/dist/commands/audit-mark.d.ts.map +1 -0
  23. package/dist/commands/audit-mark.js +204 -0
  24. package/dist/commands/audit-mark.js.map +1 -0
  25. package/dist/commands/cleanup.d.ts +8 -0
  26. package/dist/commands/cleanup.d.ts.map +1 -0
  27. package/dist/commands/cleanup.js +41 -0
  28. package/dist/commands/cleanup.js.map +1 -0
  29. package/dist/commands/close.d.ts +9 -0
  30. package/dist/commands/close.d.ts.map +1 -0
  31. package/dist/commands/close.js +129 -0
  32. package/dist/commands/close.js.map +1 -0
  33. package/dist/commands/collab-sync.d.ts +14 -0
  34. package/dist/commands/collab-sync.d.ts.map +1 -0
  35. package/dist/commands/collab-sync.js +240 -0
  36. package/dist/commands/collab-sync.js.map +1 -0
  37. package/dist/commands/collab.d.ts +6 -0
  38. package/dist/commands/collab.d.ts.map +1 -0
  39. package/dist/commands/collab.js +103 -0
  40. package/dist/commands/collab.js.map +1 -0
  41. package/dist/commands/completions.d.ts +8 -0
  42. package/dist/commands/completions.d.ts.map +1 -0
  43. package/dist/commands/completions.js +83 -0
  44. package/dist/commands/completions.js.map +1 -0
  45. package/dist/commands/conflicts.d.ts +12 -0
  46. package/dist/commands/conflicts.d.ts.map +1 -0
  47. package/dist/commands/conflicts.js +426 -0
  48. package/dist/commands/conflicts.js.map +1 -0
  49. package/dist/commands/demo.d.ts +3 -0
  50. package/dist/commands/demo.d.ts.map +1 -0
  51. package/dist/commands/demo.js +113 -0
  52. package/dist/commands/demo.js.map +1 -0
  53. package/dist/commands/depends.d.ts +8 -0
  54. package/dist/commands/depends.d.ts.map +1 -0
  55. package/dist/commands/depends.js +44 -0
  56. package/dist/commands/depends.js.map +1 -0
  57. package/dist/commands/doctor.d.ts +8 -0
  58. package/dist/commands/doctor.d.ts.map +1 -0
  59. package/dist/commands/doctor.js +249 -0
  60. package/dist/commands/doctor.js.map +1 -0
  61. package/dist/commands/inbox.d.ts +3 -0
  62. package/dist/commands/inbox.d.ts.map +1 -0
  63. package/dist/commands/inbox.js +66 -0
  64. package/dist/commands/inbox.js.map +1 -0
  65. package/dist/commands/index.d.ts +43 -0
  66. package/dist/commands/index.d.ts.map +1 -0
  67. package/dist/commands/index.js +61 -0
  68. package/dist/commands/index.js.map +1 -0
  69. package/dist/commands/init.d.ts +8 -0
  70. package/dist/commands/init.d.ts.map +1 -0
  71. package/dist/commands/init.js +23 -0
  72. package/dist/commands/init.js.map +1 -0
  73. package/dist/commands/intent-scan.d.ts +17 -0
  74. package/dist/commands/intent-scan.d.ts.map +1 -0
  75. package/dist/commands/intent-scan.js +336 -0
  76. package/dist/commands/intent-scan.js.map +1 -0
  77. package/dist/commands/key-import.d.ts +3 -0
  78. package/dist/commands/key-import.d.ts.map +1 -0
  79. package/dist/commands/key-import.js +54 -0
  80. package/dist/commands/key-import.js.map +1 -0
  81. package/dist/commands/keygen.d.ts +3 -0
  82. package/dist/commands/keygen.d.ts.map +1 -0
  83. package/dist/commands/keygen.js +53 -0
  84. package/dist/commands/keygen.js.map +1 -0
  85. package/dist/commands/keys.d.ts +3 -0
  86. package/dist/commands/keys.d.ts.map +1 -0
  87. package/dist/commands/keys.js +56 -0
  88. package/dist/commands/keys.js.map +1 -0
  89. package/dist/commands/list.d.ts +3 -0
  90. package/dist/commands/list.d.ts.map +1 -0
  91. package/dist/commands/list.js +45 -0
  92. package/dist/commands/list.js.map +1 -0
  93. package/dist/commands/lock.d.ts +11 -0
  94. package/dist/commands/lock.d.ts.map +1 -0
  95. package/dist/commands/lock.js +220 -0
  96. package/dist/commands/lock.js.map +1 -0
  97. package/dist/commands/log.d.ts +8 -0
  98. package/dist/commands/log.d.ts.map +1 -0
  99. package/dist/commands/log.js +95 -0
  100. package/dist/commands/log.js.map +1 -0
  101. package/dist/commands/mcp-health.d.ts +3 -0
  102. package/dist/commands/mcp-health.d.ts.map +1 -0
  103. package/dist/commands/mcp-health.js +305 -0
  104. package/dist/commands/mcp-health.js.map +1 -0
  105. package/dist/commands/mcp-restart.d.ts +3 -0
  106. package/dist/commands/mcp-restart.d.ts.map +1 -0
  107. package/dist/commands/mcp-restart.js +176 -0
  108. package/dist/commands/mcp-restart.js.map +1 -0
  109. package/dist/commands/merge-order.d.ts +9 -0
  110. package/dist/commands/merge-order.d.ts.map +1 -0
  111. package/dist/commands/merge-order.js +138 -0
  112. package/dist/commands/merge-order.js.map +1 -0
  113. package/dist/commands/merged.d.ts +8 -0
  114. package/dist/commands/merged.d.ts.map +1 -0
  115. package/dist/commands/merged.js +39 -0
  116. package/dist/commands/merged.js.map +1 -0
  117. package/dist/commands/msg-read.d.ts +3 -0
  118. package/dist/commands/msg-read.d.ts.map +1 -0
  119. package/dist/commands/msg-read.js +70 -0
  120. package/dist/commands/msg-read.js.map +1 -0
  121. package/dist/commands/pulse.d.ts +9 -0
  122. package/dist/commands/pulse.d.ts.map +1 -0
  123. package/dist/commands/pulse.js +232 -0
  124. package/dist/commands/pulse.js.map +1 -0
  125. package/dist/commands/radar.d.ts +3 -0
  126. package/dist/commands/radar.d.ts.map +1 -0
  127. package/dist/commands/radar.js +147 -0
  128. package/dist/commands/radar.js.map +1 -0
  129. package/dist/commands/ready-check.d.ts +9 -0
  130. package/dist/commands/ready-check.d.ts.map +1 -0
  131. package/dist/commands/ready-check.js +156 -0
  132. package/dist/commands/ready-check.js.map +1 -0
  133. package/dist/commands/register.d.ts +3 -0
  134. package/dist/commands/register.d.ts.map +1 -0
  135. package/dist/commands/register.js +124 -0
  136. package/dist/commands/register.js.map +1 -0
  137. package/dist/commands/send.d.ts +3 -0
  138. package/dist/commands/send.d.ts.map +1 -0
  139. package/dist/commands/send.js +134 -0
  140. package/dist/commands/send.js.map +1 -0
  141. package/dist/commands/stale.d.ts +8 -0
  142. package/dist/commands/stale.d.ts.map +1 -0
  143. package/dist/commands/stale.js +38 -0
  144. package/dist/commands/stale.js.map +1 -0
  145. package/dist/commands/status.d.ts +9 -0
  146. package/dist/commands/status.d.ts.map +1 -0
  147. package/dist/commands/status.js +41 -0
  148. package/dist/commands/status.js.map +1 -0
  149. package/dist/commands/sync-all.d.ts +9 -0
  150. package/dist/commands/sync-all.d.ts.map +1 -0
  151. package/dist/commands/sync-all.js +180 -0
  152. package/dist/commands/sync-all.js.map +1 -0
  153. package/dist/commands/sync.d.ts +8 -0
  154. package/dist/commands/sync.d.ts.map +1 -0
  155. package/dist/commands/sync.js +49 -0
  156. package/dist/commands/sync.js.map +1 -0
  157. package/dist/commands/tension.d.ts +12 -0
  158. package/dist/commands/tension.d.ts.map +1 -0
  159. package/dist/commands/tension.js +242 -0
  160. package/dist/commands/tension.js.map +1 -0
  161. package/dist/commands/torrent.d.ts +9 -0
  162. package/dist/commands/torrent.d.ts.map +1 -0
  163. package/dist/commands/torrent.js +431 -0
  164. package/dist/commands/torrent.js.map +1 -0
  165. package/dist/commands/tui.d.ts +8 -0
  166. package/dist/commands/tui.d.ts.map +1 -0
  167. package/dist/commands/tui.js +15 -0
  168. package/dist/commands/tui.js.map +1 -0
  169. package/dist/commands/wake.d.ts +9 -0
  170. package/dist/commands/wake.d.ts.map +1 -0
  171. package/dist/commands/wake.js +188 -0
  172. package/dist/commands/wake.js.map +1 -0
  173. package/dist/commands/watch.d.ts +3 -0
  174. package/dist/commands/watch.d.ts.map +1 -0
  175. package/dist/commands/watch.js +245 -0
  176. package/dist/commands/watch.js.map +1 -0
  177. package/dist/commands/who-touched.d.ts +9 -0
  178. package/dist/commands/who-touched.d.ts.map +1 -0
  179. package/dist/commands/who-touched.js +186 -0
  180. package/dist/commands/who-touched.js.map +1 -0
  181. package/dist/index.d.ts +6 -0
  182. package/dist/index.d.ts.map +1 -0
  183. package/dist/index.js +6 -0
  184. package/dist/index.js.map +1 -0
  185. package/dist/lib/agent-errors.d.ts +41 -0
  186. package/dist/lib/agent-errors.d.ts.map +1 -0
  187. package/dist/lib/agent-errors.js +143 -0
  188. package/dist/lib/agent-errors.js.map +1 -0
  189. package/dist/lib/ast.d.ts +56 -0
  190. package/dist/lib/ast.d.ts.map +1 -0
  191. package/dist/lib/ast.js +134 -0
  192. package/dist/lib/ast.js.map +1 -0
  193. package/dist/lib/config.d.ts +33 -0
  194. package/dist/lib/config.d.ts.map +1 -0
  195. package/dist/lib/config.js +127 -0
  196. package/dist/lib/config.js.map +1 -0
  197. package/dist/lib/crdt.d.ts +83 -0
  198. package/dist/lib/crdt.d.ts.map +1 -0
  199. package/dist/lib/crdt.js +160 -0
  200. package/dist/lib/crdt.js.map +1 -0
  201. package/dist/lib/crypto.d.ts +71 -0
  202. package/dist/lib/crypto.d.ts.map +1 -0
  203. package/dist/lib/crypto.js +172 -0
  204. package/dist/lib/crypto.js.map +1 -0
  205. package/dist/lib/errors.d.ts +35 -0
  206. package/dist/lib/errors.d.ts.map +1 -0
  207. package/dist/lib/errors.js +71 -0
  208. package/dist/lib/errors.js.map +1 -0
  209. package/dist/lib/license.d.ts +61 -0
  210. package/dist/lib/license.d.ts.map +1 -0
  211. package/dist/lib/license.js +171 -0
  212. package/dist/lib/license.js.map +1 -0
  213. package/dist/lib/security.d.ts +53 -0
  214. package/dist/lib/security.d.ts.map +1 -0
  215. package/dist/lib/security.js +122 -0
  216. package/dist/lib/security.js.map +1 -0
  217. package/dist/lib/update-check.d.ts +11 -0
  218. package/dist/lib/update-check.d.ts.map +1 -0
  219. package/dist/lib/update-check.js +113 -0
  220. package/dist/lib/update-check.js.map +1 -0
  221. package/dist/storage/adapter.d.ts +58 -0
  222. package/dist/storage/adapter.d.ts.map +1 -0
  223. package/dist/storage/adapter.js +8 -0
  224. package/dist/storage/adapter.js.map +1 -0
  225. package/dist/storage/factory.d.ts +6 -0
  226. package/dist/storage/factory.d.ts.map +1 -0
  227. package/dist/storage/factory.js +22 -0
  228. package/dist/storage/factory.js.map +1 -0
  229. package/dist/storage/index.d.ts +5 -0
  230. package/dist/storage/index.d.ts.map +1 -0
  231. package/dist/storage/index.js +5 -0
  232. package/dist/storage/index.js.map +1 -0
  233. package/dist/storage/local.d.ts +24 -0
  234. package/dist/storage/local.d.ts.map +1 -0
  235. package/dist/storage/local.js +101 -0
  236. package/dist/storage/local.js.map +1 -0
  237. package/dist/storage/supabase.d.ts +52 -0
  238. package/dist/storage/supabase.d.ts.map +1 -0
  239. package/dist/storage/supabase.js +221 -0
  240. package/dist/storage/supabase.js.map +1 -0
  241. package/dist/tui/screen.d.ts +14 -0
  242. package/dist/tui/screen.d.ts.map +1 -0
  243. package/dist/tui/screen.js +136 -0
  244. package/dist/tui/screen.js.map +1 -0
  245. package/package.json +89 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-health.js","sourceRoot":"","sources":["../../src/commands/mcp-health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const mcpRestartCommand: Command;
3
+ //# sourceMappingURL=mcp-restart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-restart.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-restart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqIpC,eAAO,MAAM,iBAAiB,SAoExB,CAAC"}
@@ -0,0 +1,176 @@
1
+ import { Command } from 'commander';
2
+ import { execSync } from 'child_process';
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ import * as os from 'os';
6
+ // Config
7
+ const MCP_CONFIG_PATH = path.join(os.homedir(), '.gemini', 'antigravity', 'mcp_config.json');
8
+ /**
9
+ * Read MCP config from Antigravity config file
10
+ */
11
+ function readMcpConfig() {
12
+ try {
13
+ if (!fs.existsSync(MCP_CONFIG_PATH)) {
14
+ console.log(`⚠️ MCP config not found: ${MCP_CONFIG_PATH}`);
15
+ return null;
16
+ }
17
+ const content = fs.readFileSync(MCP_CONFIG_PATH, 'utf-8');
18
+ return JSON.parse(content);
19
+ }
20
+ catch (err) {
21
+ console.log(`❌ Failed to read MCP config: ${err}`);
22
+ return null;
23
+ }
24
+ }
25
+ /**
26
+ * Validate MCP config JSON syntax and file paths
27
+ */
28
+ function validateConfig(config) {
29
+ const errors = [];
30
+ for (const [name, serverConfig] of Object.entries(config.mcpServers)) {
31
+ // Check if command exists (for node, check the script path)
32
+ if (serverConfig.command === 'node' && serverConfig.args.length > 0) {
33
+ const scriptPath = serverConfig.args[0];
34
+ if (!fs.existsSync(scriptPath)) {
35
+ errors.push(`${name}: Script not found: ${scriptPath}`);
36
+ }
37
+ }
38
+ }
39
+ return { valid: errors.length === 0, errors };
40
+ }
41
+ /**
42
+ * Kill all MCP processes (excluding self)
43
+ */
44
+ function killMcpProcesses(dryRun = false) {
45
+ let killed = 0;
46
+ const currentPid = process.pid;
47
+ const parentPid = process.ppid;
48
+ try {
49
+ // Find all MCP-related processes
50
+ const output = execSync('ps aux | grep -E "mcp|MCP" | grep node | grep -v grep', {
51
+ encoding: 'utf-8',
52
+ stdio: ['pipe', 'pipe', 'pipe']
53
+ }).trim();
54
+ if (!output) {
55
+ console.log('📭 No MCP processes found');
56
+ return 0;
57
+ }
58
+ const lines = output.split('\n');
59
+ for (const line of lines) {
60
+ const parts = line.split(/\s+/);
61
+ if (parts.length < 2)
62
+ continue;
63
+ const pid = parseInt(parts[1], 10);
64
+ const command = parts.slice(10).join(' ').substring(0, 60);
65
+ // Skip self and parent to avoid killing the executing process
66
+ if (pid === currentPid || pid === parentPid) {
67
+ if (dryRun) {
68
+ console.log(` Skipping PID ${pid} (self/parent): ${command}...`);
69
+ }
70
+ continue;
71
+ }
72
+ if (dryRun) {
73
+ console.log(` Would kill PID ${pid}: ${command}...`);
74
+ }
75
+ else {
76
+ try {
77
+ execSync(`kill ${pid}`, { stdio: 'ignore' });
78
+ console.log(` Killed PID ${pid}: ${command}...`);
79
+ killed++;
80
+ }
81
+ catch {
82
+ // Process might already be dead
83
+ }
84
+ }
85
+ }
86
+ }
87
+ catch {
88
+ // No processes found - that's okay
89
+ }
90
+ return killed;
91
+ }
92
+ /**
93
+ * Restart Antigravity using osascript (macOS only)
94
+ */
95
+ function restartAntigravity() {
96
+ try {
97
+ console.log('🔄 Restarting Antigravity...');
98
+ execSync('osascript -e \'quit app "Antigravity"\'', { stdio: 'ignore' });
99
+ // Wait a moment for clean shutdown
100
+ execSync('sleep 2');
101
+ // Relaunch
102
+ execSync('open -a Antigravity', { stdio: 'ignore' });
103
+ console.log('✅ Antigravity restarted');
104
+ return true;
105
+ }
106
+ catch (err) {
107
+ console.log(`❌ Failed to restart Antigravity: ${err}`);
108
+ return false;
109
+ }
110
+ }
111
+ export const mcpRestartCommand = new Command('mcp-restart')
112
+ .description('🔄 Kill MCP processes and restart Antigravity to reload connections')
113
+ .option('--validate', 'Validate mcp_config.json before restart')
114
+ .option('--dry-run', 'Show what would be killed without actually killing')
115
+ .option('--force', 'Force restart Antigravity using osascript (macOS only)')
116
+ .option('--kill-only', 'Only kill MCPs, don\'t restart Antigravity')
117
+ .action(async (options) => {
118
+ console.log(`
119
+ 🔄 MCP Restart
120
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
121
+ `);
122
+ // Step 1: Read and optionally validate config
123
+ const config = readMcpConfig();
124
+ if (!config) {
125
+ console.log('❌ Cannot proceed without valid config');
126
+ process.exit(1);
127
+ }
128
+ console.log(`📋 Found ${Object.keys(config.mcpServers).length} MCP servers in config`);
129
+ if (options.validate) {
130
+ console.log('\n🔍 Validating config...');
131
+ const { valid, errors } = validateConfig(config);
132
+ if (!valid) {
133
+ console.log('❌ Validation failed:');
134
+ for (const error of errors) {
135
+ console.log(` ${error}`);
136
+ }
137
+ if (!options.dryRun) {
138
+ console.log('\n⚠️ Fix these issues before restarting');
139
+ process.exit(1);
140
+ }
141
+ }
142
+ else {
143
+ console.log('✅ Config valid');
144
+ }
145
+ }
146
+ // Step 2: Kill MCP processes
147
+ console.log(`\n${options.dryRun ? '🔍 Dry run - ' : ''}Killing MCP processes...`);
148
+ const killed = killMcpProcesses(options.dryRun);
149
+ if (!options.dryRun) {
150
+ console.log(`\n🧹 Killed ${killed} MCP process(es)`);
151
+ }
152
+ // Step 3: Restart or instruct
153
+ if (options.killOnly) {
154
+ console.log('\n✅ MCPs killed. Run `spidersan mcp-health --auto-restart` to restart them.');
155
+ }
156
+ else if (options.force) {
157
+ console.log('');
158
+ restartAntigravity();
159
+ }
160
+ else {
161
+ console.log(`
162
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
163
+
164
+ 🕷️ MCPs killed. To reconnect:
165
+
166
+ Option 1: Restart Antigravity manually
167
+
168
+ Option 2: Run with --force to auto-restart:
169
+ $ spidersan mcp-restart --force
170
+
171
+ Option 3: Just restart MCPs without Antigravity:
172
+ $ spidersan mcp-health --auto-restart
173
+ `);
174
+ }
175
+ });
176
+ //# sourceMappingURL=mcp-restart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-restart.js","sourceRoot":"","sources":["../../src/commands/mcp-restart.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * spidersan merge-order
3
+ *
4
+ * Get optimal merge order based on dependencies and conflicts.
5
+ * Supports --blocking-count to prioritize tasks that block others (rarest-first).
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare const mergeOrderCommand: Command;
9
+ //# sourceMappingURL=merge-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-order.d.ts","sourceRoot":"","sources":["../../src/commands/merge-order.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,iBAAiB,SAmFxB,CAAC"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * spidersan merge-order
3
+ *
4
+ * Get optimal merge order based on dependencies and conflicts.
5
+ * Supports --blocking-count to prioritize tasks that block others (rarest-first).
6
+ */
7
+ import { Command } from 'commander';
8
+ import { getStorage } from '../storage/index.js';
9
+ export const mergeOrderCommand = new Command('merge-order')
10
+ .description('Get optimal merge order for all branches')
11
+ .option('--json', 'Output as JSON')
12
+ .option('--blocking-count', 'Show how many branches each task blocks (rarest-first priority)')
13
+ .action(async (options) => {
14
+ const storage = await getStorage();
15
+ if (!await storage.isInitialized()) {
16
+ console.error('❌ Spidersan not initialized. Run: spidersan init');
17
+ process.exit(1);
18
+ }
19
+ const branches = await storage.list();
20
+ if (branches.length === 0) {
21
+ console.log('🕷️ No branches registered.');
22
+ return;
23
+ }
24
+ // Build conflict graph
25
+ const conflictGraph = buildConflictGraph(branches);
26
+ // Calculate blocking counts (how many branches are blocked by each branch)
27
+ const blockingCounts = options.blockingCount
28
+ ? calculateBlockingCounts(branches, conflictGraph)
29
+ : new Map();
30
+ // Topological sort with conflict awareness (optionally prioritize by blocking count)
31
+ const order = topologicalSort(branches, conflictGraph, blockingCounts, options.blockingCount);
32
+ if (options.json) {
33
+ const result = order.map(b => ({
34
+ name: b.name,
35
+ blocksCount: blockingCounts.get(b.name) || 0,
36
+ conflicts: conflictGraph.get(b.name) || []
37
+ }));
38
+ console.log(JSON.stringify({ order: result }, null, 2));
39
+ return;
40
+ }
41
+ if (options.blockingCount) {
42
+ console.log('🕷️ Merge Order (Rarest-First Priority)\n');
43
+ console.log('━'.repeat(40) + '\n');
44
+ }
45
+ else {
46
+ console.log('🕷️ Recommended Merge Order:\n');
47
+ }
48
+ order.forEach((branch, i) => {
49
+ const conflicts = conflictGraph.get(branch.name) || [];
50
+ const blocksCount = blockingCounts.get(branch.name) || 0;
51
+ // Status indicator
52
+ let status = '✅';
53
+ let priorityTag = '';
54
+ if (options.blockingCount && blocksCount > 0) {
55
+ status = blocksCount >= 3 ? '🔴' : blocksCount >= 1 ? '🟠' : '✅';
56
+ priorityTag = blocksCount >= 3
57
+ ? ' ⚡ CRITICAL'
58
+ : blocksCount >= 1
59
+ ? ` (blocks ${blocksCount})`
60
+ : '';
61
+ }
62
+ else if (conflicts.length > 0) {
63
+ status = '⚠️';
64
+ }
65
+ console.log(` ${i + 1}. ${status} ${branch.name}${priorityTag}`);
66
+ if (conflicts.length > 0 && !options.blockingCount) {
67
+ console.log(` └─ After merging, rebase: ${conflicts.join(', ')}`);
68
+ }
69
+ else if (options.blockingCount && blocksCount > 0) {
70
+ // Show which branches this one blocks
71
+ const blockedBranches = getBlockedBranches(branch.name, branches, conflictGraph);
72
+ if (blockedBranches.length > 0) {
73
+ console.log(` └─ Blocks: ${blockedBranches.join(', ')}`);
74
+ }
75
+ }
76
+ });
77
+ if (options.blockingCount) {
78
+ console.log('\n' + '━'.repeat(40));
79
+ console.log('💡 Merge high-priority (🔴) branches first to unblock others.');
80
+ }
81
+ });
82
+ function buildConflictGraph(branches) {
83
+ const graph = new Map();
84
+ for (const branch of branches) {
85
+ const conflicts = [];
86
+ for (const other of branches) {
87
+ if (branch.name === other.name)
88
+ continue;
89
+ const overlap = branch.files.some(f => other.files.includes(f));
90
+ if (overlap) {
91
+ conflicts.push(other.name);
92
+ }
93
+ }
94
+ graph.set(branch.name, conflicts);
95
+ }
96
+ return graph;
97
+ }
98
+ function topologicalSort(branches, conflicts, blockingCounts, useBlockingOrder) {
99
+ return [...branches].sort((a, b) => {
100
+ // If using blocking-count mode, sort by most blocking first (rarest-first)
101
+ if (useBlockingOrder) {
102
+ const blocksA = blockingCounts.get(a.name) || 0;
103
+ const blocksB = blockingCounts.get(b.name) || 0;
104
+ if (blocksA !== blocksB) {
105
+ return blocksB - blocksA; // Most blocking first
106
+ }
107
+ }
108
+ // Default: fewest conflicts first
109
+ const conflictsA = conflicts.get(a.name)?.length || 0;
110
+ const conflictsB = conflicts.get(b.name)?.length || 0;
111
+ if (conflictsA !== conflictsB) {
112
+ return conflictsA - conflictsB;
113
+ }
114
+ // Oldest first (FIFO)
115
+ return new Date(a.registeredAt).getTime() - new Date(b.registeredAt).getTime();
116
+ });
117
+ }
118
+ /**
119
+ * Calculate how many branches each branch blocks.
120
+ * A branch "blocks" another if they share files (conflict).
121
+ */
122
+ function calculateBlockingCounts(branches, conflictGraph) {
123
+ const counts = new Map();
124
+ for (const branch of branches) {
125
+ // Count how many branches conflict with this one (= are blocked by it)
126
+ const conflictingBranches = conflictGraph.get(branch.name) || [];
127
+ counts.set(branch.name, conflictingBranches.length);
128
+ }
129
+ return counts;
130
+ }
131
+ /**
132
+ * Get list of branch names that are blocked by a given branch.
133
+ */
134
+ function getBlockedBranches(branchName, branches, conflictGraph) {
135
+ // Return the branches that this branch conflicts with
136
+ return conflictGraph.get(branchName) || [];
137
+ }
138
+ //# sourceMappingURL=merge-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-order.js","sourceRoot":"","sources":["../../src/commands/merge-order.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * spidersan merged
3
+ *
4
+ * Mark a branch as merged.
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare const mergedCommand: Command;
8
+ //# sourceMappingURL=merged.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merged.d.ts","sourceRoot":"","sources":["../../src/commands/merged.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,aAAa,SA0BpB,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * spidersan merged
3
+ *
4
+ * Mark a branch as merged.
5
+ */
6
+ import { Command } from 'commander';
7
+ import { execSync } from 'child_process';
8
+ import { getStorage } from '../storage/index.js';
9
+ function getCurrentBranch() {
10
+ try {
11
+ return execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf-8' }).trim();
12
+ }
13
+ catch {
14
+ throw new Error('Not in a git repository');
15
+ }
16
+ }
17
+ export const mergedCommand = new Command('merged')
18
+ .description('Mark a branch as merged')
19
+ .argument('[branch]', 'Branch that was merged (default: current)')
20
+ .option('--pr <number>', 'PR number for tracking')
21
+ .action(async (branchArg, options) => {
22
+ const storage = await getStorage();
23
+ if (!await storage.isInitialized()) {
24
+ console.error('❌ Spidersan not initialized. Run: spidersan init');
25
+ process.exit(1);
26
+ }
27
+ const branchName = branchArg || getCurrentBranch();
28
+ const branch = await storage.get(branchName);
29
+ if (!branch) {
30
+ console.error(`❌ Branch "${branchName}" not found in registry.`);
31
+ process.exit(1);
32
+ }
33
+ await storage.update(branchName, { status: 'completed' });
34
+ console.log(`🕷️ Marked as merged: ${branchName}`);
35
+ if (options.pr) {
36
+ console.log(` PR: #${options.pr}`);
37
+ }
38
+ });
39
+ //# sourceMappingURL=merged.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merged.js","sourceRoot":"","sources":["../../src/commands/merged.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,SAAS,gBAAgB;IACrB,IAAI,CAAC;QACD,OAAO,QAAQ,CAAC,iCAAiC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrF,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC7C,WAAW,CAAC,yBAAyB,CAAC;KACtC,QAAQ,CAAC,UAAU,EAAE,2CAA2C,CAAC;KACjE,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,SAA6B,EAAE,OAAO,EAAE,EAAE;IACrD,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IAEnC,IAAI,CAAC,MAAM,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,IAAI,gBAAgB,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,aAAa,UAAU,0BAA0B,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAE1D,OAAO,CAAC,GAAG,CAAC,yBAAyB,UAAU,EAAE,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const msgReadCommand: Command;
3
+ //# sourceMappingURL=msg-read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msg-read.d.ts","sourceRoot":"","sources":["../../src/commands/msg-read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,eAAO,MAAM,cAAc,SAqDrB,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { Command } from 'commander';
2
+ import { execSync, spawnSync } from 'child_process';
3
+ // Security: Input validation
4
+ const VALID_AGENT_ID = /^[a-z0-9][a-z0-9_-]{0,30}$/i;
5
+ const VALID_MESSAGE_ID = /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,64}$/;
6
+ function validateAgentId(agentId) {
7
+ if (!VALID_AGENT_ID.test(agentId)) {
8
+ throw new Error(`Invalid agent ID: "${agentId.slice(0, 20)}..."`);
9
+ }
10
+ return agentId;
11
+ }
12
+ function validateMessageId(id) {
13
+ if (!VALID_MESSAGE_ID.test(id)) {
14
+ throw new Error(`Invalid message ID: "${id.slice(0, 20)}..."`);
15
+ }
16
+ return id;
17
+ }
18
+ export const msgReadCommand = new Command('read')
19
+ .description('Read a specific message (via Myceliumail)')
20
+ .argument('<id>', 'Message ID (full or partial)')
21
+ .option('--no-mark-read', 'Don\'t mark the message as read (handled by mycmail)')
22
+ .option('--json', 'Output as JSON')
23
+ .action(async (id, options) => {
24
+ const rawAgentId = process.env.SPIDERSAN_AGENT || 'cli-agent';
25
+ // Security: Validate inputs
26
+ let agentId;
27
+ let messageId;
28
+ try {
29
+ agentId = validateAgentId(rawAgentId);
30
+ messageId = validateMessageId(id);
31
+ }
32
+ catch (error) {
33
+ console.error(`❌ ${error.message}`);
34
+ process.exit(1);
35
+ }
36
+ try {
37
+ execSync('which mycmail', { stdio: 'ignore' });
38
+ }
39
+ catch {
40
+ console.error('❌ Myceliumail (mycmail) not found.');
41
+ console.error(' Please install it: npm install -g myceliumail');
42
+ process.exit(1);
43
+ }
44
+ // Security: Use spawnSync with argument array instead of string interpolation
45
+ try {
46
+ const result = spawnSync('mycmail', ['read', messageId], {
47
+ encoding: 'utf-8',
48
+ env: { ...process.env, MYCELIUMAIL_AGENT_ID: agentId }
49
+ });
50
+ if (result.error) {
51
+ throw result.error;
52
+ }
53
+ const output = result.stdout || '';
54
+ if (options.json) {
55
+ console.log(JSON.stringify({
56
+ id: messageId,
57
+ output: output.trim()
58
+ }, null, 2));
59
+ }
60
+ else {
61
+ console.log(output);
62
+ }
63
+ }
64
+ catch (error) {
65
+ console.error('❌ Failed to read message via Myceliumail');
66
+ console.error(error.message || error);
67
+ process.exit(1);
68
+ }
69
+ });
70
+ //# sourceMappingURL=msg-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msg-read.js","sourceRoot":"","sources":["../../src/commands/msg-read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * spidersan pulse
3
+ *
4
+ * The spider's self-awareness command.
5
+ * "I have my senses and my sense of having senses" - Robert Wyatt
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare const pulseCommand: Command;
9
+ //# sourceMappingURL=pulse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pulse.d.ts","sourceRoot":"","sources":["../../src/commands/pulse.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0FpC,eAAO,MAAM,YAAY,SAoLnB,CAAC"}