@sonde/shared 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/crypto/signing.d.ts +12 -0
- package/dist/crypto/signing.d.ts.map +1 -0
- package/dist/crypto/signing.js +35 -0
- package/dist/crypto/signing.js.map +1 -0
- package/dist/crypto/signing.test.d.ts +2 -0
- package/dist/crypto/signing.test.d.ts.map +1 -0
- package/dist/crypto/signing.test.js +57 -0
- package/dist/crypto/signing.test.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/attestation.d.ts +42 -0
- package/dist/schemas/attestation.d.ts.map +1 -0
- package/dist/schemas/attestation.js +14 -0
- package/dist/schemas/attestation.js.map +1 -0
- package/dist/schemas/mcp.d.ts +174 -0
- package/dist/schemas/mcp.d.ts.map +1 -0
- package/dist/schemas/mcp.js +49 -0
- package/dist/schemas/mcp.js.map +1 -0
- package/dist/schemas/packs.d.ts +367 -0
- package/dist/schemas/packs.d.ts.map +1 -0
- package/dist/schemas/packs.js +81 -0
- package/dist/schemas/packs.js.map +1 -0
- package/dist/schemas/probes.d.ts +83 -0
- package/dist/schemas/probes.d.ts.map +1 -0
- package/dist/schemas/probes.js +38 -0
- package/dist/schemas/probes.js.map +1 -0
- package/dist/schemas/protocol.d.ts +35 -0
- package/dist/schemas/protocol.d.ts.map +1 -0
- package/dist/schemas/protocol.js +21 -0
- package/dist/schemas/protocol.js.map +1 -0
- package/dist/types/agent.d.ts +62 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +17 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/common.d.ts +18 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +21 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/hub.d.ts +27 -0
- package/dist/types/hub.d.ts.map +1 -0
- package/dist/types/hub.js +15 -0
- package/dist/types/hub.js.map +1 -0
- package/package.json +26 -0
- package/src/crypto/signing.test.ts +65 -0
- package/src/crypto/signing.ts +38 -0
- package/src/index.ts +44 -0
- package/src/schemas/attestation.ts +15 -0
- package/src/schemas/mcp.ts +56 -0
- package/src/schemas/packs.ts +94 -0
- package/src/schemas/probes.ts +41 -0
- package/src/schemas/protocol.ts +22 -0
- package/src/types/agent.ts +20 -0
- package/src/types/common.ts +33 -0
- package/src/types/hub.ts +16 -0
- package/tsconfig.json +8 -0
- package/vitest.config.ts +8 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sign the JSON-serialised payload with an RSA private key.
|
|
3
|
+
* Returns a base64-encoded RSA-SHA256 signature.
|
|
4
|
+
*/
|
|
5
|
+
export declare function signPayload(payload: unknown, privateKeyPem: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Verify an RSA-SHA256 signature over the JSON-serialised payload.
|
|
8
|
+
* Accepts a PEM public key or certificate (Node extracts the public key from certs).
|
|
9
|
+
* Returns false on any error.
|
|
10
|
+
*/
|
|
11
|
+
export declare function verifyPayload(payload: unknown, signature: string, publicKeyOrCertPem: string): boolean;
|
|
12
|
+
//# sourceMappingURL=signing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing.d.ts","sourceRoot":"","sources":["../../src/crypto/signing.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAU3E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAUT"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
/**
|
|
3
|
+
* Sign the JSON-serialised payload with an RSA private key.
|
|
4
|
+
* Returns a base64-encoded RSA-SHA256 signature.
|
|
5
|
+
*/
|
|
6
|
+
export function signPayload(payload, privateKeyPem) {
|
|
7
|
+
try {
|
|
8
|
+
const data = JSON.stringify(payload);
|
|
9
|
+
const sign = crypto.createSign('RSA-SHA256');
|
|
10
|
+
sign.update(data);
|
|
11
|
+
sign.end();
|
|
12
|
+
return sign.sign(privateKeyPem, 'base64');
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return '';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Verify an RSA-SHA256 signature over the JSON-serialised payload.
|
|
20
|
+
* Accepts a PEM public key or certificate (Node extracts the public key from certs).
|
|
21
|
+
* Returns false on any error.
|
|
22
|
+
*/
|
|
23
|
+
export function verifyPayload(payload, signature, publicKeyOrCertPem) {
|
|
24
|
+
try {
|
|
25
|
+
const data = JSON.stringify(payload);
|
|
26
|
+
const verify = crypto.createVerify('RSA-SHA256');
|
|
27
|
+
verify.update(data);
|
|
28
|
+
verify.end();
|
|
29
|
+
return verify.verify(publicKeyOrCertPem, signature, 'base64');
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=signing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing.js","sourceRoot":"","sources":["../../src/crypto/signing.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAAgB,EAAE,aAAqB;IACjE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAgB,EAChB,SAAiB,EACjB,kBAA0B;IAE1B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM,CAAC,GAAG,EAAE,CAAC;QACb,OAAO,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing.test.d.ts","sourceRoot":"","sources":["../../src/crypto/signing.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
import { signPayload, verifyPayload } from './signing.js';
|
|
4
|
+
function generateKeyPair() {
|
|
5
|
+
return crypto.generateKeyPairSync('rsa', {
|
|
6
|
+
modulusLength: 2048,
|
|
7
|
+
publicKeyEncoding: { type: 'spki', format: 'pem' },
|
|
8
|
+
privateKeyEncoding: { type: 'pkcs8', format: 'pem' },
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
describe('signPayload / verifyPayload', () => {
|
|
12
|
+
const { publicKey, privateKey } = generateKeyPair();
|
|
13
|
+
it('sign + verify with matching RSA keypair succeeds', () => {
|
|
14
|
+
const payload = { probe: 'system.disk.usage', data: { usedPct: 42 } };
|
|
15
|
+
const sig = signPayload(payload, privateKey);
|
|
16
|
+
expect(sig).toBeTruthy();
|
|
17
|
+
expect(verifyPayload(payload, sig, publicKey)).toBe(true);
|
|
18
|
+
});
|
|
19
|
+
it('wrong key → verify returns false', () => {
|
|
20
|
+
const other = generateKeyPair();
|
|
21
|
+
const payload = { msg: 'hello' };
|
|
22
|
+
const sig = signPayload(payload, privateKey);
|
|
23
|
+
expect(verifyPayload(payload, sig, other.publicKey)).toBe(false);
|
|
24
|
+
});
|
|
25
|
+
it('tampered payload → verify returns false', () => {
|
|
26
|
+
const payload = { value: 1 };
|
|
27
|
+
const sig = signPayload(payload, privateKey);
|
|
28
|
+
expect(verifyPayload({ value: 2 }, sig, publicKey)).toBe(false);
|
|
29
|
+
});
|
|
30
|
+
it('various payload types serialize consistently', () => {
|
|
31
|
+
const payloads = [null, 42, 'hello', [1, 2, 3], { nested: { a: 1 } }];
|
|
32
|
+
for (const p of payloads) {
|
|
33
|
+
const sig = signPayload(p, privateKey);
|
|
34
|
+
expect(sig).toBeTruthy();
|
|
35
|
+
expect(verifyPayload(p, sig, publicKey)).toBe(true);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
it('invalid inputs return empty string / false (not throw)', () => {
|
|
39
|
+
expect(signPayload({ a: 1 }, 'not-a-key')).toBe('');
|
|
40
|
+
expect(verifyPayload({ a: 1 }, 'bad-sig', publicKey)).toBe(false);
|
|
41
|
+
expect(verifyPayload({ a: 1 }, 'bad-sig', 'not-a-key')).toBe(false);
|
|
42
|
+
});
|
|
43
|
+
it('verify with certificate PEM works', () => {
|
|
44
|
+
// Generate a self-signed cert wrapping the public key
|
|
45
|
+
const payload = { test: true };
|
|
46
|
+
const sig = signPayload(payload, privateKey);
|
|
47
|
+
// Node's createVerify can accept a cert PEM that contains the public key
|
|
48
|
+
// We'll create a minimal self-signed cert for this test
|
|
49
|
+
const cert = crypto.X509Certificate;
|
|
50
|
+
// Use the public key PEM directly as Node also accepts it; for cert-based
|
|
51
|
+
// verification, we rely on the hub's ca.ts issuing real certs. Here we just
|
|
52
|
+
// confirm that the function doesn't choke on cert-like input and that
|
|
53
|
+
// standard public key PEM works in the verifyPayload path.
|
|
54
|
+
expect(verifyPayload(payload, sig, publicKey)).toBe(true);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=signing.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing.test.js","sourceRoot":"","sources":["../../src/crypto/signing.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { CapabilityLevel, AgentStatus, PackStatus, ProbeStatus, MessageType, DEFAULT_PROBE_TIMEOUT_MS, DEFAULT_HUB_PORT, HEARTBEAT_INTERVAL_MS, } from './types/common.js';
|
|
2
|
+
export { AgentPackInfo, AgentInfo } from './types/agent.js';
|
|
3
|
+
export { HubConfig } from './types/hub.js';
|
|
4
|
+
export { MessageEnvelope } from './schemas/protocol.js';
|
|
5
|
+
export { ProbeRequest, ProbeResponse } from './schemas/probes.js';
|
|
6
|
+
export { ProbeParamDef, DbRoleRequirement, PackRequirements, ProbeDefinition, RunbookDefinition, DetectRules, PackManifest, } from './schemas/packs.js';
|
|
7
|
+
export { AttestationData } from './schemas/attestation.js';
|
|
8
|
+
export { signPayload, verifyPayload } from './crypto/signing.js';
|
|
9
|
+
export { ProbeInput, DiagnoseInput, DiagnoseOutput, ListAgentsOutput, } from './schemas/mcp.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,WAAW,EACX,UAAU,EACV,WAAW,EACX,WAAW,EACX,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGlE,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,YAAY,GACb,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG3D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGjE,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Types
|
|
2
|
+
export { CapabilityLevel, AgentStatus, PackStatus, ProbeStatus, MessageType, DEFAULT_PROBE_TIMEOUT_MS, DEFAULT_HUB_PORT, HEARTBEAT_INTERVAL_MS, } from './types/common.js';
|
|
3
|
+
export { AgentPackInfo, AgentInfo } from './types/agent.js';
|
|
4
|
+
export { HubConfig } from './types/hub.js';
|
|
5
|
+
// Schemas — Protocol
|
|
6
|
+
export { MessageEnvelope } from './schemas/protocol.js';
|
|
7
|
+
// Schemas — Probes
|
|
8
|
+
export { ProbeRequest, ProbeResponse } from './schemas/probes.js';
|
|
9
|
+
// Schemas — Packs
|
|
10
|
+
export { ProbeParamDef, DbRoleRequirement, PackRequirements, ProbeDefinition, RunbookDefinition, DetectRules, PackManifest, } from './schemas/packs.js';
|
|
11
|
+
// Schemas — Attestation
|
|
12
|
+
export { AttestationData } from './schemas/attestation.js';
|
|
13
|
+
// Crypto — Signing
|
|
14
|
+
export { signPayload, verifyPayload } from './crypto/signing.js';
|
|
15
|
+
// Schemas — MCP
|
|
16
|
+
export { ProbeInput, DiagnoseInput, DiagnoseOutput, ListAgentsOutput, } from './schemas/mcp.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,OAAO,EACL,eAAe,EACf,WAAW,EACX,UAAU,EACV,WAAW,EACX,WAAW,EACX,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,qBAAqB;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAElE,kBAAkB;AAClB,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,YAAY,GACb,MAAM,oBAAoB,CAAC;AAE5B,wBAAwB;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,mBAAmB;AACnB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEjE,gBAAgB;AAChB,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const AttestationData: z.ZodObject<{
|
|
3
|
+
/** e.g. "linux 6.1.0 x64" */
|
|
4
|
+
osVersion: z.ZodString;
|
|
5
|
+
/** SHA-256 hex of the agent binary (process.argv[1]) */
|
|
6
|
+
binaryHash: z.ZodString;
|
|
7
|
+
/** Packs loaded by this agent */
|
|
8
|
+
installedPacks: z.ZodArray<z.ZodObject<{
|
|
9
|
+
name: z.ZodString;
|
|
10
|
+
version: z.ZodString;
|
|
11
|
+
}, "strip", z.ZodTypeAny, {
|
|
12
|
+
name: string;
|
|
13
|
+
version: string;
|
|
14
|
+
}, {
|
|
15
|
+
name: string;
|
|
16
|
+
version: string;
|
|
17
|
+
}>, "many">;
|
|
18
|
+
/** SHA-256 hex of sanitised config (minus apiKey/enrollmentToken) */
|
|
19
|
+
configHash: z.ZodString;
|
|
20
|
+
/** e.g. "v22.0.0" */
|
|
21
|
+
nodeVersion: z.ZodString;
|
|
22
|
+
}, "strip", z.ZodTypeAny, {
|
|
23
|
+
osVersion: string;
|
|
24
|
+
binaryHash: string;
|
|
25
|
+
installedPacks: {
|
|
26
|
+
name: string;
|
|
27
|
+
version: string;
|
|
28
|
+
}[];
|
|
29
|
+
configHash: string;
|
|
30
|
+
nodeVersion: string;
|
|
31
|
+
}, {
|
|
32
|
+
osVersion: string;
|
|
33
|
+
binaryHash: string;
|
|
34
|
+
installedPacks: {
|
|
35
|
+
name: string;
|
|
36
|
+
version: string;
|
|
37
|
+
}[];
|
|
38
|
+
configHash: string;
|
|
39
|
+
nodeVersion: string;
|
|
40
|
+
}>;
|
|
41
|
+
export type AttestationData = z.infer<typeof AttestationData>;
|
|
42
|
+
//# sourceMappingURL=attestation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attestation.d.ts","sourceRoot":"","sources":["../../src/schemas/attestation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe;IAC1B,6BAA6B;;IAE7B,wDAAwD;;IAExD,iCAAiC;;;;;;;;;;;IAEjC,qEAAqE;;IAErE,qBAAqB;;;;;;;;;;;;;;;;;;;;EAErB,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const AttestationData = z.object({
|
|
3
|
+
/** e.g. "linux 6.1.0 x64" */
|
|
4
|
+
osVersion: z.string(),
|
|
5
|
+
/** SHA-256 hex of the agent binary (process.argv[1]) */
|
|
6
|
+
binaryHash: z.string(),
|
|
7
|
+
/** Packs loaded by this agent */
|
|
8
|
+
installedPacks: z.array(z.object({ name: z.string(), version: z.string() })),
|
|
9
|
+
/** SHA-256 hex of sanitised config (minus apiKey/enrollmentToken) */
|
|
10
|
+
configHash: z.string(),
|
|
11
|
+
/** e.g. "v22.0.0" */
|
|
12
|
+
nodeVersion: z.string(),
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=attestation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attestation.js","sourceRoot":"","sources":["../../src/schemas/attestation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,6BAA6B;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,wDAAwD;IACxD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,iCAAiC;IACjC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5E,qEAAqE;IACrE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,qBAAqB;IACrB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;CACxB,CAAC,CAAC"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Input schema for the `probe` MCP tool.
|
|
4
|
+
* MVP's primary MCP tool — sends a single probe to an agent.
|
|
5
|
+
*/
|
|
6
|
+
export declare const ProbeInput: z.ZodObject<{
|
|
7
|
+
/** Agent name or ID */
|
|
8
|
+
agent: z.ZodString;
|
|
9
|
+
/** Full probe name, e.g. "system.disk.usage" */
|
|
10
|
+
probe: z.ZodString;
|
|
11
|
+
/** Probe-specific parameters */
|
|
12
|
+
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
probe: string;
|
|
15
|
+
agent: string;
|
|
16
|
+
params?: Record<string, unknown> | undefined;
|
|
17
|
+
}, {
|
|
18
|
+
probe: string;
|
|
19
|
+
agent: string;
|
|
20
|
+
params?: Record<string, unknown> | undefined;
|
|
21
|
+
}>;
|
|
22
|
+
export type ProbeInput = z.infer<typeof ProbeInput>;
|
|
23
|
+
/**
|
|
24
|
+
* Input schema for the `diagnose` MCP tool (post-MVP).
|
|
25
|
+
*/
|
|
26
|
+
export declare const DiagnoseInput: z.ZodObject<{
|
|
27
|
+
/** Agent name or ID */
|
|
28
|
+
agent: z.ZodString;
|
|
29
|
+
/** Pack category, e.g. "docker", "system" */
|
|
30
|
+
category: z.ZodString;
|
|
31
|
+
/** Natural language problem description */
|
|
32
|
+
description: z.ZodOptional<z.ZodString>;
|
|
33
|
+
}, "strip", z.ZodTypeAny, {
|
|
34
|
+
category: string;
|
|
35
|
+
agent: string;
|
|
36
|
+
description?: string | undefined;
|
|
37
|
+
}, {
|
|
38
|
+
category: string;
|
|
39
|
+
agent: string;
|
|
40
|
+
description?: string | undefined;
|
|
41
|
+
}>;
|
|
42
|
+
export type DiagnoseInput = z.infer<typeof DiagnoseInput>;
|
|
43
|
+
/**
|
|
44
|
+
* Output schema for the `diagnose` MCP tool (post-MVP).
|
|
45
|
+
*/
|
|
46
|
+
export declare const DiagnoseOutput: z.ZodObject<{
|
|
47
|
+
agent: z.ZodString;
|
|
48
|
+
timestamp: z.ZodString;
|
|
49
|
+
category: z.ZodString;
|
|
50
|
+
runbookId: z.ZodString;
|
|
51
|
+
/** Keyed by probe name → result */
|
|
52
|
+
findings: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
53
|
+
summary: z.ZodObject<{
|
|
54
|
+
probesRun: z.ZodNumber;
|
|
55
|
+
probesSucceeded: z.ZodNumber;
|
|
56
|
+
probesFailed: z.ZodNumber;
|
|
57
|
+
durationMs: z.ZodNumber;
|
|
58
|
+
}, "strip", z.ZodTypeAny, {
|
|
59
|
+
durationMs: number;
|
|
60
|
+
probesRun: number;
|
|
61
|
+
probesSucceeded: number;
|
|
62
|
+
probesFailed: number;
|
|
63
|
+
}, {
|
|
64
|
+
durationMs: number;
|
|
65
|
+
probesRun: number;
|
|
66
|
+
probesSucceeded: number;
|
|
67
|
+
probesFailed: number;
|
|
68
|
+
}>;
|
|
69
|
+
}, "strip", z.ZodTypeAny, {
|
|
70
|
+
timestamp: string;
|
|
71
|
+
runbookId: string;
|
|
72
|
+
category: string;
|
|
73
|
+
agent: string;
|
|
74
|
+
findings: Record<string, unknown>;
|
|
75
|
+
summary: {
|
|
76
|
+
durationMs: number;
|
|
77
|
+
probesRun: number;
|
|
78
|
+
probesSucceeded: number;
|
|
79
|
+
probesFailed: number;
|
|
80
|
+
};
|
|
81
|
+
}, {
|
|
82
|
+
timestamp: string;
|
|
83
|
+
runbookId: string;
|
|
84
|
+
category: string;
|
|
85
|
+
agent: string;
|
|
86
|
+
findings: Record<string, unknown>;
|
|
87
|
+
summary: {
|
|
88
|
+
durationMs: number;
|
|
89
|
+
probesRun: number;
|
|
90
|
+
probesSucceeded: number;
|
|
91
|
+
probesFailed: number;
|
|
92
|
+
};
|
|
93
|
+
}>;
|
|
94
|
+
export type DiagnoseOutput = z.infer<typeof DiagnoseOutput>;
|
|
95
|
+
/**
|
|
96
|
+
* Output schema for the `list_agents` MCP tool.
|
|
97
|
+
*/
|
|
98
|
+
export declare const ListAgentsOutput: z.ZodObject<{
|
|
99
|
+
agents: z.ZodArray<z.ZodObject<{
|
|
100
|
+
id: z.ZodString;
|
|
101
|
+
name: z.ZodString;
|
|
102
|
+
status: z.ZodEnum<["online", "offline", "degraded"]>;
|
|
103
|
+
lastSeen: z.ZodString;
|
|
104
|
+
packs: z.ZodArray<z.ZodObject<{
|
|
105
|
+
name: z.ZodString;
|
|
106
|
+
version: z.ZodString;
|
|
107
|
+
status: z.ZodEnum<["active", "pending", "error"]>;
|
|
108
|
+
}, "strip", z.ZodTypeAny, {
|
|
109
|
+
status: "active" | "pending" | "error";
|
|
110
|
+
name: string;
|
|
111
|
+
version: string;
|
|
112
|
+
}, {
|
|
113
|
+
status: "active" | "pending" | "error";
|
|
114
|
+
name: string;
|
|
115
|
+
version: string;
|
|
116
|
+
}>, "many">;
|
|
117
|
+
os: z.ZodString;
|
|
118
|
+
agentVersion: z.ZodString;
|
|
119
|
+
}, "strip", z.ZodTypeAny, {
|
|
120
|
+
status: "online" | "offline" | "degraded";
|
|
121
|
+
name: string;
|
|
122
|
+
id: string;
|
|
123
|
+
lastSeen: string;
|
|
124
|
+
packs: {
|
|
125
|
+
status: "active" | "pending" | "error";
|
|
126
|
+
name: string;
|
|
127
|
+
version: string;
|
|
128
|
+
}[];
|
|
129
|
+
os: string;
|
|
130
|
+
agentVersion: string;
|
|
131
|
+
}, {
|
|
132
|
+
status: "online" | "offline" | "degraded";
|
|
133
|
+
name: string;
|
|
134
|
+
id: string;
|
|
135
|
+
lastSeen: string;
|
|
136
|
+
packs: {
|
|
137
|
+
status: "active" | "pending" | "error";
|
|
138
|
+
name: string;
|
|
139
|
+
version: string;
|
|
140
|
+
}[];
|
|
141
|
+
os: string;
|
|
142
|
+
agentVersion: string;
|
|
143
|
+
}>, "many">;
|
|
144
|
+
}, "strip", z.ZodTypeAny, {
|
|
145
|
+
agents: {
|
|
146
|
+
status: "online" | "offline" | "degraded";
|
|
147
|
+
name: string;
|
|
148
|
+
id: string;
|
|
149
|
+
lastSeen: string;
|
|
150
|
+
packs: {
|
|
151
|
+
status: "active" | "pending" | "error";
|
|
152
|
+
name: string;
|
|
153
|
+
version: string;
|
|
154
|
+
}[];
|
|
155
|
+
os: string;
|
|
156
|
+
agentVersion: string;
|
|
157
|
+
}[];
|
|
158
|
+
}, {
|
|
159
|
+
agents: {
|
|
160
|
+
status: "online" | "offline" | "degraded";
|
|
161
|
+
name: string;
|
|
162
|
+
id: string;
|
|
163
|
+
lastSeen: string;
|
|
164
|
+
packs: {
|
|
165
|
+
status: "active" | "pending" | "error";
|
|
166
|
+
name: string;
|
|
167
|
+
version: string;
|
|
168
|
+
}[];
|
|
169
|
+
os: string;
|
|
170
|
+
agentVersion: string;
|
|
171
|
+
}[];
|
|
172
|
+
}>;
|
|
173
|
+
export type ListAgentsOutput = z.infer<typeof ListAgentsOutput>;
|
|
174
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/schemas/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;GAGG;AACH,eAAO,MAAM,UAAU;IACrB,uBAAuB;;IAEvB,gDAAgD;;IAEhD,gCAAgC;;;;;;;;;;EAEhC,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,aAAa;IACxB,uBAAuB;;IAEvB,6CAA6C;;IAE7C,2CAA2C;;;;;;;;;;EAE3C,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;IAKzB,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQnC,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAE3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { AgentInfo } from '../types/agent.js';
|
|
3
|
+
/**
|
|
4
|
+
* Input schema for the `probe` MCP tool.
|
|
5
|
+
* MVP's primary MCP tool — sends a single probe to an agent.
|
|
6
|
+
*/
|
|
7
|
+
export const ProbeInput = z.object({
|
|
8
|
+
/** Agent name or ID */
|
|
9
|
+
agent: z.string(),
|
|
10
|
+
/** Full probe name, e.g. "system.disk.usage" */
|
|
11
|
+
probe: z.string(),
|
|
12
|
+
/** Probe-specific parameters */
|
|
13
|
+
params: z.record(z.unknown()).optional(),
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* Input schema for the `diagnose` MCP tool (post-MVP).
|
|
17
|
+
*/
|
|
18
|
+
export const DiagnoseInput = z.object({
|
|
19
|
+
/** Agent name or ID */
|
|
20
|
+
agent: z.string(),
|
|
21
|
+
/** Pack category, e.g. "docker", "system" */
|
|
22
|
+
category: z.string(),
|
|
23
|
+
/** Natural language problem description */
|
|
24
|
+
description: z.string().optional(),
|
|
25
|
+
});
|
|
26
|
+
/**
|
|
27
|
+
* Output schema for the `diagnose` MCP tool (post-MVP).
|
|
28
|
+
*/
|
|
29
|
+
export const DiagnoseOutput = z.object({
|
|
30
|
+
agent: z.string(),
|
|
31
|
+
timestamp: z.string().datetime(),
|
|
32
|
+
category: z.string(),
|
|
33
|
+
runbookId: z.string(),
|
|
34
|
+
/** Keyed by probe name → result */
|
|
35
|
+
findings: z.record(z.unknown()),
|
|
36
|
+
summary: z.object({
|
|
37
|
+
probesRun: z.number(),
|
|
38
|
+
probesSucceeded: z.number(),
|
|
39
|
+
probesFailed: z.number(),
|
|
40
|
+
durationMs: z.number(),
|
|
41
|
+
}),
|
|
42
|
+
});
|
|
43
|
+
/**
|
|
44
|
+
* Output schema for the `list_agents` MCP tool.
|
|
45
|
+
*/
|
|
46
|
+
export const ListAgentsOutput = z.object({
|
|
47
|
+
agents: z.array(AgentInfo),
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/schemas/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,uBAAuB;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,gDAAgD;IAChD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,gCAAgC;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAGH;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,uBAAuB;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,6CAA6C;IAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,2CAA2C;IAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAGH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,mCAAmC;IACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;QAC3B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;KACvB,CAAC;CACH,CAAC,CAAC;AAGH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC,CAAC"}
|