Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { Chat } from './pages/Chat';
import { Channels } from './pages/Channels';
import { Skills } from './pages/Skills';
import { Cron } from './pages/Cron';
import { Agents } from './pages/Agents';
import { Settings } from './pages/Settings';
import { Setup } from './pages/Setup';
import { useSettingsStore } from './stores/settings';
Expand Down Expand Up @@ -162,6 +163,7 @@ function App() {
<Route path="/dashboard" element={<Dashboard />} />
<Route path="/channels" element={<Channels />} />
<Route path="/skills" element={<Skills />} />
<Route path="/agents" element={<Agents />} />
<Route path="/cron" element={<Cron />} />
<Route path="/settings/*" element={<Settings />} />
</Route>
Expand Down
2 changes: 2 additions & 0 deletions src/components/layout/Sidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
Radio,
Puzzle,
Clock,
Users,
Settings,
ChevronLeft,
ChevronRight,
Expand Down Expand Up @@ -109,6 +110,7 @@ export function Sidebar() {
const [sessionToDelete, setSessionToDelete] = useState<{ key: string; label: string } | null>(null);

const navItems = [
{ to: '/agents', icon: <Users className="h-5 w-5" />, label: t('sidebar.agents') },
{ to: '/cron', icon: <Clock className="h-5 w-5" />, label: t('sidebar.cronTasks') },
{ to: '/skills', icon: <Puzzle className="h-5 w-5" />, label: t('sidebar.skills') },
{ to: '/channels', icon: <Radio className="h-5 w-5" />, label: t('sidebar.channels') },
Expand Down
8 changes: 7 additions & 1 deletion src/i18n/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import enChannels from './locales/en/channels.json';
import enSkills from './locales/en/skills.json';
import enCron from './locales/en/cron.json';
import enSetup from './locales/en/setup.json';
import enAgents from './locales/en/agents.json';

// ZH
import zhCommon from './locales/zh/common.json';
Expand All @@ -20,6 +21,7 @@ import zhChannels from './locales/zh/channels.json';
import zhSkills from './locales/zh/skills.json';
import zhCron from './locales/zh/cron.json';
import zhSetup from './locales/zh/setup.json';
import zhAgents from './locales/zh/agents.json';

// JA
import jaCommon from './locales/ja/common.json';
Expand All @@ -30,6 +32,7 @@ import jaChannels from './locales/ja/channels.json';
import jaSkills from './locales/ja/skills.json';
import jaCron from './locales/ja/cron.json';
import jaSetup from './locales/ja/setup.json';
import jaAgents from './locales/ja/agents.json';

export const SUPPORTED_LANGUAGES = [
{ code: 'en', label: 'English' },
Expand All @@ -49,6 +52,7 @@ const resources = {
skills: enSkills,
cron: enCron,
setup: enSetup,
agents: enAgents,
},
zh: {
common: zhCommon,
Expand All @@ -59,6 +63,7 @@ const resources = {
skills: zhSkills,
cron: zhCron,
setup: zhSetup,
agents: zhAgents,
},
ja: {
common: jaCommon,
Expand All @@ -69,6 +74,7 @@ const resources = {
skills: jaSkills,
cron: jaCron,
setup: jaSetup,
agents: jaAgents,
},
};

Expand All @@ -79,7 +85,7 @@ i18n
lng: 'en', // will be overridden by settings store
fallbackLng: 'en',
defaultNS: 'common',
ns: ['common', 'settings', 'dashboard', 'chat', 'channels', 'skills', 'cron', 'setup'],
ns: ['common', 'settings', 'dashboard', 'chat', 'channels', 'skills', 'cron', 'setup', 'agents'],
interpolation: {
escapeValue: false, // React already escapes
},
Expand Down
77 changes: 77 additions & 0 deletions src/i18n/locales/en/agents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
{
"title": "Agent Management",
"subtitle": "Create, edit, delete, and configure agents directly in the UI.",
"refresh": "Refresh",
"gatewayWarning": "Gateway is not running. Start Gateway first to manage agents.",
"form": {
"createTitle": "Create Agent",
"createDescription": "Fill in name, workspace, model, and identity fields to create a new agent.",
"editTitle": "Edit Agent",
"editDescription": "Update base info and model settings for the selected agent.",
"nameLabel": "Agent Name",
"namePlaceholder": "e.g. support",
"workspaceLabel": "Workspace Directory",
"workspacePlaceholder": "e.g. ~/.openclaw/workspace-support",
"workspaceLoadError": "Unable to load this agent's workspace path. Retry loading before saving.",
"modelLabel": "Model ID (optional)",
"modelPlaceholder": "e.g. openai/gpt-4.1",
"emojiLabel": "Emoji (optional)",
"emojiPlaceholder": "e.g. 🤖",
"avatarLabel": "Avatar (optional)",
"avatarPlaceholder": "e.g. robot",
"submitting": "Submitting...",
"createButton": "Create Agent",
"saveButton": "Save Changes",
"cancelEdit": "Cancel",
"editingHint": "Currently editing: {{id}}"
},
"list": {
"title": "Agents",
"description": "{{count}} agents · session scope: {{scope}}",
"empty": "No agents found yet.",
"defaultBadge": "Default",
"mainBadge": "Main Key",
"edit": "Edit",
"configureFiles": "Configure Files",
"delete": "Delete",
"deleting": "Deleting..."
},
"files": {
"title": "Agent Files",
"description": "View and edit workspace files such as AGENTS.md, SOUL.md, and IDENTITY.md.",
"noAgent": "No agent available to configure.",
"agentLabel": "Select Agent",
"workspaceLabel": "Workspace Path",
"openWorkspace": "Open Folder",
"reload": "Reload",
"loading": "Loading...",
"missingBadge": "Missing",
"editorLabel": "Editing: {{file}}",
"saving": "Saving...",
"save": "Save File",
"unsavedHint": "You have unsaved changes",
"savedHint": "All changes saved"
},
"confirmDelete": {
"title": "Delete Agent",
"message": "Delete agent \"{{id}}\" and its workspace files? This action cannot be undone.",
"confirm": "Delete",
"cancel": "Cancel"
},
"toast": {
"created": "Agent \"{{id}}\" created",
"createdWithWarnings": "Agent \"{{id}}\" was created, but some follow-up settings failed to sync",
"createFailed": "Failed to create agent",
"modelUpdateFailed": "Failed to update model settings",
"identitySyncFailed": "Failed to sync identity fields",
"updated": "Agent \"{{id}}\" updated",
"updateFailed": "Failed to update agent",
"deleted": "Agent \"{{id}}\" deleted",
"deleteFailed": "Failed to delete agent",
"fileSaved": "Saved \"{{file}}\"",
"fileSaveFailed": "Failed to save file",
"fileLoadFailed": "Failed to load file",
"workspaceLoadFailed": "Failed to load workspace path",
"workspaceOpenFailed": "Failed to open workspace"
}
}
3 changes: 2 additions & 1 deletion src/i18n/locales/en/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"sidebar": {
"chat": "Chat",
"newChat": "New Chat",
"agents": "Agents",
"cronTasks": "Cron Tasks",
"skills": "Skills",
"channels": "Channels",
Expand Down Expand Up @@ -49,4 +50,4 @@
"notRunningDesc": "The OpenClaw Gateway needs to be running to use this feature. It will start automatically, or you can start it from Settings.",
"warning": "Gateway is not running."
}
}
}
77 changes: 77 additions & 0 deletions src/i18n/locales/ja/agents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
{
"title": "エージェント管理",
"subtitle": "UI 上でエージェントの作成・編集・削除とファイル設定を完結できます。",
"refresh": "更新",
"gatewayWarning": "ゲートウェイが停止中です。先にゲートウェイを起動してください。",
"form": {
"createTitle": "エージェントを作成",
"createDescription": "名前、ワークスペース、モデル、ID 情報を入力して新規作成します。",
"editTitle": "エージェントを編集",
"editDescription": "選択したエージェントの基本情報とモデル設定を更新します。",
"nameLabel": "エージェント名",
"namePlaceholder": "例: support",
"workspaceLabel": "ワークスペースディレクトリ",
"workspacePlaceholder": "例: ~/.openclaw/workspace-support",
"workspaceLoadError": "このエージェントのワークスペースパスを読み込めません。再読み込み後に保存してください。",
"modelLabel": "モデル ID(任意)",
"modelPlaceholder": "例: openai/gpt-4.1",
"emojiLabel": "絵文字(任意)",
"emojiPlaceholder": "例: 🤖",
"avatarLabel": "アバター(任意)",
"avatarPlaceholder": "例: robot",
"submitting": "送信中...",
"createButton": "エージェントを作成",
"saveButton": "変更を保存",
"cancelEdit": "キャンセル",
"editingHint": "編集中: {{id}}"
},
"list": {
"title": "エージェント一覧",
"description": "{{count}} 件 · セッションスコープ: {{scope}}",
"empty": "エージェントはまだありません。",
"defaultBadge": "デフォルト",
"mainBadge": "メインキー",
"edit": "編集",
"configureFiles": "ファイル設定",
"delete": "削除",
"deleting": "削除中..."
},
"files": {
"title": "エージェントファイル",
"description": "AGENTS.md、SOUL.md、IDENTITY.md などのワークスペースファイルを直接編集できます。",
"noAgent": "設定可能なエージェントがありません。",
"agentLabel": "エージェント選択",
"workspaceLabel": "ワークスペースパス",
"openWorkspace": "フォルダを開く",
"reload": "再読み込み",
"loading": "読み込み中...",
"missingBadge": "未作成",
"editorLabel": "編集中: {{file}}",
"saving": "保存中...",
"save": "ファイルを保存",
"unsavedHint": "未保存の変更があります",
"savedHint": "保存済み"
},
"confirmDelete": {
"title": "エージェント削除",
"message": "エージェント「{{id}}」とワークスペースファイルを削除しますか?この操作は取り消せません。",
"confirm": "削除する",
"cancel": "キャンセル"
},
"toast": {
"created": "エージェント「{{id}}」を作成しました",
"createdWithWarnings": "エージェント「{{id}}」は作成されましたが、一部の後続設定の同期に失敗しました",
"createFailed": "エージェントの作成に失敗しました",
"modelUpdateFailed": "モデル設定の更新に失敗しました",
"identitySyncFailed": "ID 情報の同期に失敗しました",
"updated": "エージェント「{{id}}」を更新しました",
"updateFailed": "エージェントの更新に失敗しました",
"deleted": "エージェント「{{id}}」を削除しました",
"deleteFailed": "エージェントの削除に失敗しました",
"fileSaved": "「{{file}}」を保存しました",
"fileSaveFailed": "ファイルの保存に失敗しました",
"fileLoadFailed": "ファイルの読み込みに失敗しました",
"workspaceLoadFailed": "ワークスペースパスの読み込みに失敗しました",
"workspaceOpenFailed": "ワークスペースを開けませんでした"
}
}
3 changes: 2 additions & 1 deletion src/i18n/locales/ja/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"sidebar": {
"chat": "チャット",
"newChat": "新しいチャット",
"agents": "エージェント",
"cronTasks": "定期タスク",
"skills": "スキル",
"channels": "チャンネル",
Expand Down Expand Up @@ -49,4 +50,4 @@
"notRunningDesc": "この機能を使用するには OpenClaw ゲートウェイが実行されている必要があります。自動的に起動するか、設定から起動できます。",
"warning": "ゲートウェイが停止中です。"
}
}
}
77 changes: 77 additions & 0 deletions src/i18n/locales/zh/agents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
{
"title": "智能体管理",
"subtitle": "在图形界面中完成智能体创建、编辑、删除和文件配置。",
"refresh": "刷新",
"gatewayWarning": "网关未运行。请先启动网关后再管理智能体。",
"form": {
"createTitle": "创建智能体",
"createDescription": "填写名称、工作区、模型与身份信息后即可创建。",
"editTitle": "编辑智能体",
"editDescription": "修改智能体的基础信息与模型设置。",
"nameLabel": "智能体名称",
"namePlaceholder": "例如:support",
"workspaceLabel": "工作区目录",
"workspacePlaceholder": "例如:~/.openclaw/workspace-support",
"workspaceLoadError": "无法读取该智能体的工作区路径,请先重试读取后再保存。",
"modelLabel": "模型 ID(可选)",
"modelPlaceholder": "例如:openai/gpt-4.1",
"emojiLabel": "Emoji(可选)",
"emojiPlaceholder": "例如:🤖",
"avatarLabel": "头像(可选)",
"avatarPlaceholder": "例如:robot",
"submitting": "提交中...",
"createButton": "创建智能体",
"saveButton": "保存修改",
"cancelEdit": "取消编辑",
"editingHint": "当前正在编辑:{{id}}"
},
"list": {
"title": "智能体列表",
"description": "{{count}} 个智能体 · 会话作用域:{{scope}}",
"empty": "暂未发现智能体。",
"defaultBadge": "默认",
"mainBadge": "主会话键",
"edit": "编辑",
"configureFiles": "配置文件",
"delete": "删除",
"deleting": "删除中..."
},
"files": {
"title": "Agent 文件管理",
"description": "直接查看和编辑工作区中的 AGENTS.md、SOUL.md、IDENTITY.md 等文件。",
"noAgent": "暂无可配置的智能体。",
"agentLabel": "选择智能体",
"workspaceLabel": "工作区路径",
"openWorkspace": "打开目录",
"reload": "重新加载",
"loading": "加载中...",
"missingBadge": "缺失",
"editorLabel": "编辑文件:{{file}}",
"saving": "保存中...",
"save": "保存文件",
"unsavedHint": "有未保存改动",
"savedHint": "已保存"
},
"confirmDelete": {
"title": "删除智能体",
"message": "确认删除智能体「{{id}}」及其工作区文件吗?该操作不可撤销。",
"confirm": "确认删除",
"cancel": "取消"
},
"toast": {
"created": "已创建智能体「{{id}}」",
"createdWithWarnings": "智能体「{{id}}」已创建,但部分后续配置未同步成功",
"createFailed": "创建智能体失败",
"modelUpdateFailed": "模型配置更新失败",
"identitySyncFailed": "身份信息同步失败",
"updated": "已更新智能体「{{id}}」",
"updateFailed": "更新智能体失败",
"deleted": "已删除智能体「{{id}}」",
"deleteFailed": "删除智能体失败",
"fileSaved": "已保存文件「{{file}}」",
"fileSaveFailed": "文件保存失败",
"fileLoadFailed": "文件加载失败",
"workspaceLoadFailed": "读取工作区路径失败",
"workspaceOpenFailed": "打开工作区失败"
}
}
3 changes: 2 additions & 1 deletion src/i18n/locales/zh/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"sidebar": {
"chat": "聊天",
"newChat": "新对话",
"agents": "多智能体",
"cronTasks": "定时任务",
"skills": "技能",
"channels": "频道",
Expand Down Expand Up @@ -49,4 +50,4 @@
"notRunningDesc": "OpenClaw 网关需要运行才能使用此功能。它将自动启动,或者您可以从设置中启动。",
"warning": "网关未运行。"
}
}
}
Loading