spidersan 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/README.md +3 -1
- package/dist/commands/conflicts.d.ts.map +1 -1
- package/dist/commands/conflicts.js +14 -46
- package/dist/commands/conflicts.js.map +1 -1
- package/dist/commands/cross-conflicts.d.ts.map +1 -1
- package/dist/commands/cross-conflicts.js +5 -2
- package/dist/commands/cross-conflicts.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +117 -59
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/pulse.d.ts.map +1 -1
- package/dist/commands/pulse.js +11 -19
- package/dist/commands/pulse.js.map +1 -1
- package/dist/commands/queen.d.ts.map +1 -1
- package/dist/commands/queen.js +27 -14
- package/dist/commands/queen.js.map +1 -1
- package/dist/commands/stale.d.ts +1 -9
- package/dist/commands/stale.d.ts.map +1 -1
- package/dist/commands/stale.js +1 -42
- package/dist/commands/stale.js.map +1 -1
- package/dist/lib/agent-errors.js +2 -2
- package/dist/lib/agent-errors.js.map +1 -1
- package/dist/lib/daily-bridge.d.ts.map +1 -1
- package/dist/lib/daily-bridge.js +3 -2
- package/dist/lib/daily-bridge.js.map +1 -1
- package/dist/lib/regex-utils.d.ts +6 -0
- package/dist/lib/regex-utils.d.ts.map +1 -0
- package/dist/lib/regex-utils.js +24 -0
- package/dist/lib/regex-utils.js.map +1 -0
- package/dist/lib/repo-scanner.d.ts +0 -4
- package/dist/lib/repo-scanner.d.ts.map +1 -1
- package/dist/lib/repo-scanner.js +2 -1
- package/dist/lib/repo-scanner.js.map +1 -1
- package/dist/lib/security.d.ts +6 -0
- package/dist/lib/security.d.ts.map +1 -1
- package/dist/lib/security.js +10 -0
- package/dist/lib/security.js.map +1 -1
- package/dist/storage/index.d.ts +0 -5
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +0 -6
- package/dist/storage/index.js.map +1 -1
- package/package.json +90 -92
- package/dist/storage/git-messages.d.ts +0 -53
- package/dist/storage/git-messages.d.ts.map +0 -1
- package/dist/storage/git-messages.js +0 -376
- package/dist/storage/git-messages.js.map +0 -1
- package/dist/storage/local-messages.d.ts +0 -37
- package/dist/storage/local-messages.d.ts.map +0 -1
- package/dist/storage/local-messages.js +0 -151
- package/dist/storage/local-messages.js.map +0 -1
- package/dist/storage/message-adapter.d.ts +0 -86
- package/dist/storage/message-adapter.d.ts.map +0 -1
- package/dist/storage/message-adapter.js +0 -28
- package/dist/storage/message-adapter.js.map +0 -1
- package/dist/storage/message-factory.d.ts +0 -36
- package/dist/storage/message-factory.d.ts.map +0 -1
- package/dist/storage/message-factory.js +0 -99
- package/dist/storage/message-factory.js.map +0 -1
- package/dist/storage/mycmail-adapter.d.ts +0 -38
- package/dist/storage/mycmail-adapter.d.ts.map +0 -1
- package/dist/storage/mycmail-adapter.js +0 -302
- package/dist/storage/mycmail-adapter.js.map +0 -1
|
@@ -1,376 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Git Coordination Branch Message Storage Adapter (Tier 2)
|
|
3
|
-
*
|
|
4
|
-
* Stores messages in an orphan branch: spidersan/messages
|
|
5
|
-
* Structure:
|
|
6
|
-
* inbox/<agent-id>/<timestamp>_<from>_<subject-slug>.json
|
|
7
|
-
* outbox/<agent-id>/<timestamp>_<to>_<subject-slug>.json
|
|
8
|
-
*
|
|
9
|
-
* Near-real-time coordination on pull. Works across machines with git remote.
|
|
10
|
-
*/
|
|
11
|
-
import { spawnSync, execFileSync } from 'child_process';
|
|
12
|
-
import * as fs from 'fs';
|
|
13
|
-
import * as path from 'path';
|
|
14
|
-
import { generateMessageId, subjectToSlug } from './message-adapter.js';
|
|
15
|
-
import { validateAgentId } from '../lib/security.js';
|
|
16
|
-
const MESSAGES_BRANCH = 'spidersan/messages';
|
|
17
|
-
export class GitMessagesAdapter {
|
|
18
|
-
basePath;
|
|
19
|
-
branchInitialized = null;
|
|
20
|
-
constructor(basePath = process.cwd()) {
|
|
21
|
-
this.basePath = basePath;
|
|
22
|
-
}
|
|
23
|
-
getTier() {
|
|
24
|
-
return 2;
|
|
25
|
-
}
|
|
26
|
-
getTierName() {
|
|
27
|
-
return 'git-coordination-branch';
|
|
28
|
-
}
|
|
29
|
-
async isAvailable() {
|
|
30
|
-
// Check if we're in a git repository
|
|
31
|
-
try {
|
|
32
|
-
execFileSync('git', ['rev-parse', '--git-dir'], {
|
|
33
|
-
cwd: this.basePath,
|
|
34
|
-
stdio: 'ignore',
|
|
35
|
-
});
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
async getStatus() {
|
|
43
|
-
const available = await this.isAvailable();
|
|
44
|
-
return {
|
|
45
|
-
tier: 2,
|
|
46
|
-
name: this.getTierName(),
|
|
47
|
-
available,
|
|
48
|
-
reason: available
|
|
49
|
-
? 'Git repository detected'
|
|
50
|
-
: 'Not in a git repository',
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Check if the messages branch exists
|
|
55
|
-
*/
|
|
56
|
-
branchExists() {
|
|
57
|
-
try {
|
|
58
|
-
execFileSync('git', ['rev-parse', '--verify', MESSAGES_BRANCH], {
|
|
59
|
-
cwd: this.basePath,
|
|
60
|
-
stdio: 'ignore',
|
|
61
|
-
});
|
|
62
|
-
return true;
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Initialize the orphan branch if it doesn't exist
|
|
70
|
-
*/
|
|
71
|
-
async ensureBranch() {
|
|
72
|
-
if (this.branchInitialized)
|
|
73
|
-
return;
|
|
74
|
-
if (!this.branchExists()) {
|
|
75
|
-
// Create orphan branch with an initial commit
|
|
76
|
-
const currentBranch = execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {
|
|
77
|
-
cwd: this.basePath,
|
|
78
|
-
encoding: 'utf-8',
|
|
79
|
-
}).trim();
|
|
80
|
-
try {
|
|
81
|
-
// Create orphan branch
|
|
82
|
-
execFileSync('git', ['checkout', '--orphan', MESSAGES_BRANCH], {
|
|
83
|
-
cwd: this.basePath,
|
|
84
|
-
stdio: 'ignore',
|
|
85
|
-
});
|
|
86
|
-
// Remove all files from index
|
|
87
|
-
try {
|
|
88
|
-
execFileSync('git', ['rm', '-rf', '.'], {
|
|
89
|
-
cwd: this.basePath,
|
|
90
|
-
stdio: 'ignore',
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
catch {
|
|
94
|
-
// Ignore if nothing to remove
|
|
95
|
-
}
|
|
96
|
-
// Create initial structure
|
|
97
|
-
const inboxDir = path.join(this.basePath, 'inbox');
|
|
98
|
-
const outboxDir = path.join(this.basePath, 'outbox');
|
|
99
|
-
fs.mkdirSync(inboxDir, { recursive: true });
|
|
100
|
-
fs.mkdirSync(outboxDir, { recursive: true });
|
|
101
|
-
// Create .gitkeep files
|
|
102
|
-
fs.writeFileSync(path.join(inboxDir, '.gitkeep'), '');
|
|
103
|
-
fs.writeFileSync(path.join(outboxDir, '.gitkeep'), '');
|
|
104
|
-
execFileSync('git', ['add', 'inbox/.gitkeep', 'outbox/.gitkeep'], {
|
|
105
|
-
cwd: this.basePath,
|
|
106
|
-
stdio: 'ignore',
|
|
107
|
-
});
|
|
108
|
-
execFileSync('git', ['commit', '-m', 'Initialize spidersan messages branch'], {
|
|
109
|
-
cwd: this.basePath,
|
|
110
|
-
stdio: 'ignore',
|
|
111
|
-
});
|
|
112
|
-
// Return to original branch
|
|
113
|
-
execFileSync('git', ['checkout', currentBranch], {
|
|
114
|
-
cwd: this.basePath,
|
|
115
|
-
stdio: 'ignore',
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
catch (error) {
|
|
119
|
-
// Try to recover to original branch
|
|
120
|
-
try {
|
|
121
|
-
execFileSync('git', ['checkout', currentBranch], {
|
|
122
|
-
cwd: this.basePath,
|
|
123
|
-
stdio: 'ignore',
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
catch {
|
|
127
|
-
// Ignore recovery errors
|
|
128
|
-
}
|
|
129
|
-
throw error;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
this.branchInitialized = true;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Generate filename for a message
|
|
136
|
-
*/
|
|
137
|
-
generateFilename(message, isInbox) {
|
|
138
|
-
const timestamp = message.timestamp.getTime();
|
|
139
|
-
const otherAgent = isInbox ? message.from : message.to;
|
|
140
|
-
const slug = subjectToSlug(message.subject);
|
|
141
|
-
return `${timestamp}_${otherAgent}_${slug}.json`;
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Read a file from the messages branch without checkout
|
|
145
|
-
*/
|
|
146
|
-
readFromBranch(path) {
|
|
147
|
-
try {
|
|
148
|
-
const result = spawnSync('git', ['show', `${MESSAGES_BRANCH}:${path}`], {
|
|
149
|
-
cwd: this.basePath,
|
|
150
|
-
encoding: 'utf-8',
|
|
151
|
-
});
|
|
152
|
-
if (result.status !== 0)
|
|
153
|
-
return null;
|
|
154
|
-
return result.stdout;
|
|
155
|
-
}
|
|
156
|
-
catch {
|
|
157
|
-
return null;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* List files in a directory on the messages branch
|
|
162
|
-
*/
|
|
163
|
-
listFromBranch(path) {
|
|
164
|
-
try {
|
|
165
|
-
const result = spawnSync('git', ['ls-tree', '--name-only', `${MESSAGES_BRANCH}`, path + '/'], {
|
|
166
|
-
cwd: this.basePath,
|
|
167
|
-
encoding: 'utf-8',
|
|
168
|
-
});
|
|
169
|
-
if (result.status !== 0)
|
|
170
|
-
return [];
|
|
171
|
-
return result.stdout
|
|
172
|
-
.trim()
|
|
173
|
-
.split('\n')
|
|
174
|
-
.filter(line => line && line.endsWith('.json'));
|
|
175
|
-
}
|
|
176
|
-
catch {
|
|
177
|
-
return [];
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Write a file to the messages branch
|
|
182
|
-
*/
|
|
183
|
-
async writeToBranch(filePath, content) {
|
|
184
|
-
const currentBranch = execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {
|
|
185
|
-
cwd: this.basePath,
|
|
186
|
-
encoding: 'utf-8',
|
|
187
|
-
}).trim();
|
|
188
|
-
// Stash any uncommitted changes
|
|
189
|
-
let hasStash = false;
|
|
190
|
-
try {
|
|
191
|
-
const stashResult = execFileSync('git', ['stash'], {
|
|
192
|
-
cwd: this.basePath,
|
|
193
|
-
encoding: 'utf-8',
|
|
194
|
-
});
|
|
195
|
-
hasStash = !stashResult.includes('No local changes');
|
|
196
|
-
}
|
|
197
|
-
catch {
|
|
198
|
-
// No changes to stash
|
|
199
|
-
}
|
|
200
|
-
try {
|
|
201
|
-
// Checkout messages branch
|
|
202
|
-
execFileSync('git', ['checkout', MESSAGES_BRANCH], {
|
|
203
|
-
cwd: this.basePath,
|
|
204
|
-
stdio: 'ignore',
|
|
205
|
-
});
|
|
206
|
-
// Ensure directory exists
|
|
207
|
-
const fullPath = path.join(this.basePath, filePath);
|
|
208
|
-
const dir = path.dirname(fullPath);
|
|
209
|
-
// Security: Use fs module instead of shell commands to prevent injection
|
|
210
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
211
|
-
// Write file directly using fs
|
|
212
|
-
fs.writeFileSync(fullPath, content, { encoding: 'utf-8' });
|
|
213
|
-
// Commit
|
|
214
|
-
execFileSync('git', ['add', filePath], {
|
|
215
|
-
cwd: this.basePath,
|
|
216
|
-
stdio: 'ignore',
|
|
217
|
-
});
|
|
218
|
-
execFileSync('git', ['commit', '-m', `Add message: ${filePath}`], {
|
|
219
|
-
cwd: this.basePath,
|
|
220
|
-
stdio: 'ignore',
|
|
221
|
-
});
|
|
222
|
-
// Try to push if remote exists
|
|
223
|
-
try {
|
|
224
|
-
execFileSync('git', ['push', 'origin', 'spidersan/messages'], {
|
|
225
|
-
cwd: this.basePath,
|
|
226
|
-
stdio: 'ignore',
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
catch {
|
|
230
|
-
// No remote or push failed - that's okay
|
|
231
|
-
}
|
|
232
|
-
return true;
|
|
233
|
-
}
|
|
234
|
-
finally {
|
|
235
|
-
// Return to original branch
|
|
236
|
-
try {
|
|
237
|
-
// Security: Use execFileSync to prevent command injection from branch name
|
|
238
|
-
execFileSync('git', ['checkout', currentBranch], {
|
|
239
|
-
cwd: this.basePath,
|
|
240
|
-
stdio: 'ignore',
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
catch {
|
|
244
|
-
// Ignore recovery errors
|
|
245
|
-
}
|
|
246
|
-
// Restore stash if we had one
|
|
247
|
-
if (hasStash) {
|
|
248
|
-
try {
|
|
249
|
-
execFileSync('git', ['stash', 'pop'], {
|
|
250
|
-
cwd: this.basePath,
|
|
251
|
-
stdio: 'ignore',
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
catch {
|
|
255
|
-
// Stash pop failed - might have conflicts
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* Update a file on the messages branch (for marking read)
|
|
262
|
-
*/
|
|
263
|
-
async updateOnBranch(path, content) {
|
|
264
|
-
return this.writeToBranch(path, content);
|
|
265
|
-
}
|
|
266
|
-
async send(input) {
|
|
267
|
-
await this.ensureBranch();
|
|
268
|
-
// Security: Validate agent IDs to prevent path traversal/injection
|
|
269
|
-
validateAgentId(input.from);
|
|
270
|
-
validateAgentId(input.to);
|
|
271
|
-
const message = {
|
|
272
|
-
id: generateMessageId(),
|
|
273
|
-
from: input.from,
|
|
274
|
-
to: input.to,
|
|
275
|
-
subject: input.subject,
|
|
276
|
-
body: input.body,
|
|
277
|
-
timestamp: new Date(),
|
|
278
|
-
type: input.type || 'info',
|
|
279
|
-
encrypted: input.encrypted || false,
|
|
280
|
-
read: false,
|
|
281
|
-
branch: input.branch,
|
|
282
|
-
files: input.files,
|
|
283
|
-
};
|
|
284
|
-
const filename = this.generateFilename(message, true);
|
|
285
|
-
const inboxPath = `inbox/${message.to}/${filename}`;
|
|
286
|
-
const outboxPath = `outbox/${message.from}/${filename}`;
|
|
287
|
-
const content = JSON.stringify(message, null, 2);
|
|
288
|
-
// Write to recipient's inbox
|
|
289
|
-
await this.writeToBranch(inboxPath, content);
|
|
290
|
-
// Write to sender's outbox (same content)
|
|
291
|
-
await this.writeToBranch(outboxPath, content);
|
|
292
|
-
return message;
|
|
293
|
-
}
|
|
294
|
-
async inbox(agentId, options = {}) {
|
|
295
|
-
validateAgentId(agentId);
|
|
296
|
-
await this.ensureBranch();
|
|
297
|
-
// Try to pull latest if remote exists
|
|
298
|
-
try {
|
|
299
|
-
execFileSync('git', ['fetch', 'origin', 'spidersan/messages:spidersan/messages'], {
|
|
300
|
-
cwd: this.basePath,
|
|
301
|
-
stdio: 'ignore',
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
catch {
|
|
305
|
-
// No remote or fetch failed
|
|
306
|
-
}
|
|
307
|
-
const files = this.listFromBranch(`inbox/${agentId}`);
|
|
308
|
-
const messages = [];
|
|
309
|
-
for (const file of files) {
|
|
310
|
-
const content = this.readFromBranch(file);
|
|
311
|
-
if (content) {
|
|
312
|
-
try {
|
|
313
|
-
const msg = JSON.parse(content);
|
|
314
|
-
msg.timestamp = new Date(msg.timestamp);
|
|
315
|
-
messages.push(msg);
|
|
316
|
-
}
|
|
317
|
-
catch {
|
|
318
|
-
// Skip invalid JSON
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
// Sort by timestamp descending
|
|
323
|
-
messages.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
|
|
324
|
-
let result = messages;
|
|
325
|
-
if (options.unread) {
|
|
326
|
-
result = result.filter(msg => !msg.read);
|
|
327
|
-
}
|
|
328
|
-
if (options.limit && options.limit > 0) {
|
|
329
|
-
result = result.slice(0, options.limit);
|
|
330
|
-
}
|
|
331
|
-
return result;
|
|
332
|
-
}
|
|
333
|
-
async read(messageId) {
|
|
334
|
-
await this.ensureBranch();
|
|
335
|
-
// We need to search through all inbox directories
|
|
336
|
-
// This is inefficient but necessary without an index
|
|
337
|
-
try {
|
|
338
|
-
const result = spawnSync('git', ['ls-tree', '-r', '--name-only', MESSAGES_BRANCH, 'inbox/'], {
|
|
339
|
-
cwd: this.basePath,
|
|
340
|
-
encoding: 'utf-8',
|
|
341
|
-
});
|
|
342
|
-
if (result.status !== 0)
|
|
343
|
-
return null;
|
|
344
|
-
const files = result.stdout.trim().split('\n').filter(Boolean);
|
|
345
|
-
for (const file of files) {
|
|
346
|
-
const content = this.readFromBranch(file);
|
|
347
|
-
if (content) {
|
|
348
|
-
try {
|
|
349
|
-
const msg = JSON.parse(content);
|
|
350
|
-
if (msg.id === messageId) {
|
|
351
|
-
msg.timestamp = new Date(msg.timestamp);
|
|
352
|
-
return msg;
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
catch {
|
|
356
|
-
// Skip invalid JSON
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
catch {
|
|
362
|
-
// Error listing files
|
|
363
|
-
}
|
|
364
|
-
return null;
|
|
365
|
-
}
|
|
366
|
-
async markRead(messageId) {
|
|
367
|
-
const message = await this.read(messageId);
|
|
368
|
-
if (!message)
|
|
369
|
-
return false;
|
|
370
|
-
message.read = true;
|
|
371
|
-
const filename = this.generateFilename(message, true);
|
|
372
|
-
const inboxPath = `inbox/${message.to}/${filename}`;
|
|
373
|
-
return this.updateOnBranch(inboxPath, JSON.stringify(message, null, 2));
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
//# sourceMappingURL=git-messages.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git-messages.js","sourceRoot":"","sources":["../../src/storage/git-messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Local JSON Message Storage Adapter (Tier 3)
|
|
3
|
-
*
|
|
4
|
-
* Stores messages in .spidersan/messages.json
|
|
5
|
-
* This is the fallback when git and mycmail are unavailable.
|
|
6
|
-
* Single-machine only - no cross-agent coordination.
|
|
7
|
-
*/
|
|
8
|
-
import type { MessageStorageAdapter, Message, SendMessageInput, InboxOptions, TierStatus } from './message-adapter.js';
|
|
9
|
-
export declare class LocalMessagesAdapter implements MessageStorageAdapter {
|
|
10
|
-
private basePath;
|
|
11
|
-
private messagesPath;
|
|
12
|
-
constructor(basePath?: string);
|
|
13
|
-
getTier(): number;
|
|
14
|
-
getTierName(): string;
|
|
15
|
-
isAvailable(): Promise<boolean>;
|
|
16
|
-
getStatus(): Promise<TierStatus>;
|
|
17
|
-
private ensureDir;
|
|
18
|
-
private load;
|
|
19
|
-
private save;
|
|
20
|
-
send(input: SendMessageInput): Promise<Message>;
|
|
21
|
-
inbox(agentId: string, options?: InboxOptions): Promise<Message[]>;
|
|
22
|
-
read(messageId: string): Promise<Message | null>;
|
|
23
|
-
markRead(messageId: string): Promise<boolean>;
|
|
24
|
-
/**
|
|
25
|
-
* Get sent messages (outbox) for an agent
|
|
26
|
-
*/
|
|
27
|
-
outbox(agentId: string, options?: InboxOptions): Promise<Message[]>;
|
|
28
|
-
/**
|
|
29
|
-
* Delete a message
|
|
30
|
-
*/
|
|
31
|
-
delete(messageId: string): Promise<boolean>;
|
|
32
|
-
/**
|
|
33
|
-
* Clean up old messages
|
|
34
|
-
*/
|
|
35
|
-
cleanup(olderThan: Date): Promise<number>;
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=local-messages.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"local-messages.d.ts","sourceRoot":"","sources":["../../src/storage/local-messages.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EACR,qBAAqB,EACrB,OAAO,EACP,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACb,MAAM,sBAAsB,CAAC;AAW9B,qBAAa,oBAAqB,YAAW,qBAAqB;IAC9D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;gBAEjB,QAAQ,GAAE,MAAsB;IAK5C,OAAO,IAAI,MAAM;IAIjB,WAAW,IAAI,MAAM;IAIf,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAK/B,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;YASxB,SAAS;YAOT,IAAI;YAeJ,IAAI;IAKZ,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAuB/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAmBtE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAMhD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAanD;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAe7E;;OAEG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAajD;;OAEG;IACG,OAAO,CAAC,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;CAelD"}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Local JSON Message Storage Adapter (Tier 3)
|
|
3
|
-
*
|
|
4
|
-
* Stores messages in .spidersan/messages.json
|
|
5
|
-
* This is the fallback when git and mycmail are unavailable.
|
|
6
|
-
* Single-machine only - no cross-agent coordination.
|
|
7
|
-
*/
|
|
8
|
-
import { readFile, writeFile, mkdir } from 'fs/promises';
|
|
9
|
-
import { existsSync } from 'fs';
|
|
10
|
-
import { join } from 'path';
|
|
11
|
-
import { generateMessageId } from './message-adapter.js';
|
|
12
|
-
const SPIDERSAN_DIR = '.spidersan';
|
|
13
|
-
const MESSAGES_FILE = 'messages.json';
|
|
14
|
-
export class LocalMessagesAdapter {
|
|
15
|
-
basePath;
|
|
16
|
-
messagesPath;
|
|
17
|
-
constructor(basePath = process.cwd()) {
|
|
18
|
-
this.basePath = basePath;
|
|
19
|
-
this.messagesPath = join(basePath, SPIDERSAN_DIR, MESSAGES_FILE);
|
|
20
|
-
}
|
|
21
|
-
getTier() {
|
|
22
|
-
return 3;
|
|
23
|
-
}
|
|
24
|
-
getTierName() {
|
|
25
|
-
return 'local-json';
|
|
26
|
-
}
|
|
27
|
-
async isAvailable() {
|
|
28
|
-
// Local storage is always available
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
async getStatus() {
|
|
32
|
-
return {
|
|
33
|
-
tier: 3,
|
|
34
|
-
name: this.getTierName(),
|
|
35
|
-
available: true,
|
|
36
|
-
reason: 'Local JSON storage is always available',
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
async ensureDir() {
|
|
40
|
-
const dir = join(this.basePath, SPIDERSAN_DIR);
|
|
41
|
-
if (!existsSync(dir)) {
|
|
42
|
-
await mkdir(dir, { recursive: true });
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
async load() {
|
|
46
|
-
try {
|
|
47
|
-
const data = await readFile(this.messagesPath, 'utf-8');
|
|
48
|
-
const registry = JSON.parse(data);
|
|
49
|
-
// Convert timestamp strings back to Date objects
|
|
50
|
-
registry.messages = registry.messages.map(msg => ({
|
|
51
|
-
...msg,
|
|
52
|
-
timestamp: new Date(msg.timestamp),
|
|
53
|
-
}));
|
|
54
|
-
return registry;
|
|
55
|
-
}
|
|
56
|
-
catch {
|
|
57
|
-
return { version: '1.0', messages: [] };
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
async save(registry) {
|
|
61
|
-
await this.ensureDir();
|
|
62
|
-
await writeFile(this.messagesPath, JSON.stringify(registry, null, 2));
|
|
63
|
-
}
|
|
64
|
-
async send(input) {
|
|
65
|
-
const registry = await this.load();
|
|
66
|
-
const message = {
|
|
67
|
-
id: generateMessageId(),
|
|
68
|
-
from: input.from,
|
|
69
|
-
to: input.to,
|
|
70
|
-
subject: input.subject,
|
|
71
|
-
body: input.body,
|
|
72
|
-
timestamp: new Date(),
|
|
73
|
-
type: input.type || 'info',
|
|
74
|
-
encrypted: input.encrypted || false,
|
|
75
|
-
read: false,
|
|
76
|
-
branch: input.branch,
|
|
77
|
-
files: input.files,
|
|
78
|
-
};
|
|
79
|
-
registry.messages.push(message);
|
|
80
|
-
await this.save(registry);
|
|
81
|
-
return message;
|
|
82
|
-
}
|
|
83
|
-
async inbox(agentId, options = {}) {
|
|
84
|
-
const registry = await this.load();
|
|
85
|
-
let messages = registry.messages.filter(msg => msg.to === agentId);
|
|
86
|
-
// Sort by timestamp descending (newest first)
|
|
87
|
-
messages.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
|
|
88
|
-
if (options.unread) {
|
|
89
|
-
messages = messages.filter(msg => !msg.read);
|
|
90
|
-
}
|
|
91
|
-
if (options.limit && options.limit > 0) {
|
|
92
|
-
messages = messages.slice(0, options.limit);
|
|
93
|
-
}
|
|
94
|
-
return messages;
|
|
95
|
-
}
|
|
96
|
-
async read(messageId) {
|
|
97
|
-
const registry = await this.load();
|
|
98
|
-
const message = registry.messages.find(msg => msg.id === messageId);
|
|
99
|
-
return message || null;
|
|
100
|
-
}
|
|
101
|
-
async markRead(messageId) {
|
|
102
|
-
const registry = await this.load();
|
|
103
|
-
const message = registry.messages.find(msg => msg.id === messageId);
|
|
104
|
-
if (!message) {
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
107
|
-
message.read = true;
|
|
108
|
-
await this.save(registry);
|
|
109
|
-
return true;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Get sent messages (outbox) for an agent
|
|
113
|
-
*/
|
|
114
|
-
async outbox(agentId, options = {}) {
|
|
115
|
-
const registry = await this.load();
|
|
116
|
-
let messages = registry.messages.filter(msg => msg.from === agentId);
|
|
117
|
-
// Sort by timestamp descending (newest first)
|
|
118
|
-
messages.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
|
|
119
|
-
if (options.limit && options.limit > 0) {
|
|
120
|
-
messages = messages.slice(0, options.limit);
|
|
121
|
-
}
|
|
122
|
-
return messages;
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Delete a message
|
|
126
|
-
*/
|
|
127
|
-
async delete(messageId) {
|
|
128
|
-
const registry = await this.load();
|
|
129
|
-
const index = registry.messages.findIndex(msg => msg.id === messageId);
|
|
130
|
-
if (index === -1) {
|
|
131
|
-
return false;
|
|
132
|
-
}
|
|
133
|
-
registry.messages.splice(index, 1);
|
|
134
|
-
await this.save(registry);
|
|
135
|
-
return true;
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Clean up old messages
|
|
139
|
-
*/
|
|
140
|
-
async cleanup(olderThan) {
|
|
141
|
-
const registry = await this.load();
|
|
142
|
-
const originalCount = registry.messages.length;
|
|
143
|
-
registry.messages = registry.messages.filter(msg => msg.timestamp >= olderThan);
|
|
144
|
-
const removed = originalCount - registry.messages.length;
|
|
145
|
-
if (removed > 0) {
|
|
146
|
-
await this.save(registry);
|
|
147
|
-
}
|
|
148
|
-
return removed;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
//# sourceMappingURL=local-messages.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"local-messages.js","sourceRoot":"","sources":["../../src/storage/local-messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Message Storage Adapter Interface
|
|
3
|
-
*
|
|
4
|
-
* Abstract interface for tiered message storage.
|
|
5
|
-
* Implementations:
|
|
6
|
-
* Tier 1: MycmailAdapter (real-time, full features via Supabase)
|
|
7
|
-
* Tier 2: GitMessagesAdapter (git orphan branch coordination)
|
|
8
|
-
* Tier 3: LocalMessagesAdapter (single-machine fallback)
|
|
9
|
-
*/
|
|
10
|
-
export type MessageType = 'info' | 'question' | 'alert' | 'handoff' | 'file_share';
|
|
11
|
-
export interface Message {
|
|
12
|
-
id: string;
|
|
13
|
-
from: string;
|
|
14
|
-
to: string;
|
|
15
|
-
subject: string;
|
|
16
|
-
body: string;
|
|
17
|
-
timestamp: Date;
|
|
18
|
-
type: MessageType;
|
|
19
|
-
encrypted: boolean;
|
|
20
|
-
read: boolean;
|
|
21
|
-
branch?: string;
|
|
22
|
-
files?: string[];
|
|
23
|
-
}
|
|
24
|
-
export interface SendMessageInput {
|
|
25
|
-
from: string;
|
|
26
|
-
to: string;
|
|
27
|
-
subject: string;
|
|
28
|
-
body: string;
|
|
29
|
-
type?: MessageType;
|
|
30
|
-
encrypted?: boolean;
|
|
31
|
-
branch?: string;
|
|
32
|
-
files?: string[];
|
|
33
|
-
}
|
|
34
|
-
export interface InboxOptions {
|
|
35
|
-
unread?: boolean;
|
|
36
|
-
limit?: number;
|
|
37
|
-
}
|
|
38
|
-
export interface TierStatus {
|
|
39
|
-
tier: number;
|
|
40
|
-
name: string;
|
|
41
|
-
available: boolean;
|
|
42
|
-
reason?: string;
|
|
43
|
-
}
|
|
44
|
-
export interface MessageStorageAdapter {
|
|
45
|
-
/**
|
|
46
|
-
* Get the tier number (1 = highest priority, 3 = lowest)
|
|
47
|
-
*/
|
|
48
|
-
getTier(): number;
|
|
49
|
-
/**
|
|
50
|
-
* Get the human-readable tier name
|
|
51
|
-
*/
|
|
52
|
-
getTierName(): string;
|
|
53
|
-
/**
|
|
54
|
-
* Check if this storage backend is available
|
|
55
|
-
*/
|
|
56
|
-
isAvailable(): Promise<boolean>;
|
|
57
|
-
/**
|
|
58
|
-
* Get detailed availability status
|
|
59
|
-
*/
|
|
60
|
-
getStatus(): Promise<TierStatus>;
|
|
61
|
-
/**
|
|
62
|
-
* Send a message
|
|
63
|
-
*/
|
|
64
|
-
send(message: SendMessageInput): Promise<Message>;
|
|
65
|
-
/**
|
|
66
|
-
* Get inbox messages for an agent
|
|
67
|
-
*/
|
|
68
|
-
inbox(agentId: string, options?: InboxOptions): Promise<Message[]>;
|
|
69
|
-
/**
|
|
70
|
-
* Read a specific message by ID
|
|
71
|
-
*/
|
|
72
|
-
read(messageId: string): Promise<Message | null>;
|
|
73
|
-
/**
|
|
74
|
-
* Mark a message as read
|
|
75
|
-
*/
|
|
76
|
-
markRead(messageId: string): Promise<boolean>;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Generate a unique message ID
|
|
80
|
-
*/
|
|
81
|
-
export declare function generateMessageId(): string;
|
|
82
|
-
/**
|
|
83
|
-
* Create a slug from subject for file naming
|
|
84
|
-
*/
|
|
85
|
-
export declare function subjectToSlug(subject: string): string;
|
|
86
|
-
//# sourceMappingURL=message-adapter.d.ts.map
|