@next-open-ai/openclawx 0.8.58 → 0.9.6

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.
Files changed (41) hide show
  1. package/README.md +14 -5
  2. package/apps/desktop/renderer/dist/assets/index-BihHYEuk.js +93 -0
  3. package/apps/desktop/renderer/dist/assets/index-Dq83-1ma.css +10 -0
  4. package/apps/desktop/renderer/dist/index.html +2 -2
  5. package/dist/cli/cli.js +2 -2
  6. package/dist/core/agent/agent-manager.js +12 -1
  7. package/dist/core/config/agent-reload-pending.js +3 -2
  8. package/dist/core/config/desktop-config.d.ts +1 -1
  9. package/dist/core/config/desktop-config.js +31 -13
  10. package/dist/core/config/provider-support-default.js +1 -0
  11. package/dist/core/local-llm-server/download-model.d.ts +1 -1
  12. package/dist/core/local-llm-server/download-model.js +1 -1
  13. package/dist/core/local-llm-server/index.d.ts +1 -1
  14. package/dist/core/local-llm-server/llm-context.d.ts +1 -0
  15. package/dist/core/local-llm-server/llm-context.js +31 -3
  16. package/dist/core/local-llm-server/model-resolve.d.ts +2 -2
  17. package/dist/core/local-llm-server/model-resolve.js +2 -2
  18. package/dist/core/local-llm-server/start-from-config.js +2 -2
  19. package/dist/core/mcp/operator.d.ts +9 -0
  20. package/dist/core/mcp/operator.js +40 -6
  21. package/dist/core/mcp/transport/stdio.js +19 -2
  22. package/dist/core/tools/windows-shell.d.ts +6 -0
  23. package/dist/core/tools/windows-shell.js +85 -0
  24. package/dist/gateway/methods/agent-chat.js +30 -3
  25. package/dist/gateway/server.js +50 -13
  26. package/dist/server/agent-config/agent-config.controller.d.ts +8 -0
  27. package/dist/server/agent-config/agent-config.controller.js +11 -0
  28. package/dist/server/agent-config/agent-config.service.d.ts +10 -0
  29. package/dist/server/agent-config/agent-config.service.js +18 -1
  30. package/dist/server/agents/agents.gateway.js +1 -1
  31. package/dist/server/bootstrap.js +16 -2
  32. package/dist/server/config/config.service.d.ts +1 -1
  33. package/dist/server/config/config.service.js +29 -23
  34. package/dist/server/config/local-models.service.js +2 -3
  35. package/package.json +1 -1
  36. package/presets/preset-agents.json +2 -2
  37. package/presets/preset-config.json +5 -5
  38. package/presets/preset-providers.json +7 -0
  39. package/presets/recommended-local-models.json +6 -12
  40. package/apps/desktop/renderer/dist/assets/index-M5VGUUpo.js +0 -93
  41. package/apps/desktop/renderer/dist/assets/index-y8oE2q_u.css +0 -10
