create-openclaw-bot 5.16.4 → 5.16.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/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  *Run one command → open the dashboard → your bot is live. Windows · macOS · Linux · VPS — Docker-powered, auto-installed for you.*
8
8
 
9
9
  <p align="center">
10
- <a href="https://github.com/tuanminhhole/openclaw-setup/releases"><img src="https://img.shields.io/badge/RELEASE-v5.16.4-0EA5E9?style=for-the-badge" alt="Version 5.16.4" /></a>
10
+ <a href="https://github.com/tuanminhhole/openclaw-setup/releases"><img src="https://img.shields.io/badge/RELEASE-v5.16.5-0EA5E9?style=for-the-badge" alt="Version 5.16.5" /></a>
11
11
  <a href="https://github.com/tuanminhhole/openclaw-setup?tab=MIT-1-ov-file"><img src="https://img.shields.io/badge/LICENSE-MIT-success?style=for-the-badge" alt="MIT License" /></a>
12
12
  <a href="https://www.npmjs.com/package/create-openclaw-bot"><img src="https://img.shields.io/npm/v/create-openclaw-bot?style=for-the-badge&label=CLI&color=2563EB&logo=npm&logoColor=white" alt="NPM Version" /></a>
13
13
  <a href="https://github.com/tuanminhhole/openclaw-setup/stargazers"><img src="https://img.shields.io/github/stars/tuanminhhole/openclaw-setup?style=for-the-badge&color=eab308&logo=github&logoColor=white" alt="GitHub Stars" /></a>
@@ -37,13 +37,23 @@
37
37
 
38
38
  ---
39
39
 
40
- ## 🆕 What's New in v5.16.4
40
+ ## 🆕 What's New in v5.16.5
41
41
 
