docs: keep Chinese README and refresh screenshots
@@ -43,4 +43,4 @@ Standard dev commands are in `package.json` scripts and `README.md`. Key ones:
|
||||
- Do not call Gateway HTTP endpoints directly from renderer (`fetch('http://127.0.0.1:18789/...')` etc.). Use Main-process proxy channels (`hostapi:fetch`, `gateway:httpProxy`) to avoid CORS/env drift.
|
||||
- Transport policy is Main-owned and fixed as `WS -> HTTP -> IPC fallback`; renderer should not implement protocol switching UI/business logic.
|
||||
- **Comms-change checklist**: If your change touches communication paths (gateway events, runtime send/receive, delivery, or fallback), run `pnpm run comms:replay` and `pnpm run comms:compare` before pushing.
|
||||
- **Doc sync rule**: After any functional or architecture change, review `README.md`, `README.zh-CN.md`, and `README.ja-JP.md` for required updates; if behavior/flows/interfaces changed, update docs in the same PR/commit.
|
||||
- **Doc sync rule**: After any functional or architecture change, review the Chinese root `README.md`; if behavior/flows/interfaces changed, update docs in the same PR/commit.
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
# 智念助手
|
||||
|
||||
This repository has been customized from the ClawX base project into **智念助手**.
|
||||
|
||||
Please use the root [README.md](README.md) as the source of truth for the current product scope, development workflow, packaging flow, and pilot validation notes.
|
||||
18
README.md
@@ -29,6 +29,24 @@
|
||||
|
||||
当前阶段:`3.5` 内测研发阶段。
|
||||
|
||||
## 功能截图
|
||||
|
||||
### 登录与组织空间
|
||||
|
||||

|
||||
|
||||
### 工作台首页
|
||||
|
||||

|
||||
|
||||
### 应用中心
|
||||
|
||||

|
||||
|
||||
### 知识库
|
||||
|
||||

