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.
Files changed (63) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +3 -1
  3. package/dist/commands/conflicts.d.ts.map +1 -1
  4. package/dist/commands/conflicts.js +14 -46
  5. package/dist/commands/conflicts.js.map +1 -1
  6. package/dist/commands/cross-conflicts.d.ts.map +1 -1
  7. package/dist/commands/cross-conflicts.js +5 -2
  8. package/dist/commands/cross-conflicts.js.map +1 -1
  9. package/dist/commands/doctor.d.ts.map +1 -1
  10. package/dist/commands/doctor.js +117 -59
  11. package/dist/commands/doctor.js.map +1 -1
  12. package/dist/commands/pulse.d.ts.map +1 -1
  13. package/dist/commands/pulse.js +11 -19
  14. package/dist/commands/pulse.js.map +1 -1
  15. package/dist/commands/queen.d.ts.map +1 -1
  16. package/dist/commands/queen.js +27 -14
  17. package/dist/commands/queen.js.map +1 -1
  18. package/dist/commands/stale.d.ts +1 -9
  19. package/dist/commands/stale.d.ts.map +1 -1
  20. package/dist/commands/stale.js +1 -42
  21. package/dist/commands/stale.js.map +1 -1
  22. package/dist/lib/agent-errors.js +2 -2
  23. package/dist/lib/agent-errors.js.map +1 -1
  24. package/dist/lib/daily-bridge.d.ts.map +1 -1
  25. package/dist/lib/daily-bridge.js +3 -2
  26. package/dist/lib/daily-bridge.js.map +1 -1
  27. package/dist/lib/regex-utils.d.ts +6 -0
  28. package/dist/lib/regex-utils.d.ts.map +1 -0
  29. package/dist/lib/regex-utils.js +24 -0
  30. package/dist/lib/regex-utils.js.map +1 -0
  31. package/dist/lib/repo-scanner.d.ts +0 -4
  32. package/dist/lib/repo-scanner.d.ts.map +1 -1
  33. package/dist/lib/repo-scanner.js +2 -1
  34. package/dist/lib/repo-scanner.js.map +1 -1
  35. package/dist/lib/security.d.ts +6 -0
  36. package/dist/lib/security.d.ts.map +1 -1
  37. package/dist/lib/security.js +10 -0
  38. package/dist/lib/security.js.map +1 -1
  39. package/dist/storage/index.d.ts +0 -5
  40. package/dist/storage/index.d.ts.map +1 -1
  41. package/dist/storage/index.js +0 -6
  42. package/dist/storage/index.js.map +1 -1
  43. package/package.json +90 -92
  44. package/dist/storage/git-messages.d.ts +0 -53
  45. package/dist/storage/git-messages.d.ts.map +0 -1
  46. package/dist/storage/git-messages.js +0 -376
  47. package/dist/storage/git-messages.js.map +0 -1
  48. package/dist/storage/local-messages.d.ts +0 -37
  49. package/dist/storage/local-messages.d.ts.map +0 -1
  50. package/dist/storage/local-messages.js +0 -151
  51. package/dist/storage/local-messages.js.map +0 -1
  52. package/dist/storage/message-adapter.d.ts +0 -86
  53. package/dist/storage/message-adapter.d.ts.map +0 -1
  54. package/dist/storage/message-adapter.js +0 -28
  55. package/dist/storage/message-adapter.js.map +0 -1
  56. package/dist/storage/message-factory.d.ts +0 -36
  57. package/dist/storage/message-factory.d.ts.map +0 -1
  58. package/dist/storage/message-factory.js +0 -99
  59. package/dist/storage/message-factory.js.map +0 -1
  60. package/dist/storage/mycmail-adapter.d.ts +0 -38
  61. package/dist/storage/mycmail-adapter.d.ts.map +0 -1
  62. package/dist/storage/mycmail-adapter.js +0 -302
  63. 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