@aristanetworks/eos-mcp-server 0.8.0-beta → 0.8.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.
- package/CHANGELOG.md +7 -0
- package/README.md +4 -30
- package/dist/cli.d.ts +1 -4
- package/dist/cli.js +4 -63
- package/dist/cli.js.map +1 -1
- package/dist/config/diagnostics.d.ts +10 -5
- package/dist/config/diagnostics.js +3 -2
- package/dist/config/diagnostics.js.map +1 -1
- package/dist/config/loadConfig.js +1 -5
- package/dist/config/loadConfig.js.map +1 -1
- package/dist/config/schema.d.ts +28 -14
- package/dist/diagnostics/concurrency.d.ts +7 -11
- package/dist/diagnostics/concurrency.js +38 -80
- package/dist/diagnostics/concurrency.js.map +1 -1
- package/dist/diagnostics/eapiRunner.js +7 -1
- package/dist/diagnostics/eapiRunner.js.map +1 -1
- package/dist/diagnostics/executor.d.ts +1 -2
- package/dist/diagnostics/executor.js +2 -3
- package/dist/diagnostics/executor.js.map +1 -1
- package/dist/diagnostics/types.d.ts +3 -4
- package/dist/eapi/client.js +5 -4
- package/dist/eapi/client.js.map +1 -1
- package/dist/eapi/types.d.ts +3 -0
- package/dist/eapi/types.js.map +1 -1
- package/dist/index.js +0 -10
- package/dist/index.js.map +1 -1
- package/dist/mcp/createServer.js +2 -19
- package/dist/mcp/createServer.js.map +1 -1
- package/dist/mcp/tools/ping.d.ts +0 -7
- package/dist/mcp/tools/ping.js +13 -26
- package/dist/mcp/tools/ping.js.map +1 -1
- package/dist/serverInfo/buildServerInfo.js +2 -1
- package/dist/serverInfo/buildServerInfo.js.map +1 -1
- package/dist/serverInfo/types.d.ts +1 -0
- package/docs/CHECKPOINT.md +3 -6
- package/docs/CODE_WALKTHROUGH.md +6 -11
- package/docs/DESIGN.md +3 -3
- package/docs/DIAGNOSTICS.md +18 -69
- package/docs/IMPLEMENTATION_PLAN.md +2 -2
- package/docs/adr/0002-fail-closed-diagnostic-reservations.md +2 -0
- package/docs/adr/0003-durable-diagnostic-ledger.md +2 -0
- package/docs/adr/0004-offline-operator-attested-release.md +2 -0
- package/docs/adr/0005-multi-destination-ping.md +1 -1
- package/docs/adr/0006-in-memory-timed-diagnostic-capacity.md +21 -0
- package/docs/research/eos-diagnostic-lifecycle.md +2 -0
- package/package.json +1 -1
- package/dist/commands/inspectDiagnostics.d.ts +0 -3
- package/dist/commands/inspectDiagnostics.js +0 -35
- package/dist/commands/inspectDiagnostics.js.map +0 -1
- package/dist/commands/releaseDiagnostics.d.ts +0 -9
- package/dist/commands/releaseDiagnostics.js +0 -87
- package/dist/commands/releaseDiagnostics.js.map +0 -1
- package/dist/diagnostics/journal.d.ts +0 -14
- package/dist/diagnostics/journal.js +0 -317
- package/dist/diagnostics/journal.js.map +0 -1
- package/dist/diagnostics/journalTypes.d.ts +0 -8
- package/dist/diagnostics/journalTypes.js +0 -2
- package/dist/diagnostics/journalTypes.js.map +0 -1
- package/dist/diagnostics/releaseEvidence.d.ts +0 -502
- package/dist/diagnostics/releaseEvidence.js +0 -115
- package/dist/diagnostics/releaseEvidence.js.map +0 -1
- package/dist/diagnostics/reservationSchema.d.ts +0 -49
- package/dist/diagnostics/reservationSchema.js +0 -18
- package/dist/diagnostics/reservationSchema.js.map +0 -1
- package/dist/diagnostics/statePath.d.ts +0 -4
- package/dist/diagnostics/statePath.js +0 -25
- package/dist/diagnostics/statePath.js.map +0 -1
- package/dist/utils/privateFile.d.ts +0 -3
- package/dist/utils/privateFile.js +0 -7
- package/dist/utils/privateFile.js.map +0 -1
- package/docs/examples/diagnostic-release-evidence.template.json +0 -26
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export const reservationSchema = z.object({
|
|
3
|
-
reservation_id: z.string().min(1),
|
|
4
|
-
rpc_request_id: z.string().min(1).optional(),
|
|
5
|
-
inventory_hostname: z.string().regex(/^[A-Za-z0-9_.-]+$/),
|
|
6
|
-
diagnostic: z.literal("ping"),
|
|
7
|
-
state: z.enum(["active", "uncertain"]),
|
|
8
|
-
reserved_at: z.string().datetime(),
|
|
9
|
-
uncertain_since: z.string().datetime().optional(),
|
|
10
|
-
reason_code: z.string().min(1).optional()
|
|
11
|
-
}).strict().refine((value) => value.rpc_request_id === undefined || value.rpc_request_id === value.reservation_id, { message: "RPC request ID must match the reserved attempt identity" });
|
|
12
|
-
export function parseReservation(value) {
|
|
13
|
-
const reservation = reservationSchema.parse(value);
|
|
14
|
-
const { uncertain_since: since, reason_code: reason, rpc_request_id: requestId, ...required } = reservation;
|
|
15
|
-
return { ...required, ...(since === undefined ? {} : { uncertain_since: since }), ...(reason === undefined ? {} : { reason_code: reason }),
|
|
16
|
-
...(requestId === undefined ? {} : { rpc_request_id: requestId }) };
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=reservationSchema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reservationSchema.js","sourceRoot":"","sources":["../../src/diagnostics/reservationSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5C,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC;IACzD,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACtC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACjD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,KAAK,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,EAC/G,EAAE,OAAO,EAAE,yDAAyD,EAAE,CAAC,CAAC;AAE1E,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,GAAG,WAAW,CAAC;IAC5G,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QACxI,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;AACxE,CAAC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { ResolvedServerConfig } from "../config/schema.js";
|
|
2
|
-
export declare function diagnosticInventoryIdentity(inventoryPath: string): string;
|
|
3
|
-
export declare function resolveDiagnosticStateFile(config: ResolvedServerConfig): string;
|
|
4
|
-
export declare function defaultDiagnosticStateFile(inventoryPath: string): string;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
|
-
import fs from "node:fs";
|
|
3
|
-
import os from "node:os";
|
|
4
|
-
import path from "node:path";
|
|
5
|
-
import { AppError } from "../core/errors.js";
|
|
6
|
-
export function diagnosticInventoryIdentity(inventoryPath) {
|
|
7
|
-
try {
|
|
8
|
-
return createHash("sha256").update(fs.realpathSync(inventoryPath)).digest("hex");
|
|
9
|
-
}
|
|
10
|
-
catch {
|
|
11
|
-
throw new AppError("diagnostic_inventory_identity_invalid", "Cannot establish the canonical inventory identity for diagnostic state");
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
export function resolveDiagnosticStateFile(config) {
|
|
15
|
-
const file = config.diagnostics.stateFile ?? (config.inventoryPath === undefined ? undefined : defaultDiagnosticStateFile(config.inventoryPath));
|
|
16
|
-
if (file === undefined)
|
|
17
|
-
throw new AppError("cli_missing_diagnostic_state", "Diagnostic administration requires diagnostics.stateFile in config or an inventory path");
|
|
18
|
-
return file;
|
|
19
|
-
}
|
|
20
|
-
export function defaultDiagnosticStateFile(inventoryPath) {
|
|
21
|
-
const configured = process.env.XDG_STATE_HOME;
|
|
22
|
-
const root = configured !== undefined && path.isAbsolute(configured) ? configured : path.join(os.homedir(), ".local", "state");
|
|
23
|
-
return path.join(root, "eos-mcp-server", diagnosticInventoryIdentity(inventoryPath), "diagnostics.sqlite");
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=statePath.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"statePath.js","sourceRoot":"","sources":["../../src/diagnostics/statePath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,MAAM,UAAU,2BAA2B,CAAC,aAAqB;IAC/D,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,QAAQ,CAAC,uCAAuC,EAAE,wEAAwE,CAAC,CAAC;IACxI,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAA4B;IACrE,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IACjJ,IAAI,IAAI,KAAK,SAAS;QAAE,MAAM,IAAI,QAAQ,CAAC,8BAA8B,EAAE,yFAAyF,CAAC,CAAC;IACtK,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,aAAqB;IAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC9C,MAAM,IAAI,GAAG,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/H,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,2BAA2B,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAC7G,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/** Shared file policy; callers retain path/descriptor race checks and error codes. */
|
|
2
|
-
export function isPrivateRegularFile(stat) {
|
|
3
|
-
return stat.isFile() && !stat.isSymbolicLink() && stat.nlink === 1 &&
|
|
4
|
-
(process.platform === "win32" || ((stat.mode & 0o077) === 0 &&
|
|
5
|
-
(process.getuid === undefined || stat.uid === process.getuid())));
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=privateFile.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"privateFile.js","sourceRoot":"","sources":["../../src/utils/privateFile.ts"],"names":[],"mappings":"AAEA,sFAAsF;AACtF,MAAM,UAAU,oBAAoB,CAAC,IAAW;IAC9C,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;QAChE,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;YACzD,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"evidence_version": 1,
|
|
3
|
-
"attestation_id": "<new UUID for this independently verified attestation>",
|
|
4
|
-
"inventory_identity": "<exact inventory_identity from inspect-diagnostics --json>",
|
|
5
|
-
"verified_by": "<accountable operator>",
|
|
6
|
-
"verified_at": "<UTC ISO timestamp after independent verification>",
|
|
7
|
-
"reason": "<approved incident/recovery reason; do not include secrets>",
|
|
8
|
-
"assertions": {
|
|
9
|
-
"independent_evidence_verified": false,
|
|
10
|
-
"running_work_terminated": false,
|
|
11
|
-
"accepted_queued_work_cannot_execute": false,
|
|
12
|
-
"replay_prevented": false
|
|
13
|
-
},
|
|
14
|
-
"reservations": [
|
|
15
|
-
{
|
|
16
|
-
"reservation_id": "<exact selected reservation ID>",
|
|
17
|
-
"rpc_request_id": "<recorded wire ID; use JSON null only when absent in the ledger>",
|
|
18
|
-
"inventory_hostname": "<exact inventory hostname from the reservation>",
|
|
19
|
-
"reserved_at": "<exact reserved_at from the reservation>",
|
|
20
|
-
"physical_device_identity": "<independently established original device identity>",
|
|
21
|
-
"execution_epoch": "<original execution/queue epoch covered by the fence>",
|
|
22
|
-
"fenced_at": "<UTC ISO fencing time after reservation admission and before verification>",
|
|
23
|
-
"evidence_reference": "<independent evidence reference; no credentials or packet contents>"
|
|
24
|
-
}
|
|
25
|
-
]
|
|
26
|
-
}
|