|
||||
|
||||
## 核心能力
|
||||
|
||||
- **账号登录与组织空间**:通过服务端账号密码登录,一个账号对应一个组织空间;本地可维护组织空间展示名称与桌面端用户名称。
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
# 智念助手
|
||||
|
||||
This repository has been customized from the ClawX base project into **智念助手**.
|
||||
|
||||
Please use the root [README.md](README.md) as the source of truth for the current product scope, development workflow, packaging flow, and pilot validation notes.
|
||||
@@ -1,5 +0,0 @@
|
||||
# 智念助手
|
||||
|
||||
本项目已经从 ClawX 基础工程定制为 **智念助手**。
|
||||
|
||||
请以根目录 [README.md](README.md) 为准,那里包含当前产品定位、功能范围、开发方式、打包方式和内测验证重点。
|
||||
@@ -32,8 +32,8 @@ const GATEWAY_FETCH_PRELOAD_SOURCE = `'use strict';
|
||||
delete flat['HTTP-Referer'];
|
||||
delete flat['x-title'];
|
||||
delete flat['X-Title'];
|
||||
flat['HTTP-Referer'] = 'https://claw-x.com';
|
||||
flat['X-Title'] = 'ClawX';
|
||||
flat['HTTP-Referer'] = 'https://git.nianxx.cn/wangxuming/NianToB';
|
||||
flat['X-Title'] = '智念助手';
|
||||
init.headers = flat;
|
||||
}
|
||||
return _f.call(globalThis, input, init);
|
||||
|
||||
@@ -176,13 +176,13 @@ export function createMenu(): void {
|
||||
{
|
||||
label: 'Documentation',
|
||||
click: async () => {
|
||||
await shell.openExternal('https://claw-x.com');
|
||||
await shell.openExternal('https://git.nianxx.cn/wangxuming/NianToB');
|
||||
},
|
||||
},
|
||||
{
|
||||
label: 'Report Issue',
|
||||
click: async () => {
|
||||
await shell.openExternal('https://github.com/ValueCell-ai/ClawX/issues');
|
||||
await shell.openExternal('https://git.nianxx.cn/wangxuming/NianToB');
|
||||
},
|
||||
},
|
||||
{ type: 'separator' },
|
||||
|
||||
@@ -83,8 +83,8 @@ export const PROVIDER_DEFINITIONS: ProviderDefinition[] = [
|
||||
api: 'openai-completions',
|
||||
apiKeyEnv: 'OPENROUTER_API_KEY',
|
||||
headers: {
|
||||
'HTTP-Referer': 'https://claw-x.com',
|
||||
'X-Title': 'ClawX',
|
||||
'HTTP-Referer': 'https://git.nianxx.cn/wangxuming/NianToB',
|
||||
'X-Title': '智念助手',
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -36,8 +36,8 @@
|
||||
delete flat['HTTP-Referer'];
|
||||
delete flat['x-title'];
|
||||
delete flat['X-Title'];
|
||||
flat['HTTP-Referer'] = 'https://claw-x.com';
|
||||
flat['X-Title'] = 'ClawX';
|
||||
flat['HTTP-Referer'] = 'https://git.nianxx.cn/wangxuming/NianToB';
|
||||
flat['X-Title'] = '智念助手';
|
||||
init.headers = flat;
|
||||
}
|
||||
return _f.call(globalThis, input, init);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
# OpenClaw CLI — managed by ClawX
|
||||
# Do not edit manually. Regenerated on ClawX updates.
|
||||
# OpenClaw CLI — managed by Zhinian Assistant
|
||||
# Do not edit manually. Regenerated on Zhinian Assistant updates.
|
||||
|
||||
# Resolve the real path of this script (follow symlinks)
|
||||
SCRIPT="$0"
|
||||
@@ -15,10 +15,10 @@ if [ "$(uname)" = "Darwin" ]; then
|
||||
# macOS: <App>.app/Contents/Resources/cli/openclaw
|
||||
# SCRIPT_DIR = .../Contents/Resources/cli
|
||||
CONTENTS_DIR="$(dirname "$(dirname "$SCRIPT_DIR")")"
|
||||
ELECTRON="$CONTENTS_DIR/MacOS/ClawX"
|
||||
ELECTRON="$CONTENTS_DIR/MacOS/智念助手"
|
||||
CLI="$CONTENTS_DIR/Resources/openclaw/openclaw.mjs"
|
||||
else
|
||||
# Linux: /opt/ClawX/resources/cli/openclaw
|
||||
# Linux: /opt/ZhinianAssistant/resources/cli/openclaw
|
||||
# SCRIPT_DIR = .../resources/cli
|
||||
INSTALL_DIR="$(dirname "$(dirname "$SCRIPT_DIR")")"
|
||||
ELECTRON="$INSTALL_DIR/clawx"
|
||||
@@ -26,23 +26,23 @@ else
|
||||
fi
|
||||
|
||||
if [ ! -f "$ELECTRON" ]; then
|
||||
echo "Error: ClawX executable not found at $ELECTRON" >&2
|
||||
echo "Please reinstall ClawX or remove this script: $0" >&2
|
||||
echo "Error: Zhinian Assistant executable not found at $ELECTRON" >&2
|
||||
echo "Please reinstall Zhinian Assistant or remove this script: $0" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
update)
|
||||
echo "openclaw is managed by ClawX (bundled version)."
|
||||
echo "openclaw is managed by Zhinian Assistant (bundled version)."
|
||||
echo ""
|
||||
echo "To update openclaw, update ClawX:"
|
||||
echo " Open ClawX > Settings > Check for Updates"
|
||||
echo " Or download the latest version from https://claw-x.com"
|
||||
echo "To update openclaw, update Zhinian Assistant:"
|
||||
echo " Open Zhinian Assistant > Settings > Check for Updates"
|
||||
echo " Or contact the administrator for the latest installer"
|
||||
echo ""
|
||||
ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" --version 2>/dev/null || true
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
export OPENCLAW_EMBEDDED_IN="ClawX"
|
||||
export OPENCLAW_EMBEDDED_IN="Zhinian Assistant"
|
||||
ELECTRON_RUN_AS_NODE=1 exec "$ELECTRON" "$CLI" "$@"
|
||||
|
||||
@@ -5,15 +5,15 @@ INSTALL_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
|
||||
case "$1" in
|
||||
update)
|
||||
echo "openclaw is managed by ClawX (bundled version)."
|
||||
echo "openclaw is managed by Zhinian Assistant (bundled version)."
|
||||
echo ""
|
||||
echo "To update openclaw, update ClawX:"
|
||||
echo " Open ClawX > Settings > Check for Updates"
|
||||
echo "To update openclaw, update Zhinian Assistant:"
|
||||
echo " Open Zhinian Assistant > Settings > Check for Updates"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
export OPENCLAW_EMBEDDED_IN="ClawX"
|
||||
export OPENCLAW_EMBEDDED_IN="Zhinian Assistant"
|
||||
NODE_EXE="$INSTALL_DIR/resources/bin/node.exe"
|
||||
OPENCLAW_ENTRY="$INSTALL_DIR/resources/openclaw/openclaw.mjs"
|
||||
|
||||
@@ -23,4 +23,4 @@ if [ -f "$NODE_EXE" ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
ELECTRON_RUN_AS_NODE=1 exec "$INSTALL_DIR/ClawX.exe" "$OPENCLAW_ENTRY" "$@"
|
||||
ELECTRON_RUN_AS_NODE=1 exec "$INSTALL_DIR/智念助手.exe" "$OPENCLAW_ENTRY" "$@"
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
setlocal
|
||||
|
||||
if /i "%1"=="update" (
|
||||
echo openclaw is managed by ClawX ^(bundled version^).
|
||||
echo openclaw is managed by Zhinian Assistant ^(bundled version^).
|
||||
echo.
|
||||
echo To update openclaw, update ClawX:
|
||||
echo Open ClawX ^> Settings ^> Check for Updates
|
||||
echo Or download the latest version from https://claw-x.com
|
||||
echo To update openclaw, update Zhinian Assistant:
|
||||
echo Open Zhinian Assistant ^> Settings ^> Check for Updates
|
||||
echo Or contact the administrator for the latest installer
|
||||
exit /b 0
|
||||
)
|
||||
|
||||
@@ -15,7 +15,7 @@ rem on non-English Windows (e.g. Chinese CP936). Save the previous codepage to r
|
||||
for /f "tokens=2 delims=:." %%a in ('chcp') do set /a "_CP=%%a" 2>nul
|
||||
chcp 65001 >nul 2>&1
|
||||
|
||||
set OPENCLAW_EMBEDDED_IN=ClawX
|
||||
set OPENCLAW_EMBEDDED_IN=Zhinian Assistant
|
||||
set "NODE_EXE=%~dp0..\bin\node.exe"
|
||||
set "OPENCLAW_ENTRY=%~dp0..\openclaw\openclaw.mjs"
|
||||
|
||||
@@ -29,7 +29,7 @@ if "%_USE_BUNDLED_NODE%"=="1" (
|
||||
"%NODE_EXE%" "%OPENCLAW_ENTRY%" %*
|
||||
) else (
|
||||
set ELECTRON_RUN_AS_NODE=1
|
||||
"%~dp0..\..\ClawX.exe" "%OPENCLAW_ENTRY%" %*
|
||||
"%~dp0..\..\智念助手.exe" "%OPENCLAW_ENTRY%" %*
|
||||
)
|
||||
set _EXIT=%ERRORLEVEL%
|
||||
|
||||
|
||||
BIN
resources/readme/01-login.png
Normal file
|
After Width: | Height: | Size: 151 KiB |
BIN
resources/readme/02-home.png
Normal file
|
After Width: | Height: | Size: 260 KiB |
BIN
resources/readme/04-app-center.png
Normal file
|
After Width: | Height: | Size: 210 KiB |
BIN
resources/readme/05-knowledge.png
Normal file
|
After Width: | Height: | Size: 188 KiB |
|
Before Width: | Height: | Size: 754 KiB |
|
Before Width: | Height: | Size: 622 KiB |
|
Before Width: | Height: | Size: 697 KiB |
|
Before Width: | Height: | Size: 656 KiB |
|
Before Width: | Height: | Size: 675 KiB |
|
Before Width: | Height: | Size: 840 KiB |
|
Before Width: | Height: | Size: 806 KiB |
|
Before Width: | Height: | Size: 651 KiB |
|
Before Width: | Height: | Size: 705 KiB |
|
Before Width: | Height: | Size: 679 KiB |
|
Before Width: | Height: | Size: 678 KiB |
|
Before Width: | Height: | Size: 828 KiB |
|
Before Width: | Height: | Size: 754 KiB |
|
Before Width: | Height: | Size: 622 KiB |
|
Before Width: | Height: | Size: 697 KiB |
|
Before Width: | Height: | Size: 656 KiB |
|
Before Width: | Height: | Size: 675 KiB |
|
Before Width: | Height: | Size: 840 KiB |
|
Before Width: | Height: | Size: 741 KiB |
|
Before Width: | Height: | Size: 627 KiB |
|
Before Width: | Height: | Size: 678 KiB |
|
Before Width: | Height: | Size: 657 KiB |
|
Before Width: | Height: | Size: 659 KiB |
|
Before Width: | Height: | Size: 834 KiB |
@@ -50,7 +50,7 @@
|
||||
DetailPrint `Closing running "${PRODUCT_NAME}"...`
|
||||
|
||||
# Kill ALL processes whose executable lives inside $INSTDIR.
|
||||
# This covers ClawX.exe (multiple Electron processes), openclaw-gateway.exe,
|
||||
# This covers the app executable (multiple Electron processes), openclaw-gateway.exe,
|
||||
# python.exe (skills runtime), uv.exe (package manager), and any other
|
||||
# child process that might hold file locks in the installation directory.
|
||||
#
|
||||
@@ -83,7 +83,7 @@
|
||||
${nsProcess::Unload}
|
||||
${endIf}
|
||||
|
||||
; Even if ClawX.exe was not detected as running, orphan child processes
|
||||
; Even if the app executable was not detected as running, orphan child processes
|
||||
; (python.exe, openclaw-gateway.exe, uv.exe, etc.) from a previous crash
|
||||
; or unclean shutdown may still hold file locks inside $INSTDIR.
|
||||
; Unconditionally kill any process whose executable lives in the install dir.
|
||||
@@ -92,7 +92,7 @@
|
||||
Pop $1
|
||||
|
||||
; Always kill known process names as a belt-and-suspenders approach.
|
||||
; PowerShell path-based kill may miss processes if the old ClawX was installed
|
||||
; PowerShell path-based kill may miss processes if the old app was installed
|
||||
; in a different directory than $INSTDIR (e.g., per-machine -> per-user migration).
|
||||
; taskkill is name-based and catches processes regardless of their install location.
|
||||
nsExec::ExecToStack 'taskkill /F /T /IM "${APP_EXECUTABLE_FILENAME}"'
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Post-installation script for ClawX on Linux
|
||||
# Post-installation script for Zhinian Assistant on Linux
|
||||
|
||||
set -e
|
||||
|
||||
@@ -14,20 +14,21 @@ if command -v gtk-update-icon-cache &> /dev/null; then
|
||||
gtk-update-icon-cache -q /usr/share/icons/hicolor || true
|
||||
fi
|
||||
|
||||
# Create symbolic link for ClawX app binary
|
||||
if [ -x /opt/ClawX/clawx ]; then
|
||||
ln -sf /opt/ClawX/clawx /usr/local/bin/clawx 2>/dev/null || true
|
||||
# Create symbolic link for Zhinian Assistant app binary
|
||||
APP_DIR="/opt/智念助手"
|
||||
if [ -x "$APP_DIR/zhinian-assistant" ]; then
|
||||
ln -sf "$APP_DIR/zhinian-assistant" /usr/local/bin/zhinian-assistant 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Create symbolic link for the app-managed openclaw CLI only when it will not
|
||||
# overwrite a user-managed OpenClaw installation.
|
||||
OPENCLAW_WRAPPER="/opt/ClawX/resources/cli/openclaw"
|
||||
OPENCLAW_WRAPPER="$APP_DIR/resources/cli/openclaw"
|
||||
if [ -f "$OPENCLAW_WRAPPER" ]; then
|
||||
chmod +x "$OPENCLAW_WRAPPER" 2>/dev/null || true
|
||||
if [ ! -e /usr/local/bin/openclaw ] || [ "$(readlink /usr/local/bin/openclaw 2>/dev/null || true)" = "$OPENCLAW_WRAPPER" ]; then
|
||||
ln -sf "$OPENCLAW_WRAPPER" /usr/local/bin/openclaw 2>/dev/null || true
|
||||
else
|
||||
echo "Keeping existing /usr/local/bin/openclaw; it is not managed by ClawX."
|
||||
echo "Keeping existing /usr/local/bin/openclaw; it is not managed by Zhinian Assistant."
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -37,9 +38,9 @@ fi
|
||||
# we rely on the AppArmor profile below instead, so 0755 is correct there.
|
||||
if ! { [[ -L /proc/self/ns/user ]] && unshare --user true; }; then
|
||||
# No user namespace support — fall back to SUID sandbox
|
||||
chmod 4755 '/opt/ClawX/chrome-sandbox' || true
|
||||
chmod 4755 "$APP_DIR/chrome-sandbox" || true
|
||||
else
|
||||
chmod 0755 '/opt/ClawX/chrome-sandbox' || true
|
||||
chmod 0755 "$APP_DIR/chrome-sandbox" || true
|
||||
fi
|
||||
|
||||
# Install AppArmor profile (Ubuntu 24.04+).
|
||||
@@ -50,8 +51,8 @@ fi
|
||||
# We first check if AppArmor is enabled and if the running version supports abi/4.0
|
||||
# (Ubuntu 22.04 does not; it runs fine without the profile, so we skip it there).
|
||||
if apparmor_status --enabled > /dev/null 2>&1; then
|
||||
APPARMOR_PROFILE_SOURCE='/opt/ClawX/resources/apparmor-profile'
|
||||
APPARMOR_PROFILE_TARGET='/etc/apparmor.d/clawx'
|
||||
APPARMOR_PROFILE_SOURCE="$APP_DIR/resources/apparmor-profile"
|
||||
APPARMOR_PROFILE_TARGET='/etc/apparmor.d/zhinian-assistant'
|
||||
if apparmor_parser --skip-kernel-load --debug "$APPARMOR_PROFILE_SOURCE" > /dev/null 2>&1; then
|
||||
cp -f "$APPARMOR_PROFILE_SOURCE" "$APPARMOR_PROFILE_TARGET"
|
||||
|
||||
@@ -64,4 +65,4 @@ if apparmor_status --enabled > /dev/null 2>&1; then
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "ClawX has been installed successfully."
|
||||
echo "Zhinian Assistant has been installed successfully."
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Post-removal script for ClawX on Linux
|
||||
# Post-removal script for Zhinian Assistant on Linux
|
||||
|
||||
set -e
|
||||
|
||||
# Remove symbolic links
|
||||
rm -f /usr/local/bin/clawx 2>/dev/null || true
|
||||
rm -f /usr/local/bin/zhinian-assistant 2>/dev/null || true
|
||||
|
||||
# Only remove the app-managed OpenClaw CLI wrapper. If the user had OpenClaw
|
||||
# installed separately, leave their command and ~/.openclaw data untouched.
|
||||
OPENCLAW_WRAPPER="/opt/ClawX/resources/cli/openclaw"
|
||||
OPENCLAW_WRAPPER="/opt/智念助手/resources/cli/openclaw"
|
||||
if [ "$(readlink /usr/local/bin/openclaw 2>/dev/null || true)" = "$OPENCLAW_WRAPPER" ]; then
|
||||
rm -f /usr/local/bin/openclaw 2>/dev/null || true
|
||||
fi
|
||||
@@ -25,9 +25,9 @@ if command -v gtk-update-icon-cache &> /dev/null; then
|
||||
fi
|
||||
|
||||
# Remove AppArmor profile
|
||||
APPARMOR_PROFILE_TARGET='/etc/apparmor.d/clawx'
|
||||
APPARMOR_PROFILE_TARGET='/etc/apparmor.d/zhinian-assistant'
|
||||
if [ -f "$APPARMOR_PROFILE_TARGET" ]; then
|
||||
rm -f "$APPARMOR_PROFILE_TARGET"
|
||||
fi
|
||||
|
||||
echo "ClawX has been removed."
|
||||
echo "Zhinian Assistant has been removed."
|
||||
|
||||