@@ -20,7 +20,14 @@ export async function createNestAppEmbedded() {
20
20
  expressApp.use(express.json({ limit: BODY_LIMIT }));
21
21
  expressApp.use(express.urlencoded({ extended: true, limit: BODY_LIMIT }));
22
22
  app.enableCors({
23
- origin: ['http://localhost:5173', 'http://localhost:38080', 'http://localhost:38081'],
23
+ origin: [
24
+ 'http://localhost:5173',
25
+ 'http://127.0.0.1:5173',
26
+ 'http://localhost:38080',
27
+ 'http://localhost:38081',
28
+ 'http://127.0.0.1:38080',
29
+ 'http://127.0.0.1:38081',
30
+ ],
24
31
  credentials: true,
25
32
  });
26
33
  await app.init();
@@ -40,7 +47,14 @@ export async function createNestAppStandalone(port = 38081) {
40
47
  expressApp.use(express.urlencoded({ extended: true, limit: BODY_LIMIT }));
41
48
  app.setGlobalPrefix('server-api');
42
49
  app.enableCors({
43
- origin: ['http://localhost:5173', 'http://localhost:38080', 'http://localhost:38081'],
50
+ origin: [
51
+ 'http://localhost:5173',
52
+ 'http://127.0.0.1:5173',
53
+ 'http://localhost:38080',
54
+ 'http://localhost:38081',
55
+ 'http://127.0.0.1:38080',
56
+ 'http://127.0.0.1:38081',
57
+ ],
44
58
  credentials: true,
45
59
  });
46
60
  await app.listen(port);
@@ -98,7 +98,7 @@ export declare class ConfigService {
98
98
  /** 当前缺省智能体 id */
99
99
  getDefaultAgentId(config?: AppConfig): string;
100
100
  private loadConfig;
101
- /** 每次获取前从磁盘重新读取,保证打开配置界面时显示最新(含 CLI 写入的配置)。本地 LLM 可用时注入 local 与缺省模型项,供所有智能体使用。 */
101
+ /** 每次获取前从磁盘重新读取,保证打开配置界面时显示最新(含 CLI 写入的配置)。本地 LLM 可用时注入 local 与缺省模型项;OLLAMA_BASE_URL 时注入 ollama baseUrl(如与 Ollama 同栈)。 */
102
102
  getConfig(): Promise<AppConfig>;
103
103
  updateConfig(updates: Partial<AppConfig>): Promise<AppConfig>;
104
104
  private saveConfig;
@@ -33,8 +33,8 @@ let ConfigService = class ConfigService {
33
33
  this.loadConfig();
34
34
  }
35
35
  /** 预装本地推理缺省:与 desktop-config 的 DEFAULT_LOCAL_LLM_MODEL_ID / DEFAULT_LOCAL_MODEL_ITEM_CODE 一致 */
36
- static DEFAULT_LOCAL_MODEL_ID = 'hf_Qwen_Qwen3-4B-GGUF_Qwen3-4B-Q4_K_M.gguf';
37
- static DEFAULT_LOCAL_MODEL_ITEM_CODE = 'local-qwen3-4b';
36
+ static DEFAULT_LOCAL_MODEL_ID = 'hf_unsloth_Qwen3.5-4B-GGUF_Qwen3.5-4B-Q5_K_M.gguf';
37
+ static DEFAULT_LOCAL_MODEL_ITEM_CODE = 'local-qwen35-4b';
38
38
  getDefaultConfig() {
39
39
  return {
40
40
  gatewayUrl: 'ws://localhost:38080',
@@ -53,7 +53,7 @@ let ConfigService = class ConfigService {
53
53
  modelId: ConfigService_1.DEFAULT_LOCAL_MODEL_ID,
54
54
  modelItemCode: ConfigService_1.DEFAULT_LOCAL_MODEL_ITEM_CODE,
55
55
  type: 'llm',
56
- alias: 'Qwen3 4B Q4_K_M',
56
+ alias: 'Qwen 3.5 4B Q5_K_M',
57
57
  },
58
58
  ],
59
59
  rag: undefined,
@@ -91,31 +91,37 @@ let ConfigService = class ConfigService {
91
91
  console.error('Error loading config:', error);
92
92
  }
93
93
  }
94
- /** 每次获取前从磁盘重新读取,保证打开配置界面时显示最新(含 CLI 写入的配置)。本地 LLM 可用时注入 local 与缺省模型项,供所有智能体使用。 */
94
+ /** 每次获取前从磁盘重新读取,保证打开配置界面时显示最新(含 CLI 写入的配置)。本地 LLM 可用时注入 local 与缺省模型项;OLLAMA_BASE_URL 时注入 ollama baseUrl(如与 Ollama 同栈)。 */
95
95
  async getConfig() {
96
96
  await this.loadConfig();
97
- const baseUrl = process.env.LOCAL_LLM_BASE_URL?.trim();
98
- if (!baseUrl)
99
- return this.config;
100
97
  const out = { ...this.config };
101
98
  out.providers = { ...(this.config.providers || {}) };
102
- if (!out.providers['local']) {
103
- out.providers['local'] = { baseUrl: baseUrl || 'http://127.0.0.1:11435/v1' };
104
- }
105
- else if (!out.providers['local'].baseUrl?.trim()) {
106
- out.providers['local'] = { ...out.providers['local'], baseUrl: baseUrl || 'http://127.0.0.1:11435/v1' };
99
+ const localBaseUrl = process.env.LOCAL_LLM_BASE_URL?.trim();
100
+ if (localBaseUrl) {
101
+ if (!out.providers['local']) {
102
+ out.providers['local'] = { baseUrl: localBaseUrl.replace(/\/$/, '') + (localBaseUrl.endsWith('/v1') ? '' : '/v1') };
103
+ }
104
+ else if (!out.providers['local'].baseUrl?.trim()) {
105
+ out.providers['local'] = { ...out.providers['local'], baseUrl: localBaseUrl.replace(/\/$/, '') + (localBaseUrl.endsWith('/v1') ? '' : '/v1') };
106
+ }
107
+ const list = [...(out.configuredModels || [])];
108
+ const hasLocal = list.some((m) => m.provider === 'local' && m.modelId === 'local-llm');
109
+ if (!hasLocal) {
110
+ list.push({
111
+ provider: 'local',
112
+ modelId: 'local-llm',
113
+ modelItemCode: 'local-llm',
114
+ type: 'llm',
115
+ alias: '本地 LLM(当前加载)',
116
+ });
117
+ out.configuredModels = list;
118
+ }
107
119
  }
108
- const list = [...(out.configuredModels || [])];
109
- const hasLocal = list.some((m) => m.provider === 'local' && m.modelId === 'local-llm');
110
- if (!hasLocal) {
111
- list.push({
112
- provider: 'local',
113
- modelId: 'local-llm',
114
- modelItemCode: 'local-llm',
115
- type: 'llm',
116
- alias: '本地 LLM(当前加载)',
117
- });
118
- out.configuredModels = list;
120
+ const ollamaBaseUrl = process.env.OLLAMA_BASE_URL?.trim();
121
+ if (ollamaBaseUrl) {
122
+ const url = ollamaBaseUrl.replace(/\/$/, '');
123
+ const withV1 = url.endsWith('/v1') ? url : url + '/v1';
124
+ out.providers['ollama'] = { ...(out.providers['ollama'] || {}), baseUrl: withV1 };
119
125
  }
120
126
  return out;
121
127
  }
@@ -27,9 +27,8 @@ function inferModelType(filename) {
27
27
  }
28
28
  const PRESET_FILENAME = 'recommended-local-models.json';
29
29
  const DEFAULT_RECOMMENDED = [
30
- { id: 'hf:Qwen/Qwen3-4B-GGUF/Qwen3-4B-Q4_K_M.gguf', name: 'Qwen3 4B Q4_K_M', type: 'llm', sizeHint: '~2.5GB' },
31
- { id: 'hf:Qwen/Qwen3-7B-GGUF/Qwen3-7B-Q4_K_M.gguf', name: 'Qwen3 7B Q4_K_M', type: 'llm', sizeHint: '~4.5GB' },
32
- { id: 'hf:Qwen/Qwen3-14B-GGUF/Qwen3-14B-Q4_K_M.gguf', name: 'Qwen3 14B Q4_K_M', type: 'llm', sizeHint: '~8.5GB' },
30
+ { id: 'hf:unsloth/Qwen3.5-4B-GGUF/Qwen3.5-4B-Q5_K_M.gguf', name: 'Qwen 3.5 4B Q5_K_M', type: 'llm', sizeHint: '~3.2GB' },
31
+ { id: 'hf:unsloth/Qwen3.5-9B-GGUF/Qwen3.5-9B-Q5_K_M.gguf', name: 'Qwen 3.5 9B Q5_K_M', type: 'llm', sizeHint: '~6.8GB' },
33
32
  { id: 'hf:ggml-org/embeddinggemma-300M-GGUF/embeddinggemma-300M-Q8_0.gguf', name: 'EmbeddingGemma 300M Q8 (768维)', type: 'embedding', sizeHint: '~300MB' },
34
33
  { id: 'hf:gpustack/bge-m3-GGUF/bge-m3-Q8_0.gguf', name: 'BGE-M3 Q8 多语言 (1024维)', type: 'embedding', sizeHint: '~1.2GB' },
35
34
  { id: 'hf:mixedbread-ai/mxbai-embed-large-v1-GGUF/mxbai-embed-large-v1-f16.gguf', name: 'MxBai Embed Large v1 (1024维)', type: 'embedding', sizeHint: '~670MB' },
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.8.58",
6
+ "version": "0.9.6",
7
7
  "description": "OpenClawX - A professional desktop application for managing and executing AI agents with real-time chat, session management, and skills browsing.",
8
8
  "type": "module",
9
9
  "main": "dist/index.js",
@@ -69,7 +69,7 @@
69
69
  "mcpServers": {
70
70
  "akshare-tools": {
71
71
  "command": "uvx",
72
- "args": ["-y", "akshare-tools"],
72
+ "args": ["akshare-tools"],
73
73
  "env": {}
74
74
  }
75
75
  }
@@ -108,7 +108,7 @@
108
108
  "command": "npx",
109
109
  "args": ["-y", "yingdao-mcp-server"],
110
110
  "env": {
111
- "RPA_MODEL": "qwen3-4b-q4_k_m",
111
+ "RPA_MODEL": "local",
112
112
  "SHADOWBOT_PATH": "/Applications/影刀.app",
113
113
  "USER_FOLDER": "/Users/ctrip/Library/Application Support/Shadowbot/users/718771925823332354"
114
114
  }
@@ -2,8 +2,8 @@
2
2
  "presetVersion": "1.0",
3
3
  "config": {
4
4
  "defaultProvider": "local",
5
- "defaultModel": "hf_Qwen_Qwen3-4B-GGUF_Qwen3-4B-Q4_K_M.gguf",
6
- "defaultModelItemCode": "local-qwen3-4b",
5
+ "defaultModel": "hf_unsloth_Qwen3.5-4B-GGUF_Qwen3.5-4B-Q5_K_M.gguf",
6
+ "defaultModelItemCode": "local-qwen35-4b",
7
7
  "defaultAgentId": "default",
8
8
  "maxAgentSessions": 5,
9
9
  "providers": {
@@ -12,10 +12,10 @@
12
12
  "configuredModels": [
13
13
  {
14
14
  "provider": "local",
15
- "modelId": "hf_Qwen_Qwen3-4B-GGUF_Qwen3-4B-Q4_K_M.gguf",
15
+ "modelId": "hf_unsloth_Qwen3.5-4B-GGUF_Qwen3.5-4B-Q5_K_M.gguf",
16
16
  "type": "llm",
17
- "alias": "Qwen3 4B Q4_K_M",
18
- "modelItemCode": "local-qwen3-4b"
17
+ "alias": "Qwen 3.5 4B Q5_K_M",
18
+ "modelItemCode": "local-qwen35-4b"
19
19
  },
20
20
  {
21
21
  "provider": "local",
@@ -71,6 +71,13 @@
71
71
  "openai-custom": {
72
72
  "name": "OpenAI (自定义)",
73
73
  "models": [
74
+ {
75
+ "id": "qwen3.5:4b",
76
+ "name": "Qwen3.5 4B",
77
+ "types": [
78
+ "llm"
79
+ ]
80
+ },
74
81
  {
75
82
  "id": "gpt-4o",
76
83
  "name": "GPT-4o",
@@ -3,22 +3,16 @@
3
3
  "description": "推荐本地 GGUF 模型列表,用于「模型管理」备下载与已安装展示。版本升级时可在此增删改,以支持更合适的模型。",
4
4
  "models": [
5
5
  {
6
- "id": "hf:Qwen/Qwen3-4B-GGUF/Qwen3-4B-Q4_K_M.gguf",
7
- "name": "Qwen3 4B Q4_K_M",
6
+ "id": "hf:unsloth/Qwen3.5-4B-GGUF/Qwen3.5-4B-Q5_K_M.gguf",
7
+ "name": "Qwen 3.5 4B Q5_K_M",
8
8
  "type": "llm",
9
- "sizeHint": "~2.5GB"
9
+ "sizeHint": "~3.2GB"
10
10
  },
11
11
  {
12
- "id": "hf:Qwen/Qwen3-7B-GGUF/Qwen3-7B-Q4_K_M.gguf",
13
- "name": "Qwen3 7B Q4_K_M",
12
+ "id": "hf:unsloth/Qwen3.5-9B-GGUF/Qwen3.5-9B-Q5_K_M.gguf",
13
+ "name": "Qwen 3.5 9B Q5_K_M",
14
14
  "type": "llm",
15
- "sizeHint": "~4.5GB"
16
- },
17
- {
18
- "id": "hf:Qwen/Qwen3-14B-GGUF/Qwen3-14B-Q4_K_M.gguf",
19
- "name": "Qwen3 14B Q4_K_M",
20
- "type": "llm",
21
- "sizeHint": "~8.5GB"
15
+ "sizeHint": "~6.8GB"
22
16
  },
23
17
  {
24
18
  "id": "hf:ggml-org/embeddinggemma-300M-GGUF/embeddinggemma-300M-Q8_0.gguf",