@frontmcp/plugins 0.2.3 → 0.2.5
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frontmcp/plugins",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
4
4
|
"main": "./src/index.js",
|
|
5
5
|
"types": "./src/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"tslib": "^2.3.0",
|
|
16
|
-
"@frontmcp/sdk": "^0.2.
|
|
16
|
+
"@frontmcp/sdk": "^0.2.5"
|
|
17
17
|
},
|
|
18
18
|
"type": "commonjs"
|
|
19
19
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DynamicPlugin,
|
|
1
|
+
import { DynamicPlugin, FlowCtxOf, ProviderType } from '@frontmcp/sdk';
|
|
2
2
|
import { CachePluginOptions } from './cache.types';
|
|
3
3
|
export default class CachePlugin extends DynamicPlugin<CachePluginOptions> {
|
|
4
4
|
private readonly defaultTTL;
|
|
@@ -3,7 +3,6 @@ var CachePlugin_1;
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const sdk_1 = require("@frontmcp/sdk");
|
|
6
|
-
const file_hasher_1 = require("nx/src/hasher/file-hasher");
|
|
7
6
|
const cache_redis_provider_1 = tslib_1.__importDefault(require("./providers/cache-redis.provider"));
|
|
8
7
|
const cache_memory_provider_1 = tslib_1.__importDefault(require("./providers/cache-memory.provider"));
|
|
9
8
|
const cache_symbol_1 = require("./cache.symbol");
|
|
@@ -23,7 +22,7 @@ let CachePlugin = CachePlugin_1 = class CachePlugin extends sdk_1.DynamicPlugin
|
|
|
23
22
|
return;
|
|
24
23
|
}
|
|
25
24
|
const redis = this.get(cache_symbol_1.CacheStoreToken);
|
|
26
|
-
const hash =
|
|
25
|
+
const hash = hashObject(ctx.input);
|
|
27
26
|
const cached = await redis.getValue(hash);
|
|
28
27
|
if (cache == true || (cache.ttl && cache.slideWindow)) {
|
|
29
28
|
const ttl = cache === true ? this.defaultTTL : cache.ttl ?? this.defaultTTL;
|
|
@@ -46,7 +45,7 @@ let CachePlugin = CachePlugin_1 = class CachePlugin extends sdk_1.DynamicPlugin
|
|
|
46
45
|
const redis = this.get(cache_symbol_1.CacheStoreToken);
|
|
47
46
|
console.log('willWriteCache', { cache });
|
|
48
47
|
const ttl = cache === true ? this.defaultTTL : cache.ttl ?? this.defaultTTL;
|
|
49
|
-
const hash =
|
|
48
|
+
const hash = hashObject(ctx.input);
|
|
50
49
|
await redis.setValue(hash, ctx.output, ttl);
|
|
51
50
|
}
|
|
52
51
|
};
|
|
@@ -103,4 +102,17 @@ CachePlugin = CachePlugin_1 = tslib_1.__decorate([
|
|
|
103
102
|
tslib_1.__metadata("design:paramtypes", [Object])
|
|
104
103
|
], CachePlugin);
|
|
105
104
|
exports.default = CachePlugin;
|
|
105
|
+
function hashObject(obj) {
|
|
106
|
+
const keys = Object.keys(obj).sort();
|
|
107
|
+
const values = keys.map(key => obj[key]);
|
|
108
|
+
return values.reduce((acc, val) => {
|
|
109
|
+
if (typeof val === 'object' && val !== null) {
|
|
110
|
+
acc += hashObject(val);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
acc += val;
|
|
114
|
+
}
|
|
115
|
+
return acc;
|
|
116
|
+
}, '');
|
|
117
|
+
}
|
|
106
118
|
//# sourceMappingURL=cache.plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.plugin.js","sourceRoot":"","sources":["../../../src/cache/cache.plugin.ts"],"names":[],"mappings":";;;;AAAA,uCAA6E;AAC7E,
|
|
1
|
+
{"version":3,"file":"cache.plugin.js","sourceRoot":"","sources":["../../../src/cache/cache.plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import {DynamicPlugin, FlowCtxOf, Plugin, ProviderType} from '@frontmcp/sdk';\nimport CacheRedisProvider from './providers/cache-redis.provider';\nimport CacheMemoryProvider from './providers/cache-memory.provider';\nimport {CachePluginOptions} from './cache.types';\nimport {CacheStoreToken} from './cache.symbol';\nimport {ToolHook} from '@frontmcp/core'\n\n@Plugin({\n name: 'cache',\n description: 'Cache plugin for caching tool results',\n providers: [\n /* add providers that always loaded with the plugin or default providers */\n {\n // this is default provider for cache, will be overridden if dynamicProviders based on config\n name: 'cache:memory',\n provide: CacheStoreToken,\n useValue: new CacheMemoryProvider(60 * 60 * 24),\n },\n ],\n})\nexport default class CachePlugin extends DynamicPlugin<CachePluginOptions> {\n private readonly defaultTTL: number;\n\n static override dynamicProviders = (options: CachePluginOptions) => {\n const providers: ProviderType[] = [];\n switch (options.type) {\n case 'redis':\n case 'redis-client':\n providers.push({\n name: 'cache:redis',\n provide: CacheStoreToken,\n useValue: new CacheRedisProvider(options),\n });\n break;\n case 'memory':\n providers.push({\n name: 'cache:memory',\n provide: CacheStoreToken,\n useValue: new CacheMemoryProvider(options.defaultTTL),\n });\n break;\n }\n return providers;\n };\n\n static defaultOptions: CachePluginOptions = {\n type: 'memory',\n };\n options: CachePluginOptions;\n\n constructor(options: CachePluginOptions = CachePlugin.defaultOptions) {\n super();\n this.options = {\n defaultTTL: 60 * 60 * 24,\n ...options,\n };\n }\n\n @ToolHook.Will('execute', {priority: 1000})\n async willReadCache(flowCtx: FlowCtxOf<'tools:call-tool'>) {\n const ctx = flowCtx.state.required.toolContext;\n const {cache} = ctx.metadata;\n if (!cache || !ctx.input) {\n return;\n }\n const redis = this.get(CacheStoreToken)\n const hash = hashObject(ctx.input);\n const cached = await redis.getValue(hash);\n\n if (cache == true || (cache.ttl && cache.slideWindow)) {\n const ttl = cache === true ? this.defaultTTL : cache.ttl ?? this.defaultTTL;\n await redis.setValue(hash, cached, ttl);\n }\n\n if (cached) {\n console.log('return from cache', {cached});\n ctx.respond({\n ...cached,\n ___cached__: true,\n });\n }\n }\n\n @ToolHook.Did('execute', {priority: 1000})\n async willWriteCache(flowCtx: FlowCtxOf<'tools:call-tool'>) {\n const ctx = flowCtx.state.required.toolContext;\n const {cache} = ctx.metadata;\n if (!cache) {\n return;\n }\n const redis = this.get(CacheStoreToken)\n console.log('willWriteCache', {cache});\n const ttl = cache === true ? this.defaultTTL : cache.ttl ?? this.defaultTTL;\n\n const hash = hashObject(ctx.input!);\n await redis.setValue(hash, ctx.output, ttl);\n }\n}\n\nfunction hashObject(obj: any) {\n const keys = Object.keys(obj).sort();\n const values = keys.map(key => obj[key]);\n return values.reduce((acc, val) => {\n if (typeof val === 'object' && val !== null) {\n acc += hashObject(val);\n } else {\n acc += val;\n }\n return acc;\n }, '');\n}"]}
|