create-openclaw-bot 5.8.4 → 5.8.8

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/dist/web/app.js CHANGED
@@ -829,6 +829,7 @@ function botSkillsPanel() {
829
829
  { id: 'cron', title: 'Cron', desc: 'Native scheduler (SQLite) — cron guide in TOOLS.md' },
830
830
  { id: 'image-gen', title: 'Tạo ảnh Infographic', desc: 'Tạo ảnh infographic, poster tự động qua 9Router' },
831
831
  { id: 'web-search', title: 'Web Search', desc: 'Tìm kiếm web thời gian thực (DuckDuckGo)' },
832
+ { id: 'sticker-mention', title: 'Sticker & Auto-Tag (Zalo)', desc: 'Tự động tag người gửi và gửi sticker Zalo theo từ khóa' },
832
833
  ];
833
834
  const plugins = [
834
835
  { id: 'openclaw-browser-automation', title: 'openclaw-browser-automation', desc: 'Smart Search + Browser (headless & Chrome thật)' },
@@ -896,10 +897,10 @@ function wireTab() {
896
897
  state.zaloLoginLines = [t('Đang chuẩn bị quét mã Zalo...', 'Preparing Zalo QR login...')];
897
898
  render();
898
899
  try {
899
- await api('/api/zalo/login', { method: 'POST' });
900
+ await api('/api/zalo/login', { method: 'POST', body: { agentId: state.activeBotId } });
900
901
  } catch (err) {
901
902
  state.zaloLoginOpen = false;
902
- state.confirmModal = { title: t('L?i ??ng nh?p','Login error'), message: err.message, okText: t('??ng','Close'), onConfirm: () => {} };
903
+ state.confirmModal = { title: t('Lỗi đăng nhập','Login error'), message: err.message, okText: t('Đóng','Close'), onConfirm: () => {} };
903
904
  render();
904
905
  }
905
906
  }));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-openclaw-bot",
3
- "version": "5.8.4",
3
+ "version": "5.8.8",
4
4
  "description": "Interactive CLI installer for OpenClaw Bot",
5
5
  "main": "dist/cli.js",
