@aristanetworks/eos-mcp-server 0.8.0-beta → 0.9.0-beta

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 (88) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +19 -42
  3. package/dist/cli.d.ts +1 -4
  4. package/dist/cli.js +4 -63
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/probe.js +2 -1
  7. package/dist/commands/probe.js.map +1 -1
  8. package/dist/config/diagnostics.d.ts +15 -5
  9. package/dist/config/diagnostics.js +8 -3
  10. package/dist/config/diagnostics.js.map +1 -1
  11. package/dist/config/loadConfig.js +2 -5
  12. package/dist/config/loadConfig.js.map +1 -1
  13. package/dist/config/schema.d.ts +123 -15
  14. package/dist/config/schema.js +14 -1
  15. package/dist/config/schema.js.map +1 -1
  16. package/dist/connection/eosDeviceReader.d.ts +6 -1
  17. package/dist/connection/eosDeviceReader.js +14 -3
  18. package/dist/connection/eosDeviceReader.js.map +1 -1
  19. package/dist/diagnostics/eapiRunner.js +7 -1
  20. package/dist/diagnostics/eapiRunner.js.map +1 -1
  21. package/dist/diagnostics/executor.d.ts +7 -4
  22. package/dist/diagnostics/executor.js +16 -14
  23. package/dist/diagnostics/executor.js.map +1 -1
  24. package/dist/diagnostics/types.d.ts +22 -6
  25. package/dist/eapi/client.js +5 -4
  26. package/dist/eapi/client.js.map +1 -1
  27. package/dist/eapi/types.d.ts +3 -0
  28. package/dist/eapi/types.js.map +1 -1
  29. package/dist/index.js +0 -10
  30. package/dist/index.js.map +1 -1
  31. package/dist/mcp/createServer.js +21 -21
  32. package/dist/mcp/createServer.js.map +1 -1
  33. package/dist/mcp/tools/ping.d.ts +2 -9
  34. package/dist/mcp/tools/ping.js +13 -26
  35. package/dist/mcp/tools/ping.js.map +1 -1
  36. package/dist/operations/eapiSlots.d.ts +68 -0
  37. package/dist/operations/eapiSlots.js +237 -0
  38. package/dist/operations/eapiSlots.js.map +1 -0
  39. package/dist/operations/readExecution.js +1 -1
  40. package/dist/operations/readExecution.js.map +1 -1
  41. package/dist/serverInfo/buildServerInfo.js +4 -1
  42. package/dist/serverInfo/buildServerInfo.js.map +1 -1
  43. package/dist/serverInfo/types.d.ts +3 -0
  44. package/docs/CHECKPOINT.md +3 -6
  45. package/docs/CODE_WALKTHROUGH.md +6 -11
  46. package/docs/DEMO_SKILLS_YOUTUBE.md +346 -0
  47. package/docs/DESIGN.md +4 -4
  48. package/docs/DIAGNOSTICS.md +26 -74
  49. package/docs/IMPLEMENTATION_PLAN.md +2 -2
  50. package/docs/adr/0002-fail-closed-diagnostic-reservations.md +2 -0
  51. package/docs/adr/0003-durable-diagnostic-ledger.md +2 -0
  52. package/docs/adr/0004-offline-operator-attested-release.md +2 -0
  53. package/docs/adr/0005-multi-destination-ping.md +5 -1
  54. package/docs/adr/0006-in-memory-timed-diagnostic-capacity.md +23 -0
  55. package/docs/adr/0007-per-device-diagnostic-concurrency.md +16 -0
  56. package/docs/adr/0008-read-only-tool-annotations.md +16 -0
  57. package/docs/adr/0009-shared-per-device-eapi-slots.md +40 -0
  58. package/docs/research/eos-diagnostic-lifecycle.md +2 -0
  59. package/docs/research/eos-linter-integration.md +70 -0
  60. package/package.json +1 -1
  61. package/dist/commands/inspectDiagnostics.d.ts +0 -3
  62. package/dist/commands/inspectDiagnostics.js +0 -35
  63. package/dist/commands/inspectDiagnostics.js.map +0 -1
  64. package/dist/commands/releaseDiagnostics.d.ts +0 -9
  65. package/dist/commands/releaseDiagnostics.js +0 -87
  66. package/dist/commands/releaseDiagnostics.js.map +0 -1
  67. package/dist/diagnostics/concurrency.d.ts +0 -33
  68. package/dist/diagnostics/concurrency.js +0 -157
  69. package/dist/diagnostics/concurrency.js.map +0 -1
  70. package/dist/diagnostics/journal.d.ts +0 -14
  71. package/dist/diagnostics/journal.js +0 -317
  72. package/dist/diagnostics/journal.js.map +0 -1
  73. package/dist/diagnostics/journalTypes.d.ts +0 -8
  74. package/dist/diagnostics/journalTypes.js +0 -2
  75. package/dist/diagnostics/journalTypes.js.map +0 -1
  76. package/dist/diagnostics/releaseEvidence.d.ts +0 -502
  77. package/dist/diagnostics/releaseEvidence.js +0 -115
  78. package/dist/diagnostics/releaseEvidence.js.map +0 -1
  79. package/dist/diagnostics/reservationSchema.d.ts +0 -49
  80. package/dist/diagnostics/reservationSchema.js +0 -18
  81. package/dist/diagnostics/reservationSchema.js.map +0 -1
  82. package/dist/diagnostics/statePath.d.ts +0 -4
  83. package/dist/diagnostics/statePath.js +0 -25
  84. package/dist/diagnostics/statePath.js.map +0 -1
  85. package/dist/utils/privateFile.d.ts +0 -3
  86. package/dist/utils/privateFile.js +0 -7
  87. package/dist/utils/privateFile.js.map +0 -1
  88. package/docs/examples/diagnostic-release-evidence.template.json +0 -26
