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.
Files changed (35) hide show
  1. package/dist/gateway-client.d.ts +2 -0
  2. package/dist/gateway-client.d.ts.map +1 -1
  3. package/dist/gateway-client.js +35 -4
  4. package/dist/gateway-client.js.map +1 -1
  5. package/dist/ui/v3/collectors/assets.collector.d.ts +20 -0
  6. package/dist/ui/v3/collectors/assets.collector.d.ts.map +1 -0
  7. package/dist/ui/v3/collectors/assets.collector.js +80 -0
  8. package/dist/ui/v3/collectors/assets.collector.js.map +1 -0
  9. package/dist/ui/v3/collectors/capabilities.collector.d.ts +18 -0
  10. package/dist/ui/v3/collectors/capabilities.collector.d.ts.map +1 -0
  11. package/dist/ui/v3/collectors/capabilities.collector.js +113 -0
  12. package/dist/ui/v3/collectors/capabilities.collector.js.map +1 -0
  13. package/dist/ui/v3/collectors/network.collector.d.ts +18 -0
  14. package/dist/ui/v3/collectors/network.collector.d.ts.map +1 -0
  15. package/dist/ui/v3/collectors/network.collector.js +37 -0
  16. package/dist/ui/v3/collectors/network.collector.js.map +1 -0
  17. package/dist/ui/v3/collectors/posture.derive.d.ts +24 -0
  18. package/dist/ui/v3/collectors/posture.derive.d.ts.map +1 -0
  19. package/dist/ui/v3/collectors/posture.derive.js +57 -0
  20. package/dist/ui/v3/collectors/posture.derive.js.map +1 -0
  21. package/dist/ui/v3/commands/commandEngine.js +94 -28
  22. package/dist/ui/v3/commands/commandEngine.js.map +1 -1
  23. package/dist/ui/v3/state/panelStore.d.ts +80 -0
  24. package/dist/ui/v3/state/panelStore.d.ts.map +1 -0
  25. package/dist/ui/v3/state/panelStore.js +124 -0
  26. package/dist/ui/v3/state/panelStore.js.map +1 -0
  27. package/dist/ui/v3/state/uiStateBuilder.d.ts +7 -0
  28. package/dist/ui/v3/state/uiStateBuilder.d.ts.map +1 -1
  29. package/dist/ui/v3/state/uiStateBuilder.js +28 -51
  30. package/dist/ui/v3/state/uiStateBuilder.js.map +1 -1
  31. package/dist/ui/v3/v1Adapters/runs.d.ts +8 -0
  32. package/dist/ui/v3/v1Adapters/runs.d.ts.map +1 -1
  33. package/dist/ui/v3/v1Adapters/runs.js +77 -6
  34. package/dist/ui/v3/v1Adapters/runs.js.map +1 -1
  35. package/package.json +1 -1
@@ -56,6 +56,8 @@ export declare class GatewayClient {
56
56
  constructor(config: {
57
57
  gatewayUrl: string;
58
58
  timeout?: number;
59
+ apiKey?: string;
60
+ authToken?: string;
59
61
  });
60
62
  health(): Promise<any>;
61
63
  metrics(): Promise<any>;
@@ -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;IA+CtD,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC;IAKtB,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;CAI9B"}
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"}
@@ -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
- return response.data.runs || [];
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,MAAgD;QAC1D,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAEpC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;YACvB,OAAO,EAAE,MAAM,CAAC,UAAU;YAC1B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK,EAAE,qCAAqC;YACvE,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QAEH,0DAA0D;QAC1D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;YACxC,sBAAsB;YACtB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAChC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAClB,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CACjC,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACjC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACtB,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CACjC,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC,IAAI,GAAG;YACV,MAAM,EAAE,KAAK,EAAE,IAAuC,EAAE,EAAE;gBACxD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBACzD,OAAO,QAAQ,CAAC,IAAI,CAAC;YACvB,CAAC;YACD,KAAK,EAAE,KAAK,EAAE,EAAU,EAAE,EAAE;gBAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAChD,CAAC;YACD,GAAG,EAAE,KAAK,EAAE,EAAU,EAAE,EAAE;gBACxB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;gBACxD,OAAO,QAAQ,CAAC,IAAI,CAAC;YACvB,CAAC;YACD,IAAI,EAAE,KAAK,EAAE,OAA6C,EAAE,EAAE;gBAC5D,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;gBACrC,IAAI,OAAO,EAAE,KAAK;oBAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACrE,IAAI,OAAO,EAAE,MAAM;oBAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACvE,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAClC,CAAC;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;CACF"}
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"}