agent-relay 2.0.37 → 2.1.1

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 (88) hide show
  1. package/dist/index.cjs +32003 -33977
  2. package/dist/src/cli/index.js +36 -51
  3. package/dist/src/cli/index.js.map +1 -1
  4. package/package.json +18 -19
  5. package/packages/api-types/package.json +1 -1
  6. package/packages/benchmark/package.json +4 -4
  7. package/packages/bridge/package.json +8 -8
  8. package/packages/cli-tester/package.json +1 -1
  9. package/packages/config/dist/project-namespace.d.ts +28 -0
  10. package/packages/config/dist/project-namespace.d.ts.map +1 -1
  11. package/packages/config/dist/project-namespace.js +42 -0
  12. package/packages/config/dist/project-namespace.js.map +1 -1
  13. package/packages/config/package.json +2 -2
  14. package/packages/config/src/project-namespace.ts +65 -0
  15. package/packages/continuity/dist/formatter.d.ts +8 -2
  16. package/packages/continuity/dist/formatter.d.ts.map +1 -1
  17. package/packages/continuity/dist/formatter.js +142 -7
  18. package/packages/continuity/dist/formatter.js.map +1 -1
  19. package/packages/continuity/dist/index.d.ts +1 -0
  20. package/packages/continuity/dist/index.d.ts.map +1 -1
  21. package/packages/continuity/dist/index.js +2 -0
  22. package/packages/continuity/dist/index.js.map +1 -1
  23. package/packages/continuity/package.json +4 -1
  24. package/packages/continuity/src/formatter.ts +175 -10
  25. package/packages/continuity/src/index.ts +3 -0
  26. package/packages/daemon/dist/enhanced-features.d.ts +2 -3
  27. package/packages/daemon/dist/enhanced-features.d.ts.map +1 -1
  28. package/packages/daemon/dist/enhanced-features.js +1 -0
  29. package/packages/daemon/dist/enhanced-features.js.map +1 -1
  30. package/packages/daemon/dist/index.d.ts +0 -2
  31. package/packages/daemon/dist/index.d.ts.map +1 -1
  32. package/packages/daemon/dist/index.js +0 -3
  33. package/packages/daemon/dist/index.js.map +1 -1
  34. package/packages/daemon/dist/server.d.ts +0 -6
  35. package/packages/daemon/dist/server.d.ts.map +1 -1
  36. package/packages/daemon/dist/server.js +20 -119
  37. package/packages/daemon/dist/server.js.map +1 -1
  38. package/packages/daemon/package.json +12 -14
  39. package/packages/daemon/src/enhanced-features.ts +4 -4
  40. package/packages/daemon/src/index.ts +0 -4
  41. package/packages/daemon/src/server.ts +19 -127
  42. package/packages/daemon/vitest.config.ts +9 -0
  43. package/packages/hooks/package.json +4 -4
  44. package/packages/mcp/package.json +3 -3
  45. package/packages/memory/package.json +2 -2
  46. package/packages/policy/package.json +2 -2
  47. package/packages/protocol/package.json +1 -1
  48. package/packages/resiliency/package.json +1 -1
  49. package/packages/sdk/package.json +2 -2
  50. package/packages/spawner/package.json +1 -1
  51. package/packages/state/package.json +1 -1
  52. package/packages/storage/dist/adapter.d.ts +5 -5
  53. package/packages/storage/dist/adapter.js +9 -9
  54. package/packages/storage/dist/adapter.js.map +1 -1
  55. package/packages/storage/package.json +2 -2
  56. package/packages/storage/src/adapter.ts +9 -9
  57. package/packages/telemetry/package.json +1 -1
  58. package/packages/trajectory/package.json +2 -2
  59. package/packages/user-directory/package.json +2 -2
  60. package/packages/utils/dist/cjs/relay-pty-path.js +111 -55
  61. package/packages/utils/dist/relay-pty-path.d.ts +17 -12
  62. package/packages/utils/dist/relay-pty-path.d.ts.map +1 -1
  63. package/packages/utils/dist/relay-pty-path.js +144 -94
  64. package/packages/utils/dist/relay-pty-path.js.map +1 -1
  65. package/packages/utils/package.json +2 -2
  66. package/packages/utils/src/relay-pty-path.test.ts +373 -0
  67. package/packages/utils/src/relay-pty-path.ts +182 -91
  68. package/packages/wrapper/package.json +6 -6
  69. package/scripts/build-cjs.mjs +2 -0
  70. package/packages/daemon/dist/migrations/index.d.ts +0 -73
  71. package/packages/daemon/dist/migrations/index.d.ts.map +0 -1
  72. package/packages/daemon/dist/migrations/index.js +0 -241
  73. package/packages/daemon/dist/migrations/index.js.map +0 -1
  74. package/packages/daemon/dist/relay-ledger.d.ts +0 -263
  75. package/packages/daemon/dist/relay-ledger.d.ts.map +0 -1
  76. package/packages/daemon/dist/relay-ledger.js +0 -538
  77. package/packages/daemon/dist/relay-ledger.js.map +0 -1
  78. package/packages/daemon/dist/relay-watchdog.d.ts +0 -125
  79. package/packages/daemon/dist/relay-watchdog.d.ts.map +0 -1
  80. package/packages/daemon/dist/relay-watchdog.js +0 -611
  81. package/packages/daemon/dist/relay-watchdog.js.map +0 -1
  82. package/packages/daemon/src/migrations/0001_initial.sql +0 -72
  83. package/packages/daemon/src/migrations/index.test.ts +0 -195
  84. package/packages/daemon/src/migrations/index.ts +0 -286
  85. package/packages/daemon/src/relay-ledger.test.ts +0 -358
  86. package/packages/daemon/src/relay-ledger.ts +0 -713
  87. package/packages/daemon/src/relay-watchdog.test.ts +0 -881
  88. package/packages/daemon/src/relay-watchdog.ts +0 -785
