4runr-os 1.3.35 → 1.3.37
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-client.d.ts +2 -0
- package/dist/gateway-client.d.ts.map +1 -1
- package/dist/gateway-client.js +35 -4
- package/dist/gateway-client.js.map +1 -1
- package/dist/ui/v3/collectors/assets.collector.d.ts +20 -0
- package/dist/ui/v3/collectors/assets.collector.d.ts.map +1 -0
- package/dist/ui/v3/collectors/assets.collector.js +80 -0
- package/dist/ui/v3/collectors/assets.collector.js.map +1 -0
- package/dist/ui/v3/collectors/capabilities.collector.d.ts +18 -0
- package/dist/ui/v3/collectors/capabilities.collector.d.ts.map +1 -0
- package/dist/ui/v3/collectors/capabilities.collector.js +113 -0
- package/dist/ui/v3/collectors/capabilities.collector.js.map +1 -0
- package/dist/ui/v3/collectors/network.collector.d.ts +18 -0
- package/dist/ui/v3/collectors/network.collector.d.ts.map +1 -0
- package/dist/ui/v3/collectors/network.collector.js +37 -0
- package/dist/ui/v3/collectors/network.collector.js.map +1 -0
- package/dist/ui/v3/collectors/posture.derive.d.ts +24 -0
- package/dist/ui/v3/collectors/posture.derive.d.ts.map +1 -0
- package/dist/ui/v3/collectors/posture.derive.js +57 -0
- package/dist/ui/v3/collectors/posture.derive.js.map +1 -0
- package/dist/ui/v3/commands/commandEngine.js +94 -28
- package/dist/ui/v3/commands/commandEngine.js.map +1 -1
- package/dist/ui/v3/state/panelStore.d.ts +80 -0
- package/dist/ui/v3/state/panelStore.d.ts.map +1 -0
- package/dist/ui/v3/state/panelStore.js +124 -0
- package/dist/ui/v3/state/panelStore.js.map +1 -0
- package/dist/ui/v3/state/uiStateBuilder.d.ts +7 -0
- package/dist/ui/v3/state/uiStateBuilder.d.ts.map +1 -1
- package/dist/ui/v3/state/uiStateBuilder.js +28 -51
- package/dist/ui/v3/state/uiStateBuilder.js.map +1 -1
- package/dist/ui/v3/v1Adapters/runs.d.ts +8 -0
- package/dist/ui/v3/v1Adapters/runs.d.ts.map +1 -1
- package/dist/ui/v3/v1Adapters/runs.js +77 -6
- package/dist/ui/v3/v1Adapters/runs.js.map +1 -1
- package/package.json +1 -1
package/dist/gateway-client.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-client.d.ts","sourceRoot":"","sources":["../src/gateway-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IACpE,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,UAAU,CAAS;IAE3B,SAAgB,IAAI,EAAE;QACpB,MAAM,EAAE,CAAC,IAAI,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,QAAQ,CAAA;SAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QAClE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;KACzE,CAAC;gBAEU,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;
|
|
1
|
+
{"version":3,"file":"gateway-client.d.ts","sourceRoot":"","sources":["../src/gateway-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IACpE,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,UAAU,CAAS;IAE3B,SAAgB,IAAI,EAAE;QACpB,MAAM,EAAE,CAAC,IAAI,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,QAAQ,CAAA;SAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QAClE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;KACzE,CAAC;gBAEU,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IAoF3F,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC;IAKtB,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;CAI9B"}
|
package/dist/gateway-client.js
CHANGED
|
@@ -9,12 +9,33 @@ export class GatewayClient {
|
|
|
9
9
|
runs;
|
|
10
10
|
constructor(config) {
|
|
11
11
|
this.gatewayUrl = config.gatewayUrl;
|
|
12
|
+
// Build headers with optional auth
|
|
13
|
+
const headers = {
|
|
14
|
+
'Content-Type': 'application/json',
|
|
15
|
+
};
|
|
16
|
+
// Add API key if provided
|
|
17
|
+
if (config.apiKey) {
|
|
18
|
+
headers['x-api-key'] = config.apiKey;
|
|
19
|
+
}
|
|
20
|
+
// Add Bearer token if provided
|
|
21
|
+
if (config.authToken) {
|
|
22
|
+
headers['Authorization'] = `Bearer ${config.authToken}`;
|
|
23
|
+
}
|
|
24
|
+
// Fallback: Check environment variables
|
|
25
|
+
if (!config.apiKey && !config.authToken) {
|
|
26
|
+
const envApiKey = process.env.GATEWAY_API_KEY || process.env.API_KEY;
|
|
27
|
+
const envToken = process.env.GATEWAY_TOKEN || process.env.AUTH_TOKEN;
|
|
28
|
+
if (envApiKey) {
|
|
29
|
+
headers['x-api-key'] = envApiKey;
|
|
30
|
+
}
|
|
31
|
+
else if (envToken) {
|
|
32
|
+
headers['Authorization'] = `Bearer ${envToken}`;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
12
35
|
this.http = axios.create({
|
|
13
36
|
baseURL: config.gatewayUrl,
|
|
14
37
|
timeout: config.timeout || 30000, // Default 30s, but can be overridden
|
|
15
|
-
headers
|
|
16
|
-
'Content-Type': 'application/json',
|
|
17
|
-
},
|
|
38
|
+
headers,
|
|
18
39
|
});
|
|
19
40
|
// Disable logging by default (can be enabled via env var)
|
|
20
41
|
if (!process.env.ENABLE_GATEWAY_LOGGING) {
|
|
@@ -42,7 +63,17 @@ export class GatewayClient {
|
|
|
42
63
|
if (options?.status)
|
|
43
64
|
params.append('status', options.status);
|
|
44
65
|
const response = await this.http.get(`/api/runs?${params.toString()}`);
|
|
45
|
-
|
|
66
|
+
// Gateway returns { runs: Run[] }, extract the array
|
|
67
|
+
// Handle both formats: { runs: [...] } or direct array
|
|
68
|
+
if (Array.isArray(response.data)) {
|
|
69
|
+
return response.data;
|
|
70
|
+
}
|
|
71
|
+
if (response.data && Array.isArray(response.data.runs)) {
|
|
72
|
+
return response.data.runs;
|
|
73
|
+
}
|
|
74
|
+
// Fallback: return empty array if format is unexpected
|
|
75
|
+
console.warn('[GatewayClient] Unexpected response format from /api/runs:', response.data);
|
|
76
|
+
return [];
|
|
46
77
|
},
|
|
47
78
|
};
|
|
48
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-client.js","sourceRoot":"","sources":["../src/gateway-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAwB,MAAM,OAAO,CAAC;AAiC7C,MAAM,OAAO,aAAa;IAChB,IAAI,CAAgB;IACpB,UAAU,CAAS;IAEX,IAAI,CAKlB;IAEF,YAAY,
|
|
1
|
+
{"version":3,"file":"gateway-client.js","sourceRoot":"","sources":["../src/gateway-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section 7: Assets Collector
|
|
3
|
+
*
|
|
4
|
+
* Collects agent registry summary from V1 or Gateway API.
|
|
5
|
+
* Returns agent counts and run state summary.
|
|
6
|
+
*
|
|
7
|
+
* Data source priority:
|
|
8
|
+
* 1. Gateway API /api/runs (if connected) - get active/failed/completed counts
|
|
9
|
+
* 2. Local agent registry (V1) - get agent count
|
|
10
|
+
* 3. Fallback to unavailable if neither available
|
|
11
|
+
*/
|
|
12
|
+
import type { Value } from '../state/value.js';
|
|
13
|
+
import type { AssetsState } from '../state/uiStateTypes.js';
|
|
14
|
+
/**
|
|
15
|
+
* Collect assets (agents + runs summary)
|
|
16
|
+
*
|
|
17
|
+
* Returns Value<AssetsState> with agent and run counts
|
|
18
|
+
*/
|
|
19
|
+
export declare function collectAssets(): Promise<Value<AssetsState>>;
|
|
20
|
+
//# sourceMappingURL=assets.collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.collector.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/collectors/assets.collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAQ5D;;;;GAIG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAsEjE"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section 7: Assets Collector
|
|
3
|
+
*
|
|
4
|
+
* Collects agent registry summary from V1 or Gateway API.
|
|
5
|
+
* Returns agent counts and run state summary.
|
|
6
|
+
*
|
|
7
|
+
* Data source priority:
|
|
8
|
+
* 1. Gateway API /api/runs (if connected) - get active/failed/completed counts
|
|
9
|
+
* 2. Local agent registry (V1) - get agent count
|
|
10
|
+
* 3. Fallback to unavailable if neither available
|
|
11
|
+
*/
|
|
12
|
+
import { available, unavailable } from '../state/value.js';
|
|
13
|
+
import { listAgents } from '../v1Adapters/agents.js';
|
|
14
|
+
import { gatewayConnectionStore } from '../state/gatewayConnectionStore.js';
|
|
15
|
+
import { GatewayClient } from '../../../gateway-client.js';
|
|
16
|
+
const COLLECTOR_TIMEOUT = 5000; // ms
|
|
17
|
+
/**
|
|
18
|
+
* Collect assets (agents + runs summary)
|
|
19
|
+
*
|
|
20
|
+
* Returns Value<AssetsState> with agent and run counts
|
|
21
|
+
*/
|
|
22
|
+
export async function collectAssets() {
|
|
23
|
+
const timeoutPromise = new Promise((resolve) => {
|
|
24
|
+
setTimeout(() => {
|
|
25
|
+
resolve(unavailable('Assets collection timeout', 'Check gateway connection or system load'));
|
|
26
|
+
}, COLLECTOR_TIMEOUT);
|
|
27
|
+
});
|
|
28
|
+
const collectionPromise = (async () => {
|
|
29
|
+
try {
|
|
30
|
+
// Get local agent count (always available)
|
|
31
|
+
const agentsResult = listAgents();
|
|
32
|
+
const agentCount = agentsResult.ok ? agentsResult.data.length : 0;
|
|
33
|
+
// Get connection state
|
|
34
|
+
const connState = gatewayConnectionStore.getState();
|
|
35
|
+
// If connected, try to get run counts from gateway
|
|
36
|
+
if (connState.status === 'connected' && connState.resolvedTo) {
|
|
37
|
+
try {
|
|
38
|
+
const client = new GatewayClient({ gatewayUrl: connState.resolvedTo });
|
|
39
|
+
const runs = await client.runs.list({ limit: 100 });
|
|
40
|
+
// Calculate run state counts
|
|
41
|
+
const activeCount = runs.filter(r => r.status === 'running' || r.status === 'queued').length;
|
|
42
|
+
const completedCount = runs.filter(r => r.status === 'completed').length;
|
|
43
|
+
const errorCount = runs.filter(r => r.status === 'failed' || r.status === 'cancelled').length;
|
|
44
|
+
const totalRuns = runs.length;
|
|
45
|
+
// Assets state: combine agents and runs
|
|
46
|
+
const data = {
|
|
47
|
+
total: agentCount + totalRuns, // Total assets (agents + runs)
|
|
48
|
+
active: activeCount, // Active runs
|
|
49
|
+
idle: completedCount, // Completed runs
|
|
50
|
+
error: errorCount, // Failed/cancelled runs
|
|
51
|
+
};
|
|
52
|
+
return available(data);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
// Gateway API failed - fall back to agent count only
|
|
56
|
+
const data = {
|
|
57
|
+
total: agentCount,
|
|
58
|
+
active: 0,
|
|
59
|
+
idle: 0,
|
|
60
|
+
error: 0,
|
|
61
|
+
};
|
|
62
|
+
return available(data);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Not connected - use agent count only
|
|
66
|
+
const data = {
|
|
67
|
+
total: agentCount,
|
|
68
|
+
active: 0,
|
|
69
|
+
idle: 0,
|
|
70
|
+
error: 0,
|
|
71
|
+
};
|
|
72
|
+
return available(data);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
return unavailable(`Failed to collect assets: ${error.message || 'Unknown error'}`, 'Check agent registry and gateway connection');
|
|
76
|
+
}
|
|
77
|
+
})();
|
|
78
|
+
return Promise.race([collectionPromise, timeoutPromise]);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=assets.collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.collector.js","sourceRoot":"","sources":["../../../../src/ui/v3/collectors/assets.collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section 7: Capabilities Collector
|
|
3
|
+
*
|
|
4
|
+
* Collects capabilities from Gateway health endpoint.
|
|
5
|
+
* Shows real capabilities: persistence, auth mode, rate limit config.
|
|
6
|
+
*
|
|
7
|
+
* Truth: Only shows what the server actually returns.
|
|
8
|
+
* If a field is missing, show UNKNOWN, don't guess.
|
|
9
|
+
*/
|
|
10
|
+
import type { Value } from '../state/value.js';
|
|
11
|
+
import type { CapabilitiesState } from '../state/uiStateTypes.js';
|
|
12
|
+
/**
|
|
13
|
+
* Collect capabilities from Gateway health endpoint
|
|
14
|
+
*
|
|
15
|
+
* Returns Value<CapabilitiesState> with capabilities list
|
|
16
|
+
*/
|
|
17
|
+
export declare function collectCapabilities(): Promise<Value<CapabilitiesState>>;
|
|
18
|
+
//# sourceMappingURL=capabilities.collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.collector.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/collectors/capabilities.collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAOlE;;;;GAIG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAgH7E"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section 7: Capabilities Collector
|
|
3
|
+
*
|
|
4
|
+
* Collects capabilities from Gateway health endpoint.
|
|
5
|
+
* Shows real capabilities: persistence, auth mode, rate limit config.
|
|
6
|
+
*
|
|
7
|
+
* Truth: Only shows what the server actually returns.
|
|
8
|
+
* If a field is missing, show UNKNOWN, don't guess.
|
|
9
|
+
*/
|
|
10
|
+
import { available, unavailable } from '../state/value.js';
|
|
11
|
+
import { gatewayConnectionStore } from '../state/gatewayConnectionStore.js';
|
|
12
|
+
import { GatewayClient } from '../../../gateway-client.js';
|
|
13
|
+
const COLLECTOR_TIMEOUT = 5000; // ms
|
|
14
|
+
/**
|
|
15
|
+
* Collect capabilities from Gateway health endpoint
|
|
16
|
+
*
|
|
17
|
+
* Returns Value<CapabilitiesState> with capabilities list
|
|
18
|
+
*/
|
|
19
|
+
export async function collectCapabilities() {
|
|
20
|
+
const timeoutPromise = new Promise((resolve) => {
|
|
21
|
+
setTimeout(() => {
|
|
22
|
+
resolve(unavailable('Capabilities collection timeout', 'Check gateway connection'));
|
|
23
|
+
}, COLLECTOR_TIMEOUT);
|
|
24
|
+
});
|
|
25
|
+
const collectionPromise = (async () => {
|
|
26
|
+
try {
|
|
27
|
+
// Get connection state
|
|
28
|
+
const connState = gatewayConnectionStore.getState();
|
|
29
|
+
if (connState.status !== 'connected' || !connState.resolvedTo) {
|
|
30
|
+
return unavailable('Not connected to Gateway', 'Run "connect" first');
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const client = new GatewayClient({ gatewayUrl: connState.resolvedTo });
|
|
34
|
+
const health = await client.health();
|
|
35
|
+
// Build capabilities list from health response
|
|
36
|
+
// Truth: Only show what the server actually returns
|
|
37
|
+
const items = [];
|
|
38
|
+
// Persistence (from health.persistence field)
|
|
39
|
+
if (health.persistence !== undefined) {
|
|
40
|
+
items.push(`Persistence: ${health.persistence}`);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
items.push('Persistence: UNKNOWN');
|
|
44
|
+
}
|
|
45
|
+
// Auth (check if health has auth field - may not exist)
|
|
46
|
+
if ('auth' in health && health.auth !== undefined) {
|
|
47
|
+
const auth = health.auth;
|
|
48
|
+
if (typeof auth === 'object') {
|
|
49
|
+
items.push(`Auth: ${auth.enabled ? 'enabled' : 'disabled'}`);
|
|
50
|
+
if (auth.enabled && auth.mode) {
|
|
51
|
+
items.push(`Auth Mode: ${auth.mode}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
items.push(`Auth: ${auth}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
items.push('Auth: UNKNOWN');
|
|
60
|
+
}
|
|
61
|
+
// Rate limit (check if health has rateLimit field - may not exist)
|
|
62
|
+
// Gateway returns: { enabled: boolean, max: number, window_ms: number }
|
|
63
|
+
if ('rateLimit' in health && health.rateLimit !== undefined) {
|
|
64
|
+
const rateLimit = health.rateLimit;
|
|
65
|
+
if (typeof rateLimit === 'object') {
|
|
66
|
+
items.push(`Rate Limit: ${rateLimit.enabled ? 'enabled' : 'disabled'}`);
|
|
67
|
+
if (rateLimit.enabled) {
|
|
68
|
+
if (rateLimit.max !== undefined) {
|
|
69
|
+
items.push(`Rate Limit Max: ${rateLimit.max}`);
|
|
70
|
+
}
|
|
71
|
+
// Gateway returns window_ms (milliseconds), convert to seconds for display
|
|
72
|
+
if (rateLimit.window_ms !== undefined) {
|
|
73
|
+
const windowSeconds = Math.round(rateLimit.window_ms / 1000);
|
|
74
|
+
items.push(`Rate Limit Window: ${windowSeconds}s`);
|
|
75
|
+
}
|
|
76
|
+
else if (rateLimit.window !== undefined) {
|
|
77
|
+
// Fallback: if window is in seconds already
|
|
78
|
+
items.push(`Rate Limit Window: ${rateLimit.window}s`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
items.push(`Rate Limit: ${rateLimit}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
items.push('Rate Limit: UNKNOWN');
|
|
88
|
+
}
|
|
89
|
+
// Status (if present)
|
|
90
|
+
if (health.status) {
|
|
91
|
+
items.push(`Status: ${health.status}`);
|
|
92
|
+
}
|
|
93
|
+
const data = {
|
|
94
|
+
items: items.length > 0 ? items : ['No capabilities available'],
|
|
95
|
+
};
|
|
96
|
+
return available(data);
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
const httpStatus = error.response?.status;
|
|
100
|
+
if (httpStatus === 404) {
|
|
101
|
+
// Endpoint not implemented - that's OK, show unavailable
|
|
102
|
+
return unavailable('Capabilities endpoint not implemented', 'Gateway may not expose capabilities endpoint');
|
|
103
|
+
}
|
|
104
|
+
return unavailable(`Failed to fetch capabilities: ${error.message || 'Unknown error'}`, 'Check gateway connection');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
return unavailable(`Failed to collect capabilities: ${error.message || 'Unknown error'}`, 'Check gateway connection');
|
|
109
|
+
}
|
|
110
|
+
})();
|
|
111
|
+
return Promise.race([collectionPromise, timeoutPromise]);
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=capabilities.collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.collector.js","sourceRoot":"","sources":["../../../../src/ui/v3/collectors/capabilities.collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section 7: Network Collector
|
|
3
|
+
*
|
|
4
|
+
* Collects network state from gatewayConnectionStore.
|
|
5
|
+
* Shows target, effective URL, latency, connection status.
|
|
6
|
+
*
|
|
7
|
+
* This is mostly a pass-through from the connection store,
|
|
8
|
+
* but formats it for the panel display.
|
|
9
|
+
*/
|
|
10
|
+
import type { Value } from '../state/value.js';
|
|
11
|
+
import type { NetworkState } from '../state/uiStateTypes.js';
|
|
12
|
+
/**
|
|
13
|
+
* Collect network state from connection store
|
|
14
|
+
*
|
|
15
|
+
* Returns Value<NetworkState> based on connection store state
|
|
16
|
+
*/
|
|
17
|
+
export declare function collectNetwork(): Promise<Value<NetworkState>>;
|
|
18
|
+
//# sourceMappingURL=network.collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.collector.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/collectors/network.collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAK7D;;;;GAIG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CA6BnE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section 7: Network Collector
|
|
3
|
+
*
|
|
4
|
+
* Collects network state from gatewayConnectionStore.
|
|
5
|
+
* Shows target, effective URL, latency, connection status.
|
|
6
|
+
*
|
|
7
|
+
* This is mostly a pass-through from the connection store,
|
|
8
|
+
* but formats it for the panel display.
|
|
9
|
+
*/
|
|
10
|
+
import { available, unavailable, loading } from '../state/value.js';
|
|
11
|
+
import { gatewayConnectionStore } from '../state/gatewayConnectionStore.js';
|
|
12
|
+
/**
|
|
13
|
+
* Collect network state from connection store
|
|
14
|
+
*
|
|
15
|
+
* Returns Value<NetworkState> based on connection store state
|
|
16
|
+
*/
|
|
17
|
+
export async function collectNetwork() {
|
|
18
|
+
const connState = gatewayConnectionStore.getState();
|
|
19
|
+
if (connState.status === 'connected') {
|
|
20
|
+
const data = {
|
|
21
|
+
gateway: 'CONNECTED',
|
|
22
|
+
endpoint: connState.resolvedTo,
|
|
23
|
+
status: connState.health?.status || 'alive',
|
|
24
|
+
latency: connState.latencyMs,
|
|
25
|
+
};
|
|
26
|
+
return available(data);
|
|
27
|
+
}
|
|
28
|
+
if (connState.status === 'connecting') {
|
|
29
|
+
return loading('Connecting to Gateway...');
|
|
30
|
+
}
|
|
31
|
+
if (connState.status === 'error') {
|
|
32
|
+
return unavailable(connState.message || 'Connection failed', connState.next || 'Run "connect" to retry');
|
|
33
|
+
}
|
|
34
|
+
// disconnected
|
|
35
|
+
return unavailable(connState.reason || 'Not connected', connState.next || 'Run "connect" to connect to Gateway');
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=network.collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.collector.js","sourceRoot":"","sources":["../../../../src/ui/v3/collectors/network.collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAG5E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,SAAS,GAAG,sBAAsB,CAAC,QAAQ,EAAE,CAAC;IAEpD,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,GAAiB;YACzB,OAAO,EAAE,WAAW;YACpB,QAAQ,EAAE,SAAS,CAAC,UAAU;YAC9B,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,IAAI,OAAO;YAC3C,OAAO,EAAE,SAAS,CAAC,SAAS;SAC7B,CAAC;QACF,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QACtC,OAAO,OAAO,CAAe,0BAA0B,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,WAAW,CAChB,SAAS,CAAC,OAAO,IAAI,mBAAmB,EACxC,SAAS,CAAC,IAAI,IAAI,wBAAwB,CAC3C,CAAC;IACJ,CAAC;IAED,eAAe;IACf,OAAO,WAAW,CAChB,SAAS,CAAC,MAAM,IAAI,eAAe,EACnC,SAAS,CAAC,IAAI,IAAI,qCAAqC,CACxD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section 7: Posture Deriver
|
|
3
|
+
*
|
|
4
|
+
* Derives posture state from other panel states.
|
|
5
|
+
* Not a collector - it's computed from:
|
|
6
|
+
* - Network state (must be connected)
|
|
7
|
+
* - Capabilities state (must be available)
|
|
8
|
+
* - Gateway health (must be alive)
|
|
9
|
+
*
|
|
10
|
+
* Derivation rules:
|
|
11
|
+
* - If Network not connected → UNAVAILABLE ("Not connected")
|
|
12
|
+
* - Else if Capabilities.persistence is missing/unknown → UNAVAILABLE ("Capabilities unknown")
|
|
13
|
+
* - Else if Gateway health not alive → UNAVAILABLE ("Gateway unhealthy")
|
|
14
|
+
* - Else → AVAILABLE ("MODE: RUNNING" or "MODE: HUB")
|
|
15
|
+
*/
|
|
16
|
+
import type { Value } from '../state/value.js';
|
|
17
|
+
import type { PostureState } from '../state/uiStateTypes.js';
|
|
18
|
+
/**
|
|
19
|
+
* Derive posture state from other panel states
|
|
20
|
+
*
|
|
21
|
+
* Returns Value<PostureState> based on network, capabilities, and health
|
|
22
|
+
*/
|
|
23
|
+
export declare function derivePosture(): Promise<Value<PostureState>>;
|
|
24
|
+
//# sourceMappingURL=posture.derive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posture.derive.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/collectors/posture.derive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAM7D;;;;GAIG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAoDlE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section 7: Posture Deriver
|
|
3
|
+
*
|
|
4
|
+
* Derives posture state from other panel states.
|
|
5
|
+
* Not a collector - it's computed from:
|
|
6
|
+
* - Network state (must be connected)
|
|
7
|
+
* - Capabilities state (must be available)
|
|
8
|
+
* - Gateway health (must be alive)
|
|
9
|
+
*
|
|
10
|
+
* Derivation rules:
|
|
11
|
+
* - If Network not connected → UNAVAILABLE ("Not connected")
|
|
12
|
+
* - Else if Capabilities.persistence is missing/unknown → UNAVAILABLE ("Capabilities unknown")
|
|
13
|
+
* - Else if Gateway health not alive → UNAVAILABLE ("Gateway unhealthy")
|
|
14
|
+
* - Else → AVAILABLE ("MODE: RUNNING" or "MODE: HUB")
|
|
15
|
+
*/
|
|
16
|
+
import { available, unavailable } from '../state/value.js';
|
|
17
|
+
import { gatewayConnectionStore } from '../state/gatewayConnectionStore.js';
|
|
18
|
+
import { isPostureEnabled } from '../runtime/moduleConfig.js';
|
|
19
|
+
import { panelStore } from '../state/panelStore.js';
|
|
20
|
+
/**
|
|
21
|
+
* Derive posture state from other panel states
|
|
22
|
+
*
|
|
23
|
+
* Returns Value<PostureState> based on network, capabilities, and health
|
|
24
|
+
*/
|
|
25
|
+
export async function derivePosture() {
|
|
26
|
+
// Check if posture module is enabled
|
|
27
|
+
const postureConfig = isPostureEnabled();
|
|
28
|
+
if (!postureConfig.enabled) {
|
|
29
|
+
return unavailable(postureConfig.reason, postureConfig.nextAction || 'Enable posture service or configure POSTURE_URL');
|
|
30
|
+
}
|
|
31
|
+
// Get network state
|
|
32
|
+
const connState = gatewayConnectionStore.getState();
|
|
33
|
+
if (connState.status !== 'connected') {
|
|
34
|
+
return unavailable('Not connected to Gateway', 'Run "connect" first');
|
|
35
|
+
}
|
|
36
|
+
// Get capabilities state from panel store
|
|
37
|
+
const capabilitiesState = panelStore.getPanel('capabilities');
|
|
38
|
+
if (capabilitiesState.status !== 'AVAILABLE' || !capabilitiesState.data) {
|
|
39
|
+
return unavailable('Capabilities unknown', 'Wait for capabilities to load or run "status"');
|
|
40
|
+
}
|
|
41
|
+
// Check if persistence is known
|
|
42
|
+
const persistenceItem = capabilitiesState.data.items.find(item => item.startsWith('Persistence:'));
|
|
43
|
+
if (!persistenceItem || persistenceItem.includes('UNKNOWN')) {
|
|
44
|
+
return unavailable('Capabilities incomplete', 'Wait for capabilities to fully load');
|
|
45
|
+
}
|
|
46
|
+
// Check gateway health
|
|
47
|
+
if (connState.health?.status !== 'alive' && connState.health?.status !== 'ok') {
|
|
48
|
+
return unavailable('Gateway unhealthy', 'Check gateway logs and restart if needed');
|
|
49
|
+
}
|
|
50
|
+
// All checks passed - posture is available
|
|
51
|
+
// Determine mode based on connection state
|
|
52
|
+
const data = {
|
|
53
|
+
mode: 'HUB', // Default to HUB, can be set to RUNNING by start command
|
|
54
|
+
};
|
|
55
|
+
return available(data);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=posture.derive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posture.derive.js","sourceRoot":"","sources":["../../../../src/ui/v3/collectors/posture.derive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,qCAAqC;IACrC,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,WAAW,CAChB,aAAa,CAAC,MAAM,EACpB,aAAa,CAAC,UAAU,IAAI,iDAAiD,CAC9E,CAAC;IACJ,CAAC;IAED,oBAAoB;IACpB,MAAM,SAAS,GAAG,sBAAsB,CAAC,QAAQ,EAAE,CAAC;IACpD,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACrC,OAAO,WAAW,CAChB,0BAA0B,EAC1B,qBAAqB,CACtB,CAAC;IACJ,CAAC;IAED,0CAA0C;IAC1C,MAAM,iBAAiB,GAAG,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC9D,IAAI,iBAAiB,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QACxE,OAAO,WAAW,CAChB,sBAAsB,EACtB,+CAA+C,CAChD,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,MAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;IACnG,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5D,OAAO,WAAW,CAChB,yBAAyB,EACzB,qCAAqC,CACtC,CAAC;IACJ,CAAC;IAED,uBAAuB;IACvB,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC;QAC9E,OAAO,WAAW,CAChB,mBAAmB,EACnB,0CAA0C,CAC3C,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,2CAA2C;IAC3C,MAAM,IAAI,GAAiB;QACzB,IAAI,EAAE,KAAK,EAAE,yDAAyD;KACvE,CAAC;IAEF,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC"}
|