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.
- package/CHANGELOG.md +91 -0
- package/LICENSE +21 -0
- package/LICENSE.md +85 -0
- package/README.md +217 -0
- package/dist/bin/spidersan.d.ts +9 -0
- package/dist/bin/spidersan.d.ts.map +1 -0
- package/dist/bin/spidersan.js +152 -0
- package/dist/bin/spidersan.js.map +1 -0
- package/dist/commands/abandon.d.ts +8 -0
- package/dist/commands/abandon.d.ts.map +1 -0
- package/dist/commands/abandon.js +49 -0
- package/dist/commands/abandon.js.map +1 -0
- package/dist/commands/activate.d.ts +9 -0
- package/dist/commands/activate.d.ts.map +1 -0
- package/dist/commands/activate.js +45 -0
- package/dist/commands/activate.js.map +1 -0
- package/dist/commands/active-windows.d.ts +16 -0
- package/dist/commands/active-windows.d.ts.map +1 -0
- package/dist/commands/active-windows.js +373 -0
- package/dist/commands/active-windows.js.map +1 -0
- package/dist/commands/audit-mark.d.ts +12 -0
- package/dist/commands/audit-mark.d.ts.map +1 -0
- package/dist/commands/audit-mark.js +204 -0
- package/dist/commands/audit-mark.js.map +1 -0
- package/dist/commands/cleanup.d.ts +8 -0
- package/dist/commands/cleanup.d.ts.map +1 -0
- package/dist/commands/cleanup.js +41 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/close.d.ts +9 -0
- package/dist/commands/close.d.ts.map +1 -0
- package/dist/commands/close.js +129 -0
- package/dist/commands/close.js.map +1 -0
- package/dist/commands/collab-sync.d.ts +14 -0
- package/dist/commands/collab-sync.d.ts.map +1 -0
- package/dist/commands/collab-sync.js +240 -0
- package/dist/commands/collab-sync.js.map +1 -0
- package/dist/commands/collab.d.ts +6 -0
- package/dist/commands/collab.d.ts.map +1 -0
- package/dist/commands/collab.js +103 -0
- package/dist/commands/collab.js.map +1 -0
- package/dist/commands/completions.d.ts +8 -0
- package/dist/commands/completions.d.ts.map +1 -0
- package/dist/commands/completions.js +83 -0
- package/dist/commands/completions.js.map +1 -0
- package/dist/commands/conflicts.d.ts +12 -0
- package/dist/commands/conflicts.d.ts.map +1 -0
- package/dist/commands/conflicts.js +426 -0
- package/dist/commands/conflicts.js.map +1 -0
- package/dist/commands/demo.d.ts +3 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +113 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/depends.d.ts +8 -0
- package/dist/commands/depends.d.ts.map +1 -0
- package/dist/commands/depends.js +44 -0
- package/dist/commands/depends.js.map +1 -0
- package/dist/commands/doctor.d.ts +8 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +249 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/inbox.d.ts +3 -0
- package/dist/commands/inbox.d.ts.map +1 -0
- package/dist/commands/inbox.js +66 -0
- package/dist/commands/inbox.js.map +1 -0
- package/dist/commands/index.d.ts +43 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +61 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +23 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/intent-scan.d.ts +17 -0
- package/dist/commands/intent-scan.d.ts.map +1 -0
- package/dist/commands/intent-scan.js +336 -0
- package/dist/commands/intent-scan.js.map +1 -0
- package/dist/commands/key-import.d.ts +3 -0
- package/dist/commands/key-import.d.ts.map +1 -0
- package/dist/commands/key-import.js +54 -0
- package/dist/commands/key-import.js.map +1 -0
- package/dist/commands/keygen.d.ts +3 -0
- package/dist/commands/keygen.d.ts.map +1 -0
- package/dist/commands/keygen.js +53 -0
- package/dist/commands/keygen.js.map +1 -0
- package/dist/commands/keys.d.ts +3 -0
- package/dist/commands/keys.d.ts.map +1 -0
- package/dist/commands/keys.js +56 -0
- package/dist/commands/keys.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +45 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/lock.d.ts +11 -0
- package/dist/commands/lock.d.ts.map +1 -0
- package/dist/commands/lock.js +220 -0
- package/dist/commands/lock.js.map +1 -0
- package/dist/commands/log.d.ts +8 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +95 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/mcp-health.d.ts +3 -0
- package/dist/commands/mcp-health.d.ts.map +1 -0
- package/dist/commands/mcp-health.js +305 -0
- package/dist/commands/mcp-health.js.map +1 -0
- package/dist/commands/mcp-restart.d.ts +3 -0
- package/dist/commands/mcp-restart.d.ts.map +1 -0
- package/dist/commands/mcp-restart.js +176 -0
- package/dist/commands/mcp-restart.js.map +1 -0
- package/dist/commands/merge-order.d.ts +9 -0
- package/dist/commands/merge-order.d.ts.map +1 -0
- package/dist/commands/merge-order.js +138 -0
- package/dist/commands/merge-order.js.map +1 -0
- package/dist/commands/merged.d.ts +8 -0
- package/dist/commands/merged.d.ts.map +1 -0
- package/dist/commands/merged.js +39 -0
- package/dist/commands/merged.js.map +1 -0
- package/dist/commands/msg-read.d.ts +3 -0
- package/dist/commands/msg-read.d.ts.map +1 -0
- package/dist/commands/msg-read.js +70 -0
- package/dist/commands/msg-read.js.map +1 -0
- package/dist/commands/pulse.d.ts +9 -0
- package/dist/commands/pulse.d.ts.map +1 -0
- package/dist/commands/pulse.js +232 -0
- package/dist/commands/pulse.js.map +1 -0
- package/dist/commands/radar.d.ts +3 -0
- package/dist/commands/radar.d.ts.map +1 -0
- package/dist/commands/radar.js +147 -0
- package/dist/commands/radar.js.map +1 -0
- package/dist/commands/ready-check.d.ts +9 -0
- package/dist/commands/ready-check.d.ts.map +1 -0
- package/dist/commands/ready-check.js +156 -0
- package/dist/commands/ready-check.js.map +1 -0
- package/dist/commands/register.d.ts +3 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +124 -0
- package/dist/commands/register.js.map +1 -0
- package/dist/commands/send.d.ts +3 -0
- package/dist/commands/send.d.ts.map +1 -0
- package/dist/commands/send.js +134 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/stale.d.ts +8 -0
- package/dist/commands/stale.d.ts.map +1 -0
- package/dist/commands/stale.js +38 -0
- package/dist/commands/stale.js.map +1 -0
- package/dist/commands/status.d.ts +9 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +41 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync-all.d.ts +9 -0
- package/dist/commands/sync-all.d.ts.map +1 -0
- package/dist/commands/sync-all.js +180 -0
- package/dist/commands/sync-all.js.map +1 -0
- package/dist/commands/sync.d.ts +8 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +49 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/tension.d.ts +12 -0
- package/dist/commands/tension.d.ts.map +1 -0
- package/dist/commands/tension.js +242 -0
- package/dist/commands/tension.js.map +1 -0
- package/dist/commands/torrent.d.ts +9 -0
- package/dist/commands/torrent.d.ts.map +1 -0
- package/dist/commands/torrent.js +431 -0
- package/dist/commands/torrent.js.map +1 -0
- package/dist/commands/tui.d.ts +8 -0
- package/dist/commands/tui.d.ts.map +1 -0
- package/dist/commands/tui.js +15 -0
- package/dist/commands/tui.js.map +1 -0
- package/dist/commands/wake.d.ts +9 -0
- package/dist/commands/wake.d.ts.map +1 -0
- package/dist/commands/wake.js +188 -0
- package/dist/commands/wake.js.map +1 -0
- package/dist/commands/watch.d.ts +3 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +245 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/commands/who-touched.d.ts +9 -0
- package/dist/commands/who-touched.d.ts.map +1 -0
- package/dist/commands/who-touched.js +186 -0
- package/dist/commands/who-touched.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/agent-errors.d.ts +41 -0
- package/dist/lib/agent-errors.d.ts.map +1 -0
- package/dist/lib/agent-errors.js +143 -0
- package/dist/lib/agent-errors.js.map +1 -0
- package/dist/lib/ast.d.ts +56 -0
- package/dist/lib/ast.d.ts.map +1 -0
- package/dist/lib/ast.js +134 -0
- package/dist/lib/ast.js.map +1 -0
- package/dist/lib/config.d.ts +33 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +127 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/crdt.d.ts +83 -0
- package/dist/lib/crdt.d.ts.map +1 -0
- package/dist/lib/crdt.js +160 -0
- package/dist/lib/crdt.js.map +1 -0
- package/dist/lib/crypto.d.ts +71 -0
- package/dist/lib/crypto.d.ts.map +1 -0
- package/dist/lib/crypto.js +172 -0
- package/dist/lib/crypto.js.map +1 -0
- package/dist/lib/errors.d.ts +35 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +71 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/license.d.ts +61 -0
- package/dist/lib/license.d.ts.map +1 -0
- package/dist/lib/license.js +171 -0
- package/dist/lib/license.js.map +1 -0
- package/dist/lib/security.d.ts +53 -0
- package/dist/lib/security.d.ts.map +1 -0
- package/dist/lib/security.js +122 -0
- package/dist/lib/security.js.map +1 -0
- package/dist/lib/update-check.d.ts +11 -0
- package/dist/lib/update-check.d.ts.map +1 -0
- package/dist/lib/update-check.js +113 -0
- package/dist/lib/update-check.js.map +1 -0
- package/dist/storage/adapter.d.ts +58 -0
- package/dist/storage/adapter.d.ts.map +1 -0
- package/dist/storage/adapter.js +8 -0
- package/dist/storage/adapter.js.map +1 -0
- package/dist/storage/factory.d.ts +6 -0
- package/dist/storage/factory.d.ts.map +1 -0
- package/dist/storage/factory.js +22 -0
- package/dist/storage/factory.js.map +1 -0
- package/dist/storage/index.d.ts +5 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/local.d.ts +24 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +101 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/storage/supabase.d.ts +52 -0
- package/dist/storage/supabase.d.ts.map +1 -0
- package/dist/storage/supabase.js +221 -0
- package/dist/storage/supabase.js.map +1 -0
- package/dist/tui/screen.d.ts +14 -0
- package/dist/tui/screen.d.ts.map +1 -0
- package/dist/tui/screen.js +136 -0
- package/dist/tui/screen.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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"}
|