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,124 @@
1
+ import { Command } from 'commander';
2
+ import { execSync } from 'child_process';
3
+ import { getStorage } from '../storage/index.js';
4
+ import { checkBranchLimit } from '../lib/license.js';
5
+ import * as readline from 'readline';
6
+ function getCurrentBranch() {
7
+ try {
8
+ return execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf-8' }).trim();
9
+ }
10
+ catch {
11
+ throw new Error('Not in a git repository');
12
+ }
13
+ }
14
+ function getChangedFiles() {
15
+ try {
16
+ // Get files changed from main or last commit
17
+ const output = execSync('git diff --name-only main...HEAD 2>/dev/null || git diff --name-only HEAD~1 2>/dev/null || git diff --name-only HEAD', { encoding: 'utf-8' });
18
+ return output.trim().split('\n').filter(Boolean);
19
+ }
20
+ catch {
21
+ return [];
22
+ }
23
+ }
24
+ async function promptForFiles(detectedFiles) {
25
+ const rl = readline.createInterface({
26
+ input: process.stdin,
27
+ output: process.stdout
28
+ });
29
+ return new Promise((resolve) => {
30
+ if (detectedFiles.length > 0) {
31
+ console.log('\nšŸ•·ļø Detected changed files:');
32
+ detectedFiles.forEach((f, i) => console.log(` ${i + 1}. ${f}`));
33
+ console.log('');
34
+ rl.question('Use these files? [Y/n/edit]: ', (answer) => {
35
+ rl.close();
36
+ const a = answer.toLowerCase().trim();
37
+ if (a === '' || a === 'y' || a === 'yes') {
38
+ resolve(detectedFiles);
39
+ }
40
+ else if (a === 'n' || a === 'no') {
41
+ resolve([]);
42
+ }
43
+ else {
44
+ // Let them enter custom files
45
+ console.log(' Enter comma-separated files, or leave empty:');
46
+ const rl2 = readline.createInterface({
47
+ input: process.stdin,
48
+ output: process.stdout
49
+ });
50
+ rl2.question(' Files: ', (files) => {
51
+ rl2.close();
52
+ resolve(files ? files.split(',').map(f => f.trim()) : []);
53
+ });
54
+ }
55
+ });
56
+ }
57
+ else {
58
+ rl.question('Enter files (comma-separated) or leave empty: ', (files) => {
59
+ rl.close();
60
+ resolve(files ? files.split(',').map(f => f.trim()) : []);
61
+ });
62
+ }
63
+ });
64
+ }
65
+ export const registerCommand = new Command('register')
66
+ .description('Register the current branch with files being modified')
67
+ .option('-f, --files <files>', 'Comma-separated list of files being modified')
68
+ .option('-d, --description <desc>', 'Description of what this branch does')
69
+ .option('-a, --agent <agent>', 'Agent identifier (e.g., claude-code, cursor)')
70
+ .option('-i, --interactive', 'Interactive mode (prompt for files)')
71
+ .option('--auto', 'Auto-detect files from git diff')
72
+ .action(async (options) => {
73
+ const storage = await getStorage();
74
+ if (!await storage.isInitialized()) {
75
+ console.error('āŒ Spidersan not initialized. Run: spidersan init');
76
+ process.exit(1);
77
+ }
78
+ const branchName = getCurrentBranch();
79
+ let files = [];
80
+ if (options.files) {
81
+ files = options.files.split(',').map((f) => f.trim());
82
+ }
83
+ else if (options.auto) {
84
+ files = getChangedFiles();
85
+ if (files.length > 0) {
86
+ console.log(`šŸ•·ļø Auto-detected ${files.length} changed file(s)`);
87
+ }
88
+ }
89
+ else if (options.interactive) {
90
+ const detected = getChangedFiles();
91
+ files = await promptForFiles(detected);
92
+ }
93
+ // Check if branch already registered
94
+ const existing = await storage.get(branchName);
95
+ if (!existing) {
96
+ // New registration - check branch limit for free tier
97
+ const activeBranches = (await storage.list()).filter(b => b.status === 'active');
98
+ await checkBranchLimit(activeBranches.length);
99
+ }
100
+ if (existing) {
101
+ // Update existing registration
102
+ await storage.update(branchName, {
103
+ files: [...new Set([...existing.files, ...files])],
104
+ description: options.description || existing.description,
105
+ agent: options.agent || existing.agent,
106
+ });
107
+ console.log(`šŸ•·ļø Updated branch: ${branchName}`);
108
+ }
109
+ else {
110
+ // New registration
111
+ await storage.register({
112
+ name: branchName,
113
+ files,
114
+ status: 'active',
115
+ description: options.description,
116
+ agent: options.agent,
117
+ });
118
+ console.log(`šŸ•·ļø Registered branch: ${branchName}`);
119
+ }
120
+ if (files.length > 0) {
121
+ console.log(` Files: ${files.join(', ')}`);
122
+ }
123
+ });
124
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const sendCommand: Command;
3
+ //# sourceMappingURL=send.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmCpC,eAAO,MAAM,WAAW,SA8GlB,CAAC"}
@@ -0,0 +1,134 @@
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
+ function validateAgentId(agentId) {
6
+ if (!VALID_AGENT_ID.test(agentId)) {
7
+ throw new Error(`Invalid agent ID: "${agentId.slice(0, 20)}..." (must be alphanumeric with - or _)`);
8
+ }
9
+ return agentId;
10
+ }
11
+ function sanitizeText(text) {
12
+ // Remove shell metacharacters but allow normal text
13
+ return text.replace(/[`$(){}[\]|;&<>]/g, '');
14
+ }
15
+ function getMessageFromStdin() {
16
+ return new Promise((resolve, reject) => {
17
+ const chunks = [];
18
+ process.stdin.on('data', chunk => chunks.push(chunk));
19
+ process.stdin.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8').trim()));
20
+ process.stdin.on('error', reject);
21
+ });
22
+ }
23
+ function getCurrentBranch() {
24
+ try {
25
+ return execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf-8' }).trim();
26
+ }
27
+ catch {
28
+ return '';
29
+ }
30
+ }
31
+ export const sendCommand = new Command('send')
32
+ .description('Send a message to another agent (via Myceliumail)')
33
+ .argument('<to>', 'Recipient agent identifier')
34
+ .argument('<subject>', 'Message subject')
35
+ .option('-m, --message <text>', 'Message body (or reads from stdin)')
36
+ .option('-t, --type <type>', 'Message type: info, question, alert, handoff, file_share', 'info')
37
+ .option('-f, --from <agent>', 'Sender identifier (default: current agent)')
38
+ .option('-b, --branch <name>', 'Related branch name')
39
+ .option('--files <files>', 'Comma-separated list of related files')
40
+ .option('--reply-to <id>', 'Message ID this is replying to (not yet supported in mycmail)')
41
+ .option('--encrypt', 'Encrypt the message')
42
+ .option('--json', 'Output as JSON')
43
+ .action(async (to, subject, options) => {
44
+ // 1. Get message body
45
+ let messageBody = options.message;
46
+ if (!messageBody) {
47
+ if (process.stdin.isTTY) {
48
+ console.error('āŒ Message body is required (use -m or pipe stdin)');
49
+ process.exit(1);
50
+ }
51
+ messageBody = await getMessageFromStdin();
52
+ }
53
+ if (!messageBody) {
54
+ console.error('āŒ Message body empty');
55
+ process.exit(1);
56
+ }
57
+ // 2. Prepare context
58
+ const branch = options.branch || getCurrentBranch();
59
+ const type = options.type || 'info';
60
+ const files = options.files ? options.files.split(',') : [];
61
+ // 3. Format message with Spidersan context (until mycmail supports metadata)
62
+ let contextHeader = '';
63
+ if (type !== 'info')
64
+ contextHeader += `Type: ${type}\n`;
65
+ if (branch)
66
+ contextHeader += `Branch: ${branch}\n`;
67
+ if (files.length > 0)
68
+ contextHeader += `Files: ${files.join(', ')}\n`;
69
+ const fullMessage = contextHeader ? `${contextHeader}\n${messageBody}` : messageBody;
70
+ // 4. Construct mycmail command
71
+ // Note: We use the sender identity for MYCELIUMAIL_AGENT_ID env var
72
+ const sender = options.from || process.env.SPIDERSAN_AGENT || 'cli-agent';
73
+ try {
74
+ // Check if mycmail is available
75
+ execSync('which mycmail', { stdio: 'ignore' });
76
+ }
77
+ catch {
78
+ console.error('āŒ Myceliumail (mycmail) not found.');
79
+ console.error(' Please install it: npm install -g myceliumail');
80
+ process.exit(1);
81
+ }
82
+ const cmdParts = [
83
+ `MYCELIUMAIL_AGENT_ID=${sender}`,
84
+ 'mycmail',
85
+ 'send',
86
+ to,
87
+ `"${subject}"`, // Subject needs quotes
88
+ '--message',
89
+ `"${fullMessage.replace(/"/g, '\\"')}"` // Escape quotes in message
90
+ ];
91
+ if (options.encrypt) {
92
+ cmdParts.push('--encrypt');
93
+ }
94
+ // Execute
95
+ // Execute using execFileSync with argument array (prevents shell injection)
96
+ try {
97
+ // Security: Validate and sanitize inputs
98
+ const safeTo = validateAgentId(to);
99
+ const safeSubject = sanitizeText(subject);
100
+ const safeMessage = sanitizeText(fullMessage);
101
+ const args = ['send', safeTo, safeSubject, '--message', safeMessage];
102
+ if (options.encrypt) {
103
+ args.push('--encrypt');
104
+ }
105
+ const result = spawnSync('mycmail', args, {
106
+ encoding: 'utf-8',
107
+ env: { ...process.env, MYCELIUMAIL_AGENT_ID: sender }
108
+ });
109
+ if (result.error) {
110
+ throw result.error;
111
+ }
112
+ const output = result.stdout || '';
113
+ if (options.json) {
114
+ // Try to parse mycmail output or create synthetic JSON
115
+ // mycmail 1.0.0 output is text. 1.1.0 might have --json
116
+ console.log(JSON.stringify({
117
+ status: 'sent',
118
+ to,
119
+ subject,
120
+ encrypted: !!options.encrypt,
121
+ original_output: output.trim()
122
+ }, null, 2));
123
+ }
124
+ else {
125
+ console.log(output);
126
+ }
127
+ }
128
+ catch (error) {
129
+ console.error('āŒ Failed to send message via Myceliumail');
130
+ console.error(error.message || error);
131
+ process.exit(1);
132
+ }
133
+ });
134
+ //# sourceMappingURL=send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * spidersan stale
3
+ *
4
+ * Show branches that haven't been updated recently.
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare const staleCommand: Command;
8
+ //# sourceMappingURL=stale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale.d.ts","sourceRoot":"","sources":["../../src/commands/stale.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,YAAY,SAqCnB,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * spidersan stale
3
+ *
4
+ * Show branches that haven't been updated recently.
5
+ */
6
+ import { Command } from 'commander';
7
+ import { getStorage } from '../storage/index.js';
8
+ export const staleCommand = new Command('stale')
9
+ .description('Show stale branches (not updated recently)')
10
+ .option('--days <n>', 'Days threshold for staleness', '7')
11
+ .option('--json', 'Output as JSON')
12
+ .action(async (options) => {
13
+ const storage = await getStorage();
14
+ if (!await storage.isInitialized()) {
15
+ console.error('āŒ Spidersan not initialized. Run: spidersan init');
16
+ process.exit(1);
17
+ }
18
+ const days = parseInt(options.days, 10);
19
+ const threshold = new Date();
20
+ threshold.setDate(threshold.getDate() - days);
21
+ const branches = await storage.list();
22
+ const stale = branches.filter(b => new Date(b.registeredAt) < threshold);
23
+ if (options.json) {
24
+ console.log(JSON.stringify(stale, null, 2));
25
+ return;
26
+ }
27
+ if (stale.length === 0) {
28
+ console.log(`šŸ•·ļø No stale branches (older than ${days} days)`);
29
+ return;
30
+ }
31
+ console.log(`šŸ•·ļø Stale Branches (>${days} days old):\n`);
32
+ for (const branch of stale) {
33
+ const age = Math.floor((Date.now() - new Date(branch.registeredAt).getTime()) / 86400000);
34
+ console.log(` āš ļø ${branch.name} (${age} days old)`);
35
+ }
36
+ console.log(`\nRun 'spidersan cleanup' to remove these.`);
37
+ });
38
+ //# sourceMappingURL=stale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale.js","sourceRoot":"","sources":["../../src/commands/stale.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC3C,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,YAAY,EAAE,8BAA8B,EAAE,GAAG,CAAC;KACzD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACtB,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,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAC7B,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,CAAC;IAEzE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,OAAO;IACX,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,qCAAqC,IAAI,QAAQ,CAAC,CAAC;QAC/D,OAAO;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,eAAe,CAAC,CAAC;IAEzD,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,IAAI,KAAK,GAAG,YAAY,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * License Status Command
3
+ *
4
+ * Shows current license status and plan details.
5
+ * Usage: spidersan status
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare const statusCommand: Command;
9
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,aAAa,SAgCpB,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * License Status Command
3
+ *
4
+ * Shows current license status and plan details.
5
+ * Usage: spidersan status
6
+ */
7
+ import { Command } from 'commander';
8
+ import { getLicenseStatus, FREE_TIER_LIMITS } from '../lib/license.js';
9
+ import { getStorage } from '../storage/index.js';
10
+ export const statusCommand = new Command('status')
11
+ .description('Show license status and plan details')
12
+ .action(async () => {
13
+ const status = getLicenseStatus();
14
+ const storage = await getStorage();
15
+ let branchCount = 0;
16
+ if (await storage.isInitialized()) {
17
+ const branches = await storage.list();
18
+ branchCount = branches.filter(b => b.status === 'active').length;
19
+ }
20
+ console.log('šŸ•·ļø Spidersan Status\n');
21
+ if (status.plan === 'pro') {
22
+ console.log(` Plan: šŸ’Ž Pro`);
23
+ console.log(` Email: ${status.email}`);
24
+ console.log(` Expires: ${new Date(status.expiresAt).toLocaleDateString()} (${status.daysRemaining} days)`);
25
+ console.log(` Features: ${status.features.join(', ')}`);
26
+ console.log(` Branches: ${branchCount} active (unlimited)`);
27
+ }
28
+ else {
29
+ console.log(` Plan: Free`);
30
+ console.log(` Branches: ${branchCount}/${FREE_TIER_LIMITS.maxConcurrentBranches} active`);
31
+ console.log('');
32
+ console.log(' šŸ’Ž Upgrade to Pro for:');
33
+ console.log(' • Unlimited branches');
34
+ console.log(' • MCP Server integration');
35
+ console.log(' • Conflict prediction');
36
+ console.log(' • Priority support');
37
+ console.log('');
38
+ console.log(' Get Pro: spidersan.dev/pro');
39
+ }
40
+ });
41
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC7C,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,KAAK,IAAI,EAAE;IACf,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IAEnC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,MAAM,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACtC,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;IACrE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAEtC,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,SAAU,CAAC,CAAC,kBAAkB,EAAE,KAAK,MAAM,CAAC,aAAa,QAAQ,CAAC,CAAC;QAChH,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,iBAAiB,WAAW,qBAAqB,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,iBAAiB,WAAW,IAAI,gBAAgB,CAAC,qBAAqB,SAAS,CAAC,CAAC;QAC7F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IACjD,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * spidersan sync-all
3
+ *
4
+ * Scan and sync all /Dev repositories.
5
+ * Global git coordination for the entire ecosystem.
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare const syncAllCommand: Command;
9
+ //# sourceMappingURL=sync-all.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-all.d.ts","sourceRoot":"","sources":["../../src/commands/sync-all.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8GpC,eAAO,MAAM,cAAc,SAuGrB,CAAC"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * spidersan sync-all
3
+ *
4
+ * Scan and sync all /Dev repositories.
5
+ * Global git coordination for the entire ecosystem.
6
+ */
7
+ import { Command } from 'commander';
8
+ import { execSync } from 'child_process';
9
+ import { existsSync, readdirSync, statSync } from 'fs';
10
+ import { join, basename } from 'path';
11
+ const DEV_DIR = '/Users/freedbird/Dev';
12
+ function runGitInRepo(repoPath, cmd) {
13
+ try {
14
+ const output = execSync(`git ${cmd}`, {
15
+ cwd: repoPath,
16
+ encoding: 'utf-8',
17
+ stdio: 'pipe'
18
+ }).trim();
19
+ return { success: true, output };
20
+ }
21
+ catch (error) {
22
+ const output = error instanceof Error && 'stdout' in error
23
+ ? error.stdout?.trim() || ''
24
+ : '';
25
+ return { success: false, output };
26
+ }
27
+ }
28
+ function discoverRepos(baseDir) {
29
+ const repos = [];
30
+ try {
31
+ const entries = readdirSync(baseDir);
32
+ for (const entry of entries) {
33
+ const fullPath = join(baseDir, entry);
34
+ // Skip non-directories
35
+ if (!statSync(fullPath).isDirectory())
36
+ continue;
37
+ // Skip hidden directories except .git
38
+ if (entry.startsWith('.') && entry !== '.git')
39
+ continue;
40
+ // Check if it's a git repo
41
+ const gitPath = join(fullPath, '.git');
42
+ if (existsSync(gitPath)) {
43
+ repos.push(fullPath);
44
+ }
45
+ }
46
+ }
47
+ catch {
48
+ // Directory doesn't exist or can't be read
49
+ }
50
+ return repos.sort();
51
+ }
52
+ function getRepoStatus(repoPath) {
53
+ const name = basename(repoPath);
54
+ const status = {
55
+ name,
56
+ path: repoPath,
57
+ uncommitted: 0,
58
+ unpushed: 0,
59
+ behind: 0,
60
+ branch: 'unknown'
61
+ };
62
+ // Get current branch
63
+ const branchResult = runGitInRepo(repoPath, 'rev-parse --abbrev-ref HEAD');
64
+ if (branchResult.success) {
65
+ status.branch = branchResult.output;
66
+ }
67
+ // Count uncommitted changes
68
+ const statusResult = runGitInRepo(repoPath, 'status --porcelain');
69
+ if (statusResult.success) {
70
+ const lines = statusResult.output.split('\n').filter(Boolean);
71
+ status.uncommitted = lines.length;
72
+ }
73
+ // Count unpushed commits
74
+ const unpushedResult = runGitInRepo(repoPath, 'log @{u}..HEAD --oneline');
75
+ if (unpushedResult.success) {
76
+ const lines = unpushedResult.output.split('\n').filter(Boolean);
77
+ status.unpushed = lines.length;
78
+ }
79
+ // Count behind remote
80
+ const behindResult = runGitInRepo(repoPath, 'log HEAD..@{u} --oneline');
81
+ if (behindResult.success) {
82
+ const lines = behindResult.output.split('\n').filter(Boolean);
83
+ status.behind = lines.length;
84
+ }
85
+ return status;
86
+ }
87
+ export const syncAllCommand = new Command('sync-all')
88
+ .description('Scan and sync all /Dev repositories')
89
+ .option('--status', 'Show status of all repos (default)')
90
+ .option('--pull', 'Pull all repos from remote')
91
+ .option('--push', 'Push all repos to remote')
92
+ .option('--repos <names>', 'Comma-separated repo names to sync')
93
+ .option('--json', 'Output as JSON')
94
+ .addHelpText('after', `
95
+ Examples:
96
+ $ spidersan sync-all # Show status of all repos
97
+ $ spidersan sync-all --pull # Pull all repos
98
+ $ spidersan sync-all --push # Push all repos with commits
99
+ $ spidersan sync-all --pull --push # Full sync cycle
100
+ $ spidersan sync-all --repos "Envoak,Sherlocksan" --pull
101
+ `)
102
+ .action(async (options) => {
103
+ // Default to status if no action specified
104
+ const showStatus = options.status || (!options.pull && !options.push);
105
+ // Discover repos
106
+ let repos = discoverRepos(DEV_DIR);
107
+ // Filter by name if specified
108
+ if (options.repos) {
109
+ const filterNames = options.repos.split(',').map(n => n.trim().toLowerCase());
110
+ repos = repos.filter(r => filterNames.includes(basename(r).toLowerCase()));
111
+ }
112
+ if (repos.length === 0) {
113
+ console.log('šŸ•·ļø No repositories found.');
114
+ return;
115
+ }
116
+ const statuses = [];
117
+ if (!options.json) {
118
+ console.log(`\nšŸ•·ļø SYNC-ALL — ${repos.length} repositories\n`);
119
+ console.log('━'.repeat(50));
120
+ }
121
+ for (const repoPath of repos) {
122
+ const name = basename(repoPath);
123
+ let status = getRepoStatus(repoPath);
124
+ // Pull if requested
125
+ if (options.pull) {
126
+ if (!options.json)
127
+ process.stdout.write(`šŸ“„ ${name}: pulling... `);
128
+ const result = runGitInRepo(repoPath, 'pull --rebase');
129
+ if (!options.json) {
130
+ console.log(result.success ? 'āœ…' : 'āš ļø');
131
+ }
132
+ // Refresh status after pull
133
+ status = getRepoStatus(repoPath);
134
+ }
135
+ // Push if requested and has unpushed commits
136
+ if (options.push && status.unpushed > 0) {
137
+ if (!options.json)
138
+ process.stdout.write(`šŸ“¤ ${name}: pushing ${status.unpushed} commit(s)... `);
139
+ const result = runGitInRepo(repoPath, 'push');
140
+ if (!options.json) {
141
+ console.log(result.success ? 'āœ…' : 'āš ļø');
142
+ }
143
+ // Refresh status after push
144
+ status = getRepoStatus(repoPath);
145
+ }
146
+ statuses.push(status);
147
+ // Show status
148
+ if (showStatus && !options.json) {
149
+ let icon = 'āœ…';
150
+ if (status.uncommitted > 0)
151
+ icon = 'šŸ“';
152
+ if (status.unpushed > 0)
153
+ icon = 'šŸ“¤';
154
+ if (status.behind > 0)
155
+ icon = 'šŸ“„';
156
+ if (status.uncommitted > 0 && status.behind > 0)
157
+ icon = 'āš ļø';
158
+ console.log(`${icon} ${name.padEnd(20)} ${status.branch.padEnd(10)} | ${status.uncommitted} uncommitted | ${status.unpushed} unpushed | ${status.behind} behind`);
159
+ }
160
+ }
161
+ if (options.json) {
162
+ console.log(JSON.stringify({ repos: statuses }, null, 2));
163
+ return;
164
+ }
165
+ console.log('━'.repeat(50));
166
+ // Summary
167
+ const withUncommitted = statuses.filter(s => s.uncommitted > 0).length;
168
+ const withUnpushed = statuses.filter(s => s.unpushed > 0).length;
169
+ const withBehind = statuses.filter(s => s.behind > 0).length;
170
+ const clean = statuses.filter(s => s.uncommitted === 0 && s.unpushed === 0 && s.behind === 0).length;
171
+ console.log(`\nšŸ“Š Summary: ${clean} clean | ${withUncommitted} uncommitted | ${withUnpushed} unpushed | ${withBehind} behind`);
172
+ if (withBehind > 0 && !options.pull) {
173
+ console.log('\nšŸ’” Run: spidersan sync-all --pull');
174
+ }
175
+ if (withUnpushed > 0 && !options.push) {
176
+ console.log('šŸ’” Run: spidersan sync-all --push');
177
+ }
178
+ console.log('');
179
+ });
180
+ //# sourceMappingURL=sync-all.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-all.js","sourceRoot":"","sources":["../../src/commands/sync-all.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * spidersan sync
3
+ *
4
+ * Sync local registry with git state.
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare const syncCommand: Command;
8
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,eAAO,MAAM,WAAW,SAoClB,CAAC"}