@t0ken.ai/memoryx-openclaw-plugin 2.2.36 → 2.2.38

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAkDH,UAAU,YAAY;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,YAAY;IAClB,QAAQ,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,eAAe,EAAE,KAAK,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAqDD,cAAM,aAAa;IACf,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,aAAa,CAAkB;gBAE3B,YAAY,CAAC,EAAE,YAAY;IAIjC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAad,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUpC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA6B1D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAyC/D,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAYhC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAc1C,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAcvE,IAAI,CAAC,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAiBxC,cAAc,IAAI,OAAO,CAAC;QACnC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,WAAW,EAAE,OAAO,CAAC;QACrB,KAAK,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;IAwBW,cAAc,IAAI,OAAO,CAAC;QACnC,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE;YACH,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,EAAE,MAAM,CAAC;YACnB,YAAY,EAAE,MAAM,CAAC;YACrB,iBAAiB,EAAE,MAAM,CAAC;YAC1B,gBAAgB,EAAE,MAAM,CAAC;YACzB,mBAAmB,EAAE,MAAM,CAAC;YAC5B,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CAcL;;;;;;kBAUiB,GAAG,iBAAiB,YAAY,GAAG,IAAI;;AANzD,wBAuwBE;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAkDH,UAAU,YAAY;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,YAAY;IAClB,QAAQ,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,eAAe,EAAE,KAAK,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAqDD,cAAM,aAAa;IACf,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,aAAa,CAAkB;gBAE3B,YAAY,CAAC,EAAE,YAAY;IAIjC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAad,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUpC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA6B1D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAyC/D,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAYhC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAc1C,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAcvE,IAAI,CAAC,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAiBxC,cAAc,IAAI,OAAO,CAAC;QACnC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,WAAW,EAAE,OAAO,CAAC;QACrB,KAAK,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;IAwBW,cAAc,IAAI,OAAO,CAAC;QACnC,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE;YACH,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,EAAE,MAAM,CAAC;YACnB,YAAY,EAAE,MAAM,CAAC;YACrB,iBAAiB,EAAE,MAAM,CAAC;YAC1B,gBAAgB,EAAE,MAAM,CAAC;YACzB,mBAAmB,EAAE,MAAM,CAAC;YAC5B,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CAcL;;;;;;kBAUiB,GAAG,iBAAiB,YAAY,GAAG,IAAI;;AANzD,wBAg0BE;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -26,7 +26,7 @@ import * as fs from "fs";
26
26
  import * as path from "path";
27
27
  import * as os from "os";
28
28
  // 插件版本号 - 由 prebuild 脚本自动从 package.json 同步
29
- const PLUGIN_VERSION = "2.2.36";
29
+ const PLUGIN_VERSION = "2.2.38";
30
30
  const DEFAULT_API_BASE = "https://t0ken.ai/api";
31
31
  const PLUGIN_DIR = path.join(os.homedir(), ".openclaw", "extensions", "memoryx-openclaw-plugin");
32
32
  let logStream = null;
@@ -716,36 +716,42 @@ export default {
716
716
  await plugin.endConversation();
717
717
  }
718
718
  });
