@aristanetworks/eos-mcp-server 0.6.1-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 (170) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/LICENSE +203 -0
  3. package/README.md +652 -0
  4. package/dist/cli.d.ts +16 -0
  5. package/dist/cli.js +188 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/printServerInfo.d.ts +2 -0
  8. package/dist/commands/printServerInfo.js +14 -0
  9. package/dist/commands/printServerInfo.js.map +1 -0
  10. package/dist/commands/probe.d.ts +2 -0
  11. package/dist/commands/probe.js +26 -0
  12. package/dist/commands/probe.js.map +1 -0
  13. package/dist/commands/validateInventory.d.ts +9 -0
  14. package/dist/commands/validateInventory.js +59 -0
  15. package/dist/commands/validateInventory.js.map +1 -0
  16. package/dist/config/loadConfig.d.ts +3 -0
  17. package/dist/config/loadConfig.js +84 -0
  18. package/dist/config/loadConfig.js.map +1 -0
  19. package/dist/config/schema.d.ts +151 -0
  20. package/dist/config/schema.js +54 -0
  21. package/dist/config/schema.js.map +1 -0
  22. package/dist/configuration/getRunningConfig.d.ts +24 -0
  23. package/dist/configuration/getRunningConfig.js +38 -0
  24. package/dist/configuration/getRunningConfig.js.map +1 -0
  25. package/dist/connection/eosDeviceReader.d.ts +18 -0
  26. package/dist/connection/eosDeviceReader.js +13 -0
  27. package/dist/connection/eosDeviceReader.js.map +1 -0
  28. package/dist/connection/resolveConnection.d.ts +4 -0
  29. package/dist/connection/resolveConnection.js +58 -0
  30. package/dist/connection/resolveConnection.js.map +1 -0
  31. package/dist/connection/validateStartupConnections.d.ts +4 -0
  32. package/dist/connection/validateStartupConnections.js +28 -0
  33. package/dist/connection/validateStartupConnections.js.map +1 -0
  34. package/dist/core/errors.d.ts +8 -0
  35. package/dist/core/errors.js +22 -0
  36. package/dist/core/errors.js.map +1 -0
  37. package/dist/core/version.d.ts +2 -0
  38. package/dist/core/version.js +7 -0
  39. package/dist/core/version.js.map +1 -0
  40. package/dist/eapi/client.d.ts +8 -0
  41. package/dist/eapi/client.js +159 -0
  42. package/dist/eapi/client.js.map +1 -0
  43. package/dist/eapi/commands.d.ts +2 -0
  44. package/dist/eapi/commands.js +25 -0
  45. package/dist/eapi/commands.js.map +1 -0
  46. package/dist/eapi/transport.d.ts +21 -0
  47. package/dist/eapi/transport.js +143 -0
  48. package/dist/eapi/transport.js.map +1 -0
  49. package/dist/eapi/types.d.ts +49 -0
  50. package/dist/eapi/types.js +15 -0
  51. package/dist/eapi/types.js.map +1 -0
  52. package/dist/facts/getFacts.d.ts +33 -0
  53. package/dist/facts/getFacts.js +50 -0
  54. package/dist/facts/getFacts.js.map +1 -0
  55. package/dist/index.d.ts +2 -0
  56. package/dist/index.js +66 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/inventory/buildModel.d.ts +3 -0
  59. package/dist/inventory/buildModel.js +79 -0
  60. package/dist/inventory/buildModel.js.map +1 -0
  61. package/dist/inventory/effectiveVars.d.ts +2 -0
  62. package/dist/inventory/effectiveVars.js +52 -0
  63. package/dist/inventory/effectiveVars.js.map +1 -0
  64. package/dist/inventory/graph.d.ts +6 -0
  65. package/dist/inventory/graph.js +81 -0
  66. package/dist/inventory/graph.js.map +1 -0
  67. package/dist/inventory/internalTypes.d.ts +17 -0
  68. package/dist/inventory/internalTypes.js +2 -0
  69. package/dist/inventory/internalTypes.js.map +1 -0
  70. package/dist/inventory/internalUtils.d.ts +10 -0
  71. package/dist/inventory/internalUtils.js +68 -0
  72. package/dist/inventory/internalUtils.js.map +1 -0
  73. package/dist/inventory/listInventoryView.d.ts +23 -0
  74. package/dist/inventory/listInventoryView.js +22 -0
  75. package/dist/inventory/listInventoryView.js.map +1 -0
  76. package/dist/inventory/loadInventory.d.ts +4 -0
  77. package/dist/inventory/loadInventory.js +87 -0
  78. package/dist/inventory/loadInventory.js.map +1 -0
  79. package/dist/inventory/normalize.d.ts +4 -0
  80. package/dist/inventory/normalize.js +251 -0
  81. package/dist/inventory/normalize.js.map +1 -0
  82. package/dist/inventory/parse.d.ts +6 -0
  83. package/dist/inventory/parse.js +31 -0
  84. package/dist/inventory/parse.js.map +1 -0
  85. package/dist/inventory/policy.d.ts +11 -0
  86. package/dist/inventory/policy.js +27 -0
  87. package/dist/inventory/policy.js.map +1 -0
  88. package/dist/inventory/resolveTarget.d.ts +14 -0
  89. package/dist/inventory/resolveTarget.js +55 -0
  90. package/dist/inventory/resolveTarget.js.map +1 -0
  91. package/dist/inventory/types.d.ts +50 -0
  92. package/dist/inventory/types.js +2 -0
  93. package/dist/inventory/types.js.map +1 -0
  94. package/dist/inventory/validateNormalized.d.ts +2 -0
  95. package/dist/inventory/validateNormalized.js +64 -0
  96. package/dist/inventory/validateNormalized.js.map +1 -0
  97. package/dist/inventory/varValidation.d.ts +2 -0
  98. package/dist/inventory/varValidation.js +60 -0
  99. package/dist/inventory/varValidation.js.map +1 -0
  100. package/dist/inventory/writePolicy.d.ts +2 -0
  101. package/dist/inventory/writePolicy.js +36 -0
  102. package/dist/inventory/writePolicy.js.map +1 -0
  103. package/dist/logging/loggingQuery.d.ts +15 -0
  104. package/dist/logging/loggingQuery.js +38 -0
  105. package/dist/logging/loggingQuery.js.map +1 -0
  106. package/dist/logging/showLogging.d.ts +28 -0
  107. package/dist/logging/showLogging.js +37 -0
  108. package/dist/logging/showLogging.js.map +1 -0
  109. package/dist/mcp/createServer.d.ts +3 -0
  110. package/dist/mcp/createServer.js +82 -0
  111. package/dist/mcp/createServer.js.map +1 -0
  112. package/dist/mcp/toolResult.d.ts +7 -0
  113. package/dist/mcp/toolResult.js +13 -0
  114. package/dist/mcp/toolResult.js.map +1 -0
  115. package/dist/mcp/tools/getFacts.d.ts +21 -0
  116. package/dist/mcp/tools/getFacts.js +17 -0
  117. package/dist/mcp/tools/getFacts.js.map +1 -0
  118. package/dist/mcp/tools/getRunningConfig.d.ts +21 -0
  119. package/dist/mcp/tools/getRunningConfig.js +17 -0
  120. package/dist/mcp/tools/getRunningConfig.js.map +1 -0
  121. package/dist/mcp/tools/getServerInfo.d.ts +10 -0
  122. package/dist/mcp/tools/getServerInfo.js +9 -0
  123. package/dist/mcp/tools/getServerInfo.js.map +1 -0
  124. package/dist/mcp/tools/listInventory.d.ts +16 -0
  125. package/dist/mcp/tools/listInventory.js +15 -0
  126. package/dist/mcp/tools/listInventory.js.map +1 -0
  127. package/dist/mcp/tools/probeDevices.d.ts +21 -0
  128. package/dist/mcp/tools/probeDevices.js +14 -0
  129. package/dist/mcp/tools/probeDevices.js.map +1 -0
  130. package/dist/mcp/tools/runShow.d.ts +30 -0
  131. package/dist/mcp/tools/runShow.js +34 -0
  132. package/dist/mcp/tools/runShow.js.map +1 -0
  133. package/dist/mcp/tools/showLogging.d.ts +24 -0
  134. package/dist/mcp/tools/showLogging.js +20 -0
  135. package/dist/mcp/tools/showLogging.js.map +1 -0
  136. package/dist/operations/readExecution.d.ts +57 -0
  137. package/dist/operations/readExecution.js +132 -0
  138. package/dist/operations/readExecution.js.map +1 -0
  139. package/dist/probe/probeDevices.d.ts +24 -0
  140. package/dist/probe/probeDevices.js +24 -0
  141. package/dist/probe/probeDevices.js.map +1 -0
  142. package/dist/serverInfo/buildServerInfo.d.ts +2 -0
  143. package/dist/serverInfo/buildServerInfo.js +49 -0
  144. package/dist/serverInfo/buildServerInfo.js.map +1 -0
  145. package/dist/serverInfo/types.d.ts +46 -0
  146. package/dist/serverInfo/types.js +2 -0
  147. package/dist/serverInfo/types.js.map +1 -0
  148. package/dist/show/runShow.d.ts +29 -0
  149. package/dist/show/runShow.js +40 -0
  150. package/dist/show/runShow.js.map +1 -0
  151. package/dist/utils/json.d.ts +1 -0
  152. package/dist/utils/json.js +4 -0
  153. package/dist/utils/json.js.map +1 -0
  154. package/dist/utils/path.d.ts +2 -0
  155. package/dist/utils/path.js +14 -0
  156. package/dist/utils/path.js.map +1 -0
  157. package/dist/utils/value.d.ts +6 -0
  158. package/dist/utils/value.js +28 -0
  159. package/dist/utils/value.js.map +1 -0
  160. package/docs/CHECKPOINT.md +46 -0
  161. package/docs/CODE_WALKTHROUGH.md +112 -0
  162. package/docs/DESIGN.md +56 -0
  163. package/docs/DEVELOPMENT.md +72 -0
  164. package/docs/EXAMPLES.md +178 -0
  165. package/docs/IMPLEMENTATION_PLAN.md +32 -0
  166. package/docs/QUICKSTART.md +152 -0
  167. package/example-inventories/canonical-fabric.yaml +45 -0
  168. package/example-inventories/multi-password.yaml +35 -0
  169. package/example-inventories/simplified-lab.yaml +33 -0
  170. package/package.json +57 -0
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+ import { getRunningConfig } from "../../configuration/getRunningConfig.js";
3
+ import { buildJsonToolResult } from "../toolResult.js";
4
+ export const getRunningConfigInputSchema = z
5
+ .object({
6
+ target: z.string().min(1),
7
+ section: z.string().min(1).optional()
8
+ })
9
+ .strict();
10
+ export async function buildGetRunningConfigToolResult(inventoryModel, config, args, reader) {
11
+ const payload = await getRunningConfig(inventoryModel, config, {
12
+ target: args.target,
13
+ ...(args.section !== undefined ? { section: args.section } : {})
14
+ }, reader);
15
+ return buildJsonToolResult(payload);
16
+ }
17
+ //# sourceMappingURL=getRunningConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRunningConfig.js","sourceRoot":"","sources":["../../../src/mcp/tools/getRunningConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC;KACzC,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACtC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,cAA8B,EAC9B,MAA4B,EAC5B,IAAiD,EACjD,MAAuB;IAEvB,MAAM,OAAO,GAAG,MAAM,gBAAgB,CACpC,cAAc,EACd,MAAM,EACN;QACE,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjE,EACD,MAAM,CACP,CAAC;IAEF,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { z } from "zod";
2
+ import type { ServerRuntimeContext } from "../../serverInfo/types.js";
3
+ export declare const getServerInfoInputSchema: z.ZodObject<{}, "strict", z.ZodTypeAny, {}, {}>;
4
+ export declare function buildGetServerInfoToolResult(runtimeContext: ServerRuntimeContext): {
5
+ content: {
6
+ type: "text";
7
+ text: string;
8
+ }[];
9
+ structuredContent: Record<string, unknown>;
10
+ };
@@ -0,0 +1,9 @@
1
+ import { z } from "zod";
2
+ import { buildServerInfo } from "../../serverInfo/buildServerInfo.js";
3
+ import { buildJsonToolResult } from "../toolResult.js";
4
+ export const getServerInfoInputSchema = z.object({}).strict();
5
+ export function buildGetServerInfoToolResult(runtimeContext) {
6
+ const info = buildServerInfo(runtimeContext);
7
+ return buildJsonToolResult(info);
8
+ }
9
+ //# sourceMappingURL=getServerInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getServerInfo.js","sourceRoot":"","sources":["../../../src/mcp/tools/getServerInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAEtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAE9D,MAAM,UAAU,4BAA4B,CAAC,cAAoC;IAC/E,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IAE7C,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { z } from "zod";
2
+ import type { InventoryModel } from "../../inventory/types.js";
3
+ export declare const listInventoryInputSchema: z.ZodObject<{
4
+ include_ineligible: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
5
+ }, "strict", z.ZodTypeAny, {
6
+ include_ineligible: boolean;
7
+ }, {
8
+ include_ineligible?: boolean | undefined;
9
+ }>;
10
+ export declare function buildListInventoryToolResult(inventoryModel: InventoryModel, args: z.infer<typeof listInventoryInputSchema>): {
11
+ content: {
12
+ type: "text";
13
+ text: string;
14
+ }[];
15
+ structuredContent: Record<string, unknown>;
16
+ };
@@ -0,0 +1,15 @@
1
+ import { z } from "zod";
2
+ import { buildListInventoryView } from "../../inventory/listInventoryView.js";
3
+ import { buildJsonToolResult } from "../toolResult.js";
4
+ export const listInventoryInputSchema = z
5
+ .object({
6
+ include_ineligible: z.boolean().optional().default(false)
7
+ })
8
+ .strict();
9
+ export function buildListInventoryToolResult(inventoryModel, args) {
10
+ const payload = buildListInventoryView(inventoryModel, {
11
+ includeIneligible: args.include_ineligible ?? false
12
+ });
13
+ return buildJsonToolResult(payload);
14
+ }
15
+ //# sourceMappingURL=listInventory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listInventory.js","sourceRoot":"","sources":["../../../src/mcp/tools/listInventory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC;KACtC,MAAM,CAAC;IACN,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CAC1D,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,UAAU,4BAA4B,CAC1C,cAA8B,EAC9B,IAA8C;IAE9C,MAAM,OAAO,GAAG,sBAAsB,CAAC,cAAc,EAAE;QACrD,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,IAAI,KAAK;KACpD,CAAC,CAAC;IAEH,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ import type { ResolvedServerConfig } from "../../config/schema.js";
3
+ import type { EosDeviceReader } from "../../connection/eosDeviceReader.js";
4
+ import type { InventoryModel } from "../../inventory/types.js";
5
+ export declare const probeDevicesInputSchema: z.ZodObject<{
6
+ target: z.ZodString;
7
+ include_raw: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
8
+ }, "strict", z.ZodTypeAny, {
9
+ target: string;
10
+ include_raw: boolean;
11
+ }, {
12
+ target: string;
13
+ include_raw?: boolean | undefined;
14
+ }>;
15
+ export declare function buildProbeDevicesToolResult(inventoryModel: InventoryModel, config: ResolvedServerConfig, args: z.infer<typeof probeDevicesInputSchema>, reader: EosDeviceReader): Promise<{
16
+ content: {
17
+ type: "text";
18
+ text: string;
19
+ }[];
20
+ structuredContent: Record<string, unknown>;
21
+ }>;
@@ -0,0 +1,14 @@
1
+ import { z } from "zod";
2
+ import { probeDevices } from "../../probe/probeDevices.js";
3
+ import { buildJsonToolResult } from "../toolResult.js";
4
+ export const probeDevicesInputSchema = z
5
+ .object({
6
+ target: z.string().min(1),
7
+ include_raw: z.boolean().optional().default(false)
8
+ })
9
+ .strict();
10
+ export async function buildProbeDevicesToolResult(inventoryModel, config, args, reader) {
11
+ const payload = await probeDevices(inventoryModel, config, { target: args.target, include_raw: args.include_raw ?? false }, reader);
12
+ return buildJsonToolResult(payload);
13
+ }
14
+ //# sourceMappingURL=probeDevices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probeDevices.js","sourceRoot":"","sources":["../../../src/mcp/tools/probeDevices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACnD,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,cAA8B,EAC9B,MAA4B,EAC5B,IAA6C,EAC7C,MAAuB;IAEvB,MAAM,OAAO,GAAG,MAAM,YAAY,CAChC,cAAc,EACd,MAAM,EACN,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,KAAK,EAAE,EAC/D,MAAM,CACP,CAAC;IAEF,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ import type { ResolvedServerConfig } from "../../config/schema.js";
3
+ import type { EosDeviceReader } from "../../connection/eosDeviceReader.js";
4
+ import type { InventoryModel } from "../../inventory/types.js";
5
+ export declare const runShowInputSchema: z.ZodObject<{
6
+ target: z.ZodString;
7
+ command: z.ZodOptional<z.ZodString>;
8
+ commands: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
9
+ output_format: z.ZodDefault<z.ZodEnum<["auto", "json", "text"]>>;
10
+ include_raw: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
11
+ }, "strict", z.ZodTypeAny, {
12
+ target: string;
13
+ include_raw: boolean;
14
+ output_format: "json" | "text" | "auto";
15
+ command?: string | undefined;
16
+ commands?: string[] | undefined;
17
+ }, {
18
+ target: string;
19
+ include_raw?: boolean | undefined;
20
+ command?: string | undefined;
21
+ commands?: string[] | undefined;
22
+ output_format?: "json" | "text" | "auto" | undefined;
23
+ }>;
24
+ export declare function buildRunShowToolResult(inventoryModel: InventoryModel, config: ResolvedServerConfig, args: z.infer<typeof runShowInputSchema>, reader: EosDeviceReader): Promise<{
25
+ content: {
26
+ type: "text";
27
+ text: string;
28
+ }[];
29
+ structuredContent: Record<string, unknown>;
30
+ }>;
@@ -0,0 +1,34 @@
1
+ import { z } from "zod";
2
+ import { AppError } from "../../core/errors.js";
3
+ import { runShow } from "../../show/runShow.js";
4
+ import { buildJsonToolResult } from "../toolResult.js";
5
+ // NOTE: this schema intentionally ends at `.strict()` and validates the
6
+ // `command` XOR `commands` requirement in the handler below. Wrapping the
7
+ // ZodObject with `.superRefine()` (or `.refine()`) turns it into a ZodEffects
8
+ // instance, which hides `.shape` from the MCP SDK's `normalizeObjectSchema`
9
+ // and causes the tool to be advertised with an empty input schema.
10
+ export const runShowInputSchema = z
11
+ .object({
12
+ target: z.string().min(1),
13
+ command: z.string().min(1).optional(),
14
+ commands: z.array(z.string().min(1)).optional(),
15
+ output_format: z.enum(["auto", "json", "text"]).default("auto"),
16
+ include_raw: z.boolean().optional().default(false)
17
+ })
18
+ .strict();
19
+ export async function buildRunShowToolResult(inventoryModel, config, args, reader) {
20
+ const hasCommand = args.command !== undefined;
21
+ const hasCommands = args.commands !== undefined;
22
+ if (hasCommand === hasCommands) {
23
+ throw new AppError("show_commands_input_invalid", "Exactly one of command or commands must be provided");
24
+ }
25
+ const commands = args.commands ?? (args.command ? [args.command] : []);
26
+ const payload = await runShow(inventoryModel, config, {
27
+ target: args.target,
28
+ commands,
29
+ outputFormat: args.output_format,
30
+ includeRaw: args.include_raw ?? false
31
+ }, reader);
32
+ return buildJsonToolResult(payload);
33
+ }
34
+ //# sourceMappingURL=runShow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runShow.js","sourceRoot":"","sources":["../../../src/mcp/tools/runShow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,wEAAwE;AACxE,0EAA0E;AAC1E,8EAA8E;AAC9E,4EAA4E;AAC5E,mEAAmE;AACnE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACrC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC/C,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/D,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACnD,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,cAA8B,EAC9B,MAA4B,EAC5B,IAAwC,EACxC,MAAuB;IAEvB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC;IAChD,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;QAC/B,MAAM,IAAI,QAAQ,CAChB,6BAA6B,EAC7B,qDAAqD,CACtD,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,MAAM,OAAO,CAC3B,cAAc,EACd,MAAM,EACN;QACE,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ;QACR,YAAY,EAAE,IAAI,CAAC,aAAa;QAChC,UAAU,EAAE,IAAI,CAAC,WAAW,IAAI,KAAK;KACtC,EACD,MAAM,CACP,CAAC;IAEF,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ import type { ResolvedServerConfig } from "../../config/schema.js";
3
+ import type { EosDeviceReader } from "../../connection/eosDeviceReader.js";
4
+ import type { InventoryModel } from "../../inventory/types.js";
5
+ export declare const showLoggingInputSchema: z.ZodObject<{
6
+ target: z.ZodString;
7
+ minimum_severity: z.ZodDefault<z.ZodOptional<z.ZodEnum<["emergencies", "alerts", "critical", "errors", "warnings", "notifications", "informational", "debugging"]>>>;
8
+ message_count: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
9
+ }, "strict", z.ZodTypeAny, {
10
+ target: string;
11
+ minimum_severity: "errors" | "emergencies" | "alerts" | "critical" | "warnings" | "notifications" | "informational" | "debugging";
12
+ message_count: number;
13
+ }, {
14
+ target: string;
15
+ minimum_severity?: "errors" | "emergencies" | "alerts" | "critical" | "warnings" | "notifications" | "informational" | "debugging" | undefined;
16
+ message_count?: number | undefined;
17
+ }>;
18
+ export declare function buildShowLoggingToolResult(inventoryModel: InventoryModel, config: ResolvedServerConfig, args: z.infer<typeof showLoggingInputSchema>, reader: EosDeviceReader): Promise<{
19
+ content: {
20
+ type: "text";
21
+ text: string;
22
+ }[];
23
+ structuredContent: Record<string, unknown>;
24
+ }>;
@@ -0,0 +1,20 @@
1
+ import { z } from "zod";
2
+ import { LOGGING_SEVERITIES } from "../../logging/loggingQuery.js";
3
+ import { showLogging } from "../../logging/showLogging.js";
4
+ import { buildJsonToolResult } from "../toolResult.js";
5
+ export const showLoggingInputSchema = z
6
+ .object({
7
+ target: z.string().min(1),
8
+ minimum_severity: z.enum(LOGGING_SEVERITIES).optional().default("warnings"),
9
+ message_count: z.number().int().min(1).max(9999).optional().default(100)
10
+ })
11
+ .strict();
12
+ export async function buildShowLoggingToolResult(inventoryModel, config, args, reader) {
13
+ const payload = await showLogging(inventoryModel, config, {
14
+ target: args.target,
15
+ minimumSeverity: args.minimum_severity,
16
+ messageCount: args.message_count
17
+ }, reader);
18
+ return buildJsonToolResult(payload);
19
+ }
20
+ //# sourceMappingURL=showLogging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"showLogging.js","sourceRoot":"","sources":["../../../src/mcp/tools/showLogging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC;KACpC,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;IAC3E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;CACzE,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,cAA8B,EAC9B,MAA4B,EAC5B,IAA4C,EAC5C,MAAuB;IAEvB,MAAM,OAAO,GAAG,MAAM,WAAW,CAC/B,cAAc,EACd,MAAM,EACN;QACE,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,eAAe,EAAE,IAAI,CAAC,gBAAgB;QACtC,YAAY,EAAE,IAAI,CAAC,aAAa;KACjC,EACD,MAAM,CACP,CAAC;IAEF,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,57 @@
1
+ import type { ResolvedServerConfig } from "../config/schema.js";
2
+ import { type ResolvedInventoryTarget } from "../inventory/resolveTarget.js";
3
+ import type { InventoryHostModel, InventoryModel } from "../inventory/types.js";
4
+ export interface ReadDeviceResultBase {
5
+ inventory_hostname: string;
6
+ resolved_endpoint: string;
7
+ status: "success" | "failed";
8
+ error_code?: string;
9
+ message?: string;
10
+ }
11
+ export interface DeviceResultSummary {
12
+ total_count: number;
13
+ success_count: number;
14
+ failed_count: number;
15
+ }
16
+ export interface ExecuteReadOperationResult<TDeviceResult extends ReadDeviceResultBase> {
17
+ resolvedTarget: ResolvedInventoryTarget;
18
+ results: TDeviceResult[];
19
+ summary: DeviceResultSummary;
20
+ }
21
+ export interface ReadOperationResultEnvelope<TDeviceResult extends ReadDeviceResultBase> {
22
+ target: string;
23
+ target_type: "host" | "group";
24
+ resolved_devices: string[];
25
+ summary: DeviceResultSummary;
26
+ results: TDeviceResult[];
27
+ }
28
+ interface ResponseSizeLimitOptions {
29
+ config: ResolvedServerConfig;
30
+ operationName: string;
31
+ narrowingGuidance?: string;
32
+ }
33
+ interface ReadOperationResultEnvelopeOptions<TExtra extends Record<string, unknown>> {
34
+ extra?: TExtra;
35
+ responseSizeLimit?: ResponseSizeLimitOptions;
36
+ }
37
+ export declare function executeReadOperation<TDeviceResult extends ReadDeviceResultBase>(model: InventoryModel, config: ResolvedServerConfig, options: {
38
+ target: string;
39
+ operationName: string;
40
+ validateTarget?: (resolvedTarget: ResolvedInventoryTarget) => void;
41
+ run: (host: InventoryHostModel, signal: AbortSignal) => Promise<TDeviceResult>;
42
+ onError: (host: InventoryHostModel, error: unknown) => TDeviceResult;
43
+ }): Promise<ExecuteReadOperationResult<TDeviceResult>>;
44
+ export declare function buildReadOperationResultEnvelope<TDeviceResult extends ReadDeviceResultBase>(target: string, operation: ExecuteReadOperationResult<TDeviceResult>): ReadOperationResultEnvelope<TDeviceResult>;
45
+ export declare function buildReadOperationResultEnvelope<TDeviceResult extends ReadDeviceResultBase, TExtra extends Record<string, unknown>>(target: string, operation: ExecuteReadOperationResult<TDeviceResult>, options: ReadOperationResultEnvelopeOptions<TExtra>): ReadOperationResultEnvelope<TDeviceResult> & TExtra;
46
+ export declare function buildReadDeviceSuccess<TExtra extends Record<string, unknown>>(host: InventoryHostModel, extra: TExtra): ReadDeviceResultBase & {
47
+ status: "success";
48
+ } & TExtra;
49
+ export declare function buildReadDeviceFailure(host: InventoryHostModel, errorCode: string, error: unknown): ReadDeviceResultBase & {
50
+ status: "failed";
51
+ };
52
+ export declare function enforceReadTargetLimit(config: ResolvedServerConfig, targetCount: number): void;
53
+ export declare function enforceShowCommandLimit(config: ResolvedServerConfig, commandCount: number): void;
54
+ export declare function mapWithConcurrency<T, R>(items: T[], concurrencyLimit: number, worker: (item: T) => Promise<R>, signal?: AbortSignal): Promise<R[]>;
55
+ export declare function runWithOperationTimeout<T>(config: ResolvedServerConfig, operationName: string, run: (signal: AbortSignal) => Promise<T>): Promise<T>;
56
+ export declare function enforceResponseSizeLimit(config: ResolvedServerConfig, payload: unknown, operationName: string, narrowingGuidance?: string): void;
57
+ export {};
@@ -0,0 +1,132 @@
1
+ import { AppError, toErrorCode, toErrorMessage } from "../core/errors.js";
2
+ import { resolveInventoryTarget } from "../inventory/resolveTarget.js";
3
+ export async function executeReadOperation(model, config, options) {
4
+ const resolvedTarget = resolveInventoryTarget(model, { target: options.target });
5
+ enforceReadTargetLimit(config, resolvedTarget.resolvedHosts.length);
6
+ options.validateTarget?.(resolvedTarget);
7
+ const results = await runWithOperationTimeout(config, options.operationName, (signal) => mapWithConcurrency(resolvedTarget.resolvedHosts, config.deviceConcurrency, async (host) => {
8
+ try {
9
+ return await options.run(host, signal);
10
+ }
11
+ catch (error) {
12
+ return options.onError(host, error);
13
+ }
14
+ }, signal));
15
+ return {
16
+ resolvedTarget,
17
+ results,
18
+ summary: buildDeviceResultSummary(results)
19
+ };
20
+ }
21
+ export function buildReadOperationResultEnvelope(target, operation, options) {
22
+ const payload = {
23
+ target,
24
+ target_type: operation.resolvedTarget.targetType,
25
+ resolved_devices: operation.resolvedTarget.resolvedHosts.map((host) => host.inventoryHostname),
26
+ summary: operation.summary,
27
+ results: operation.results,
28
+ ...(options?.extra ?? {})
29
+ };
30
+ const responseSizeLimit = options?.responseSizeLimit;
31
+ if (responseSizeLimit !== undefined) {
32
+ enforceResponseSizeLimit(responseSizeLimit.config, payload, responseSizeLimit.operationName, responseSizeLimit.narrowingGuidance);
33
+ }
34
+ return payload;
35
+ }
36
+ export function buildReadDeviceSuccess(host, extra) {
37
+ return {
38
+ inventory_hostname: host.inventoryHostname,
39
+ resolved_endpoint: host.resolvedEndpoint,
40
+ status: "success",
41
+ ...extra
42
+ };
43
+ }
44
+ export function buildReadDeviceFailure(host, errorCode, error) {
45
+ return {
46
+ inventory_hostname: host.inventoryHostname,
47
+ resolved_endpoint: host.resolvedEndpoint,
48
+ status: "failed",
49
+ error_code: toErrorCode(error, errorCode),
50
+ message: toErrorMessage(error)
51
+ };
52
+ }
53
+ export function enforceReadTargetLimit(config, targetCount) {
54
+ if (targetCount > config.maxReadTargets) {
55
+ throw new AppError("read_target_limit_exceeded", `Read target count ${targetCount} exceeds configured maxReadTargets ${config.maxReadTargets}`);
56
+ }
57
+ }
58
+ export function enforceShowCommandLimit(config, commandCount) {
59
+ if (commandCount > config.maxShowCommandsPerRequest) {
60
+ throw new AppError("show_command_limit_exceeded", `Show command count ${commandCount} exceeds configured maxShowCommandsPerRequest ${config.maxShowCommandsPerRequest}`);
61
+ }
62
+ }
63
+ export async function mapWithConcurrency(items, concurrencyLimit, worker, signal) {
64
+ const results = new Array(items.length);
65
+ let nextIndex = 0;
66
+ async function runWorker() {
67
+ while (nextIndex < items.length) {
68
+ throwIfAborted(signal);
69
+ const currentIndex = nextIndex;
70
+ nextIndex += 1;
71
+ const item = items[currentIndex];
72
+ if (item === undefined) {
73
+ continue;
74
+ }
75
+ results[currentIndex] = await worker(item);
76
+ }
77
+ }
78
+ const workerCount = Math.min(Math.max(concurrencyLimit, 1), items.length);
79
+ await Promise.all(Array.from({ length: workerCount }, () => runWorker()));
80
+ return results;
81
+ }
82
+ export async function runWithOperationTimeout(config, operationName, run) {
83
+ const controller = new AbortController();
84
+ const operation = run(controller.signal);
85
+ if (config.overallOperationTimeoutMs === undefined) {
86
+ return operation;
87
+ }
88
+ let timeout;
89
+ try {
90
+ return await Promise.race([
91
+ operation,
92
+ new Promise((_resolve, reject) => {
93
+ timeout = setTimeout(() => {
94
+ const error = new AppError("operation_timeout", `${operationName} exceeded overallOperationTimeoutMs ${config.overallOperationTimeoutMs}`);
95
+ reject(error);
96
+ controller.abort(error);
97
+ }, config.overallOperationTimeoutMs);
98
+ })
99
+ ]);
100
+ }
101
+ finally {
102
+ if (timeout !== undefined) {
103
+ clearTimeout(timeout);
104
+ }
105
+ }
106
+ }
107
+ function throwIfAborted(signal) {
108
+ if (signal?.aborted === true) {
109
+ throw new AppError("operation_timeout", "Operation was aborted");
110
+ }
111
+ }
112
+ export function enforceResponseSizeLimit(config, payload, operationName, narrowingGuidance) {
113
+ const serialized = JSON.stringify(payload);
114
+ const sizeBytes = Buffer.byteLength(serialized, "utf8");
115
+ if (sizeBytes > config.maxResponseSizeBytes) {
116
+ const defaultGuidance = "Reduce the number of target devices or narrow the request scope.";
117
+ throw new AppError("response_size_exceeded", `${operationName} response size ${sizeBytes} bytes exceeds configured maxResponseSizeBytes ${config.maxResponseSizeBytes}`, {
118
+ responseSizeBytes: sizeBytes,
119
+ maxResponseSizeBytes: config.maxResponseSizeBytes,
120
+ ...(Array.isArray(payload) ? { deviceCount: payload.length } : {}),
121
+ guidance: narrowingGuidance ?? defaultGuidance
122
+ });
123
+ }
124
+ }
125
+ function buildDeviceResultSummary(results) {
126
+ return {
127
+ total_count: results.length,
128
+ success_count: results.filter((result) => result.status === "success").length,
129
+ failed_count: results.filter((result) => result.status === "failed").length
130
+ };
131
+ }
132
+ //# sourceMappingURL=readExecution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readExecution.js","sourceRoot":"","sources":["../../src/operations/readExecution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ResolvedServerConfig } from "../config/schema.js";
2
+ import type { EosCommandResult } from "../eapi/types.js";
3
+ import type { EosDeviceReader } from "../connection/eosDeviceReader.js";
4
+ import type { InventoryModel } from "../inventory/types.js";
5
+ import { type DeviceResultSummary } from "../operations/readExecution.js";
6
+ export interface ProbeDevicesOptions {
7
+ target: string;
8
+ include_raw: boolean;
9
+ }
10
+ export interface ProbeDevicesResult {
11
+ target: string;
12
+ target_type: "host" | "group";
13
+ resolved_devices: string[];
14
+ summary: DeviceResultSummary;
15
+ results: Array<{
16
+ inventory_hostname: string;
17
+ resolved_endpoint: string;
18
+ status: "success" | "failed";
19
+ error_code?: string;
20
+ message?: string;
21
+ command_results?: EosCommandResult[];
22
+ }>;
23
+ }
24
+ export declare function probeDevices(model: InventoryModel, config: ResolvedServerConfig, options: ProbeDevicesOptions, reader: EosDeviceReader): Promise<ProbeDevicesResult>;
@@ -0,0 +1,24 @@
1
+ import { buildReadDeviceFailure, buildReadDeviceSuccess, buildReadOperationResultEnvelope, executeReadOperation } from "../operations/readExecution.js";
2
+ export async function probeDevices(model, config, options, reader) {
3
+ const operation = await executeReadOperation(model, config, {
4
+ target: options.target,
5
+ operationName: "eos_probe_devices",
6
+ run: async (host, signal) => {
7
+ const commandResults = await reader.runShowCommands(host, ["show version"], "json", {
8
+ signal,
9
+ includeRawEntries: options.include_raw
10
+ });
11
+ return buildReadDeviceSuccess(host, {
12
+ ...(options.include_raw ? { command_results: commandResults } : {})
13
+ });
14
+ },
15
+ onError: (host, error) => buildReadDeviceFailure(host, "probe_failed", error)
16
+ });
17
+ return buildReadOperationResultEnvelope(options.target, operation, {
18
+ responseSizeLimit: {
19
+ config,
20
+ operationName: "eos_probe_devices"
21
+ }
22
+ });
23
+ }
24
+ //# sourceMappingURL=probeDevices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probeDevices.js","sourceRoot":"","sources":["../../src/probe/probeDevices.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,gCAAgC,EAChC,oBAAoB,EAErB,MAAM,gCAAgC,CAAC;AAsBxC,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAqB,EACrB,MAA4B,EAC5B,OAA4B,EAC5B,MAAuB;IAEvB,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAwC,KAAK,EAAE,MAAM,EAAE;QACjG,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,aAAa,EAAE,mBAAmB;QAClC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;YAC1B,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE;gBAClF,MAAM;gBACN,iBAAiB,EAAE,OAAO,CAAC,WAAW;aACvC,CAAC,CAAC;YACH,OAAO,sBAAsB,CAAC,IAAI,EAAE;gBAClC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpE,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC;KAC9E,CAAC,CAAC;IAEH,OAAO,gCAAgC,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE;QACjE,iBAAiB,EAAE;YACjB,MAAM;YACN,aAAa,EAAE,mBAAmB;SACnC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ServerInfo, ServerRuntimeContext } from "./types.js";
2
+ export declare function buildServerInfo(context: ServerRuntimeContext): ServerInfo;
@@ -0,0 +1,49 @@
1
+ import path from "node:path";
2
+ import { APP_NAME, APP_VERSION } from "../core/version.js";
3
+ export function buildServerInfo(context) {
4
+ const summary = context.inventorySummary;
5
+ return {
6
+ server_name: APP_NAME,
7
+ server_version: APP_VERSION,
8
+ instance_id: context.instanceId,
9
+ started_at: context.startedAt,
10
+ runtime_mode: "read-only",
11
+ inventory: {
12
+ basename: summary?.basename ?? sanitizeBasename(context.config.inventoryPath),
13
+ schema_kind: summary?.schemaKind ?? null,
14
+ total_hosts: summary?.totalHostCount ?? null,
15
+ total_groups: summary?.totalGroupCount ?? null,
16
+ eos_eligible_hosts: summary?.eosEligibleHostCount ?? null,
17
+ read_allowed_hosts: summary?.readAllowedHostCount ?? null
18
+ },
19
+ capabilities: {
20
+ tool_prefix: "eos_",
21
+ supported_inventory_schemas: ["canonical-ansible-yaml", "simplified-yaml"],
22
+ output_modes: ["auto", "json", "text"],
23
+ eapi_version: context.config.eapiVersion
24
+ },
25
+ limits: {
26
+ read_timeout_ms: context.config.readTimeoutMs,
27
+ overall_operation_timeout_ms: context.config.overallOperationTimeoutMs ?? null,
28
+ device_concurrency: context.config.deviceConcurrency,
29
+ max_read_targets: context.config.maxReadTargets,
30
+ max_show_commands_per_request: context.config.maxShowCommandsPerRequest,
31
+ max_logging_messages_per_request: context.config.maxLoggingMessagesPerRequest,
32
+ max_response_size_bytes: context.config.maxResponseSizeBytes
33
+ },
34
+ logging: {
35
+ actor: context.config.actor ?? null,
36
+ log_file_configured: context.config.logFile !== undefined
37
+ },
38
+ tls: {
39
+ custom_ca_configured: context.config.caFile !== undefined
40
+ }
41
+ };
42
+ }
43
+ function sanitizeBasename(filePath) {
44
+ if (!filePath) {
45
+ return null;
46
+ }
47
+ return path.basename(filePath);
48
+ }
49
+ //# sourceMappingURL=buildServerInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildServerInfo.js","sourceRoot":"","sources":["../../src/serverInfo/buildServerInfo.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG3D,MAAM,UAAU,eAAe,CAAC,OAA6B;IAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAEzC,OAAO;QACL,WAAW,EAAE,QAAQ;QACrB,cAAc,EAAE,WAAW;QAC3B,WAAW,EAAE,OAAO,CAAC,UAAU;QAC/B,UAAU,EAAE,OAAO,CAAC,SAAS;QAC7B,YAAY,EAAE,WAAW;QACzB,SAAS,EAAE;YACT,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;YAC7E,WAAW,EAAE,OAAO,EAAE,UAAU,IAAI,IAAI;YACxC,WAAW,EAAE,OAAO,EAAE,cAAc,IAAI,IAAI;YAC5C,YAAY,EAAE,OAAO,EAAE,eAAe,IAAI,IAAI;YAC9C,kBAAkB,EAAE,OAAO,EAAE,oBAAoB,IAAI,IAAI;YACzD,kBAAkB,EAAE,OAAO,EAAE,oBAAoB,IAAI,IAAI;SAC1D;QACD,YAAY,EAAE;YACZ,WAAW,EAAE,MAAM;YACnB,2BAA2B,EAAE,CAAC,wBAAwB,EAAE,iBAAiB,CAAC;YAC1E,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YACtC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW;SACzC;QACD,MAAM,EAAE;YACN,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa;YAC7C,4BAA4B,EAAE,OAAO,CAAC,MAAM,CAAC,yBAAyB,IAAI,IAAI;YAC9E,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB;YACpD,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc;YAC/C,6BAA6B,EAAE,OAAO,CAAC,MAAM,CAAC,yBAAyB;YACvE,gCAAgC,EAAE,OAAO,CAAC,MAAM,CAAC,4BAA4B;YAC7E,uBAAuB,EAAE,OAAO,CAAC,MAAM,CAAC,oBAAoB;SAC7D;QACD,OAAO,EAAE;YACP,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI;YACnC,mBAAmB,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS;SAC1D;QACD,GAAG,EAAE;YACH,oBAAoB,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;SAC1D;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,QAA4B;IACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { ResolvedServerConfig } from "../config/schema.js";
2
+ import type { EapiVersion } from "../eapi/types.js";
3
+ import type { InventorySummary } from "../inventory/types.js";
4
+ export interface ServerRuntimeContext {
5
+ instanceId: string;
6
+ startedAt: string;
7
+ config: ResolvedServerConfig;
8
+ inventorySummary?: InventorySummary;
9
+ }
10
+ export interface ServerInfo {
11
+ server_name: string;
12
+ server_version: string;
13
+ instance_id: string;
14
+ started_at: string;
15
+ runtime_mode: "read-only";
16
+ inventory: {
17
+ basename: string | null;
18
+ schema_kind: string | null;
19
+ total_hosts: number | null;
20
+ total_groups: number | null;
21
+ eos_eligible_hosts: number | null;
22
+ read_allowed_hosts: number | null;
23
+ };
24
+ capabilities: {
25
+ tool_prefix: "eos_";
26
+ supported_inventory_schemas: string[];
27
+ output_modes: Array<"auto" | "json" | "text">;
28
+ eapi_version: EapiVersion;
29
+ };
30
+ limits: {
31
+ read_timeout_ms: number;
32
+ overall_operation_timeout_ms: number | null;
33
+ device_concurrency: number;
34
+ max_read_targets: number;
35
+ max_show_commands_per_request: number;
36
+ max_logging_messages_per_request: number;
37
+ max_response_size_bytes: number;
38
+ };
39
+ logging: {
40
+ actor: string | null;
41
+ log_file_configured: boolean;
42
+ };
43
+ tls: {
44
+ custom_ca_configured: boolean;
45
+ };
46
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/serverInfo/types.ts"],"names":[],"mappings":""}