agent-relay 2.0.37 → 2.1.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/dist/index.cjs +31903 -33913
- package/dist/src/cli/index.js +36 -51
- package/dist/src/cli/index.js.map +1 -1
- package/package.json +18 -19
- package/packages/api-types/package.json +1 -1
- package/packages/benchmark/package.json +4 -4
- package/packages/bridge/package.json +8 -8
- package/packages/cli-tester/package.json +1 -1
- package/packages/config/dist/project-namespace.d.ts +28 -0
- package/packages/config/dist/project-namespace.d.ts.map +1 -1
- package/packages/config/dist/project-namespace.js +42 -0
- package/packages/config/dist/project-namespace.js.map +1 -1
- package/packages/config/package.json +2 -2
- package/packages/config/src/project-namespace.ts +65 -0
- package/packages/continuity/dist/formatter.d.ts +8 -2
- package/packages/continuity/dist/formatter.d.ts.map +1 -1
- package/packages/continuity/dist/formatter.js +142 -7
- package/packages/continuity/dist/formatter.js.map +1 -1
- package/packages/continuity/dist/index.d.ts +1 -0
- package/packages/continuity/dist/index.d.ts.map +1 -1
- package/packages/continuity/dist/index.js +2 -0
- package/packages/continuity/dist/index.js.map +1 -1
- package/packages/continuity/package.json +4 -1
- package/packages/continuity/src/formatter.ts +175 -10
- package/packages/continuity/src/index.ts +3 -0
- package/packages/daemon/dist/enhanced-features.d.ts +2 -3
- package/packages/daemon/dist/enhanced-features.d.ts.map +1 -1
- package/packages/daemon/dist/enhanced-features.js +1 -0
- package/packages/daemon/dist/enhanced-features.js.map +1 -1
- package/packages/daemon/dist/index.d.ts +0 -2
- package/packages/daemon/dist/index.d.ts.map +1 -1
- package/packages/daemon/dist/index.js +0 -3
- package/packages/daemon/dist/index.js.map +1 -1
- package/packages/daemon/dist/server.d.ts +0 -6
- package/packages/daemon/dist/server.d.ts.map +1 -1
- package/packages/daemon/dist/server.js +20 -119
- package/packages/daemon/dist/server.js.map +1 -1
- package/packages/daemon/package.json +12 -14
- package/packages/daemon/src/enhanced-features.ts +4 -4
- package/packages/daemon/src/index.ts +0 -4
- package/packages/daemon/src/server.ts +19 -127
- package/packages/daemon/vitest.config.ts +9 -0
- package/packages/hooks/package.json +4 -4
- package/packages/mcp/package.json +3 -3
- package/packages/memory/package.json +2 -2
- package/packages/policy/package.json +2 -2
- package/packages/protocol/package.json +1 -1
- package/packages/resiliency/package.json +1 -1
- package/packages/sdk/package.json +2 -2
- package/packages/spawner/package.json +1 -1
- package/packages/state/package.json +1 -1
- package/packages/storage/dist/adapter.d.ts +5 -5
- package/packages/storage/dist/adapter.js +9 -9
- package/packages/storage/dist/adapter.js.map +1 -1
- package/packages/storage/package.json +2 -2
- package/packages/storage/src/adapter.ts +9 -9
- package/packages/telemetry/package.json +1 -1
- package/packages/trajectory/package.json +2 -2
- package/packages/user-directory/package.json +2 -2
- package/packages/utils/package.json +2 -2
- package/packages/wrapper/package.json +6 -6
- package/scripts/build-cjs.mjs +2 -0
- package/packages/daemon/dist/migrations/index.d.ts +0 -73
- package/packages/daemon/dist/migrations/index.d.ts.map +0 -1
- package/packages/daemon/dist/migrations/index.js +0 -241
- package/packages/daemon/dist/migrations/index.js.map +0 -1
- package/packages/daemon/dist/relay-ledger.d.ts +0 -263
- package/packages/daemon/dist/relay-ledger.d.ts.map +0 -1
- package/packages/daemon/dist/relay-ledger.js +0 -538
- package/packages/daemon/dist/relay-ledger.js.map +0 -1
- package/packages/daemon/dist/relay-watchdog.d.ts +0 -125
- package/packages/daemon/dist/relay-watchdog.d.ts.map +0 -1
- package/packages/daemon/dist/relay-watchdog.js +0 -611
- package/packages/daemon/dist/relay-watchdog.js.map +0 -1
- package/packages/daemon/src/migrations/0001_initial.sql +0 -72
- package/packages/daemon/src/migrations/index.test.ts +0 -195
- package/packages/daemon/src/migrations/index.ts +0 -286
- package/packages/daemon/src/relay-ledger.test.ts +0 -358
- package/packages/daemon/src/relay-ledger.ts +0 -713
- package/packages/daemon/src/relay-watchdog.test.ts +0 -881
- package/packages/daemon/src/relay-watchdog.ts +0 -785
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/continuity",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Session continuity manager for Relay (ledgers, handoffs, resume)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -21,6 +21,9 @@
|
|
|
21
21
|
"test": "vitest run",
|
|
22
22
|
"test:watch": "vitest"
|
|
23
23
|
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@agent-relay/memory": "2.1.0"
|
|
26
|
+
},
|
|
24
27
|
"devDependencies": {
|
|
25
28
|
"@types/node": "^22.19.3",
|
|
26
29
|
"typescript": "^5.9.3",
|
|
@@ -3,16 +3,22 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Formats ledgers, handoffs, and learnings into markdown
|
|
5
5
|
* for injection into agent context.
|
|
6
|
+
*
|
|
7
|
+
* Uses token estimation from @agent-relay/memory for intelligent
|
|
8
|
+
* compaction when context exceeds token limits.
|
|
6
9
|
*/
|
|
7
10
|
|
|
11
|
+
import { estimateTokens } from '@agent-relay/memory';
|
|
8
12
|
import type { Ledger, Handoff, StartupContext, FileRef, Decision } from './types.js';
|
|
9
13
|
|
|
10
14
|
/**
|
|
11
15
|
* Format options for context injection
|
|
12
16
|
*/
|
|
13
17
|
export interface FormatOptions {
|
|
14
|
-
/** Maximum length of the formatted context */
|
|
18
|
+
/** Maximum length of the formatted context (characters) */
|
|
15
19
|
maxLength?: number;
|
|
20
|
+
/** Maximum tokens for the formatted context (uses intelligent compaction) */
|
|
21
|
+
maxTokens?: number;
|
|
16
22
|
/** Include file references */
|
|
17
23
|
includeFiles?: boolean;
|
|
18
24
|
/** Include decisions */
|
|
@@ -25,6 +31,7 @@ export interface FormatOptions {
|
|
|
25
31
|
|
|
26
32
|
const DEFAULT_OPTIONS: FormatOptions = {
|
|
27
33
|
maxLength: 4000,
|
|
34
|
+
maxTokens: 2000, // ~2000 tokens is a reasonable default for context injection
|
|
28
35
|
includeFiles: true,
|
|
29
36
|
includeDecisions: true,
|
|
30
37
|
includeLearnings: true,
|
|
@@ -32,13 +39,178 @@ const DEFAULT_OPTIONS: FormatOptions = {
|
|
|
32
39
|
};
|
|
33
40
|
|
|
34
41
|
/**
|
|
35
|
-
* Format a startup context for injection
|
|
42
|
+
* Format a startup context for injection.
|
|
43
|
+
* Uses token-based compaction to fit within limits while preserving important content.
|
|
36
44
|
*/
|
|
37
45
|
export function formatStartupContext(
|
|
38
46
|
context: Omit<StartupContext, 'formatted'>,
|
|
39
47
|
options: FormatOptions = {}
|
|
40
48
|
): string {
|
|
41
49
|
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
50
|
+
|
|
51
|
+
// Try formatting with full content first
|
|
52
|
+
let result = formatStartupContextInternal(context, opts);
|
|
53
|
+
let tokens = estimateTokens(result);
|
|
54
|
+
|
|
55
|
+
// If within token limit, we're done
|
|
56
|
+
if (!opts.maxTokens || tokens <= opts.maxTokens) {
|
|
57
|
+
return applyCharacterLimit(result, opts.maxLength);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Progressive compaction: remove less important content until we fit
|
|
61
|
+
// Priority (highest to lowest):
|
|
62
|
+
// 1. Current task, in-progress, blocked (critical state)
|
|
63
|
+
// 2. Completed items (recent work context)
|
|
64
|
+
// 3. Decisions (reasoning context)
|
|
65
|
+
// 4. File references (code context)
|
|
66
|
+
// 5. Learnings (historical context)
|
|
67
|
+
|
|
68
|
+
// Step 1: Switch to compact mode
|
|
69
|
+
if (!opts.compact) {
|
|
70
|
+
result = formatStartupContextInternal(context, { ...opts, compact: true });
|
|
71
|
+
tokens = estimateTokens(result);
|
|
72
|
+
if (tokens <= opts.maxTokens) {
|
|
73
|
+
return applyCharacterLimit(result, opts.maxLength);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Step 2: Remove learnings
|
|
78
|
+
result = formatStartupContextInternal(context, { ...opts, compact: true, includeLearnings: false });
|
|
79
|
+
tokens = estimateTokens(result);
|
|
80
|
+
if (tokens <= opts.maxTokens) {
|
|
81
|
+
return applyCharacterLimit(result, opts.maxLength);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Step 3: Remove file references
|
|
85
|
+
result = formatStartupContextInternal(context, {
|
|
86
|
+
...opts,
|
|
87
|
+
compact: true,
|
|
88
|
+
includeLearnings: false,
|
|
89
|
+
includeFiles: false,
|
|
90
|
+
});
|
|
91
|
+
tokens = estimateTokens(result);
|
|
92
|
+
if (tokens <= opts.maxTokens) {
|
|
93
|
+
return applyCharacterLimit(result, opts.maxLength);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Step 4: Remove decisions
|
|
97
|
+
result = formatStartupContextInternal(context, {
|
|
98
|
+
...opts,
|
|
99
|
+
compact: true,
|
|
100
|
+
includeLearnings: false,
|
|
101
|
+
includeFiles: false,
|
|
102
|
+
includeDecisions: false,
|
|
103
|
+
});
|
|
104
|
+
tokens = estimateTokens(result);
|
|
105
|
+
if (tokens <= opts.maxTokens) {
|
|
106
|
+
return applyCharacterLimit(result, opts.maxLength);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Step 5: Truncate completed items in ledger/handoff
|
|
110
|
+
const compactedContext = compactContextData(context, opts.maxTokens);
|
|
111
|
+
result = formatStartupContextInternal(compactedContext, {
|
|
112
|
+
...opts,
|
|
113
|
+
compact: true,
|
|
114
|
+
includeLearnings: false,
|
|
115
|
+
includeFiles: false,
|
|
116
|
+
includeDecisions: false,
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
return applyCharacterLimit(result, opts.maxLength);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Apply character limit with truncation message
|
|
124
|
+
*/
|
|
125
|
+
function applyCharacterLimit(result: string, maxLength?: number): string {
|
|
126
|
+
if (maxLength && result.length > maxLength) {
|
|
127
|
+
return result.slice(0, maxLength - 100) + '\n\n*[Context compacted for length]*';
|
|
128
|
+
}
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Compact context data by progressively reducing array sizes until we fit within token target.
|
|
134
|
+
* Uses iterative reduction rather than fixed sizes to maximize preserved content.
|
|
135
|
+
*/
|
|
136
|
+
function compactContextData(
|
|
137
|
+
context: Omit<StartupContext, 'formatted'>,
|
|
138
|
+
targetTokens: number
|
|
139
|
+
): Omit<StartupContext, 'formatted'> {
|
|
140
|
+
// Compaction levels - progressively more aggressive
|
|
141
|
+
const levels = [
|
|
142
|
+
{ completed: 5, inProgress: 7, blocked: 5, decisions: 4, files: 5, uncertain: 5, learnings: 3 },
|
|
143
|
+
{ completed: 3, inProgress: 5, blocked: 3, decisions: 2, files: 3, uncertain: 3, learnings: 2 },
|
|
144
|
+
{ completed: 2, inProgress: 3, blocked: 2, decisions: 1, files: 2, uncertain: 2, learnings: 1 },
|
|
145
|
+
{ completed: 1, inProgress: 2, blocked: 1, decisions: 1, files: 1, uncertain: 1, learnings: 0 },
|
|
146
|
+
];
|
|
147
|
+
|
|
148
|
+
for (const level of levels) {
|
|
149
|
+
const compacted = applyCompactionLevel(context, level);
|
|
150
|
+
|
|
151
|
+
// Test if this level fits within target
|
|
152
|
+
const testResult = formatStartupContextInternal(compacted, {
|
|
153
|
+
compact: true,
|
|
154
|
+
includeLearnings: level.learnings > 0,
|
|
155
|
+
includeFiles: level.files > 0,
|
|
156
|
+
includeDecisions: level.decisions > 0,
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
if (estimateTokens(testResult) <= targetTokens) {
|
|
160
|
+
return compacted;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// If none of the levels fit, return the most aggressive compaction
|
|
165
|
+
return applyCompactionLevel(context, levels[levels.length - 1]);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Apply a specific compaction level to context data
|
|
170
|
+
*/
|
|
171
|
+
function applyCompactionLevel(
|
|
172
|
+
context: Omit<StartupContext, 'formatted'>,
|
|
173
|
+
level: { completed: number; inProgress: number; blocked: number; decisions: number; files: number; uncertain: number; learnings: number }
|
|
174
|
+
): Omit<StartupContext, 'formatted'> {
|
|
175
|
+
const compacted = { ...context };
|
|
176
|
+
|
|
177
|
+
if (compacted.ledger) {
|
|
178
|
+
compacted.ledger = {
|
|
179
|
+
...compacted.ledger,
|
|
180
|
+
completed: compacted.ledger.completed.slice(-level.completed),
|
|
181
|
+
inProgress: compacted.ledger.inProgress.slice(0, level.inProgress),
|
|
182
|
+
blocked: compacted.ledger.blocked.slice(0, level.blocked),
|
|
183
|
+
keyDecisions: compacted.ledger.keyDecisions.slice(-level.decisions),
|
|
184
|
+
fileContext: compacted.ledger.fileContext.slice(-level.files),
|
|
185
|
+
uncertainItems: compacted.ledger.uncertainItems.slice(0, level.uncertain),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
if (compacted.handoff) {
|
|
190
|
+
compacted.handoff = {
|
|
191
|
+
...compacted.handoff,
|
|
192
|
+
completedWork: compacted.handoff.completedWork.slice(-level.completed),
|
|
193
|
+
nextSteps: compacted.handoff.nextSteps.slice(0, level.inProgress),
|
|
194
|
+
decisions: compacted.handoff.decisions.slice(-level.decisions),
|
|
195
|
+
fileReferences: compacted.handoff.fileReferences.slice(-level.files),
|
|
196
|
+
learnings: level.learnings > 0 ? compacted.handoff.learnings?.slice(0, level.learnings) : undefined,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
if (compacted.learnings) {
|
|
201
|
+
compacted.learnings = level.learnings > 0 ? compacted.learnings.slice(0, level.learnings) : undefined;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
return compacted;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Internal formatting function (no compaction logic)
|
|
209
|
+
*/
|
|
210
|
+
function formatStartupContextInternal(
|
|
211
|
+
context: Omit<StartupContext, 'formatted'>,
|
|
212
|
+
opts: FormatOptions
|
|
213
|
+
): string {
|
|
42
214
|
const sections: string[] = [];
|
|
43
215
|
|
|
44
216
|
sections.push('# Session Continuity');
|
|
@@ -69,14 +241,7 @@ export function formatStartupContext(
|
|
|
69
241
|
}
|
|
70
242
|
}
|
|
71
243
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
// Truncate if too long
|
|
75
|
-
if (opts.maxLength && result.length > opts.maxLength) {
|
|
76
|
-
result = result.slice(0, opts.maxLength - 100) + '\n\n*[Context truncated for length]*';
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return result;
|
|
244
|
+
return sections.join('\n');
|
|
80
245
|
}
|
|
81
246
|
|
|
82
247
|
/**
|
|
@@ -7,3 +7,6 @@ export * from './handoff-store.js';
|
|
|
7
7
|
|
|
8
8
|
export { getContinuityManager } from './manager.js';
|
|
9
9
|
export { parseContinuityCommand, hasContinuityCommand } from './parser.js';
|
|
10
|
+
|
|
11
|
+
// Re-export token estimation for context size checks
|
|
12
|
+
export { estimateTokens } from '@agent-relay/memory';
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
* This module provides a unified interface for integrating
|
|
12
12
|
* these features into the existing daemon and router.
|
|
13
13
|
*/
|
|
14
|
-
import type { Database as BetterSqlite3Database } from 'better-sqlite3';
|
|
15
14
|
import type { Pool as PgPool } from 'pg';
|
|
16
15
|
import { getCompiledPatterns, isInstructionalTextFast, isPlaceholderTargetFast, stripAnsiFast, StaticPatterns } from '@agent-relay/utils/precompiled-patterns';
|
|
17
16
|
import { AgentSigningManager, loadSigningConfig, attachSignature, extractSignature, type AgentSigningConfig, type SignedMessage } from './agent-signing.js';
|
|
@@ -31,8 +30,8 @@ export interface EnhancedFeaturesConfig {
|
|
|
31
30
|
dlq?: Partial<DLQConfig> & {
|
|
32
31
|
/** Storage type */
|
|
33
32
|
type?: 'sqlite' | 'postgres' | 'memory';
|
|
34
|
-
/** SQLite database (if type is sqlite) */
|
|
35
|
-
sqlite?:
|
|
33
|
+
/** SQLite database (if type is sqlite) - type checked by SQLiteDLQAdapter */
|
|
34
|
+
sqlite?: unknown;
|
|
36
35
|
/** PostgreSQL pool (if type is postgres) */
|
|
37
36
|
postgres?: PgPool;
|
|
38
37
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enhanced-features.d.ts","sourceRoot":"","sources":["../src/enhanced-features.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"enhanced-features.d.ts","sourceRoot":"","sources":["../src/enhanced-features.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,7 @@ export async function initEnhancedFeatures(config = {}) {
|
|
|
44
44
|
dlq = new PostgresDLQAdapter(dlqConfig.postgres);
|
|
45
45
|
}
|
|
46
46
|
else if (dlqConfig.type === 'sqlite' && dlqConfig.sqlite) {
|
|
47
|
+
// Cast to any - actual type checking happens in SQLiteDLQAdapter
|
|
47
48
|
dlq = new SQLiteDLQAdapter(dlqConfig.sqlite);
|
|
48
49
|
}
|
|
49
50
|
else if (dlqConfig.type === 'memory' || (!dlqConfig.sqlite && !dlqConfig.postgres)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enhanced-features.js","sourceRoot":"","sources":["../src/enhanced-features.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"enhanced-features.js","sourceRoot":"","sources":["../src/enhanced-features.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,5 @@ export * from './agent-signing.js';
|
|
|
25
25
|
export * from './consensus.js';
|
|
26
26
|
export * from './consensus-integration.js';
|
|
27
27
|
export { startCLIAuth, getAuthSession, cancelAuthSession, submitAuthCode, completeAuthSession, getSupportedProviders, type CLIAuthConfig, type PromptHandler, type StartCLIAuthOptions, } from './cli-auth.js';
|
|
28
|
-
export * from './relay-ledger.js';
|
|
29
|
-
export * from './relay-watchdog.js';
|
|
30
28
|
export { SpawnManager, type SpawnManagerConfig } from './spawn-manager.js';
|
|
31
29
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAG9B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAG3C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,mBAAmB,GACzB,MAAM,eAAe,CAAC;AAGvB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAG9B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAG3C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,mBAAmB,GACzB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -29,9 +29,6 @@ export * from './consensus.js';
|
|
|
29
29
|
export * from './consensus-integration.js';
|
|
30
30
|
// CLI authentication (OAuth flows for workspace CLIs)
|
|
31
31
|
export { startCLIAuth, getAuthSession, cancelAuthSession, submitAuthCode, completeAuthSession, getSupportedProviders, } from './cli-auth.js';
|
|
32
|
-
// Relay file watchdog (file-based message detection and processing)
|
|
33
|
-
export * from './relay-ledger.js';
|
|
34
|
-
export * from './relay-watchdog.js';
|
|
35
32
|
// Spawn manager (protocol-based agent spawning)
|
|
36
33
|
export { SpawnManager } from './spawn-manager.js';
|
|
37
34
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,2CAA2C;AAC3C,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAE9B,iDAAiD;AACjD,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AAEnC,6DAA6D;AAC7D,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAE3C,sDAAsD;AACtD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,GAItB,MAAM,eAAe,CAAC;AAEvB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,2CAA2C;AAC3C,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAE9B,iDAAiD;AACjD,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AAEnC,6DAA6D;AAC7D,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAE3C,sDAAsD;AACtD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,GAItB,MAAM,eAAe,CAAC;AAEvB,gDAAgD;AAChD,OAAO,EAAE,YAAY,EAA2B,MAAM,oBAAoB,CAAC"}
|
|
@@ -45,7 +45,6 @@ export declare class Daemon {
|
|
|
45
45
|
private cloudSyncDebounceTimer?;
|
|
46
46
|
private spawnManager?;
|
|
47
47
|
private shuttingDown;
|
|
48
|
-
private relayWatchdog?;
|
|
49
48
|
private storageHealth?;
|
|
50
49
|
/** Telemetry tracking */
|
|
51
50
|
private startTime?;
|
|
@@ -94,11 +93,6 @@ export declare class Daemon {
|
|
|
94
93
|
* Start the daemon.
|
|
95
94
|
*/
|
|
96
95
|
start(): Promise<void>;
|
|
97
|
-
/**
|
|
98
|
-
* Initialize RelayWatchdog for MCP and file-based agents.
|
|
99
|
-
* Uses the ledger-based watchdog for durable file processing.
|
|
100
|
-
*/
|
|
101
|
-
private initRelayWatchdog;
|
|
102
96
|
/**
|
|
103
97
|
* Initialize cloud sync service for cross-machine agent communication.
|
|
104
98
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAc,KAAK,gBAAgB,EAAkB,MAAM,iBAAiB,CAAC;AA8BpF,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAwB,KAAK,cAAc,EAAE,KAAK,aAAa,EAAsB,MAAM,8BAA8B,CAAC;AAIjI,OAAO,EAAuC,KAAK,WAAW,EAAuD,MAAM,iBAAiB,CAAC;AAG7I,OAAO,EACL,oBAAoB,EAEpB,KAAK,0BAA0B,EAChC,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ import { Router } from './router.js';
|
|
|
12
12
|
import { PROTOCOL_VERSION, } from '@agent-relay/protocol/types';
|
|
13
13
|
import { SpawnManager } from './spawn-manager.js';
|
|
14
14
|
import { createStorageAdapter } from '@agent-relay/storage/adapter';
|
|
15
|
-
import { getProjectPaths } from '@agent-relay/config';
|
|
15
|
+
import { getProjectPaths, saveRuntimeConfig, clearRuntimeConfig } from '@agent-relay/config';
|
|
16
16
|
import { AgentRegistry } from './agent-registry.js';
|
|
17
17
|
import { daemonLog as log } from '@agent-relay/utils/logger';
|
|
18
18
|
import { getCloudSync } from './cloud-sync.js';
|
|
@@ -20,7 +20,6 @@ import { getMemoryMonitor } from '@agent-relay/resiliency';
|
|
|
20
20
|
import { generateId } from '@agent-relay/wrapper';
|
|
21
21
|
import { createConsensusIntegration, } from './consensus-integration.js';
|
|
22
22
|
import { initTelemetry, track, shutdown as shutdownTelemetry, } from '@agent-relay/telemetry';
|
|
23
|
-
import { RelayWatchdog } from './relay-watchdog.js';
|
|
24
23
|
// Get version from package.json
|
|
25
24
|
const require = createRequire(import.meta.url);
|
|
26
25
|
const packageJson = require('../package.json');
|
|
@@ -49,7 +48,6 @@ export class Daemon {
|
|
|
49
48
|
cloudSyncDebounceTimer;
|
|
50
49
|
spawnManager;
|
|
51
50
|
shuttingDown = false;
|
|
52
|
-
relayWatchdog;
|
|
53
51
|
storageHealth;
|
|
54
52
|
/** Telemetry tracking */
|
|
55
53
|
startTime;
|
|
@@ -297,6 +295,18 @@ export class Daemon {
|
|
|
297
295
|
catch (err) {
|
|
298
296
|
log.warn('Storage health check failed', { error: String(err) });
|
|
299
297
|
}
|
|
298
|
+
// Save runtime config so CLI commands can use the same storage type
|
|
299
|
+
try {
|
|
300
|
+
saveRuntimeConfig({
|
|
301
|
+
storageType: this.storageHealth?.driver ?? this.config.storageConfig?.type ?? 'jsonl',
|
|
302
|
+
daemonPid: process.pid,
|
|
303
|
+
startedAt: new Date().toISOString(),
|
|
304
|
+
version: DAEMON_VERSION,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
catch (err) {
|
|
308
|
+
log.warn('Failed to save runtime config', { error: String(err) });
|
|
309
|
+
}
|
|
300
310
|
// Restore channel memberships from persisted storage (cloud DB or SQLite)
|
|
301
311
|
await this.router.restoreChannelMemberships();
|
|
302
312
|
// Initialize cloud sync if configured
|
|
@@ -402,16 +412,6 @@ export class Daemon {
|
|
|
402
412
|
this.processingStateInterval = setInterval(() => {
|
|
403
413
|
this.writeProcessingStateFile();
|
|
404
414
|
}, Daemon.PROCESSING_STATE_INTERVAL_MS);
|
|
405
|
-
// Start RelayWatchdog for MCP file-based messages (ledger-based for durability)
|
|
406
|
-
// Feature gated: set RELAY_MCP_AUTO_INSTALL=1 to enable file-based MCP messaging
|
|
407
|
-
const mcpAutoInstallEnabled = process.env.RELAY_MCP_AUTO_INSTALL === '1';
|
|
408
|
-
if (mcpAutoInstallEnabled) {
|
|
409
|
-
// Use parent of teamDir since teamDir is .agent-relay/team/ but outbox is at .agent-relay/outbox/
|
|
410
|
-
const relayRoot = path.dirname(teamDir);
|
|
411
|
-
this.initRelayWatchdog(relayRoot).catch(err => {
|
|
412
|
-
log.error('Failed to start RelayWatchdog', { error: String(err) });
|
|
413
|
-
});
|
|
414
|
-
}
|
|
415
415
|
// Track daemon start
|
|
416
416
|
track('daemon_start', {});
|
|
417
417
|
log.info('Listening', { socketPath: this.config.socketPath });
|
|
@@ -419,107 +419,6 @@ export class Daemon {
|
|
|
419
419
|
});
|
|
420
420
|
});
|
|
421
421
|
}
|
|
422
|
-
/**
|
|
423
|
-
* Initialize RelayWatchdog for MCP and file-based agents.
|
|
424
|
-
* Uses the ledger-based watchdog for durable file processing.
|
|
425
|
-
*/
|
|
426
|
-
async initRelayWatchdog(relayDir) {
|
|
427
|
-
// Create project-local relay paths
|
|
428
|
-
const relayPaths = {
|
|
429
|
-
rootDir: relayDir,
|
|
430
|
-
outboxDir: path.join(relayDir, 'outbox'),
|
|
431
|
-
attachmentsDir: path.join(relayDir, 'attachments'),
|
|
432
|
-
metaDir: path.join(relayDir, 'meta'),
|
|
433
|
-
legacyOutboxDir: path.join(relayDir, 'outbox'), // Same as outboxDir for project-local
|
|
434
|
-
};
|
|
435
|
-
this.relayWatchdog = new RelayWatchdog({
|
|
436
|
-
relayPaths,
|
|
437
|
-
ledgerPath: path.join(relayDir, 'meta', 'file-ledger.sqlite'),
|
|
438
|
-
});
|
|
439
|
-
// Handle delivered files from file-based agents (MCP, etc.)
|
|
440
|
-
this.relayWatchdog.on('file:delivered', (file) => {
|
|
441
|
-
const { agentName, messageType, headers, body } = file;
|
|
442
|
-
log.debug('File delivered', { agentName, messageType, headers });
|
|
443
|
-
// Determine message type from headers or filename
|
|
444
|
-
const kind = headers['KIND']?.toLowerCase() || messageType;
|
|
445
|
-
if (kind === 'spawn') {
|
|
446
|
-
// Handle spawn request
|
|
447
|
-
if (this.spawnManager) {
|
|
448
|
-
const envelope = {
|
|
449
|
-
v: PROTOCOL_VERSION,
|
|
450
|
-
type: 'SPAWN',
|
|
451
|
-
id: generateId(),
|
|
452
|
-
ts: Date.now(),
|
|
453
|
-
payload: {
|
|
454
|
-
name: headers['NAME'] || '',
|
|
455
|
-
cli: headers['CLI'] || 'claude',
|
|
456
|
-
task: body,
|
|
457
|
-
cwd: headers['CWD'],
|
|
458
|
-
model: headers['MODEL'],
|
|
459
|
-
spawnerName: agentName,
|
|
460
|
-
},
|
|
461
|
-
};
|
|
462
|
-
const virtualConnection = { agentName, send: () => true };
|
|
463
|
-
this.spawnManager.handleSpawn(virtualConnection, envelope);
|
|
464
|
-
}
|
|
465
|
-
else {
|
|
466
|
-
log.warn('Spawn request ignored - SpawnManager not enabled');
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
else if (kind === 'release') {
|
|
470
|
-
// Handle release request
|
|
471
|
-
if (this.spawnManager) {
|
|
472
|
-
const envelope = {
|
|
473
|
-
v: PROTOCOL_VERSION,
|
|
474
|
-
type: 'RELEASE',
|
|
475
|
-
id: generateId(),
|
|
476
|
-
ts: Date.now(),
|
|
477
|
-
payload: {
|
|
478
|
-
name: headers['NAME'] || '',
|
|
479
|
-
reason: body || undefined,
|
|
480
|
-
},
|
|
481
|
-
};
|
|
482
|
-
const virtualConnection = { agentName, send: () => true };
|
|
483
|
-
this.spawnManager.handleRelease(virtualConnection, envelope);
|
|
484
|
-
}
|
|
485
|
-
else {
|
|
486
|
-
log.warn('Release request ignored - SpawnManager not enabled');
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
else {
|
|
490
|
-
// Default: treat as message
|
|
491
|
-
const to = headers['TO'];
|
|
492
|
-
if (!to) {
|
|
493
|
-
log.warn('Message missing TO header', { agentName, headers });
|
|
494
|
-
return;
|
|
495
|
-
}
|
|
496
|
-
const envelope = {
|
|
497
|
-
v: PROTOCOL_VERSION,
|
|
498
|
-
type: 'SEND',
|
|
499
|
-
id: generateId(),
|
|
500
|
-
ts: Date.now(),
|
|
501
|
-
from: agentName,
|
|
502
|
-
to,
|
|
503
|
-
payload: {
|
|
504
|
-
kind: 'message',
|
|
505
|
-
body,
|
|
506
|
-
thread: headers['THREAD'],
|
|
507
|
-
},
|
|
508
|
-
};
|
|
509
|
-
const virtualConnection = { agentName };
|
|
510
|
-
this.router.route(virtualConnection, envelope);
|
|
511
|
-
}
|
|
512
|
-
});
|
|
513
|
-
// Log errors
|
|
514
|
-
this.relayWatchdog.on('error', (error) => {
|
|
515
|
-
log.error('RelayWatchdog error', { error: error.message });
|
|
516
|
-
});
|
|
517
|
-
this.relayWatchdog.on('file:failed', (record, error) => {
|
|
518
|
-
log.error('File processing failed', { fileId: record.fileId, error: error.message });
|
|
519
|
-
});
|
|
520
|
-
await this.relayWatchdog.start();
|
|
521
|
-
log.info('RelayWatchdog started', { relayDir });
|
|
522
|
-
}
|
|
523
422
|
/**
|
|
524
423
|
* Initialize cloud sync service for cross-machine agent communication.
|
|
525
424
|
*/
|
|
@@ -822,11 +721,6 @@ export class Daemon {
|
|
|
822
721
|
clearInterval(this.processingStateInterval);
|
|
823
722
|
this.processingStateInterval = undefined;
|
|
824
723
|
}
|
|
825
|
-
// Stop RelayWatchdog
|
|
826
|
-
if (this.relayWatchdog) {
|
|
827
|
-
await this.relayWatchdog.stop();
|
|
828
|
-
this.relayWatchdog = undefined;
|
|
829
|
-
}
|
|
830
724
|
// Close all active connections
|
|
831
725
|
for (const connection of this.connections) {
|
|
832
726
|
connection.close();
|
|
@@ -843,6 +737,13 @@ export class Daemon {
|
|
|
843
737
|
if (fs.existsSync(this.config.pidFilePath)) {
|
|
844
738
|
fs.unlinkSync(this.config.pidFilePath);
|
|
845
739
|
}
|
|
740
|
+
// Clear runtime config
|
|
741
|
+
try {
|
|
742
|
+
clearRuntimeConfig();
|
|
743
|
+
}
|
|
744
|
+
catch {
|
|
745
|
+
// Ignore errors during shutdown
|
|
746
|
+
}
|
|
846
747
|
if (this.storage?.close) {
|
|
847
748
|
this.storage.close().catch((err) => {
|
|
848
749
|
log.error('Failed to close storage', { error: String(err) });
|