@athenafleet/bridge 1.0.1 → 1.0.2
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/gateway.d.ts +5 -3
- package/dist/gateway.js +95 -6
- package/dist/gateway.js.map +1 -1
- package/package.json +1 -1
package/dist/gateway.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @athenafleet/bridge — Gateway Data Collector
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Reads agent data from the local OpenClaw config file.
|
|
5
|
+
* Falls back to HTTP API for backward compatibility.
|
|
6
6
|
*/
|
|
7
7
|
import type { SyncedAgent } from './types.js';
|
|
8
8
|
export type FetchResult = {
|
|
@@ -13,6 +13,8 @@ export type FetchResult = {
|
|
|
13
13
|
error: string;
|
|
14
14
|
};
|
|
15
15
|
/**
|
|
16
|
-
* Fetch agent list from local OpenClaw
|
|
16
|
+
* Fetch agent list from the local OpenClaw config file.
|
|
17
|
+
* Primary method: reads ~/.openclaw/openclaw.json directly.
|
|
18
|
+
* Fallback: tries HTTP /api/agents on the gateway URL.
|
|
17
19
|
*/
|
|
18
20
|
export declare function fetchAgents(openclawUrl: string): Promise<FetchResult>;
|
package/dist/gateway.js
CHANGED
|
@@ -1,14 +1,68 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @athenafleet/bridge — Gateway Data Collector
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Reads agent data from the local OpenClaw config file.
|
|
5
|
+
* Falls back to HTTP API for backward compatibility.
|
|
6
6
|
*/
|
|
7
|
+
import { readFile } from 'fs/promises';
|
|
8
|
+
import { homedir } from 'os';
|
|
9
|
+
import { join } from 'path';
|
|
7
10
|
import * as log from './logger.js';
|
|
8
11
|
/**
|
|
9
|
-
*
|
|
12
|
+
* Resolve the OpenClaw config file path.
|
|
13
|
+
* Checks OPENCLAW_CONFIG env var, then ~/.openclaw/openclaw.json
|
|
14
|
+
*/
|
|
15
|
+
function resolveConfigPath() {
|
|
16
|
+
if (process.env.OPENCLAW_CONFIG) {
|
|
17
|
+
return process.env.OPENCLAW_CONFIG;
|
|
18
|
+
}
|
|
19
|
+
return join(homedir(), '.openclaw', 'openclaw.json');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Fetch agent list from the local OpenClaw config file.
|
|
23
|
+
* Primary method: reads ~/.openclaw/openclaw.json directly.
|
|
24
|
+
* Fallback: tries HTTP /api/agents on the gateway URL.
|
|
10
25
|
*/
|
|
11
26
|
export async function fetchAgents(openclawUrl) {
|
|
27
|
+
// Primary: read config file
|
|
28
|
+
const fileResult = await fetchAgentsFromConfig();
|
|
29
|
+
if (fileResult.ok)
|
|
30
|
+
return fileResult;
|
|
31
|
+
log.debug('Config file read failed, trying HTTP fallback', { error: fileResult.error });
|
|
32
|
+
// Fallback: HTTP API (for compatibility with future REST endpoints)
|
|
33
|
+
return fetchAgentsFromHttp(openclawUrl);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Read agents directly from the OpenClaw config file.
|
|
37
|
+
*/
|
|
38
|
+
async function fetchAgentsFromConfig() {
|
|
39
|
+
const configPath = resolveConfigPath();
|
|
40
|
+
try {
|
|
41
|
+
const raw = await readFile(configPath, 'utf-8');
|
|
42
|
+
const config = JSON.parse(raw);
|
|
43
|
+
const agents = config.agents;
|
|
44
|
+
if (!agents || typeof agents !== 'object') {
|
|
45
|
+
return { ok: false, error: 'No agents section in config' };
|
|
46
|
+
}
|
|
47
|
+
const list = agents.list;
|
|
48
|
+
if (!Array.isArray(list)) {
|
|
49
|
+
return { ok: false, error: 'agents.list is not an array' };
|
|
50
|
+
}
|
|
51
|
+
const synced = list
|
|
52
|
+
.map(sanitizeConfigAgent)
|
|
53
|
+
.filter((a) => a !== null);
|
|
54
|
+
log.debug(`Read ${synced.length} agents from config file`);
|
|
55
|
+
return { ok: true, data: synced };
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
59
|
+
return { ok: false, error: `Config read failed: ${msg}` };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Fallback: fetch agents via HTTP from the gateway URL.
|
|
64
|
+
*/
|
|
65
|
+
async function fetchAgentsFromHttp(openclawUrl) {
|
|
12
66
|
const url = `${openclawUrl.replace(/\/+$/, '')}/api/agents`;
|
|
13
67
|
const controller = new AbortController();
|
|
14
68
|
const timeout = setTimeout(() => controller.abort(), 5_000);
|
|
@@ -26,7 +80,7 @@ export async function fetchAgents(openclawUrl) {
|
|
|
26
80
|
log.warn('Gateway /api/agents did not return an array');
|
|
27
81
|
return { ok: false, error: 'Non-array response' };
|
|
28
82
|
}
|
|
29
|
-
const agents = data.map(
|
|
83
|
+
const agents = data.map(sanitizeHttpAgent).filter((a) => a !== null);
|
|
30
84
|
return { ok: true, data: agents };
|
|
31
85
|
}
|
|
32
86
|
catch (err) {
|
|
@@ -43,9 +97,44 @@ export async function fetchAgents(openclawUrl) {
|
|
|
43
97
|
}
|
|
44
98
|
}
|
|
45
99
|
/**
|
|
46
|
-
* Map
|
|
100
|
+
* Map an agent entry from openclaw.json config to SyncedAgent.
|
|
101
|
+
*/
|
|
102
|
+
function sanitizeConfigAgent(raw) {
|
|
103
|
+
if (typeof raw !== 'object' || raw === null)
|
|
104
|
+
return null;
|
|
105
|
+
const r = raw;
|
|
106
|
+
const id = r.id;
|
|
107
|
+
if (!id || typeof id !== 'string')
|
|
108
|
+
return null;
|
|
109
|
+
// Extract name from identity.name, then .name, then .id
|
|
110
|
+
const identity = r.identity;
|
|
111
|
+
const identityName = identity && typeof identity.name === 'string' ? identity.name : undefined;
|
|
112
|
+
const name = identityName ?? (typeof r.name === 'string' ? r.name : id);
|
|
113
|
+
// Extract model from .model.primary or .model (string)
|
|
114
|
+
let model = '';
|
|
115
|
+
if (typeof r.model === 'string') {
|
|
116
|
+
model = r.model;
|
|
117
|
+
}
|
|
118
|
+
else if (r.model && typeof r.model === 'object') {
|
|
119
|
+
const m = r.model;
|
|
120
|
+
if (typeof m.primary === 'string')
|
|
121
|
+
model = m.primary;
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
id,
|
|
125
|
+
name,
|
|
126
|
+
emoji: typeof r.emoji === 'string' ? r.emoji : '🤖',
|
|
127
|
+
status: 'active',
|
|
128
|
+
model,
|
|
129
|
+
uptime: 0,
|
|
130
|
+
lastHeartbeat: new Date().toISOString(),
|
|
131
|
+
sessionCount: 0,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Map raw HTTP gateway agent data to SyncedAgent with safe defaults.
|
|
47
136
|
*/
|
|
48
|
-
function
|
|
137
|
+
function sanitizeHttpAgent(raw) {
|
|
49
138
|
if (typeof raw !== 'object' || raw === null)
|
|
50
139
|
return null;
|
|
51
140
|
const r = raw;
|
package/dist/gateway.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"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"}
|