UNPKG

@dollhousemcp/mcp-server

Version:

DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.

42 lines 5.66 kB
/** * Lightweight in-memory accumulator for Gatekeeper policy enforcement metrics. * * Records allowed/denied/confirmation-pending decisions, policy source * distribution, and permission level usage. The companion * GatekeeperMetricsCollector reads from this tracker each collection cycle. */ export class GatekeeperMetricsTracker { totalDecisions = 0; allowed = 0; denied = 0; confirmationsPending = 0; byPolicySource = new Map(); byPermissionLevel = new Map(); record(decision) { this.totalDecisions++; if (decision.allowed) { this.allowed++; } else { this.denied++; } if (decision.confirmationPending) { this.confirmationsPending++; } const source = decision.policySource ?? 'unknown'; this.byPolicySource.set(source, (this.byPolicySource.get(source) ?? 0) + 1); const level = decision.permissionLevel; this.byPermissionLevel.set(level, (this.byPermissionLevel.get(level) ?? 0) + 1); } getMetrics() { return { totalDecisions: this.totalDecisions, allowed: this.allowed, denied: this.denied, confirmationsPending: this.confirmationsPending, byPolicySource: new Map(this.byPolicySource), byPermissionLevel: new Map(this.byPermissionLevel), }; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21ldHJpY3MvR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQWtCSCxNQUFNLE9BQU8sd0JBQXdCO0lBQzNCLGNBQWMsR0FBRyxDQUFDLENBQUM7SUFDbkIsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNaLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDWCxvQkFBb0IsR0FBRyxDQUFDLENBQUM7SUFDaEIsY0FBYyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQzNDLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBRS9ELE1BQU0sQ0FBQyxRQUFrQztRQUN2QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsWUFBWSxJQUFJLFNBQVMsQ0FBQztRQUNsRCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU1RSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU87WUFDTCxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbkMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixvQkFBb0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1lBQy9DLGNBQWMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQzVDLGlCQUFpQixFQUFFLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztTQUNuRCxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMaWdodHdlaWdodCBpbi1tZW1vcnkgYWNjdW11bGF0b3IgZm9yIEdhdGVrZWVwZXIgcG9saWN5IGVuZm9yY2VtZW50IG1ldHJpY3MuXG4gKlxuICogUmVjb3JkcyBhbGxvd2VkL2RlbmllZC9jb25maXJtYXRpb24tcGVuZGluZyBkZWNpc2lvbnMsIHBvbGljeSBzb3VyY2VcbiAqIGRpc3RyaWJ1dGlvbiwgYW5kIHBlcm1pc3Npb24gbGV2ZWwgdXNhZ2UuIFRoZSBjb21wYW5pb25cbiAqIEdhdGVrZWVwZXJNZXRyaWNzQ29sbGVjdG9yIHJlYWRzIGZyb20gdGhpcyB0cmFja2VyIGVhY2ggY29sbGVjdGlvbiBjeWNsZS5cbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIEdhdGVrZWVwZXJEZWNpc2lvblJlY29yZCB7XG4gIGFsbG93ZWQ6IGJvb2xlYW47XG4gIHBlcm1pc3Npb25MZXZlbDogc3RyaW5nO1xuICBwb2xpY3lTb3VyY2U/OiBzdHJpbmc7XG4gIGNvbmZpcm1hdGlvblBlbmRpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdhdGVrZWVwZXJNZXRyaWNzIHtcbiAgdG90YWxEZWNpc2lvbnM6IG51bWJlcjtcbiAgYWxsb3dlZDogbnVtYmVyO1xuICBkZW5pZWQ6IG51bWJlcjtcbiAgY29uZmlybWF0aW9uc1BlbmRpbmc6IG51bWJlcjtcbiAgYnlQb2xpY3lTb3VyY2U6IE1hcDxzdHJpbmcsIG51bWJlcj47XG4gIGJ5UGVybWlzc2lvbkxldmVsOiBNYXA8c3RyaW5nLCBudW1iZXI+O1xufVxuXG5leHBvcnQgY2xhc3MgR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyIHtcbiAgcHJpdmF0ZSB0b3RhbERlY2lzaW9ucyA9IDA7XG4gIHByaXZhdGUgYWxsb3dlZCA9IDA7XG4gIHByaXZhdGUgZGVuaWVkID0gMDtcbiAgcHJpdmF0ZSBjb25maXJtYXRpb25zUGVuZGluZyA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnlQb2xpY3lTb3VyY2UgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGJ5UGVybWlzc2lvbkxldmVsID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICByZWNvcmQoZGVjaXNpb246IEdhdGVrZWVwZXJEZWNpc2lvblJlY29yZCk6IHZvaWQge1xuICAgIHRoaXMudG90YWxEZWNpc2lvbnMrKztcblxuICAgIGlmIChkZWNpc2lvbi5hbGxvd2VkKSB7XG4gICAgICB0aGlzLmFsbG93ZWQrKztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZW5pZWQrKztcbiAgICB9XG5cbiAgICBpZiAoZGVjaXNpb24uY29uZmlybWF0aW9uUGVuZGluZykge1xuICAgICAgdGhpcy5jb25maXJtYXRpb25zUGVuZGluZysrO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZSA9IGRlY2lzaW9uLnBvbGljeVNvdXJjZSA/PyAndW5rbm93bic7XG4gICAgdGhpcy5ieVBvbGljeVNvdXJjZS5zZXQoc291cmNlLCAodGhpcy5ieVBvbGljeVNvdXJjZS5nZXQoc291cmNlKSA/PyAwKSArIDEpO1xuXG4gICAgY29uc3QgbGV2ZWwgPSBkZWNpc2lvbi5wZXJtaXNzaW9uTGV2ZWw7XG4gICAgdGhpcy5ieVBlcm1pc3Npb25MZXZlbC5zZXQobGV2ZWwsICh0aGlzLmJ5UGVybWlzc2lvbkxldmVsLmdldChsZXZlbCkgPz8gMCkgKyAxKTtcbiAgfVxuXG4gIGdldE1ldHJpY3MoKTogR2F0ZWtlZXBlck1ldHJpY3Mge1xuICAgIHJldHVybiB7XG4gICAgICB0b3RhbERlY2lzaW9uczogdGhpcy50b3RhbERlY2lzaW9ucyxcbiAgICAgIGFsbG93ZWQ6IHRoaXMuYWxsb3dlZCxcbiAgICAgIGRlbmllZDogdGhpcy5kZW5pZWQsXG4gICAgICBjb25maXJtYXRpb25zUGVuZGluZzogdGhpcy5jb25maXJtYXRpb25zUGVuZGluZyxcbiAgICAgIGJ5UG9saWN5U291cmNlOiBuZXcgTWFwKHRoaXMuYnlQb2xpY3lTb3VyY2UpLFxuICAgICAgYnlQZXJtaXNzaW9uTGV2ZWw6IG5ldyBNYXAodGhpcy5ieVBlcm1pc3Npb25MZXZlbCksXG4gICAgfTtcbiAgfVxufVxuIl19