6
6
  "bin": {
@@ -1,159 +0,0 @@
1
- // @ts-nocheck
2
- /* eslint-disable no-undef, no-unused-vars */
3
- /**
4
- * @fileoverview Part of the OpenClaw Setup Wizard IIFE bundle.
5
- * This file is concatenated (not imported) — globals are shared via setup.js IIFE scope.
6
- * Do NOT add import/export statements. Edit, then run: node build.mjs
7
- *
8
- * @global {object} state - Wizard UI state
9
- * @global {object} PROVIDERS - AI provider registry
10
- * @global {Array} SKILLS - Available skills
11
- * @global {Array} PLUGINS - Available plugins
12
- * @global {object} CHANNELS - Channel definitions
13
- * @global {boolean} isVi - Vietnamese language mode
14
- * @global {object} provider - Current primary provider config
15
- * @global {boolean} isMultiBot - Multi-bot mode flag
16
- * @global {boolean} hasBrowser - Browser plugin selected
17
- * @global {boolean} is9Router - 9Router proxy mode
18
- * @global {string} projectDir - Output project directory path
19
- * @global {Function} getGatewayAllowedOrigins
20
- */
21
- // ========== Available Skills (ClawHub registry — agent capabilities) ==========
22
- const SKILLS = [
23
- {
24
- id: 'memory',
25
- name: 'Long-term Memory ⭐(Khuyên dùng)',
26
- icon: '🧠',
27
- descVi: 'Nhớ hội thoại xuyên phiên, context dài hạn', descEn: 'Cross-session memory, long-term context',
28
- slug: 'memory',
29
- },
30
- {
31
- id: 'scheduler',
32
- name: 'Native Cron Scheduler ⭐(Khuyên dùng)',
33
- icon: '⏰',
34
- descVi: 'Gọi Cron gốc trên nền tảng (không tải qua HUB)', descEn: 'Native Cron background jobs (No skill download)',
35
- },
36
- {
37
- id: 'rag',
38
- name: 'RAG / Knowledge Base',
39
- icon: '📚',
40
- descVi: 'Chat với tài liệu, file PDF, codebase', descEn: 'Chat with docs, PDFs, codebase',
41
- slug: 'rag',
42
- noteVi: 'Đặt file vào thư mục .openclaw/docs/', noteEn: 'Put files in .openclaw/docs/ folder',
43
- },
44
- {
45
- id: 'image-gen',
46
- name: 'Tạo ảnh Infographic',
47
- icon: '🎨',
48
- descVi: 'Tạo ảnh infographic, poster tự động qua 9Router', descEn: 'Generate infographic & poster images via 9Router',
49
- slug: 'image-gen',
50
- },
51
- {
52
- id: 'code-interpreter',
53
- name: 'Code Interpreter',
54
- icon: '💻',
55
- descVi: 'Chạy code Python/JS trong sandbox', descEn: 'Run Python/JS code in sandbox',
56
- slug: 'code-interpreter',
57
- },
58
- {
59
- id: 'email',
60
- name: 'Email Assistant',
61
- icon: '📧',
62
- descVi: 'Quản lý, soạn, tóm tắt email (Gmail, Outlook...)', descEn: 'Manage, compose, summarize emails (Gmail, Outlook...)',
63
- slug: 'email-assistant',
64
- noteVi: 'Cần cấu hình SMTP trong .env', noteEn: 'Requires SMTP configuration in .env',
65
- envVars: ['SMTP_HOST=smtp.gmail.com', 'SMTP_PORT=587', 'SMTP_USER=<your_email>', 'SMTP_PASS=<your_app_password>'],
66
- },
67
- {
68
- id: 'web-search',
69
- name: 'Web Search',
70
- icon: '🔍',
71
- descVi: 'Tìm kiếm web thời gian thực (DuckDuckGo) — không cần API key', descEn: 'Real-time web search (DuckDuckGo) — no API key needed',
72
- slug: 'web-search',
73
- },
74
- {
75
- id: 'notion',
76
- name: 'Notion',
77
- icon: '📓',
78
- descVi: 'Tạo, chỉnh sửa trang và database Notion', descEn: 'Create and edit Notion pages and databases',
79
- slug: 'notion',
80
- noteVi: 'Cần Notion Integration Token', noteEn: 'Requires Notion Integration Token',
81
- envVars: ['NOTION_API_KEY=<your_notion_integration_token>'],
82
- },
83
- {
84
- id: 'slack',
85
- name: 'Slack',
86
- icon: '🗨️',
87
- descVi: 'Gửi tin, react, ghim tin nhắn trong Slack', descEn: 'Send messages, react, pin items in Slack',
88
- slug: 'slack',
89
- noteVi: 'Cần Slack Bot Token', noteEn: 'Requires Slack Bot Token',
90
- envVars: ['SLACK_BOT_TOKEN=<your_slack_bot_token>'],
91
- },
92
- ];
93
-
94
- function providerSupportsMemoryEmbeddings(providerKey) {
95
- const provider = PROVIDERS[providerKey];
96
- if (!provider) return false;
97
- return !!provider.supportsEmbeddings;
98
- }
99
-
100
- function getSkillDisplayName(skill, providerKey, lang) {
101
- const normalizedName = String(skill.name || '')
102
- .replace(/\s*[⭐🌟]\s*\((Khuyên dùng|Recommended)\)\s*/gi, '')
103
- .replace(/\s*[⭐🌟]\s*(Khuyên dùng|Recommended)\s*/gi, '')
104
- .trim();
105
- if (skill.id === 'memory') {
106
- return 'Long-term Memory';
107
- }
108
- return normalizedName;
109
- }
110
-
111
- function getSkillBadge(skill, providerKey, lang) {
112
- const isVi = lang !== 'en';
113
- if (skill.id === 'memory' && providerSupportsMemoryEmbeddings(providerKey)) {
114
- return {
115
- text: isVi ? 'Khuyên dùng' : 'Recommended',
116
- className: 'plugin-card__badge plugin-card__badge--recommended'
117
- };
118
- }
119
- if (skill.id === 'scheduler') {
120
- return {
121
- text: isVi ? 'Khuyên dùng' : 'Recommended',
122
- className: 'plugin-card__badge plugin-card__badge--recommended'
123
- };
124
- }
125
- return null;
126
- }
127
-
128
- function getSkillExtraNote(skill, providerKey, lang) {
129
- const isVi = lang !== 'en';
130
- const baseNote = isVi ? (skill.noteVi || skill.note || '') : (skill.noteEn || skill.note || '');
131
- if (skill.id !== 'memory' || providerSupportsMemoryEmbeddings(providerKey)) {
132
- return baseNote;
133
- }
134
- const providerName = PROVIDERS[providerKey]?.name || providerKey;
135
- const memoryNote = isVi
136
- ? `Provider hiện tại (${providerName}) chưa có đường embeddings được xác nhận trong wizard, nên memory search sẽ không được gắn khuyên dùng.`
137
- : `The current provider (${providerName}) does not have a confirmed embeddings path in the wizard, so memory search is not marked recommended.`;
138
- return baseNote ? `${baseNote} ${memoryNote}` : memoryNote;
139
- }
140
-
141
- function escapeHtml(text) {
142
- return String(text || '')
143
- .replace(/&/g, '&amp;')
144
- .replace(/</g, '&lt;')
145
- .replace(/>/g, '&gt;')
146
- .replace(/"/g, '&quot;')
147
- .replace(/'/g, '&#39;');
148
- }
149
-
150
- function getSkillTooltipContent(skill, providerKey, lang) {
151
- const desc = lang === 'vi' ? (skill.descVi || skill.desc || '') : (skill.descEn || skill.desc || '');
152
- const note = getSkillExtraNote(skill, providerKey, lang);
153
- return [desc, note].filter(Boolean).join('\n\n');
154
- }
155
-
156
- function getPluginTooltipContent(plugin, lang) {
157
- return lang === 'vi' ? (plugin.descVi || plugin.desc || '') : (plugin.descEn || plugin.desc || '');
158
- }
159
-