@agent-relay/config 2.1.13 → 2.1.14
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/teams-config.d.ts +7 -1
- package/dist/teams-config.d.ts.map +1 -1
- package/dist/teams-config.js +88 -34
- package/dist/teams-config.js.map +1 -1
- package/package.json +2 -2
package/dist/teams-config.d.ts
CHANGED
|
@@ -28,9 +28,15 @@ export interface TeamsConfig {
|
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
30
|
* Load teams.json from project root or .agent-relay directory
|
|
31
|
-
* Returns null if no config found
|
|
31
|
+
* Returns null if no config found.
|
|
32
|
+
* Results are cached and only reloaded when the file changes.
|
|
32
33
|
*/
|
|
33
34
|
export declare function loadTeamsConfig(projectRoot: string): TeamsConfig | null;
|
|
35
|
+
/**
|
|
36
|
+
* Clear the teams config cache.
|
|
37
|
+
* Useful for testing or when you know the config has changed.
|
|
38
|
+
*/
|
|
39
|
+
export declare function clearTeamsConfigCache(): void;
|
|
34
40
|
/**
|
|
35
41
|
* Check if an agent name is valid according to teams.json
|
|
36
42
|
* Returns true if no teams.json exists (permissive mode)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teams-config.d.ts","sourceRoot":"","sources":["../src/teams-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"teams-config.d.ts","sourceRoot":"","sources":["../src/teams-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH,qCAAqC;AACrC,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,gCAAgC;AAChC,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,yDAAyD;IACzD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAYD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAgGvE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAShF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAK7F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQrE"}
|
package/dist/teams-config.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import fs from 'node:fs';
|
|
10
10
|
import path from 'node:path';
|
|
11
|
+
let configCache = null;
|
|
11
12
|
/**
|
|
12
13
|
* Possible locations for teams.json (in order of precedence)
|
|
13
14
|
*/
|
|
@@ -19,50 +20,103 @@ function getTeamsConfigPaths(projectRoot) {
|
|
|
19
20
|
}
|
|
20
21
|
/**
|
|
21
22
|
* Load teams.json from project root or .agent-relay directory
|
|
22
|
-
* Returns null if no config found
|
|
23
|
+
* Returns null if no config found.
|
|
24
|
+
* Results are cached and only reloaded when the file changes.
|
|
23
25
|
*/
|
|
24
26
|
export function loadTeamsConfig(projectRoot) {
|
|
25
27
|
const configPaths = getTeamsConfigPaths(projectRoot);
|
|
28
|
+
// Find which config file exists
|
|
29
|
+
let foundConfigPath = null;
|
|
30
|
+
let foundMtime = 0;
|
|
26
31
|
for (const configPath of configPaths) {
|
|
27
32
|
if (fs.existsSync(configPath)) {
|
|
28
33
|
try {
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
console.error(`[teams-config] Invalid teams.json at ${configPath}: missing or invalid 'team' field`);
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
36
|
-
if (!Array.isArray(config.agents)) {
|
|
37
|
-
console.error(`[teams-config] Invalid teams.json at ${configPath}: 'agents' must be an array`);
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
// Validate agents
|
|
41
|
-
const validAgents = [];
|
|
42
|
-
for (const agent of config.agents) {
|
|
43
|
-
if (!agent.name || typeof agent.name !== 'string') {
|
|
44
|
-
console.warn(`[teams-config] Skipping agent with missing name in ${configPath}`);
|
|
45
|
-
continue;
|
|
46
|
-
}
|
|
47
|
-
if (!agent.cli || typeof agent.cli !== 'string') {
|
|
48
|
-
console.warn(`[teams-config] Agent '${agent.name}' missing 'cli' field, defaulting to 'claude'`);
|
|
49
|
-
agent.cli = 'claude';
|
|
50
|
-
}
|
|
51
|
-
validAgents.push(agent);
|
|
52
|
-
}
|
|
53
|
-
console.log(`[teams-config] Loaded team '${config.team}' from ${configPath} (${validAgents.length} agents)`);
|
|
54
|
-
return {
|
|
55
|
-
team: config.team,
|
|
56
|
-
agents: validAgents,
|
|
57
|
-
autoSpawn: config.autoSpawn ?? false,
|
|
58
|
-
};
|
|
34
|
+
const stat = fs.statSync(configPath);
|
|
35
|
+
foundConfigPath = configPath;
|
|
36
|
+
foundMtime = stat.mtimeMs;
|
|
37
|
+
break;
|
|
59
38
|
}
|
|
60
|
-
catch
|
|
61
|
-
|
|
39
|
+
catch {
|
|
40
|
+
// Ignore stat errors, try next path
|
|
62
41
|
}
|
|
63
42
|
}
|
|
64
43
|
}
|
|
65
|
-
|
|
44
|
+
// Check cache validity
|
|
45
|
+
if (configCache && configCache.projectRoot === projectRoot) {
|
|
46
|
+
// If no config file found, return cached null result
|
|
47
|
+
if (!foundConfigPath && !configCache.configPath) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
// If same file and not modified, return cached config
|
|
51
|
+
if (foundConfigPath === configCache.configPath && foundMtime === configCache.mtime) {
|
|
52
|
+
return configCache.config;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// No config file found
|
|
56
|
+
if (!foundConfigPath) {
|
|
57
|
+
configCache = {
|
|
58
|
+
config: null,
|
|
59
|
+
projectRoot,
|
|
60
|
+
configPath: null,
|
|
61
|
+
mtime: 0,
|
|
62
|
+
};
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
// Load and parse config
|
|
66
|
+
try {
|
|
67
|
+
const content = fs.readFileSync(foundConfigPath, 'utf-8');
|
|
68
|
+
const config = JSON.parse(content);
|
|
69
|
+
// Validate required fields
|
|
70
|
+
if (!config.team || typeof config.team !== 'string') {
|
|
71
|
+
console.error(`[teams-config] Invalid teams.json at ${foundConfigPath}: missing or invalid 'team' field`);
|
|
72
|
+
configCache = { config: null, projectRoot, configPath: foundConfigPath, mtime: foundMtime };
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
if (!Array.isArray(config.agents)) {
|
|
76
|
+
console.error(`[teams-config] Invalid teams.json at ${foundConfigPath}: 'agents' must be an array`);
|
|
77
|
+
configCache = { config: null, projectRoot, configPath: foundConfigPath, mtime: foundMtime };
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
// Validate agents
|
|
81
|
+
const validAgents = [];
|
|
82
|
+
for (const agent of config.agents) {
|
|
83
|
+
if (!agent.name || typeof agent.name !== 'string') {
|
|
84
|
+
console.warn(`[teams-config] Skipping agent with missing name in ${foundConfigPath}`);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (!agent.cli || typeof agent.cli !== 'string') {
|
|
88
|
+
console.warn(`[teams-config] Agent '${agent.name}' missing 'cli' field, defaulting to 'claude'`);
|
|
89
|
+
agent.cli = 'claude';
|
|
90
|
+
}
|
|
91
|
+
validAgents.push(agent);
|
|
92
|
+
}
|
|
93
|
+
console.log(`[teams-config] Loaded team '${config.team}' from ${foundConfigPath} (${validAgents.length} agents)`);
|
|
94
|
+
const result = {
|
|
95
|
+
team: config.team,
|
|
96
|
+
agents: validAgents,
|
|
97
|
+
autoSpawn: config.autoSpawn ?? false,
|
|
98
|
+
};
|
|
99
|
+
// Update cache
|
|
100
|
+
configCache = {
|
|
101
|
+
config: result,
|
|
102
|
+
projectRoot,
|
|
103
|
+
configPath: foundConfigPath,
|
|
104
|
+
mtime: foundMtime,
|
|
105
|
+
};
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
console.error(`[teams-config] Failed to parse ${foundConfigPath}:`, err);
|
|
110
|
+
configCache = { config: null, projectRoot, configPath: foundConfigPath, mtime: foundMtime };
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Clear the teams config cache.
|
|
116
|
+
* Useful for testing or when you know the config has changed.
|
|
117
|
+
*/
|
|
118
|
+
export function clearTeamsConfigCache() {
|
|
119
|
+
configCache = null;
|
|
66
120
|
}
|
|
67
121
|
/**
|
|
68
122
|
* Check if an agent name is valid according to teams.json
|
package/dist/teams-config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teams-config.js","sourceRoot":"","sources":["../src/teams-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"teams-config.js","sourceRoot":"","sources":["../src/teams-config.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/config",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.14",
|
|
4
4
|
"description": "Shared configuration schemas and loaders for Agent Relay",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"test:watch": "vitest"
|
|
84
84
|
},
|
|
85
85
|
"dependencies": {
|
|
86
|
-
"@agent-relay/protocol": "2.1.
|
|
86
|
+
"@agent-relay/protocol": "2.1.14",
|
|
87
87
|
"zod": "^3.23.8",
|
|
88
88
|
"zod-to-json-schema": "^3.23.1"
|
|
89
89
|
},
|