@frontmcp/plugins 0.2.0 → 0.2.2

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,18 +1,19 @@
1
1
  {
2
2
  "name": "@frontmcp/plugins",
3
- "version": "0.2.0",
4
- "type": "commonjs",
3
+ "version": "0.2.2",
5
4
  "main": "./src/index.js",
6
5
  "types": "./src/index.d.ts",
7
6
  "exports": {
8
7
  "./package.json": "./package.json",
9
- "./cache": {
10
- "types": "./src/cache/index.d.ts",
11
- "import": "./src/cache/index.js",
12
- "default": "./src/cache/index.js"
8
+ ".": {
9
+ "types": "./src/index.d.ts",
10
+ "import": "./src/index.js",
11
+ "default": "./src/index.js"
13
12
  }
14
13
  },
15
14
  "dependencies": {
16
- "tslib": "^2.3.0"
17
- }
15
+ "tslib": "^2.3.0",
16
+ "@frontmcp/sdk": "^0.2.2"
17
+ },
18
+ "type": "commonjs"
18
19
  }
@@ -1,5 +1,4 @@
1
- import { DynamicPlugin, ProviderType } from '@frontmcp/sdk';
2
- import { ToolInvokeContext } from '@frontmcp/core';
1
+ import { DynamicPlugin, ProviderType, FlowCtxOf } from '@frontmcp/sdk';
3
2
  import { CachePluginOptions } from './cache.types';
