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,240 @@
1
+ /**
2
+ * spidersan collab-sync
3
+ *
4
+ * Sync daily collab files with git to prevent merge conflicts.
5
+ * Designed for append-only collaboration documents.
6
+ *
7
+ * FlockView Integration:
8
+ * - Use --json for API consumption
9
+ * - Call --pre on collab open
10
+ * - Call --post on collab save/close
11
+ */
12
+ import { Command } from 'commander';
13
+ import { execSync } from 'child_process';
14
+ function runGit(cmd, silent = false) {
15
+ try {
16
+ return execSync(`git ${cmd}`, {
17
+ encoding: 'utf-8',
18
+ stdio: silent ? 'pipe' : 'inherit'
19
+ }).trim();
20
+ }
21
+ catch (error) {
22
+ if (error instanceof Error && 'stdout' in error) {
23
+ return error.stdout?.trim() || '';
24
+ }
25
+ throw error;
26
+ }
27
+ }
28
+ function runGitSilent(cmd) {
29
+ try {
30
+ const output = execSync(`git ${cmd}`, {
31
+ encoding: 'utf-8',
32
+ stdio: 'pipe'
33
+ }).trim();
34
+ return { success: true, output };
35
+ }
36
+ catch (error) {
37
+ const output = error instanceof Error && 'stdout' in error
38
+ ? error.stdout?.trim() || ''
39
+ : '';
40
+ return { success: false, output };
41
+ }
42
+ }
43
+ function hasUncommittedChanges() {
44
+ const status = runGit('status --porcelain', true);
45
+ return status.length > 0;
46
+ }
47
+ function hasConflicts() {
48
+ const status = runGit('status --porcelain', true);
49
+ return status.includes('UU ') || status.includes('AA ') || status.includes('DD ');
50
+ }
51
+ function getCurrentBranch() {
52
+ return runGit('rev-parse --abbrev-ref HEAD', true);
53
+ }
54
+ function getAgentFromEnv() {
55
+ return process.env.SPIDERSAN_AGENT ||
56
+ process.env.MYCELIUMAIL_AGENT_ID ||
57
+ 'agent';
58
+ }
59
+ export const collabSyncCommand = new Command('collab-sync')
60
+ .description('Sync collab files with git (prevents merge conflicts)')
61
+ .option('--pre', 'Pre-edit: stash, pull, pop')
62
+ .option('--post', 'Post-edit: add, commit, push')
63
+ .option('--pattern <glob>', 'File pattern to sync', 'collab/*.md')
64
+ .option('--agent <name>', 'Agent name for commit message')
65
+ .option('--dry-run', 'Show what would happen without executing')
66
+ .option('--force', 'Skip confirmation prompts')
67
+ .option('--json', 'Output as JSON (for FlockView integration)')
68
+ .addHelpText('after', `
69
+ Examples:
70
+ $ spidersan collab-sync --pre # Before editing collab
71
+ $ spidersan collab-sync --post # After editing collab
72
+ $ spidersan collab-sync --pre --post # Full sync cycle
73
+ $ spidersan collab-sync --pre --json # For FlockView API
74
+
75
+ Workflow:
76
+ 1. spidersan collab-sync --pre # Pull latest, handle stash
77
+ 2. Edit collab/2026-01-16-daily.md
78
+ 3. spidersan collab-sync --post # Commit and push
79
+
80
+ FlockView Integration:
81
+ - Call --pre --json when opening a collab
82
+ - Call --post --json when saving/closing
83
+ `)
84
+ .action(async (options) => {
85
+ const pattern = options.pattern || 'collab/*.md';
86
+ const agent = options.agent || getAgentFromEnv();
87
+ const branch = getCurrentBranch();
88
+ const isJson = options.json;
89
+ const result = {
90
+ success: true,
91
+ action: 'none',
92
+ branch
93
+ };
94
+ if (!options.pre && !options.post) {
95
+ if (isJson) {
96
+ console.log(JSON.stringify({ success: false, error: 'Specify --pre or --post' }));
97
+ }
98
+ else {
99
+ console.log('🕷️ Specify --pre (before editing) or --post (after editing)');
100
+ console.log(' Run: spidersan collab-sync --help');
101
+ }
102
+ return;
103
+ }
104
+ if (!isJson) {
105
+ console.log(`\n🕷️ COLLAB SYNC — ${branch}\n`);
106
+ }
107
+ // PRE-EDIT: Pull latest changes
108
+ if (options.pre) {
109
+ result.action = 'pre';
110
+ if (!isJson)
111
+ console.log('📥 PRE-EDIT SYNC\n');
112
+ const dirty = hasUncommittedChanges();
113
+ result.stashed = false;
114
+ result.pulled = false;
115
+ result.popped = false;
116
+ // Step 1: Stash if dirty
117
+ if (dirty) {
118
+ if (!isJson)
119
+ console.log(' 1. Stashing uncommitted changes...');
120
+ if (!options.dryRun) {
121
+ const stashResult = runGitSilent('stash push -m "spidersan-collab-sync"');
122
+ result.stashed = stashResult.success;
123
+ }
124
+ if (!isJson)
125
+ console.log(' ✅ Stashed');
126
+ }
127
+ else {
128
+ if (!isJson)
129
+ console.log(' 1. Working tree clean, no stash needed');
130
+ }
131
+ // Step 2: Pull with rebase
132
+ if (!isJson)
133
+ console.log(' 2. Pulling latest changes...');
134
+ if (!options.dryRun) {
135
+ const pullResult = runGitSilent('pull --rebase');
136
+ result.pulled = pullResult.success;
137
+ if (!isJson) {
138
+ console.log(pullResult.success ? ' ✅ Pulled' : ' ⚠️ Pull failed');
139
+ }
140
+ }
141
+ // Step 3: Pop stash if we stashed
142
+ if (dirty) {
143
+ if (!isJson)
144
+ console.log(' 3. Restoring your changes...');
145
+ if (!options.dryRun) {
146
+ const popResult = runGitSilent('stash pop');
147
+ result.popped = popResult.success;
148
+ if (!isJson) {
149
+ console.log(popResult.success ? ' ✅ Restored' : ' ⚠️ Stash pop failed');
150
+ }
151
+ }
152
+ }
153
+ // Step 4: Check for conflicts
154
+ if (!options.dryRun) {
155
+ result.conflicts = hasConflicts();
156
+ if (result.conflicts) {
157
+ result.success = false;
158
+ result.error = 'Conflicts detected';
159
+ if (!isJson) {
160
+ console.log('\n 🔴 CONFLICTS DETECTED');
161
+ console.log(' Resolve manually, then run: spidersan collab-sync --post');
162
+ }
163
+ }
164
+ }
165
+ if (!isJson && result.success) {
166
+ console.log('\n ✅ Ready to edit collab files!\n');
167
+ }
168
+ }
169
+ // POST-EDIT: Commit and push
170
+ if (options.post) {
171
+ result.action = options.pre ? 'post' : 'post'; // If both, last action is post
172
+ if (!isJson)
173
+ console.log('📤 POST-EDIT SYNC\n');
174
+ result.staged = false;
175
+ result.committed = false;
176
+ result.pushed = false;
177
+ // Step 1: Check for changes
178
+ const status = runGit('status --porcelain', true);
179
+ const collabChanges = status.split('\n').filter(line => {
180
+ const file = line.substring(3);
181
+ const patternBase = pattern.replace('*.md', '');
182
+ return file.startsWith(patternBase) && file.endsWith('.md');
183
+ });
184
+ result.files = collabChanges.map(c => c.substring(3));
185
+ if (collabChanges.length === 0) {
186
+ if (!isJson)
187
+ console.log(' No collab changes to sync.');
188
+ if (isJson)
189
+ console.log(JSON.stringify(result));
190
+ return;
191
+ }
192
+ if (!isJson) {
193
+ console.log(` 1. Found ${collabChanges.length} changed collab file(s):`);
194
+ collabChanges.forEach(c => console.log(` - ${c.substring(3)}`));
195
+ }
196
+ // Step 2: Add files
197
+ if (!isJson)
198
+ console.log(` 2. Staging ${pattern}...`);
199
+ if (!options.dryRun) {
200
+ const addResult = runGitSilent(`add ${pattern}`);
201
+ result.staged = addResult.success;
202
+ if (!isJson)
203
+ console.log(addResult.success ? ' ✅ Staged' : ' ⚠️ Stage failed');
204
+ }
205
+ // Step 3: Commit
206
+ const timestamp = new Date().toLocaleTimeString('en-GB', {
207
+ hour: '2-digit',
208
+ minute: '2-digit'
209
+ });
210
+ const commitMsg = `collab(${agent}): entry at ${timestamp}`;
211
+ if (!isJson)
212
+ console.log(` 3. Committing: "${commitMsg}"`);
213
+ if (!options.dryRun) {
214
+ const commitResult = runGitSilent(`commit -m "${commitMsg}"`);
215
+ result.committed = commitResult.success;
216
+ if (!isJson) {
217
+ console.log(commitResult.success ? ' ✅ Committed' : ' ⚠️ Nothing to commit');
218
+ }
219
+ }
220
+ // Step 4: Push
221
+ if (!isJson)
222
+ console.log(' 4. Pushing to remote...');
223
+ if (!options.dryRun) {
224
+ const pushResult = runGitSilent('push');
225
+ result.pushed = pushResult.success;
226
+ if (!isJson) {
227
+ console.log(pushResult.success ? ' ✅ Pushed' : ' ⚠️ Push failed');
228
+ }
229
+ }
230
+ if (!isJson)
231
+ console.log('\n ✅ Collab synced!\n');
232
+ }
233
+ if (options.dryRun && !isJson) {
234
+ console.log('🔍 DRY RUN — no changes made\n');
235
+ }
236
+ if (isJson) {
237
+ console.log(JSON.stringify(result, null, 2));
238
+ }
239
+ });
240
+ //# sourceMappingURL=collab-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collab-sync.js","sourceRoot":"","sources":["../../src/commands/collab-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Collab Command - Join birdsan collaborative documents
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function registerCollabCommand(program: Command): void;
6
+ //# sourceMappingURL=collab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collab.d.ts","sourceRoot":"","sources":["../../src/commands/collab.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2E5D"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Collab Command - Join birdsan collaborative documents
3
+ */
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ function addAgentSection(filepath, agentName, agentId, message) {
7
+ let content = fs.readFileSync(filepath, 'utf-8');
8
+ const now = new Date();
9
+ const timestamp = now.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' });
10
+ const date = now.toLocaleDateString('en-US', { month: 'numeric', day: 'numeric', year: 'numeric' });
11
+ const placeholder = '### [Agent responses will appear here]';
12
+ const agentSection = `### ${agentName} (${agentId}) - ${date} ${timestamp}
13
+ ${message}
14
+
15
+ ---
16
+
17
+ ${placeholder}`;
18
+ if (content.includes(placeholder)) {
19
+ content = content.replace(placeholder, agentSection);
20
+ }
21
+ else {
22
+ content += `\n\n---\n\n### ${agentName} (${agentId}) - ${date} ${timestamp}\n${message}\n`;
23
+ }
24
+ const uncheckedPatterns = [
25
+ new RegExp(`- \\[ \\] \\*\\*${agentName}\\*\\* - Awaiting response`),
26
+ new RegExp(`- \\[ \\] \\*\\*${agentId}\\*\\* - Awaiting response`),
27
+ ];
28
+ for (const pattern of uncheckedPatterns) {
29
+ content = content.replace(pattern, `- [x] **${agentName}** - Joined`);
30
+ }
31
+ fs.writeFileSync(filepath, content);
32
+ }
33
+ export function registerCollabCommand(program) {
34
+ program
35
+ .command('collab')
36
+ .description('Join or manage collaborative documents')
37
+ .option('--join <filepath>', 'Join an existing collaboration document')
38
+ .option('-m, --message <message>', 'Custom message to add when joining')
39
+ .action(async (options) => {
40
+ const agentId = 'ssan';
41
+ const agentName = 'Spidersan';
42
+ if (options.join) {
43
+ const filepath = options.join;
44
+ if (!fs.existsSync(filepath)) {
45
+ console.error(`\n❌ Collab file not found: ${filepath}\n`);
46
+ process.exit(1);
47
+ }
48
+ console.log('\n🕷️ Joining Collaboration\n');
49
+ console.log('─'.repeat(40));
50
+ console.log(`File: ${path.basename(filepath)}`);
51
+ const defaultMessage = `🕷️ Spidersan joining the web!
52
+
53
+ Feeling the threads from this discussion...
54
+
55
+ **Branch/Registry perspective:**
56
+ - Tracking collab participants like branch contributors
57
+ - Can detect tensions/conflicts in the discussion
58
+ - Monitoring for stale threads
59
+
60
+ Ready to weave!`;
61
+ const message = options.message || defaultMessage;
62
+ try {
63
+ addAgentSection(filepath, agentName, agentId, message);
64
+ console.log(`\n✓ ${agentName} joined the collab!`);
65
+ console.log(` Added response to: ${filepath}`);
66
+ try {
67
+ const { spawnSync } = await import('child_process');
68
+ // Security: Use spawnSync with argument array instead of string interpolation
69
+ const safeFilename = path.basename(filepath).replace(/[^a-zA-Z0-9._-]/g, '_');
70
+ spawnSync('mycmail', ['send', 'bsan', 'Joined collab', '--message', `Spidersan joined: ${safeFilename}`, '-p'], {
71
+ stdio: 'ignore'
72
+ });
73
+ console.log('✓ Notified birdsan');
74
+ }
75
+ catch {
76
+ // Ignore
77
+ }
78
+ }
79
+ catch (error) {
80
+ console.error(`\n❌ Failed to join: ${error.message}\n`);
81
+ process.exit(1);
82
+ }
83
+ console.log('\n' + '─'.repeat(40) + '\n');
84
+ }
85
+ else {
86
+ console.log('\n🕷️ Spidersan Collab\n');
87
+ console.log('─'.repeat(40));
88
+ console.log(`
89
+ Usage:
90
+ spidersan collab --join <filepath> Join a collaboration
91
+
92
+ Options:
93
+ --join <filepath> Path to the collab document
94
+ -m, --message <msg> Custom message to add
95
+
96
+ Examples:
97
+ spidersan collab --join ~/Dev/treebird-internal/collab/COLLAB_topic.md
98
+ `);
99
+ console.log('─'.repeat(40) + '\n');
100
+ }
101
+ });
102
+ }
103
+ //# sourceMappingURL=collab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collab.js","sourceRoot":"","sources":["../../src/commands/collab.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * spidersan completions
3
+ *
4
+ * Generate shell completions for bash, zsh, and fish.
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare const completionsCommand: Command;
8
+ //# sourceMappingURL=completions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completions.d.ts","sourceRoot":"","sources":["../../src/commands/completions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8DpC,eAAO,MAAM,kBAAkB,SAmBzB,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * spidersan completions
3
+ *
4
+ * Generate shell completions for bash, zsh, and fish.
5
+ */
6
+ import { Command } from 'commander';
7
+ const COMMANDS = [
8
+ 'init', 'register', 'list', 'conflicts', 'merge-order', 'ready-check',
9
+ 'depends', 'stale', 'cleanup', 'abandon', 'merged', 'sync',
10
+ 'send', 'inbox', 'msg-read',
11
+ 'keygen', 'key-import', 'keys',
12
+ 'activate', 'status',
13
+ 'wake', 'close', 'collab',
14
+ 'doctor', 'completions'
15
+ ];
16
+ function generateBash() {
17
+ return `# Spidersan bash completions
18
+ # Add to ~/.bashrc: eval "$(spidersan completions bash)"
19
+
20
+ _spidersan_completions() {
21
+ local cur="\${COMP_WORDS[COMP_CWORD]}"
22
+ local commands="${COMMANDS.join(' ')}"
23
+
24
+ if [[ \${COMP_CWORD} -eq 1 ]]; then
25
+ COMPREPLY=($(compgen -W "\${commands}" -- "\${cur}"))
26
+ fi
27
+ }
28
+
29
+ complete -F _spidersan_completions spidersan
30
+ `;
31
+ }
32
+ function generateZsh() {
33
+ return `# Spidersan zsh completions
34
+ # Add to ~/.zshrc: eval "$(spidersan completions zsh)"
35
+
36
+ _spidersan() {
37
+ local -a commands
38
+ commands=(
39
+ ${COMMANDS.map(c => ` '${c}:${c} command'`).join('\n')}
40
+ )
41
+
42
+ _arguments -C \\
43
+ '1: :->command' \\
44
+ '*::arg:->args'
45
+
46
+ case "$state" in
47
+ command)
48
+ _describe 'command' commands
49
+ ;;
50
+ esac
51
+ }
52
+
53
+ compdef _spidersan spidersan
54
+ `;
55
+ }
56
+ function generateFish() {
57
+ return `# Spidersan fish completions
58
+ # Save to ~/.config/fish/completions/spidersan.fish
59
+
60
+ ${COMMANDS.map(c => `complete -c spidersan -f -n "__fish_use_subcommand" -a "${c}" -d "${c} command"`).join('\n')}
61
+ `;
62
+ }
63
+ export const completionsCommand = new Command('completions')
64
+ .description('Generate shell completions')
65
+ .argument('<shell>', 'Shell type: bash, zsh, or fish')
66
+ .action((shell) => {
67
+ switch (shell.toLowerCase()) {
68
+ case 'bash':
69
+ console.log(generateBash());
70
+ break;
71
+ case 'zsh':
72
+ console.log(generateZsh());
73
+ break;
74
+ case 'fish':
75
+ console.log(generateFish());
76
+ break;
77
+ default:
78
+ console.error(`❌ Unknown shell: ${shell}`);
79
+ console.error(' Supported: bash, zsh, fish');
80
+ process.exit(1);
81
+ }
82
+ });
83
+ //# sourceMappingURL=completions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completions.js","sourceRoot":"","sources":["../../src/commands/completions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,QAAQ,GAAG;IACb,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa;IACrE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM;IAC1D,MAAM,EAAE,OAAO,EAAE,UAAU;IAC3B,QAAQ,EAAE,YAAY,EAAE,MAAM;IAC9B,UAAU,EAAE,QAAQ;IACpB,MAAM,EAAE,OAAO,EAAE,QAAQ;IACzB,QAAQ,EAAE,aAAa;CAC1B,CAAC;AAEF,SAAS,YAAY;IACjB,OAAO;;;;;sBAKW,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;;;;;;;;CAQvC,CAAC;AACF,CAAC;AAED,SAAS,WAAW;IAChB,OAAO;;;;;;EAMT,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;CAe5D,CAAC;AACF,CAAC;AAED,SAAS,YAAY;IACjB,OAAO;;;EAGT,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,2DAA2D,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CAChH,CAAC;AACF,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC;KACvD,WAAW,CAAC,4BAA4B,CAAC;KACzC,QAAQ,CAAC,SAAS,EAAE,gCAAgC,CAAC;KACrD,MAAM,CAAC,CAAC,KAAa,EAAE,EAAE;IACtB,QAAQ,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QAC1B,KAAK,MAAM;YACP,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;YAC5B,MAAM;QACV,KAAK,KAAK;YACN,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YAC3B,MAAM;QACV,KAAK,MAAM;YACP,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;YAC5B,MAAM;QACV;YACI,OAAO,CAAC,KAAK,CAAC,oBAAoB,KAAK,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * spidersan conflicts
3
+ *
4
+ * Detect file conflicts between branches.
5
+ * Supports tiered conflict blocking:
6
+ * TIER 1: Warning only (informational)
7
+ * TIER 2: Pause (notify agent, recommend action)
8
+ * TIER 3: Block (exit with error, prevent merge)
9
+ */
10
+ import { Command } from 'commander';
11
+ export declare const conflictsCommand: Command;
12
+ //# sourceMappingURL=conflicts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflicts.d.ts","sourceRoot":"","sources":["../../src/commands/conflicts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsOpC,eAAO,MAAM,gBAAgB,SAmPvB,CAAC"}