@@ -2,60 +2,70 @@ import { z } from "zod";
2
2
  export declare const serverConfigFileSchema: z.ZodObject<{
3
3
  version: z.ZodOptional<z.ZodLiteral<1>>;
4
4
  diagnostics: z.ZodOptional<z.ZodEffects<z.ZodObject<{
5
- stateFile: z.ZodOptional<z.ZodString>;
5
+ stateFile: z.ZodOptional<z.ZodNever>;
6
6
  defaultPingCount: z.ZodDefault<z.ZodNumber>;
7
7
  maxPingCount: z.ZodDefault<z.ZodNumber>;
8
8
  maxProbesPerRequest: z.ZodDefault<z.ZodNumber>;
9
9
  maxDestinationsPerRequest: z.ZodDefault<z.ZodNumber>;
10
10
  deviceConcurrency: z.ZodDefault<z.ZodNumber>;
11
+ maxConcurrentDiagnostics: z.ZodDefault<z.ZodNumber>;
11
12
  pingReplyTimeoutMs: z.ZodDefault<z.ZodNumber>;
12
13
  commandTimeoutMs: z.ZodDefault<z.ZodNumber>;
13
14
  httpTimeoutMs: z.ZodDefault<z.ZodNumber>;
14
15
  overallOperationTimeoutMs: z.ZodDefault<z.ZodNumber>;
16
+ nativeRequestTimeout: z.ZodDefault<z.ZodBoolean>;
15
17
  }, "strict", z.ZodTypeAny, {
16
18
  defaultPingCount: number;
17
19
  maxPingCount: number;
18
20
  maxProbesPerRequest: number;
19
21
  maxDestinationsPerRequest: number;
20
22
  deviceConcurrency: number;
23
+ maxConcurrentDiagnostics: number;
21
24
  pingReplyTimeoutMs: number;
22
25
  commandTimeoutMs: number;
23
26
  httpTimeoutMs: number;
24
27
  overallOperationTimeoutMs: number;
25
- stateFile?: string | undefined;
28
+ nativeRequestTimeout: boolean;
29
+ stateFile?: undefined;
26
30
  }, {
27
- stateFile?: string | undefined;
31
+ stateFile?: undefined;
28
32
  defaultPingCount?: number | undefined;
29
33
  maxPingCount?: number | undefined;
30
34
  maxProbesPerRequest?: number | undefined;
31
35
  maxDestinationsPerRequest?: number | undefined;
32
36
  deviceConcurrency?: number | undefined;
37
+ maxConcurrentDiagnostics?: number | undefined;
33
38
  pingReplyTimeoutMs?: number | undefined;
34
39
  commandTimeoutMs?: number | undefined;
35
40
  httpTimeoutMs?: number | undefined;
36
41
  overallOperationTimeoutMs?: number | undefined;
42
+ nativeRequestTimeout?: boolean | undefined;
37
43
  }>, {
38
44
  defaultPingCount: number;
39
45
  maxPingCount: number;
40
46
  maxProbesPerRequest: number;
41
47
  maxDestinationsPerRequest: number;
42
48
  deviceConcurrency: number;
49
+ maxConcurrentDiagnostics: number;
43
50
  pingReplyTimeoutMs: number;
44
51
  commandTimeoutMs: number;
45
52
  httpTimeoutMs: number;
46
53
  overallOperationTimeoutMs: number;
47
- stateFile?: string | undefined;
54
+ nativeRequestTimeout: boolean;
55
+ stateFile?: undefined;
48
56
  }, {
49
- stateFile?: string | undefined;
57
+ stateFile?: undefined;
50
58
  defaultPingCount?: number | undefined;
51
59
  maxPingCount?: number | undefined;
52
60
  maxProbesPerRequest?: number | undefined;
53
61
  maxDestinationsPerRequest?: number | undefined;
54
62
  deviceConcurrency?: number | undefined;
63
+ maxConcurrentDiagnostics?: number | undefined;
55
64
  pingReplyTimeoutMs?: number | undefined;
56
65
  commandTimeoutMs?: number | undefined;
57
66
  httpTimeoutMs?: number | undefined;
58
67
  overallOperationTimeoutMs?: number | undefined;
68
+ nativeRequestTimeout?: boolean | undefined;
59
69
  }>>;
60
70
  inventory: z.ZodOptional<z.ZodString>;
61
71
  actor: z.ZodOptional<z.ZodString>;
@@ -64,6 +74,7 @@ export declare const serverConfigFileSchema: z.ZodObject<{
64
74
  readTimeoutMs: z.ZodOptional<z.ZodNumber>;
65
75
  overallOperationTimeoutMs: z.ZodOptional<z.ZodNumber>;
66
76
  deviceConcurrency: z.ZodOptional<z.ZodNumber>;
77
+ readFanOut: z.ZodOptional<z.ZodNumber>;
67
78
  maxReadTargets: z.ZodOptional<z.ZodNumber>;
68
79
  maxShowCommandsPerRequest: z.ZodOptional<z.ZodNumber>;
69
80
  maxLoggingMessagesPerRequest: z.ZodOptional<z.ZodNumber>;
@@ -96,17 +107,20 @@ export declare const serverConfigFileSchema: z.ZodObject<{
96
107
  maxProbesPerRequest: number;
97
108
  maxDestinationsPerRequest: number;
98
109
  deviceConcurrency: number;
110
+ maxConcurrentDiagnostics: number;
99
111
  pingReplyTimeoutMs: number;
100
112
  commandTimeoutMs: number;
101
113
  httpTimeoutMs: number;
102
114
  overallOperationTimeoutMs: number;
103
- stateFile?: string | undefined;
115
+ nativeRequestTimeout: boolean;
116
+ stateFile?: undefined;
104
117
  } | undefined;
105
118
  inventory?: string | undefined;
106
119
  actor?: string | undefined;
107
120
  logFile?: string | undefined;
108
121
  caFile?: string | undefined;
109
122
  readTimeoutMs?: number | undefined;
123
+ readFanOut?: number | undefined;
110
124
  maxReadTargets?: number | undefined;
111
125
  maxShowCommandsPerRequest?: number | undefined;
112
126
  maxLoggingMessagesPerRequest?: number | undefined;
@@ -124,22 +138,25 @@ export declare const serverConfigFileSchema: z.ZodObject<{
124
138
  overallOperationTimeoutMs?: number | undefined;
125
139
  version?: 1 | undefined;
126
140
  diagnostics?: {
127
- stateFile?: string | undefined;
141
+ stateFile?: undefined;
128
142
  defaultPingCount?: number | undefined;
129
143
  maxPingCount?: number | undefined;
130
144
  maxProbesPerRequest?: number | undefined;
131
145
  maxDestinationsPerRequest?: number | undefined;
132
146
  deviceConcurrency?: number | undefined;
147
+ maxConcurrentDiagnostics?: number | undefined;
133
148
  pingReplyTimeoutMs?: number | undefined;
134
149
  commandTimeoutMs?: number | undefined;
135
150
  httpTimeoutMs?: number | undefined;
136
151
  overallOperationTimeoutMs?: number | undefined;
152
+ nativeRequestTimeout?: boolean | undefined;
137
153
  } | undefined;
138
154
  inventory?: string | undefined;
139
155
  actor?: string | undefined;
140
156
  logFile?: string | undefined;
141
157
  caFile?: string | undefined;
142
158
  readTimeoutMs?: number | undefined;
159
+ readFanOut?: number | undefined;
143
160
  maxReadTargets?: number | undefined;
144
161
  maxShowCommandsPerRequest?: number | undefined;
145
162
  maxLoggingMessagesPerRequest?: number | undefined;
@@ -153,63 +170,73 @@ export declare const serverConfigFileSchema: z.ZodObject<{
153
170
  mcpPasswordEnv?: string | undefined;
154
171
  } | undefined;
155
172
  }>;
156
- export declare const resolvedServerConfigSchema: z.ZodObject<{
173
+ export declare const resolvedServerConfigSchema: z.ZodEffects<z.ZodObject<{
157
174
  configPath: z.ZodOptional<z.ZodString>;
158
175
  diagnostics: z.ZodDefault<z.ZodEffects<z.ZodObject<{
159
- stateFile: z.ZodOptional<z.ZodString>;
176
+ stateFile: z.ZodOptional<z.ZodNever>;
160
177
  defaultPingCount: z.ZodDefault<z.ZodNumber>;
161
178
  maxPingCount: z.ZodDefault<z.ZodNumber>;
162
179
  maxProbesPerRequest: z.ZodDefault<z.ZodNumber>;
163
180
  maxDestinationsPerRequest: z.ZodDefault<z.ZodNumber>;
164
181
  deviceConcurrency: z.ZodDefault<z.ZodNumber>;
182
+ maxConcurrentDiagnostics: z.ZodDefault<z.ZodNumber>;
165
183
  pingReplyTimeoutMs: z.ZodDefault<z.ZodNumber>;
166
184
  commandTimeoutMs: z.ZodDefault<z.ZodNumber>;
167
185
  httpTimeoutMs: z.ZodDefault<z.ZodNumber>;
168
186
  overallOperationTimeoutMs: z.ZodDefault<z.ZodNumber>;
187
+ nativeRequestTimeout: z.ZodDefault<z.ZodBoolean>;
169
188
  }, "strict", z.ZodTypeAny, {
170
189
  defaultPingCount: number;
171
190
  maxPingCount: number;
172
191
  maxProbesPerRequest: number;
173
192
  maxDestinationsPerRequest: number;
174
193
  deviceConcurrency: number;
194
+ maxConcurrentDiagnostics: number;
175
195
  pingReplyTimeoutMs: number;
176
196
  commandTimeoutMs: number;
177
197
  httpTimeoutMs: number;
178
198
  overallOperationTimeoutMs: number;
179
- stateFile?: string | undefined;
199
+ nativeRequestTimeout: boolean;
200
+ stateFile?: undefined;
180
201
  }, {
181
- stateFile?: string | undefined;
202
+ stateFile?: undefined;
182
203
  defaultPingCount?: number | undefined;
183
204
  maxPingCount?: number | undefined;
184
205
  maxProbesPerRequest?: number | undefined;
185
206
  maxDestinationsPerRequest?: number | undefined;
186
207
  deviceConcurrency?: number | undefined;
208
+ maxConcurrentDiagnostics?: number | undefined;
187
209
  pingReplyTimeoutMs?: number | undefined;
188
210
  commandTimeoutMs?: number | undefined;
189
211
  httpTimeoutMs?: number | undefined;
190
212
  overallOperationTimeoutMs?: number | undefined;
213
+ nativeRequestTimeout?: boolean | undefined;
191
214
  }>, {
192
215
  defaultPingCount: number;
193
216
  maxPingCount: number;
194
217
  maxProbesPerRequest: number;
195
218
  maxDestinationsPerRequest: number;
196
219
  deviceConcurrency: number;
220
+ maxConcurrentDiagnostics: number;
197
221
  pingReplyTimeoutMs: number;
198
222
  commandTimeoutMs: number;
199
223
  httpTimeoutMs: number;
200
224
  overallOperationTimeoutMs: number;
201
- stateFile?: string | undefined;
225
+ nativeRequestTimeout: boolean;
226
+ stateFile?: undefined;
202
227
  }, {
203
- stateFile?: string | undefined;
228
+ stateFile?: undefined;
204
229
  defaultPingCount?: number | undefined;
205
230
  maxPingCount?: number | undefined;
206
231
  maxProbesPerRequest?: number | undefined;
207
232
  maxDestinationsPerRequest?: number | undefined;
208
233
  deviceConcurrency?: number | undefined;
234
+ maxConcurrentDiagnostics?: number | undefined;
209
235
  pingReplyTimeoutMs?: number | undefined;
210
236
  commandTimeoutMs?: number | undefined;
211
237
  httpTimeoutMs?: number | undefined;
212
238
  overallOperationTimeoutMs?: number | undefined;
239
+ nativeRequestTimeout?: boolean | undefined;
213
240
  }>>;
214
241
  inventoryPath: z.ZodOptional<z.ZodString>;
215
242
  actor: z.ZodOptional<z.ZodString>;
@@ -217,7 +244,10 @@ export declare const resolvedServerConfigSchema: z.ZodObject<{
217
244
  caFile: z.ZodOptional<z.ZodString>;
218
245
  readTimeoutMs: z.ZodDefault<z.ZodNumber>;
219
246
  overallOperationTimeoutMs: z.ZodOptional<z.ZodNumber>;
247
+ /** eAPI slots one host may hold across all calls, reads and diagnostics (ADR 0009). */
220
248
  deviceConcurrency: z.ZodDefault<z.ZodNumber>;
249
+ /** Hosts one read call contacts at once. */
250
+ readFanOut: z.ZodDefault<z.ZodNumber>;
221
251
  maxReadTargets: z.ZodDefault<z.ZodNumber>;
222
252
  maxShowCommandsPerRequest: z.ZodDefault<z.ZodNumber>;
223
253
  maxLoggingMessagesPerRequest: z.ZodDefault<z.ZodNumber>;
@@ -248,13 +278,16 @@ export declare const resolvedServerConfigSchema: z.ZodObject<{
248
278
  maxProbesPerRequest: number;
249
279
  maxDestinationsPerRequest: number;
250
280
  deviceConcurrency: number;
281
+ maxConcurrentDiagnostics: number;
251
282
  pingReplyTimeoutMs: number;
252
283
  commandTimeoutMs: number;
253
284
  httpTimeoutMs: number;
254
285
  overallOperationTimeoutMs: number;
255
- stateFile?: string | undefined;
286
+ nativeRequestTimeout: boolean;
287
+ stateFile?: undefined;
256
288
  };
257
289
  readTimeoutMs: number;
290
+ readFanOut: number;
258
291
  maxReadTargets: number;
259
292
  maxShowCommandsPerRequest: number;
260
293
  maxLoggingMessagesPerRequest: number;
@@ -277,21 +310,96 @@ export declare const resolvedServerConfigSchema: z.ZodObject<{
277
310
  deviceConcurrency?: number | undefined;
278
311
  overallOperationTimeoutMs?: number | undefined;
279
312
  diagnostics?: {
280
- stateFile?: string | undefined;
313
+ stateFile?: undefined;
281
314
  defaultPingCount?: number | undefined;
282
315
  maxPingCount?: number | undefined;
283
316
  maxProbesPerRequest?: number | undefined;
284
317
  maxDestinationsPerRequest?: number | undefined;
285
318
  deviceConcurrency?: number | undefined;
319
+ maxConcurrentDiagnostics?: number | undefined;
286
320
  pingReplyTimeoutMs?: number | undefined;
287
321
  commandTimeoutMs?: number | undefined;
288
322
  httpTimeoutMs?: number | undefined;
289
323
  overallOperationTimeoutMs?: number | undefined;
324
+ nativeRequestTimeout?: boolean | undefined;
290
325
  } | undefined;
291
326
  actor?: string | undefined;
292
327
  logFile?: string | undefined;
293
328
  caFile?: string | undefined;
294
329
  readTimeoutMs?: number | undefined;
330
+ readFanOut?: number | undefined;
331
+ maxReadTargets?: number | undefined;
332
+ maxShowCommandsPerRequest?: number | undefined;
333
+ maxLoggingMessagesPerRequest?: number | undefined;
334
+ maxResponseSizeBytes?: number | undefined;
335
+ eapiVersion?: 1 | "latest" | undefined;
336
+ secretEnvPrefixes?: string[] | undefined;
337
+ defaultConnection?: {
338
+ ansibleUser?: string | undefined;
339
+ ansibleHttpapiPort?: number | undefined;
340
+ mcpValidateCerts?: boolean | undefined;
341
+ mcpPasswordEnv?: string | undefined;
342
+ } | undefined;
343
+ configPath?: string | undefined;
344
+ inventoryPath?: string | undefined;
345
+ }>, {
346
+ deviceConcurrency: number;
347
+ diagnostics: {
348
+ defaultPingCount: number;
349
+ maxPingCount: number;
350
+ maxProbesPerRequest: number;
351
+ maxDestinationsPerRequest: number;
352
+ deviceConcurrency: number;
353
+ maxConcurrentDiagnostics: number;
354
+ pingReplyTimeoutMs: number;
355
+ commandTimeoutMs: number;
356
+ httpTimeoutMs: number;
357
+ overallOperationTimeoutMs: number;
358
+ nativeRequestTimeout: boolean;
359
+ stateFile?: undefined;
360
+ };
361
+ readTimeoutMs: number;
362
+ readFanOut: number;
363
+ maxReadTargets: number;
364
+ maxShowCommandsPerRequest: number;
365
+ maxLoggingMessagesPerRequest: number;
366
+ maxResponseSizeBytes: number;
367
+ eapiVersion: 1 | "latest";
368
+ secretEnvPrefixes: string[];
369
+ defaultConnection: {
370
+ ansibleUser?: string | undefined;
371
+ ansibleHttpapiPort?: number | undefined;
372
+ mcpValidateCerts?: boolean | undefined;
373
+ mcpPasswordEnv?: string | undefined;
374
+ };
375
+ overallOperationTimeoutMs?: number | undefined;
376
+ actor?: string | undefined;
377
+ logFile?: string | undefined;
378
+ caFile?: string | undefined;
379
+ configPath?: string | undefined;
380
+ inventoryPath?: string | undefined;
381
+ }, {
382
+ deviceConcurrency?: number | undefined;
383
+ overallOperationTimeoutMs?: number | undefined;
384
+ diagnostics?: {
385
+ stateFile?: undefined;
386
+ defaultPingCount?: number | undefined;
387
+ maxPingCount?: number | undefined;
388
+ maxProbesPerRequest?: number | undefined;
389
+ maxDestinationsPerRequest?: number | undefined;
390
+ deviceConcurrency?: number | undefined;
391
+ maxConcurrentDiagnostics?: number | undefined;
392
+ pingReplyTimeoutMs?: number | undefined;
393
+ commandTimeoutMs?: number | undefined;
394
+ httpTimeoutMs?: number | undefined;
395
+ overallOperationTimeoutMs?: number | undefined;
396
+ nativeRequestTimeout?: boolean | undefined;
397
+ } | undefined;
398
+ actor?: string | undefined;
399
+ logFile?: string | undefined;
400
+ caFile?: string | undefined;
401
+ readTimeoutMs?: number | undefined;
402
+ readFanOut?: number | undefined;
295
403
  maxReadTargets?: number | undefined;
296
404
  maxShowCommandsPerRequest?: number | undefined;
297
405
  maxLoggingMessagesPerRequest?: number | undefined;
@@ -12,6 +12,7 @@ export const serverConfigFileSchema = z
12
12
  readTimeoutMs: z.number().int().positive().optional(),
13
13
  overallOperationTimeoutMs: z.number().int().positive().optional(),
14
14
  deviceConcurrency: z.number().int().positive().optional(),
15
+ readFanOut: z.number().int().positive().optional(),
15
16
  maxReadTargets: z.number().int().positive().optional(),
16
17
  maxShowCommandsPerRequest: z.number().int().positive().optional(),
17
18
  maxLoggingMessagesPerRequest: z.number().int().positive().max(9999).optional(),
@@ -38,7 +39,10 @@ export const resolvedServerConfigSchema = z
38
39
  caFile: z.string().min(1).optional(),
39
40
  readTimeoutMs: z.number().int().positive().default(10_000),
40
41
  overallOperationTimeoutMs: z.number().int().positive().optional(),
41
- deviceConcurrency: z.number().int().positive().default(5),
42
+ /** eAPI slots one host may hold across all calls, reads and diagnostics (ADR 0009). */
43
+ deviceConcurrency: z.number().int().positive().default(3),
44
+ /** Hosts one read call contacts at once. */
45
+ readFanOut: z.number().int().positive().default(10),
42
46
  maxReadTargets: z.number().int().positive().default(50),
43
47
  maxShowCommandsPerRequest: z.number().int().positive().default(5),
44
48
  maxLoggingMessagesPerRequest: z.number().int().positive().max(9999).default(1000),
@@ -53,5 +57,14 @@ export const resolvedServerConfigSchema = z
53
57
  mcpPasswordEnv: z.string().min(1).optional()
54
58
  })
55
59
  .default({})
60
+ })
61
+ .superRefine((config, context) => {
62
+ if (config.diagnostics.deviceConcurrency > config.deviceConcurrency) {
63
+ context.addIssue({
64
+ code: z.ZodIssueCode.custom,
65
+ path: ["diagnostics", "deviceConcurrency"],
66
+ message: "Must not exceed the top-level deviceConcurrency, which covers reads and diagnostics together"
67
+ });
68
+ }
56
69
  });
57
70
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { ResolvedServerConfig } from "../config/schema.js";
2
2
  import type { EosCommandResult, EosCommandRunner, EapiOutputMode, RunShowCommandOptions } from "../eapi/types.js";
3
3
  import type { InventoryHostModel } from "../inventory/types.js";
4
+ import type { EapiSlots } from "../operations/eapiSlots.js";
4
5
  /**
5
6
  * Runs EOS read commands for an inventory host.
6
7
  *
@@ -10,9 +11,13 @@ import type { InventoryHostModel } from "../inventory/types.js";
10
11
  export interface EosDeviceReader {
11
12
  runShowCommands(host: InventoryHostModel, commands: string[], outputMode: EapiOutputMode, options?: RunShowCommandOptions): Promise<EosCommandResult[]>;
12
13
  }
14
+ /** Each request first waits for one of the host's shared eAPI slots and frees it when the request
15
+ * settles (ADR 0009), so `readTimeoutMs` starts at dispatch, not while queued.
16
+ */
13
17
  export declare class EapiDeviceReader implements EosDeviceReader {
14
18
  private readonly config;
15
19
  private readonly runner;
16
- constructor(config: ResolvedServerConfig, runner: EosCommandRunner);
20
+ private readonly slots;
21
+ constructor(config: ResolvedServerConfig, runner: EosCommandRunner, slots: EapiSlots);
17
22
  runShowCommands(host: InventoryHostModel, commands: string[], outputMode: EapiOutputMode, options?: RunShowCommandOptions): Promise<EosCommandResult[]>;
18
23
  }
@@ -1,13 +1,24 @@
1
1
  import { resolveEapiConnection } from "./resolveConnection.js";
2
+ /** Each request first waits for one of the host's shared eAPI slots and frees it when the request
3
+ * settles (ADR 0009), so `readTimeoutMs` starts at dispatch, not while queued.
4
+ */
2
5
  export class EapiDeviceReader {
3
6
  config;
4
7
  runner;
5
- constructor(config, runner) {
8
+ slots;
9
+ constructor(config, runner, slots) {
6
10
  this.config = config;
7
11
  this.runner = runner;
12
+ this.slots = slots;
8
13
  }
9
- runShowCommands(host, commands, outputMode, options) {
10
- return this.runner.runShowCommands(resolveEapiConnection(this.config, host), commands, outputMode, options);
14
+ async runShowCommands(host, commands, outputMode, options) {
15
+ const release = await this.slots.acquireRead(options?.signal, host.inventoryHostname);
16
+ try {
17
+ return await this.runner.runShowCommands(resolveEapiConnection(this.config, host), commands, outputMode, options);
18
+ }
19
+ finally {
20
+ release();
21
+ }
11
22
  }
12
23
  }
13
24
  //# sourceMappingURL=eosDeviceReader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"eosDeviceReader.js","sourceRoot":"","sources":["../../src/connection/eosDeviceReader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAiB/D,MAAM,OAAO,gBAAgB;IAER;IACA;IAFnB,YACmB,MAA4B,EAC5B,MAAwB;QADxB,WAAM,GAAN,MAAM,CAAsB;QAC5B,WAAM,GAAN,MAAM,CAAkB;IACxC,CAAC;IAEJ,eAAe,CACb,IAAwB,EACxB,QAAkB,EAClB,UAA0B,EAC1B,OAA+B;QAE/B,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAChC,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EACxC,QAAQ,EACR,UAAU,EACV,OAAO,CACR,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"eosDeviceReader.js","sourceRoot":"","sources":["../../src/connection/eosDeviceReader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAiB/D;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAER;IACA;IACA;IAHnB,YACmB,MAA4B,EAC5B,MAAwB,EACxB,KAAgB;QAFhB,WAAM,GAAN,MAAM,CAAsB;QAC5B,WAAM,GAAN,MAAM,CAAkB;QACxB,UAAK,GAAL,KAAK,CAAW;IAChC,CAAC;IAEJ,KAAK,CAAC,eAAe,CACnB,IAAwB,EACxB,QAAkB,EAClB,UAA0B,EAC1B,OAA+B;QAE/B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACtF,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CACtC,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EACxC,QAAQ,EACR,UAAU,EACV,OAAO,CACR,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF"}
@@ -19,7 +19,13 @@ export class EapiDiagnosticRunner {
19
19
  throw new DiagnosticExecutionError(toErrorCode(error, "diagnostic_execution_failed"), toErrorMessage(error), "not_dispatched");
20
20
  }
21
21
  try {
22
- const results = await this.runner.runTextCommands(connection, [buildPingCommand(request)], { enable: true, signal: context.signal, requestId: context.requestId });
22
+ const results = await this.runner.runTextCommands(connection, [buildPingCommand(request)], {
23
+ enable: true,
24
+ signal: context.signal,
25
+ requestId: context.requestId,
26
+ // Lets EOS stop the command itself at the same budget the server holds an uncertain slot for.
27
+ ...(this.config.diagnostics.nativeRequestTimeout ? { requestTimeoutSeconds: this.config.diagnostics.commandTimeoutMs / 1000 } : {})
28
+ });
23
29
  const output = results[0]?.output;
24
30
  if (results.length !== 1 || typeof output !== "string") {
25
31
  throw new DiagnosticExecutionError("diagnostic_output_unrecognized", "Expected one text result from EOS", "unknown");
@@ -1 +1 @@
1
- {"version":3,"file":"eapiRunner.js","sourceRoot":"","sources":["../../src/diagnostics/eapiRunner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG1E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAG7C,MAAM,OAAO,oBAAoB;IACF;IAA+C;IAA5E,YAA6B,MAA4B,EAAmB,MAA4B;QAA3E,WAAM,GAAN,MAAM,CAAsB;QAAmB,WAAM,GAAN,MAAM,CAAsB;IAAG,CAAC;IAE5G,KAAK,CAAC,OAAO,CAAC,IAAwB,EAAE,OAA2B,EAAE,OAAmC;QACtG,IAAI,UAAgC,CAAC;QACrC,IAAI,CAAC;YACH,UAAU,GAAG,EAAE,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;QACjH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,wBAAwB,CAAC,WAAW,CAAC,KAAK,EAAE,6BAA6B,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC;QACjI,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YACnK,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;YAClC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,IAAI,wBAAwB,CAAC,gCAAgC,EAAE,mCAAmC,EAAE,SAAS,CAAC,CAAC;YACvH,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wEAAwE;YACxE,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC;YAC/D,IAAI,CAAC,CAAC,qBAAqB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,4BAA4B,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,MAAM,KAAK,CAAC;YACrI,MAAM,IAAI,GAAG,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YACzE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC9B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3H,CAAC,CAAC,SAAS,CAAC;YACd,uEAAuE;YACvE,sEAAsE;YACtE,MAAM,IAAI,wBAAwB,CAAC,IAAI,EAAE,kCAAkC,IAAI,GAAG,EAAE,SAAS,EAAE;gBAC7F,UAAU,EAAE,IAAI,IAAI,cAAc,CAAC,KAAK,CAAC;aAC1C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"eapiRunner.js","sourceRoot":"","sources":["../../src/diagnostics/eapiRunner.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { ResolvedServerConfig } from "../config/schema.js";
2
2
  import type { InventoryModel } from "../inventory/types.js";
3
3
  import { type ReadDeviceResultBase, type ReadOperationResultEnvelope } from "../operations/readExecution.js";
4
- import type { DiagnosticJournal } from "./journalTypes.js";
4
+ import { EapiSlots } from "../operations/eapiSlots.js";
5
5
  import type { DiagnosticCapacitySnapshot, DiagnosticDeviceRunner, DiagnosticFinding, DiagnosticRequest, ResolvedDiagnosticRequest } from "./types.js";
6
6
  export interface DiagnosticDeviceResult extends ReadDeviceResultBase {
7
7
  destination: string;
@@ -11,14 +11,17 @@ export interface DiagnosticDeviceResult extends ReadDeviceResultBase {
11
11
  export type DiagnosticResult = ReadOperationResultEnvelope<DiagnosticDeviceResult> & {
12
12
  request: ResolvedDiagnosticRequest;
13
13
  };
14
- /** Owns policy, budgets, fan-out, global admission, cancellation, and result normalization. */
14
+ /** Owns policy, budgets, fan-out, cancellation, and result normalization. Admission, per device and
15
+ * server-wide, belongs to the EapiSlots it shares with read tools.
16
+ */
15
17
  export declare class DiagnosticExecutor {
16
18
  private readonly model;
17
19
  private readonly config;
18
20
  private readonly runner;
19
- private readonly concurrency;
21
+ private readonly slots;
20
22
  private readonly shutdown;
21
- constructor(model: InventoryModel, config: ResolvedServerConfig, runner: DiagnosticDeviceRunner, journal?: DiagnosticJournal);
23
+ /** A running server passes its shared `slots`; tests may omit it to get a private instance. */
24
+ constructor(model: InventoryModel, config: ResolvedServerConfig, runner: DiagnosticDeviceRunner, slots?: EapiSlots);
22
25
  close(): void;
23
26
  getCapacity(): DiagnosticCapacitySnapshot;
24
27
  execute(options: {
@@ -1,31 +1,34 @@
1
1
  import { AppError, toErrorCode } from "../core/errors.js";
2
2
  import { resolveInventoryTarget } from "../inventory/resolveTarget.js";
3
- import { buildDeviceResultSummary, buildReadDeviceFailure, buildReadDeviceSuccess, buildReadOperationResultEnvelope, enforceReadTargetLimit, mapWithConcurrency, runWithOperationTimeout } from "../operations/readExecution.js";
4
- import { DiagnosticConcurrency } from "./concurrency.js";
3
+ import { buildDeviceResultSummary, buildReadDeviceFailure, buildReadDeviceSuccess, buildReadOperationResultEnvelope, enforceReadTargetLimit, runWithOperationTimeout } from "../operations/readExecution.js";
4
+ import { EapiSlots, eapiSlotLimits } from "../operations/eapiSlots.js";
5
5
  import { DiagnosticExecutionError } from "./executionError.js";
6
6
  import { pingDiagnostic } from "./ping.js";
7
7
  const diagnosticDefinitions = {
8
8
  ping: pingDiagnostic
9
9
  };
10
- /** Owns policy, budgets, fan-out, global admission, cancellation, and result normalization. */
10
+ /** Owns policy, budgets, fan-out, cancellation, and result normalization. Admission, per device and
11
+ * server-wide, belongs to the EapiSlots it shares with read tools.
12
+ */
11
13
  export class DiagnosticExecutor {
12
14
  model;
13
15
  config;
14
16
  runner;
15
- concurrency;
17
+ slots;
16
18
  shutdown = new AbortController();
17
- constructor(model, config, runner, journal) {
19
+ /** A running server passes its shared `slots`; tests may omit it to get a private instance. */
20
+ constructor(model, config, runner, slots = new EapiSlots(eapiSlotLimits(config), config.diagnostics.commandTimeoutMs)) {
18
21
  this.model = model;
19
22
  this.config = config;
20
23
  this.runner = runner;
21
- this.concurrency = new DiagnosticConcurrency(config.diagnostics.deviceConcurrency, journal);
24
+ this.slots = slots;
22
25
  }
23
26
  close() {
24
27
  this.shutdown.abort(new AppError("diagnostic_server_stopping", "Diagnostic executor is stopping"));
25
- this.concurrency.close();
28
+ this.slots.close();
26
29
  }
27
30
  getCapacity() {
28
- return this.concurrency.snapshot();
31
+ return this.slots.snapshot();
29
32
  }
30
33
  async execute(options) {
31
34
  const signal = options.signal === undefined ? this.shutdown.signal : AbortSignal.any([options.signal, this.shutdown.signal]);
@@ -34,7 +37,6 @@ export class DiagnosticExecutor {
34
37
  const operationName = `eos_${options.request.kind}`;
35
38
  const operationConfig = {
36
39
  ...this.config,
37
- deviceConcurrency: this.config.diagnostics.deviceConcurrency,
38
40
  overallOperationTimeoutMs: this.config.diagnostics.overallOperationTimeoutMs
39
41
  };
40
42
  const resolvedTarget = resolveInventoryTarget(this.model, { target: options.target });
@@ -47,10 +49,10 @@ export class DiagnosticExecutor {
47
49
  if (resolvedTarget.resolvedHosts.length * probesPerHost > this.config.diagnostics.maxProbesPerRequest) {
48
50
  throw new AppError("diagnostic_probe_limit_exceeded", `Request exceeds maxProbesPerRequest ${this.config.diagnostics.maxProbesPerRequest}`);
49
51
  }
50
- this.concurrency.assertUsableCapacity();
51
- // Each host/execution pair takes its own reservation; results stay in host-then-execution order.
52
+ // Each host/execution pair takes its own reservation, and all are queued at once so the admission
53
+ // controller, not fan-out order, decides which device runs next. Results stay in host-then-execution order.
52
54
  const hostExecutions = resolvedTarget.resolvedHosts.flatMap((host) => prepared.executions.map((execution) => ({ host, execution })));
53
- const results = await runWithOperationTimeout(operationConfig, operationName, (operationSignal) => mapWithConcurrency(hostExecutions, operationConfig.deviceConcurrency, async ({ host, execution }) => {
55
+ const results = await runWithOperationTimeout(operationConfig, operationName, (operationSignal) => Promise.all(hostExecutions.map(async ({ host, execution }) => {
54
56
  try {
55
57
  return await this.runExecution(definition, host, execution, operationSignal, options.includeRaw === true);
56
58
  }
@@ -63,7 +65,7 @@ export class DiagnosticExecutor {
63
65
  : {})
64
66
  };
65
67
  }
66
- }, operationSignal), signal);
68
+ })), signal);
67
69
  return buildReadOperationResultEnvelope(options.target, { resolvedTarget, results, summary: buildDeviceResultSummary(results) }, {
68
70
  extra: { request: prepared.request },
69
71
  responseSizeLimit: { config: this.config, operationName }
@@ -86,7 +88,7 @@ export class DiagnosticExecutor {
86
88
  }
87
89
  }
88
90
  async executeOnDevice(host, request, signal) {
89
- const reservation = await this.concurrency.acquire(signal, { inventoryHostname: host.inventoryHostname, diagnostic: request.kind });
91
+ const reservation = await this.slots.acquireDiagnostic(signal, { inventoryHostname: host.inventoryHostname, diagnostic: request.kind });
90
92
  if (signal.aborted) {
91
93
  reservation.complete();
92
94
  throw new AppError("operation_aborted", "Diagnostic was cancelled before dispatch");
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/diagnostics/executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/diagnostics/executor.ts"],"names":[],"mappings":"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"}