4
3
  export default class CachePlugin extends DynamicPlugin<CachePluginOptions> {
5
4
  private readonly defaultTTL;
@@ -7,6 +6,6 @@ export default class CachePlugin extends DynamicPlugin<CachePluginOptions> {
7
6
  static defaultOptions: CachePluginOptions;
8
7
  options: CachePluginOptions;
9
8
  constructor(options?: CachePluginOptions);
10
- willReadCache(ctx: ToolInvokeContext): Promise<void>;
11
- willWriteCache(ctx: ToolInvokeContext): Promise<void>;
9
+ willReadCache(flowCtx: FlowCtxOf<'tools:call-tool'>): Promise<void>;
10
+ willWriteCache(flowCtx: FlowCtxOf<'tools:call-tool'>): Promise<void>;
12
11
  }
@@ -3,11 +3,11 @@ 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 core_1 = require("@frontmcp/core");
7
6
  const file_hasher_1 = require("nx/src/hasher/file-hasher");
8
7
  const cache_redis_provider_1 = tslib_1.__importDefault(require("./providers/cache-redis.provider"));
9
8
  const cache_memory_provider_1 = tslib_1.__importDefault(require("./providers/cache-memory.provider"));
10
9
  const cache_symbol_1 = require("./cache.symbol");
10
+ const core_1 = require("@frontmcp/core");
11
11
  let CachePlugin = CachePlugin_1 = class CachePlugin extends sdk_1.DynamicPlugin {
12
12
  constructor(options = CachePlugin_1.defaultOptions) {
13
13
  super();
@@ -16,12 +16,13 @@ let CachePlugin = CachePlugin_1 = class CachePlugin extends sdk_1.DynamicPlugin
16
16
  ...options,
17
17
  };
18
18
  }
19
- async willReadCache(ctx) {
19
+ async willReadCache(flowCtx) {
20
+ const ctx = flowCtx.state.required.toolContext;
20
21
  const { cache } = ctx.metadata;
21
- if (!cache) {
22
+ if (!cache || !ctx.input) {
22
23
  return;
23
24
  }
24
- const redis = ctx.get(cache_symbol_1.CacheStoreToken);
25
+ const redis = this.get(cache_symbol_1.CacheStoreToken);
25
26
  const hash = (0, file_hasher_1.hashObject)(ctx.input);
26
27
  const cached = await redis.getValue(hash);
27
28
  if (cache == true || (cache.ttl && cache.slideWindow)) {
@@ -29,20 +30,22 @@ let CachePlugin = CachePlugin_1 = class CachePlugin extends sdk_1.DynamicPlugin
29
30
  await redis.setValue(hash, cached, ttl);
30
31
  }
31
32
  if (cached) {
33
+ console.log('return from cache', { cached });
32
34
  ctx.respond({
33
35
  ...cached,
34
36
  ___cached__: true,
35
37
  });
36
38
  }
37
39
  }
38
- async willWriteCache(ctx) {
40
+ async willWriteCache(flowCtx) {
41
+ const ctx = flowCtx.state.required.toolContext;
39
42
  const { cache } = ctx.metadata;
40
43
  if (!cache) {
41
44
  return;
42
45
  }
46
+ const redis = this.get(cache_symbol_1.CacheStoreToken);
43
47
  console.log('willWriteCache', { cache });
44
48
  const ttl = cache === true ? this.defaultTTL : cache.ttl ?? this.defaultTTL;
45
- const redis = ctx.get(cache_symbol_1.CacheStoreToken);
46
49
  const hash = (0, file_hasher_1.hashObject)(ctx.input);
47
50
  await redis.setValue(hash, ctx.output, ttl);
48
51
  }
@@ -72,15 +75,15 @@ CachePlugin.defaultOptions = {
72
75
  type: 'memory',
73
76
  };
74
77
  tslib_1.__decorate([
75
- (0, sdk_1.ToolHook)(sdk_1.ToolHookStage.willReadCache),
78
+ core_1.ToolHook.Will('execute', { priority: 1000 }),
76
79
  tslib_1.__metadata("design:type", Function),
77
- tslib_1.__metadata("design:paramtypes", [core_1.ToolInvokeContext]),
80
+ tslib_1.__metadata("design:paramtypes", [Object]),
78
81
  tslib_1.__metadata("design:returntype", Promise)
79
82
  ], CachePlugin.prototype, "willReadCache", null);
80
83
  tslib_1.__decorate([
81
- (0, sdk_1.ToolHook)(sdk_1.ToolHookStage.willWriteCache),
84
+ core_1.ToolHook.Did('execute', { priority: 1000 }),
82
85
  tslib_1.__metadata("design:type", Function),
83
- tslib_1.__metadata("design:paramtypes", [core_1.ToolInvokeContext]),
86
+ tslib_1.__metadata("design:paramtypes", [Object]),
84
87
  tslib_1.__metadata("design:returntype", Promise)
85
88
  ], CachePlugin.prototype, "willWriteCache", null);
86
89
  CachePlugin = CachePlugin_1 = tslib_1.__decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"cache.plugin.js","sourceRoot":"","sources":["../../../src/cache/cache.plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { DynamicPlugin, Plugin, ToolHook, ProviderType, ToolHookStage } from '@frontmcp/sdk';\nimport { ToolInvokeContext } from '@frontmcp/core';\nimport { hashObject } from 'nx/src/hasher/file-hasher';\nimport CacheRedisProvider from './providers/cache-redis.provider';\nimport CacheMemoryProvider from './providers/cache-memory.provider';\nimport { CachePluginOptions, CacheStoreInterface } from './cache.types';\nimport { CacheStoreToken } from './cache.symbol';\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(ToolHookStage.willReadCache)\n async willReadCache(ctx: ToolInvokeContext) {\n const { cache } = ctx.metadata;\n if (!cache) {\n return;\n }\n\n const redis = ctx.get<CacheStoreInterface>(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 ctx.respond({\n ...cached,\n ___cached__: true,\n });\n }\n }\n\n @ToolHook(ToolHookStage.willWriteCache)\n async willWriteCache(ctx: ToolInvokeContext) {\n const { cache } = ctx.metadata;\n if (!cache) {\n return;\n }\n console.log('willWriteCache', { cache });\n const ttl = cache === true ? this.defaultTTL : cache.ttl ?? this.defaultTTL;\n\n const redis = ctx.get<CacheStoreInterface>(CacheStoreToken);\n const hash = hashObject(ctx.input);\n await redis.setValue(hash, ctx.output, ttl);\n }\n}\n"]}
1
+ {"version":3,"file":"cache.plugin.js","sourceRoot":"","sources":["../../../src/cache/cache.plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import {DynamicPlugin, Plugin, ProviderType, FlowCtxOf} from '@frontmcp/sdk';\nimport {hashObject} from 'nx/src/hasher/file-hasher';\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"]}
@@ -1 +1,3 @@
1
- export declare const CacheStoreToken: unique symbol;
1
+ import { CacheStoreInterface } from "./cache.types";
2
+ import { Token } from "@frontmcp/sdk";
3
+ export declare const CacheStoreToken: Token<CacheStoreInterface>;
@@ -1 +1 @@
1
- {"version":3,"file":"cache.symbol.js","sourceRoot":"","sources":["../../../src/cache/cache.symbol.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC","sourcesContent":["export const CacheStoreToken = Symbol('plugin:cache:store');\n"]}
1
+ {"version":3,"file":"cache.symbol.js","sourceRoot":"","sources":["../../../src/cache/cache.symbol.ts"],"names":[],"mappings":";;;AAGa,QAAA,eAAe,GAA+B,MAAM,CAAC,oBAAoB,CAAC,CAAC","sourcesContent":["import {CacheStoreInterface} from \"./cache.types\";\nimport {Token} from \"@frontmcp/sdk\";\n\nexport const CacheStoreToken: Token<CacheStoreInterface> = Symbol('plugin:cache:store');\n"]}
package/src/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { default as CachePlugin } from './cache';
2
+ export { CachePluginOptions } from './cache';
package/src/index.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CachePlugin = void 0;
4
+ const tslib_1 = require("tslib");
5
+ var cache_1 = require("./cache");
6
+ Object.defineProperty(exports, "CachePlugin", { enumerable: true, get: function () { return tslib_1.__importDefault(cache_1).default; } });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,iCAA8C;AAAtC,6HAAA,OAAO,OAAe","sourcesContent":["export {default as CachePlugin} from './cache'\nexport {CachePluginOptions} from './cache'"]}