719
- // =========================================================================
720
- // MemoryX Proxy Provider - 注入记忆 + 转发请求 + 详细日志
721
- // =========================================================================
722
- // 从 OpenClaw config 提取 provider 凭证
723
- const providerCredentials = new Map();
724
- function extractProviderCredentials(config) {
719
+ // 从 OpenClaw config 提取 provider 凭证(使用 SlimClaw 的实现)
720
+ function extractProviderCredentials(config, providerOverrides) {
721
+ const credentials = new Map();
725
722
  if (config?.models?.providers) {
726
723
  for (const [id, providerConfig] of Object.entries(config.models.providers)) {
724
+ if (typeof providerConfig !== 'object' ||
725
+ providerConfig === null ||
726
+ !('baseUrl' in providerConfig)) {
727
+ continue;
728
+ }
727
729
  const pc = providerConfig;
728
- if (pc.baseUrl || pc.apiKey) {
729
- providerCredentials.set(id, {
730
- baseUrl: pc.baseUrl || '',
731
- apiKey: pc.apiKey || process.env[`${id.toUpperCase()}_API_KEY`] || ''
730
+ if (pc.baseUrl) {
731
+ // Check for custom env var name in providerOverrides
732
+ const override = providerOverrides?.[id];
733
+ const customEnvName = override?.apiKeyEnv;
734
+ const customApiKey = override?.apiKey;
735
+ // Priority: explicit apiKey > custom env var > default env var convention
736
+ const apiKey = customApiKey ||
737
+ pc.apiKey ||
738
+ (customEnvName ? process.env[customEnvName] : undefined) ||
739
+ process.env[`${id.toUpperCase()}_API_KEY`] ||
740
+ '';
741
+ credentials.set(id, {
742
+ baseUrl: override?.baseUrl || pc.baseUrl,
743
+ apiKey,
732
744
  });
733
745
  log(`[Proxy] Extracted credentials for ${id}: baseUrl=${pc.baseUrl?.slice(0, 50)}...`);
734
746
  }
735
747
  }
736
748
  }
749
+ return credentials;
737
750
  }
738
751
  // 提取凭证
739
- try {
740
- extractProviderCredentials(api.config);
741
- log(`[Proxy] Found ${providerCredentials.size} providers in config`);
742
- }
743
- catch (e) {
744
- log(`[Proxy] Failed to extract credentials: ${e}`);
745
- }
746
- // 简化方案:只注册一个虚拟模型 "auto"
747
- // before_model_resolve 拦截所有请求,改为使用 memoryx-proxy/auto
748
- // sendMessage 用原始模型去代理,用户无感知
752
+ const providerCredentials = extractProviderCredentials(api.config);
753
+ log(`[Proxy] Found ${providerCredentials.size} providers in config`);
754
+ // 虚拟模型定义
749
755
  const VIRTUAL_MODEL = {
750
756
  id: 'auto',
751
757
  name: 'MemoryX Auto Router',
@@ -755,16 +761,22 @@ export default {
755
761
  contextWindow: 200000,
756
762
  maxTokens: 8192,
757
763
  };
758
- log(`[Proxy] Using simplified virtual model: auto`);
759
- // 注册 Proxy Provider - 只注册一个虚拟模型 "auto"
764
+ log(`[Proxy] Registering provider with virtual model: auto`);
765
+ // 注册 Proxy Provider - 使用正确的 ModelProviderConfig 格式
760
766
  api.registerProvider({
761
767
  id: 'memoryx-proxy',
762
- name: 'MemoryX Proxy Provider',
768
+ label: 'MemoryX Proxy Provider',
763
769
  models: {
764
770
  baseUrl: 'http://memoryx-proxy.local',
765
- api: 'anthropic-messages',
766
- models: [VIRTUAL_MODEL], // 只注册 auto
771
+ models: [VIRTUAL_MODEL],
767
772
  },
773
+ // auth 是必需的,提供一个简单的 apiKey 方式
774
+ auth: [{
775
+ id: 'api-key',
776
+ label: 'API Key',
777
+ kind: 'apiKey',
778
+ run: async () => ({ ok: true, credentials: {} }),
779
+ }],
768
780
  async sendMessage(params) {
769
781
  const requestId = `req-${Date.now()}`;
770
782
  // ========== 详细日志 ==========
@@ -926,10 +938,34 @@ export default {
926
938
  api.logger.info('[MemoryX] 🔄 Proxy provider registered: memoryx-proxy');
927
939
  // 从 api.config 读取默认 model 和 provider
928
940
  // 注意:hook context 不包含 model 信息,只能从 config 读取
941
+ // config 结构可能是:
942
+ // - agents.defaults.model = "model-id" (string)
943
+ // - agents.defaults.model = { default: "model-id" } (object)
944
+ // - agents.defaults.model.default = "model-id" (nested)
929
945
  const getDefaultModelAndProvider = () => {
930
946
  const agentsDefaults = api.config?.agents?.defaults;
931
- const model = agentsDefaults?.model?.default || agentsDefaults?.model || 'claude-sonnet-4-20250514';
932
- const provider = agentsDefaults?.provider?.default || agentsDefaults?.provider || 'anthropic';
947
+ // 处理 model - 可能是 string object
948
+ let model = 'claude-sonnet-4-20250514';
949
+ if (agentsDefaults?.model) {
950
+ const m = agentsDefaults.model;
951
+ if (typeof m === 'string') {
952
+ model = m;
953
+ }
954
+ else if (typeof m === 'object' && m.default) {
955
+ model = typeof m.default === 'string' ? m.default : String(m.default);
956
+ }
957
+ }
958
+ // 处理 provider - 可能是 string 或 object
959
+ let provider = 'anthropic';
960
+ if (agentsDefaults?.provider) {
961
+ const p = agentsDefaults.provider;
962
+ if (typeof p === 'string') {
963
+ provider = p;
964
+ }
965
+ else if (typeof p === 'object' && p.default) {
966
+ provider = typeof p.default === 'string' ? p.default : String(p.default);
967
+ }
968
+ }
933
969
  return { model, provider };
934
970
  };
935
971
  // 保存原始请求信息,供 sendMessage 使用
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@t0ken.ai/memoryx-openclaw-plugin",
3
- "version": "2.2.36",
3
+ "version": "2.2.38",
4
4
  "description": "MemoryX real-time memory capture and recall plugin for OpenClaw (powered by @t0ken.ai/memoryx-sdk)",
5
5
  "type": "module",
6
6
  "author": "MemoryX Team",