@@ -1,241 +0,0 @@
1
- /**
2
- * SQLite Migration Runner for Relay Ledger
3
- *
4
- * Provides a lightweight migration system for the relay-ledger.db SQLite database.
5
- * Tracks applied migrations in a __migrations table and runs them in order.
6
- *
7
- * Features:
8
- * - Sequential migration execution by name
9
- * - Idempotent (safe to run multiple times)
10
- * - Tracks applied migrations with timestamps
11
- * - Embedded SQL for portability (no file dependencies)
12
- */
13
- // ============================================================================
14
- // Embedded Migrations
15
- // ============================================================================
16
- /**
17
- * Embedded migrations - SQL is stored directly in code for portability.
18
- * Add new migrations to this array in order.
19
- */
20
- const EMBEDDED_MIGRATIONS = [
21
- {
22
- name: '0001_initial',
23
- sql: `
24
- -- Relay Ledger - Initial Schema
25
- -- Migration 0001: Initial tables for relay file tracking
26
-
27
- -- Main relay files table
28
- CREATE TABLE IF NOT EXISTS relay_files (
29
- id INTEGER PRIMARY KEY AUTOINCREMENT,
30
- file_id TEXT NOT NULL UNIQUE,
31
- source_path TEXT NOT NULL,
32
- archive_path TEXT,
33
- agent_name TEXT NOT NULL,
34
- message_type TEXT NOT NULL,
35
- status TEXT NOT NULL DEFAULT 'pending',
36
- retries INTEGER NOT NULL DEFAULT 0,
37
- max_retries INTEGER NOT NULL DEFAULT 3,
38
- discovered_at INTEGER NOT NULL,
39
- processed_at INTEGER,
40
- archived_at INTEGER,
41
- error TEXT,
42
- content_hash TEXT,
43
- file_size INTEGER NOT NULL DEFAULT 0,
44
- file_mtime_ns INTEGER,
45
- file_inode INTEGER,
46
- CONSTRAINT valid_status CHECK (status IN ('pending', 'processing', 'delivered', 'failed', 'archived'))
47
- );
48
-
49
- CREATE INDEX IF NOT EXISTS idx_relay_files_status ON relay_files(status);
50
- CREATE INDEX IF NOT EXISTS idx_relay_files_agent ON relay_files(agent_name);
51
- CREATE INDEX IF NOT EXISTS idx_relay_files_discovered ON relay_files(discovered_at);
52
- CREATE INDEX IF NOT EXISTS idx_relay_files_source ON relay_files(source_path);
53
-
54
- -- Agents registry table
55
- CREATE TABLE IF NOT EXISTS agents (
56
- id INTEGER PRIMARY KEY AUTOINCREMENT,
57
- agent_name TEXT NOT NULL UNIQUE,
58
- created_at INTEGER NOT NULL,
59
- last_seen_at INTEGER NOT NULL,
60
- status TEXT NOT NULL DEFAULT 'active',
61
- metadata TEXT,
62
- CONSTRAINT valid_agent_status CHECK (status IN ('active', 'inactive'))
63
- );
64
-
65
- CREATE INDEX IF NOT EXISTS idx_agents_status ON agents(status);
66
- CREATE INDEX IF NOT EXISTS idx_agents_last_seen ON agents(last_seen_at);
67
-
68
- -- Orchestrator state table (key-value store for crash recovery)
69
- CREATE TABLE IF NOT EXISTS orchestrator_state (
70
- key TEXT PRIMARY KEY,
71
- value TEXT NOT NULL,
72
- updated_at INTEGER NOT NULL
73
- );
74
-
75
- -- Pending operations table (crash recovery atomicity)
76
- CREATE TABLE IF NOT EXISTS pending_operations (
77
- id INTEGER PRIMARY KEY AUTOINCREMENT,
78
- operation_type TEXT NOT NULL,
79
- target_id TEXT NOT NULL,
80
- payload TEXT,
81
- created_at INTEGER NOT NULL,
82
- attempts INTEGER NOT NULL DEFAULT 0,
83
- last_attempt_at INTEGER,
84
- error TEXT,
85
- CONSTRAINT valid_operation_type CHECK (operation_type IN ('process', 'archive', 'cleanup'))
86
- );
87
-
88
- CREATE INDEX IF NOT EXISTS idx_pending_ops_type ON pending_operations(operation_type);
89
- CREATE INDEX IF NOT EXISTS idx_pending_ops_target ON pending_operations(target_id);
90
- `,
91
- },
92
- {
93
- name: '0002_symlink_paths',
94
- sql: `
95
- -- Migration 0002: Add symlink path tracking for production workspace support
96
- -- Workspaces in cloud/production may be symlinked for isolation.
97
- -- We store both the original symlink path (for debugging) and canonical path (for operations).
98
-
99
- -- Add symlink_path column to track original path (may be symlink)
100
- ALTER TABLE relay_files ADD COLUMN symlink_path TEXT;
101
-
102
- -- Create index for symlink lookups
103
- CREATE INDEX IF NOT EXISTS idx_relay_files_symlink ON relay_files(symlink_path);
104
- `,
105
- },
106
- ];
107
- // ============================================================================
108
- // Migration Runner
109
- // ============================================================================
110
- /**
111
- * Create the migrations tracking table if it doesn't exist
112
- */
113
- export function ensureMigrationsTable(db) {
114
- db.exec(`
115
- CREATE TABLE IF NOT EXISTS __migrations (
116
- id INTEGER PRIMARY KEY AUTOINCREMENT,
117
- name TEXT NOT NULL UNIQUE,
118
- applied_at INTEGER NOT NULL,
119
- checksum TEXT NOT NULL
120
- );
121
- `);
122
- }
123
- /**
124
- * Get all applied migrations
125
- */
126
- export function getAppliedMigrations(db) {
127
- const rows = db.prepare(`
128
- SELECT id, name, applied_at, checksum FROM __migrations ORDER BY id ASC
129
- `).all();
130
- return rows.map(row => ({
131
- id: row.id,
132
- name: row.name,
133
- appliedAt: row.applied_at,
134
- checksum: row.checksum,
135
- }));
136
- }
137
- /**
138
- * Check if a specific migration has been applied
139
- */
140
- export function isMigrationApplied(db, name) {
141
- const row = db.prepare(`SELECT 1 FROM __migrations WHERE name = ?`).get(name);
142
- return row !== undefined;
143
- }
144
- /**
145
- * Record a migration as applied
146
- */
147
- export function recordMigration(db, name, checksum) {
148
- db.prepare(`
149
- INSERT INTO __migrations (name, applied_at, checksum) VALUES (?, ?, ?)
150
- `).run(name, Date.now(), checksum);
151
- }
152
- /**
153
- * Calculate a simple checksum for migration content
154
- */
155
- export function calculateChecksum(sql) {
156
- // Simple hash for migration verification
157
- let hash = 0;
158
- for (let i = 0; i < sql.length; i++) {
159
- const char = sql.charCodeAt(i);
160
- hash = ((hash << 5) - hash) + char;
161
- hash = hash & hash; // Convert to 32-bit integer
162
- }
163
- return Math.abs(hash).toString(16).padStart(8, '0');
164
- }
165
- /**
166
- * Load migrations from embedded definitions
167
- */
168
- export function loadMigrationFiles() {
169
- return EMBEDDED_MIGRATIONS.map(m => ({
170
- name: m.name,
171
- sql: m.sql,
172
- checksum: calculateChecksum(m.sql),
173
- }));
174
- }
175
- /**
176
- * Run all pending migrations
177
- */
178
- export function runMigrations(db) {
179
- const result = {
180
- applied: [],
181
- skipped: [],
182
- errors: [],
183
- };
184
- // Ensure migrations table exists
185
- ensureMigrationsTable(db);
186
- // Load all migrations
187
- const migrations = loadMigrationFiles();
188
- // Get applied migrations
189
- const applied = new Set(getAppliedMigrations(db).map(m => m.name));
190
- // Run pending migrations in order
191
- for (const migration of migrations) {
192
- if (applied.has(migration.name)) {
193
- result.skipped.push(migration.name);
194
- continue;
195
- }
196
- try {
197
- // Run migration in a transaction
198
- db.transaction(() => {
199
- db.exec(migration.sql);
200
- recordMigration(db, migration.name, migration.checksum);
201
- })();
202
- result.applied.push(migration.name);
203
- }
204
- catch (err) {
205
- const errorMessage = err instanceof Error ? err.message : String(err);
206
- result.errors.push({ name: migration.name, error: errorMessage });
207
- // Stop on first error
208
- break;
209
- }
210
- }
211
- return result;
212
- }
213
- /**
214
- * Get pending migrations that haven't been applied yet
215
- */
216
- export function getPendingMigrations(db) {
217
- ensureMigrationsTable(db);
218
- const applied = new Set(getAppliedMigrations(db).map(m => m.name));
219
- return loadMigrationFiles().filter(m => !applied.has(m.name));
220
- }
221
- /**
222
- * Verify migration checksums match what was originally applied
223
- */
224
- export function verifyMigrations(db) {
225
- const applied = getAppliedMigrations(db);
226
- const files = loadMigrationFiles();
227
- const fileMap = new Map(files.map(f => [f.name, f]));
228
- const mismatches = [];
229
- for (const record of applied) {
230
- const file = fileMap.get(record.name);
231
- if (file && file.checksum !== record.checksum) {
232
- mismatches.push({
233
- name: record.name,
234
- expected: record.checksum,
235
- actual: file.checksum,
236
- });
237
- }
238
- }
239
- return mismatches;
240
- }
241
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"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"}
@@ -1,263 +0,0 @@
1
- /**
2
- * Relay Ledger - SQLite-based tracking of relay file processing
3
- *
4
- * Tracks files discovered in agent outboxes through their lifecycle:
5
- * pending -> processing -> delivered/failed -> archived
6
- *
7
- * Features:
8
- * - Atomic claims with status WHERE clause
9
- * - Crash recovery (reset processing -> pending on startup)
10
- * - Archive path tracking for auditing
11
- * - Configurable retention
12
- * - Schema migrations for version upgrades
13
- */
14
- import { type MigrationResult } from './migrations/index.js';
15
- export type RelayFileStatus = 'pending' | 'processing' | 'delivered' | 'failed' | 'archived';
16
- export interface RelayFileRecord {
17
- id: number;
18
- fileId: string;
19
- /** Canonical/resolved path (symlinks resolved via realpath) */
20
- sourcePath: string;
21
- /** Original path that may have been a symlink (for debugging) */
22
- symlinkPath: string | null;
23
- archivePath: string | null;
24
- agentName: string;
25
- messageType: string;
26
- status: RelayFileStatus;
27
- retries: number;
28
- maxRetries: number;
29
- discoveredAt: number;
30
- processedAt: number | null;
31
- archivedAt: number | null;
32
- error: string | null;
33
- contentHash: string | null;
34
- fileSize: number;
35
- /** File modification time in nanoseconds (for change detection) */
36
- fileMtimeNs: number | null;
37
- /** File inode number (for change detection on Unix) */
38
- fileInode: number | null;
39
- }
40
- export interface LedgerAgentRecord {
41
- id: number;
42
- agentName: string;
43
- createdAt: number;
44
- lastSeenAt: number;
45
- status: 'active' | 'inactive';
46
- metadata: Record<string, unknown> | null;
47
- }
48
- export interface OrchestratorState {
49
- key: string;
50
- value: string;
51
- updatedAt: number;
52
- }
53
- export interface PendingOperation {
54
- id: number;
55
- operationType: 'process' | 'archive' | 'cleanup';
56
- targetId: string;
57
- payload: string | null;
58
- createdAt: number;
59
- attempts: number;
60
- lastAttemptAt: number | null;
61
- error: string | null;
62
- }
63
- export interface LedgerConfig {
64
- /** Path to SQLite database */
65
- dbPath: string;
66
- /** Maximum retries before marking as failed (default: 3) */
67
- maxRetries?: number;
68
- /** Archive retention in milliseconds (default: 7 days) */
69
- archiveRetentionMs?: number;
70
- /** Busy timeout for concurrent access (default: 5000ms) */
71
- busyTimeout?: number;
72
- }
73
- export interface ClaimResult {
74
- success: boolean;
75
- record?: RelayFileRecord;
76
- reason?: string;
77
- }
78
- export declare class RelayLedger {
79
- private db;
80
- private config;
81
- private stmtInsert;
82
- private stmtClaim;
83
- private stmtUpdateStatus;
84
- private stmtMarkDelivered;
85
- private stmtMarkFailed;
86
- private stmtMarkArchived;
87
- private stmtGetPending;
88
- private stmtGetByPath;
89
- private stmtIsActivePath;
90
- private stmtGetById;
91
- private stmtResetProcessing;
92
- private stmtCleanupArchived;
93
- private stmtGetStats;
94
- constructor(config: LedgerConfig);
95
- /** Last migration result (for debugging) */
96
- private lastMigrationResult?;
97
- /**
98
- * Initialize database schema using migrations
99
- */
100
- private initSchema;
101
- /**
102
- * Get the last migration result
103
- */
104
- getMigrationResult(): MigrationResult | undefined;
105
- /**
106
- * Get pending migrations that haven't been applied
107
- */
108
- getPendingMigrations(): Array<{
109
- name: string;
110
- sql: string;
111
- checksum: string;
112
- }>;
113
- /**
114
- * Verify migration checksums match what was originally applied
115
- */
116
- verifyMigrationIntegrity(): Array<{
117
- name: string;
118
- expected: string;
119
- actual: string;
120
- }>;
121
- /**
122
- * Prepare frequently-used statements
123
- */
124
- private prepareStatements;
125
- /**
126
- * Generate a unique file ID (12-char hex for ~281 trillion combinations)
127
- */
128
- generateFileId(): string;
129
- /**
130
- * Check if an agent name is reserved
131
- */
132
- isReservedAgentName(name: string): boolean;
133
- /**
134
- * Register a newly discovered file
135
- * @param sourcePath - Canonical path (symlinks resolved)
136
- * @param agentName - Agent that owns the file
137
- * @param messageType - Type of message (msg, spawn, release, etc.)
138
- * @param fileSize - Size in bytes
139
- * @param contentHash - Optional hash for deduplication
140
- * @param fileMtimeNs - Optional modification time in nanoseconds
141
- * @param fileInode - Optional inode number
142
- * @param symlinkPath - Original path if it was a symlink (for debugging)
143
- */
144
- registerFile(sourcePath: string, agentName: string, messageType: string, fileSize: number, contentHash?: string, fileMtimeNs?: number, fileInode?: number, symlinkPath?: string): string;
145
- /**
146
- * Check if a file is actively being processed (pending or processing).
147
- * Returns false for archived/delivered/failed files so new files at the same path can be registered.
148
- */
149
- isFileRegistered(sourcePath: string): boolean;
150
- /**
151
- * Atomically claim a file for processing
152
- * Returns the record if claim succeeded, null otherwise
153
- */
154
- claimFile(fileId: string): ClaimResult;
155
- /**
156
- * Mark a file as successfully delivered
157
- */
158
- markDelivered(fileId: string): void;
159
- /**
160
- * Mark a file as failed (will retry if under max retries)
161
- */
162
- markFailed(fileId: string, error: string): void;
163
- /**
164
- * Mark a file as archived (moved to archive location)
165
- */
166
- markArchived(fileId: string, archivePath: string): void;
167
- /**
168
- * Get pending files ready for processing
169
- */
170
- getPendingFiles(limit?: number): RelayFileRecord[];
171
- /**
172
- * Get a file record by ID
173
- */
174
- getById(fileId: string): RelayFileRecord | null;
175
- /**
176
- * Get a file record by source path
177
- */
178
- getByPath(sourcePath: string): RelayFileRecord | null;
179
- /**
180
- * Reset all 'processing' files to 'pending' (crash recovery)
181
- */
182
- resetProcessingFiles(): number;
183
- /**
184
- * Mark files as failed if their source file no longer exists
185
- */
186
- reconcileWithFilesystem(): {
187
- reset: number;
188
- failed: number;
189
- };
190
- /**
191
- * Clean up old archived records
192
- */
193
- cleanupArchivedRecords(): number;
194
- /**
195
- * Get statistics about file processing
196
- */
197
- getStats(): Record<RelayFileStatus, number>;
198
- /**
199
- * Convert database row to RelayFileRecord
200
- */
201
- private rowToRecord;
202
- /**
203
- * Register or update an agent
204
- */
205
- registerAgent(agentName: string, metadata?: Record<string, unknown>): void;
206
- /**
207
- * Update agent last seen time
208
- */
209
- updateAgentLastSeen(agentName: string): void;
210
- /**
211
- * Mark agent as inactive
212
- */
213
- markAgentInactive(agentName: string): void;
214
- /**
215
- * Get all active agents
216
- */
217
- getActiveAgents(): LedgerAgentRecord[];
218
- /**
219
- * Get agent by name
220
- */
221
- getAgent(agentName: string): LedgerAgentRecord | null;
222
- /**
223
- * Save orchestrator state
224
- */
225
- saveState(key: string, value: string): void;
226
- /**
227
- * Get orchestrator state
228
- */
229
- getState(key: string): string | null;
230
- /**
231
- * Delete orchestrator state
232
- */
233
- deleteState(key: string): void;
234
- /**
235
- * Get all orchestrator state
236
- */
237
- getAllState(): OrchestratorState[];
238
- /**
239
- * Add a pending operation
240
- */
241
- addPendingOperation(operationType: 'process' | 'archive' | 'cleanup', targetId: string, payload?: string): number;
242
- /**
243
- * Complete a pending operation (remove it)
244
- */
245
- completePendingOperation(id: number): void;
246
- /**
247
- * Fail a pending operation (increment attempts, record error)
248
- */
249
- failPendingOperation(id: number, error: string): void;
250
- /**
251
- * Get pending operations for recovery
252
- */
253
- getPendingOperations(maxAttempts?: number): PendingOperation[];
254
- /**
255
- * Cleanup old failed operations
256
- */
257
- cleanupFailedOperations(maxAge?: number): number;
258
- /**
259
- * Close the database connection
260
- */
261
- close(): void;
262
- }
263
- //# sourceMappingURL=relay-ledger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relay-ledger.d.ts","sourceRoot":"","sources":["../src/relay-ledger.ts"],"names":[],"mappings":"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"}