42
- - 🚑 **The big OpenClaw 2026.8.1 catch-up the old setup had gone stale; this wave heals it all in one pass.** OpenClaw (the platform the bots run on) shipped a major upgrade and changed the rules: configs are strictly checked, data moved to a new home, several install commands were renamed. With the old setup that meant fresh installs could stall, running bots suddenly went **silent**, and the admin screen showed **0 bots** while the bot was alive. As of 5.16.3–5.16.4: fresh installs run smoothly on 2026.8.1 (Docker and native, Windows/macOS/Linux), and **existing machines heal themselves on upgrade** — stale config cleaned, data relocated, and the old file that could mute the bot retired automatically.
43
- - 🤖 **The bot stops claiming "I can't see the file"**: files sent through chat now come with clear directions for the AI even weaker models find them.
44
- - 🔁 **9Router (the AI model router) comes back on its own** after a server reboot or UI maintenance previously it could die silently and the bot lost its brain.
45
- - 🔄 **The in-app "Update" button really updates now**: on standard server installs it used to just restart the old version while reporting success — now it pulls the latest and relaunches itself.
46
- - 🧭 **One setup build manages both generations** (2026.7 and 2026.8) — renamed commands are tried the new way first with an automatic fallback, so nobody is forced to upgrade overnight.
42
+ - 🩹 **Native installs on OpenClaw 2026.8 are smooth from the first run** - this wave patches the remaining chain of issues measured on fresh customer machines: generated configs pass the new strict checks 100%, install steps run in the right order, and restarts/plugin installs no longer get blocked midway.
43
+ - 🔑 **9Router login works on Docker**: the new 9Router blocks the default password for "remote" access - and inside Docker every request counts as remote, so 123456 could never log in. It works now (still change the password once you're in).
44
+ - 🧹 **Deleting a project fully removes the old 9Router**: it used to keep running in the background holding the port, silently forking the next install onto a different port - now removal is clean and reinstalls land on the standard port.
45
+ - 🔌 **Native machines auto-install the web-search plugin** (DuckDuckGo) with its capability consent - no more boot loops over a missing nod.
46
+
47
+ <details>
48
+ <summary><b>Previous: What's new in v5.16.3</b></summary>
49
+
50
+ - 🚑 **The big OpenClaw 2026.8.1 catch-up**: fresh installs run smoothly (Docker and native, Windows/macOS/Linux), and existing machines heal themselves on upgrade - stale config cleaned, data relocated, and the old file that could mute the bot retired automatically.
51
+ - 🤖 **The bot stops claiming "I can't see the file"**: files sent through chat come with clear directions for the AI.
52
+ - 🔁 **9Router comes back on its own** after a server reboot or UI maintenance.
53
+ - 🔄 **The in-app "Update" button really updates** on standard server installs.
54
+ - 🧭 **One setup build manages both generations** (2026.7 and 2026.8).
55
+
56
+ </details>
47
57
 
48
58
  <details>
49
59
  <summary><b>Previous: What's new in v5.15.3</b></summary>
package/README.vi.md CHANGED
@@ -7,7 +7,7 @@
7
7
  *Chạy một lệnh → mở dashboard → bot lên sóng. Windows · macOS · Linux · VPS — chạy trên Docker, tự cài giúp bạn.*
8
8
 
9
9
  <p align="center">
10
- <a href="https://github.com/tuanminhhole/openclaw-setup/releases"><img src="https://img.shields.io/badge/RELEASE-v5.16.4-0EA5E9?style=for-the-badge" alt="Version 5.16.4" /></a>
10
+ <a href="https://github.com/tuanminhhole/openclaw-setup/releases"><img src="https://img.shields.io/badge/RELEASE-v5.16.5-0EA5E9?style=for-the-badge" alt="Version 5.16.5" /></a>
11
11
  <a href="https://github.com/tuanminhhole/openclaw-setup?tab=MIT-1-ov-file"><img src="https://img.shields.io/badge/LICENSE-MIT-success?style=for-the-badge" alt="MIT License" /></a>
12
12
  <a href="https://www.npmjs.com/package/create-openclaw-bot"><img src="https://img.shields.io/npm/v/create-openclaw-bot?style=for-the-badge&label=CLI&color=2563EB&logo=npm&logoColor=white" alt="NPM Version" /></a>
13
13
  <a href="https://github.com/tuanminhhole/openclaw-setup/stargazers"><img src="https://img.shields.io/github/stars/tuanminhhole/openclaw-setup?style=for-the-badge&color=eab308&logo=github&logoColor=white" alt="GitHub Stars" /></a>
@@ -37,13 +37,23 @@
37
37
 
38
38
  ---
39
39
 
40
- ## 🆕 Có gì mới trong v5.16.4
40
+ ## 🆕 Có gì mới trong v5.16.5
41
41
 
42
- - 🚑 **Theo kịp OpenClaw 2026.8.1 bản setup đã lỗi thời, đợt này chữa hết một lượt.** OpenClaw (nền tảng chạy bot) nâng cấp lớn đổi nhiều "luật chơi": file cấu hình bị soát khắt khe hơn, chỗ lưu dữ liệu dời đi, vài lệnh cài đặt đổi tên. Với bản setup cũ, hệ quả cài bot mới thể đứng giữa chừng, bot đang chạy bỗng **im lặng không trả lời**, màn hình quản trị hiện **0 bot** dù bot vẫn sống. Từ 5.16.3–5.16.4: cài mới chạy mượt trên 2026.8.1 (đủ Docker lẫn native, Windows/macOS/Linux), **máy cũ tự được chữa khi nâng cấp** — tự dọn cấu hình lỗi thời, tự dời dữ liệu, tự gỡ file cũ từng khiến bot "câm".
43
- - 🤖 **Bot hết chối "không thấy file"**: file khách gửi qua chat giờ được chỉ đường tận nơi cho AI kể cả model yếu cũng tìm được.
44
- - 🔁 **9Router (bộ định tuyến model AI) tự sống lại** sau khi máy chủ khởi động lại hay giao diện bảo trì trước đây thể chết im không ai hay, bot mất não.
45
- - 🔄 **Nút "Cập nhật" trong giao diện giờ cập nhật thật**: trên máy chủ cài kiểu chuẩn, trước đây nút chỉ khởi động lại bản vẫn báo thành công — giờ bấm là setup tự kéo bản mới về rồi tự khởi động lại.
46
- - 🧭 **Một bản setup quản được cả máy đời cũ (2026.7) lẫn đời mới (2026.8)** — lệnh nào openclaw đổi tên thì setup tự thử tên mới rồi lùi về tên cũ, không bắt khách nâng cấp gấp.
42
+ - 🩹 **Cài native trên OpenClaw 2026.8 mượt từ phát đầu** - đợt này nốt chuỗi lỗi đo được khi dựng máy khách mới: cấu hình sinh ra sạch 100% với bộ soát khắt khe của OpenClaw mới, các bước cài tự chạy đúng thứ tự, mọi thao tác khởi động lại/cài plugin không còn bị chặn giữa chừng.
43
+ - 🔑 **Đăng nhập 9Router hoạt động trên Docker**: bản 9Router mới chặn mật khẩu mặc định với truy cập "từ xa" - trong Docker thì mọi truy cập đều bị tính là từ xa, nên trước đây không cách nào vào được bằng 123456. Giờ đăng nhập bình thường (vào rồi vẫn nên đổi mật khẩu).
44
+ - 🧹 **Xoá project gỡ sạch 9Router cũ**: trước đây 9Router còn chạy ngầm giữ cổng, làm lần cài mới tự tách sang cổng khác không ai hay - giờ xoá sạch, cài lại đúng cổng chuẩn.
45
+ - 🔌 **Máy native tự cài đủ plugin tìm kiếm web** (DuckDuckGo) kèm xác nhận quyền - hết cảnh bot khởi động vòng lặp thiếu một cái gật đầu.
46
+
47
+ <details>
48
+ <summary><b>Trước đó: Có gì mới trong v5.16.3</b></summary>
49
+
50
+ - 🚑 **Theo kịp OpenClaw 2026.8.1**: cài mới chạy mượt (đủ Docker lẫn native, Windows/macOS/Linux), máy cũ tự được chữa khi nâng cấp - tự dọn cấu hình lỗi thời, tự dời dữ liệu, tự gỡ file cũ từng khiến bot "câm".
51
+ - 🤖 **Bot hết chối "không thấy file"**: file khách gửi qua chat được chỉ đường tận nơi cho AI.
52
+ - 🔁 **9Router tự sống lại** sau khi máy chủ khởi động lại hay giao diện bảo trì.
53
+ - 🔄 **Nút "Cập nhật" trong giao diện cập nhật thật** trên máy chủ cài kiểu chuẩn.
54
+ - 🧭 **Một bản setup quản được cả máy đời cũ (2026.7) lẫn đời mới (2026.8)**.
55
+
56
+ </details>
47
57
 
48
58
  <details>
49
59
  <summary><b>Trước đó: Có gì mới trong v5.15.3</b></summary>
@@ -48,7 +48,11 @@ function specMajorMinor(spec) {
48
48
  }
49
49
  let hostOcMajorMinorCache = null;
50
50
  async function hostOpenclawMajorMinor() {
51
- if (hostOcMajorMinorCache !== null) return hostOcMajorMinorCache;
51
+ // Cache only a REAL version: during bot creation this is first called before
52
+ // `npm i -g openclaw` has run, and caching that 0 forever made prepareNativeStateHome
53
+ // skip the 2026.8 state-home move — daemon install then failed with "non-default
54
+ // state dir" (measured on a fresh native install, 03/09/2026).
55
+ if (hostOcMajorMinorCache) return hostOcMajorMinorCache;
52
56
  const r = await runCapture('openclaw', ['--version'], { shell: false }).catch(() => null);
53
57
  hostOcMajorMinorCache = specMajorMinor(r && (r.stdout || r.stderr));
54
58
  return hostOcMajorMinorCache;
@@ -2939,7 +2943,20 @@ function migrationLeaseDeadline(text = '') {
2939
2943
  async function ocDaemon(projectDir, verb, extraArgs = []) {
2940
2944
  const args = ['daemon', verb, ...extraArgs];
2941
2945
  sendLog(`$ openclaw ${args.join(' ')}`);
2942
- const out = await runCapture('openclaw', args, { cwd: projectDir, env: nativeEnv(projectDir), shell: false, timeout: 120000 });
2946
+ // openclaw 2026.8.x refuses EVERY `daemon *` verb (not just install) while OPENCLAW_HOME is
2947
+ // set — "service management skipped: non-default state dir" (measured 03/09/2026: the
2948
+ // post-plugin-install restart failed on a fresh native host). On the 2026.8 layout the
2949
+ // state already lives at ~/.openclaw, so run daemon verbs with the plain account HOME and
2950
+ // no OPENCLAW_* overrides; STOP even suggests --force for the operator gateway, so pass it.
2951
+ let env = nativeEnv(projectDir);
2952
+ if ((await hostOpenclawMajorMinor()) >= 202608) {
2953
+ env = { ...env };
2954
+ delete env.OPENCLAW_HOME;
2955
+ delete env.OPENCLAW_STATE_DIR;
2956
+ env.HOME = os.homedir();
2957
+ }
2958
+ if (verb === 'stop' && !extraArgs.includes('--force')) args.push('--force');
2959
+ const out = await runCapture('openclaw', args, { cwd: projectDir, env, shell: false, timeout: 120000 });
2943
2960
  const text = `${out.stdout || ''}\n${out.stderr || ''}`;
2944
2961
  for (const line of text.split(/\r?\n/).map((l) => l.trimEnd()).filter(Boolean)) sendLog(line);
2945
2962
  return { ...out, text };
@@ -3274,6 +3291,10 @@ async function ensureNativePlugins(projectDir, { restart = false } = {}) {
3274
3291
  // actually declares the channel (mirrors docker-gen's `if (zaloBackend === 'zalo-connect')`).
3275
3292
  const wanted = new Set(['learning-memory']);
3276
3293
  if (cfg?.channels?.[ZALO_CHANNEL_ID] || cfg?.plugins?.entries?.[ZALO_PLUGIN_ID]) wanted.add(ZALO_PLUGIN_ID);
3294
+ // openclaw >=2026.8 unbundled duckduckgo AND refuses to report ready while the config
3295
+ // declares a plugin that lacks capability consent — the docker entrypoint ensures it,
3296
+ // native must too (measured 03/09/2026: fresh install crash-looped on this).
3297
+ if (cfg?.plugins?.entries?.duckduckgo) wanted.add('duckduckgo');
3277
3298
  const installed = [];
3278
3299
  for (const id of wanted) {
3279
3300
  const dir = join(projectDir, '.openclaw', 'extensions', id);
@@ -3492,12 +3513,13 @@ async function startNativeRuntime({ projectDir, osChoice = '', gatewayPort, rout
3492
3513
  // Plugins BEFORE the gateway's first boot — the container entrypoint installs them ahead of the
3493
3514
  // gateway for the same reason: a gateway that boots with its plugins already on disk loads them
3494
3515
  // straight away, needs no follow-up restart, and prints no "plugin not found" warnings.
3495
- await ensureNativePlugins(projectDir).catch((e) => sendLog(`[native] plugin bootstrap skipped: ${e.message}`));
3496
-
3497
- // Config migrations BEFORE the first boot toosame ordering the container entrypoint uses
3498
- // (migrate, then start), so an adopted pre-existing project boots on the upgraded config.
3516
+ // Config migrations FIRST: `openclaw plugins install` validates the config, so a config
3517
+ // still carrying pre-2026.8 keys makes every plugin install fail before migrations ran
3518
+ // (measured on a fresh native install, 03/09/2026learning-memory refused to install).
3499
3519
  await runNativeConfigMigrations(projectDir).catch(() => {});
3500
3520
 
3521
+ await ensureNativePlugins(projectDir).catch((e) => sendLog(`[native] plugin bootstrap skipped: ${e.message}`));
3522
+
3501
3523
  // Managed service = auto-restart (KeepAlive/Restart=always) and start-at-login, the native
3502
3524
  // equivalent of docker's `restart: always`. --force so re-running install updates the port.
3503
3525
  const env = nativeEnv(projectDir);
@@ -3544,6 +3566,13 @@ async function removeNativeRuntime(projectDir) {
3544
3566
  if (!isNativeProject(projectDir)) return false;
3545
3567
  const env = nativeEnv(projectDir);
3546
3568
  await run('openclaw', ['daemon', 'uninstall'], { cwd: projectDir, env }).catch((e) => sendLog(`[native] daemon uninstall: ${e.message}`));
3569
+ // The 9router systemd unit has Restart=always: killing the listener alone brings it (or an
3570
+ // orphaned child) back, the port stays busy, and the NEXT install silently forks off to a
3571
+ // new router port that no ssh tunnel or oc-web table points at (measured 03/09/2026).
3572
+ if (process.platform === 'linux') {
3573
+ await run('systemctl', ['--user', 'disable', '--now', 'openclaw-9router.service'], {}).catch(() => {});
3574
+ await run('systemctl', ['--user', 'disable', '--now', 'openclaw-9router-sync.service'], {}).catch(() => {});
3575
+ }
3547
3576
  const routerPort = (readNativeMeta(projectDir) || {}).routerPort || NATIVE_DEFAULT_ROUTER_PORT;
3548
3577
  await killListenerOnPort(routerPort);
3549
3578
  return true;
@@ -6088,6 +6117,8 @@ const PLUGIN_NPM_SPEC = {
6088
6117
  // learning-memory ships on ClawHub as `openclaw-learning-memory` (manifest id is
6089
6118
  // `learning-memory`, used as the config key). Install by the full package spec.
6090
6119
  'learning-memory': 'clawhub:openclaw-learning-memory',
6120
+ // duckduckgo is openclaw's own external plugin on npm, not a ClawHub package.
6121
+ 'duckduckgo': '@openclaw/duckduckgo-plugin',
6091
6122
  };
6092
6123
  const pluginInstallSpec = (id) => PLUGIN_NPM_SPEC[id] || `clawhub:${id}`;
6093
6124
 
@@ -141,7 +141,9 @@
141
141
  // and poisons the session until a manual reset. 12k chars (~3k tokens) per
142
142
  // result keeps per-source content substantial while making that runaway
143
143
  // impossible. Applies to persisted results + overflow recovery.
144
- contextLimits: { toolResultMaxChars: 12000 },
144
+ // No contextLimits.toolResultMaxChars: openclaw 2026.8.x strict schema rejects the
145
+ // key outright (measured on a fresh native install, 03/09/2026) — the runaway-turn
146
+ // protection it provided is handled by the 2026.8 runtime itself.
145
147
  // Agent-TURN budget (seconds). 120 was too short for multi-step cloud turns (OCR +
146
148
  // file gen + tool calls). 900 = OpenClaw's own native default and the practical max
147
149
  // we use. This is the turn budget — a DIFFERENT layer from 9router's per-request
@@ -562,6 +562,10 @@ ${indentBlock(docker9RouterEntrypointScript, 8)}
562
562
  - PORT=${routerPort}
563
563
  - HOSTNAME=0.0.0.0
564
564
  - CI=true
565
+ # 9router blocks the default password for "remote" access, and inside Docker every
566
+ # host request arrives via the bridge network, so it always counts as remote — without
567
+ # this the user can NEVER log in with the documented default (measured 02/09/2026).
568
+ - INITIAL_PASSWORD=123456
565
569
  volumes:
566
570
  - 9router-data:/root/.9router
567
571
  - ./sync.js:/tmp/sync.js:ro
@@ -656,6 +660,10 @@ ${indentBlock(docker9RouterEntrypointScript, 8)}
656
660
  - PORT=${routerPort}
657
661
  - HOSTNAME=0.0.0.0
658
662
  - CI=true
663
+ # 9router blocks the default password for "remote" access, and inside Docker every
664
+ # host request arrives via the bridge network, so it always counts as remote — without
665
+ # this the user can NEVER log in with the documented default (measured 02/09/2026).
666
+ - INITIAL_PASSWORD=123456
659
667
  volumes:
660
668
  - 9router-data:/root/.9router
661
669
  - ./sync.js:/tmp/sync.js:ro
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-openclaw-bot",
3
- "version": "5.16.4",
3
+ "version": "5.16.5",
4
4
  "description": "Interactive CLI installer for OpenClaw Bot",
5
5
  "main": "dist/cli.js",
6
6
  "bin": {