70ddbd0bcd
- Add username/password login as additional auth mechanism alongside existing token - First login must use token; password can be configured in Settings > Account - Password login returns the existing static token (no auth middleware changes) - Add account settings: setup, change password, change username, remove password - Add logout button to sidebar footer - Add version changelog popup (click version number in sidebar) - Support all 8 locales (en, zh, de, es, fr, ja, ko, pt) - Bump version to 0.4.3 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
518 lines
22 KiB
TypeScript
518 lines
22 KiB
TypeScript
export default {
|
||
// ログイン
|
||
login: {
|
||
title: 'Hermes Web UI',
|
||
description: 'アクセストークンを入力して続行してください。サーバーの起動ログで確認できます。',
|
||
placeholder: 'アクセストークン',
|
||
submit: 'ログイン',
|
||
tokenRequired: 'アクセストークンを入力してください',
|
||
invalidToken: '無効なトークンです',
|
||
connectionFailed: 'サーバーに接続できません',
|
||
passwordLogin: 'パスワード',
|
||
tokenLogin: 'トークン',
|
||
usernamePlaceholder: 'ユーザー名',
|
||
passwordPlaceholder: 'パスワード',
|
||
credentialsRequired: 'ユーザー名とパスワードを入力してください',
|
||
invalidCredentials: 'ユーザー名またはパスワードが正しくありません',
|
||
passwordMismatch: 'パスワードが一致しません',
|
||
passwordTooShort: 'パスワードは6文字以上必要です',
|
||
setupSuccess: 'パスワードログインが設定されました',
|
||
passwordChanged: 'パスワードが変更されました',
|
||
passwordRemoved: 'パスワードログインが削除されました',
|
||
setupPassword: 'パスワードログインを設定',
|
||
changePassword: 'パスワードを変更',
|
||
changeUsername: 'ユーザー名を変更',
|
||
removePasswordLogin: '削除',
|
||
username: 'ユーザー名',
|
||
currentPassword: '現在のパスワード',
|
||
newPassword: '新しいパスワード',
|
||
confirmPassword: 'パスワード確認',
|
||
newUsername: '新しいユーザー名',
|
||
usernameChanged: 'ユーザー名が変更されました',
|
||
usernameTooShort: 'ユーザー名は2文字以上必要です',
|
||
setupDescription: 'ユーザー名とパスワードを設定して、簡単にログインできるようにします。アクセストークンは引き続きバックアップとして使用できます。',
|
||
removeConfirm: 'パスワードログインを削除しますか?アクセストークンを使用してログインする必要があります。',
|
||
passwordLoginNotConfigured: 'パスワードログイン未設定',
|
||
passwordLoginConfigured: 'パスワードログイン有効({username})',
|
||
},
|
||
|
||
// 共通
|
||
common: {
|
||
loading: '読み込み中...',
|
||
cancel: 'キャンセル',
|
||
retry: '再試行',
|
||
delete: '削除',
|
||
edit: '編集',
|
||
save: '保存',
|
||
saved: '保存しました',
|
||
update: '更新',
|
||
create: '作成',
|
||
saveFailed: '保存に失敗しました',
|
||
ok: 'OK',
|
||
copied: 'コピーしました',
|
||
copy: 'コピー',
|
||
noData: 'データがありません',
|
||
fetch: '取得',
|
||
add: '追加',
|
||
enable: '有効化',
|
||
disable: '無効化',
|
||
configured: '設定済み',
|
||
notConfigured: '未設定',
|
||
confirm: '確認',
|
||
expand: '展開',
|
||
collapse: '折りたたむ',
|
||
},
|
||
|
||
// サイドバー
|
||
sidebar: {
|
||
chat: 'チャット',
|
||
jobs: 'ジョブ',
|
||
models: 'モデル',
|
||
profiles: 'プロファイル',
|
||
skills: 'スキル',
|
||
memory: 'メモリ',
|
||
logs: 'ログ',
|
||
usage: '使用量',
|
||
channels: 'チャンネル',
|
||
terminal: 'ターミナル',
|
||
settings: '設定',
|
||
connected: '接続済み',
|
||
disconnected: '未接続',
|
||
updateTip: 'ターミナルで "hermes-web-ui update" を実行して更新してください',
|
||
updateVersion: 'v{version} にアップグレード',
|
||
updating: '更新中...',
|
||
updateSuccess: '更新が完了しました。サーバーを再起動してください',
|
||
updateFailed: '更新に失敗しました',
|
||
logout: 'ログアウト',
|
||
changelog: '更新履歴',
|
||
noChangelog: '更新履歴はありません',
|
||
},
|
||
|
||
// チャット
|
||
chat: {
|
||
contextRemaining: '残り',
|
||
emptyState: 'Hermes Agent と会話を開始しましょう',
|
||
inputPlaceholder: 'メッセージを入力... (Enter で送信、Shift+Enter で改行)',
|
||
attachFiles: 'ファイルを添付',
|
||
stop: '停止',
|
||
send: '送信',
|
||
contextUsed: 'コンテキスト使用量:',
|
||
sessions: 'セッション',
|
||
noSessions: 'セッションがありません',
|
||
newChat: '新しいチャット',
|
||
deleteSession: 'このセッションを削除しますか?',
|
||
sessionDeleted: 'セッションを削除しました',
|
||
rename: '名前変更',
|
||
pin: 'ピン留め',
|
||
unpin: 'ピン留め解除',
|
||
pinned: 'ピン留め',
|
||
chatMode: 'チャット',
|
||
liveMode: 'ライブ',
|
||
liveSessions: 'ライブセッション',
|
||
recentBadge: '最近',
|
||
linkedSessions: '{count} 件の関連',
|
||
noVisibleMessages: '人間向けに表示できるメッセージはありません。',
|
||
monitorRoleUser: 'ユーザー',
|
||
monitorRoleAssistant: 'アシスタント',
|
||
copySessionId: 'セッション ID をコピー',
|
||
renamed: '名前を変更しました',
|
||
renameFailed: '名前の変更に失敗しました',
|
||
renameSession: 'セッション名の変更',
|
||
enterNewTitle: '新しいタイトルを入力',
|
||
other: 'その他',
|
||
runFailed: '実行に失敗しました',
|
||
error: 'エラー',
|
||
tool: 'ツール',
|
||
arguments: '引数',
|
||
result: '結果',
|
||
truncated: '... (省略)',
|
||
},
|
||
|
||
// スケジュールジョブ
|
||
jobs: {
|
||
title: 'スケジュールジョブ',
|
||
createJob: 'ジョブを作成',
|
||
editJob: 'ジョブを編集',
|
||
noJobs: 'スケジュールジョブがありません。作成して始めましょう。',
|
||
name: '名前',
|
||
namePlaceholder: 'ジョブ名',
|
||
schedule: 'スケジュール (Cron 式)',
|
||
schedulePlaceholder: '例: 0 9 * * *',
|
||
quickPresets: 'クイックプリセット',
|
||
selectPreset: 'プリセットを選択...',
|
||
presetEveryMinute: '毎分',
|
||
presetEvery5Min: '5分ごと',
|
||
presetEveryHour: '毎時',
|
||
presetEveryDay: '毎日 00:00',
|
||
presetEveryDay9: '毎日 09:00',
|
||
presetEveryMonday: '毎週月曜 09:00',
|
||
presetEveryMonth: '毎月1日 09:00',
|
||
prompt: 'プロンプト',
|
||
promptPlaceholder: '実行するプロンプト',
|
||
deliverTarget: '配信先',
|
||
origin: '配信元',
|
||
local: 'ローカル',
|
||
repeatCount: '繰り返し回数(任意)',
|
||
repeatPlaceholder: '空白の場合は無制限',
|
||
jobCreated: 'ジョブを作成しました',
|
||
jobUpdated: 'ジョブを更新しました',
|
||
nameRequired: '名前は必須です',
|
||
scheduleRequired: 'スケジュールは必須です',
|
||
loadFailed: 'ジョブの読み込みに失敗しました',
|
||
jobPaused: 'ジョブを一時停止しました',
|
||
jobResumed: 'ジョブを再開しました',
|
||
jobTriggered: 'ジョブをトリガーしました',
|
||
jobDeleted: 'ジョブを削除しました',
|
||
status: {
|
||
running: '実行中',
|
||
paused: '一時停止',
|
||
disabled: '無効',
|
||
scheduled: 'スケジュール済み',
|
||
},
|
||
info: {
|
||
schedule: 'スケジュール',
|
||
lastRun: '前回実行',
|
||
nextRun: '次回実行',
|
||
deliver: '配信',
|
||
repeat: '繰り返し',
|
||
},
|
||
action: {
|
||
pause: '一時停止',
|
||
pauseJob: 'ジョブを一時停止',
|
||
resume: '再開',
|
||
resumeJob: 'ジョブを再開',
|
||
runNow: '今すぐ実行',
|
||
triggerImmediately: 'すぐにトリガー',
|
||
},
|
||
},
|
||
|
||
// スキル
|
||
skills: {
|
||
title: 'スキル',
|
||
searchPlaceholder: 'スキルを検索...',
|
||
noMatch: '検索に一致するスキルがありません',
|
||
noSkills: 'スキルがありません',
|
||
backTo: '戻る',
|
||
attachedFiles: '添付ファイル',
|
||
loadFailed: 'スキルの読み込みに失敗しました',
|
||
fileLoadFailed: 'ファイルの読み込みに失敗しました',
|
||
toggleFailed: 'スキルの切り替えに失敗しました',
|
||
},
|
||
|
||
// メモリ
|
||
memory: {
|
||
title: 'メモリ',
|
||
refresh: '更新',
|
||
loadFailed: 'メモリの読み込みに失敗しました',
|
||
myNotes: 'メモ',
|
||
noNotes: 'メモはまだありません。',
|
||
notesPlaceholder: 'メモを入力...',
|
||
userProfile: 'ユーザープロファイル',
|
||
noProfile: 'プロファイルはまだありません。',
|
||
profilePlaceholder: 'プロファイルを入力...',
|
||
soul: 'ソウル',
|
||
noSoul: 'ソウル設定はまだありません。',
|
||
soulPlaceholder: 'ソウル設定を入力...',
|
||
},
|
||
|
||
// モデル
|
||
models: {
|
||
title: 'モデル',
|
||
addProvider: 'プロバイダーを追加',
|
||
providerType: 'プロバイダー種別',
|
||
preset: 'プリセット',
|
||
custom: 'カスタム',
|
||
selectProvider: 'プロバイダーを選択',
|
||
chooseProvider: 'プロバイダーを選択...',
|
||
name: '名前',
|
||
autoGeneratedName: 'ベース URL から自動生成',
|
||
baseUrl: 'ベース URL',
|
||
baseUrlPlaceholder: '例: https://api.example.com/v1',
|
||
apiKey: 'API キー',
|
||
apiKeyPlaceholder: 'sk-...',
|
||
defaultModel: 'デフォルトモデル',
|
||
selectOrInput: 'モデルを選択または入力...',
|
||
selectModel: 'モデルを選択...',
|
||
providerAdded: 'プロバイダーを追加しました',
|
||
providerDeleted: 'プロバイダーを削除しました',
|
||
deleteProvider: 'プロバイダーを削除',
|
||
deleteConfirm: '「{name}」を削除しますか?',
|
||
codexLoginTitle: 'OpenAI Codex ログイン',
|
||
codexWaiting: '認証ページで以下のコードを入力してログインしてください:',
|
||
codexCopyCode: 'コードをコピーしました',
|
||
codexOpenLink: '認証ページを開く',
|
||
codexApproved: 'ログイン成功',
|
||
codexExpired: '認証の有効期限が切れました。もう一度お試しください。',
|
||
noProviders: 'プロバイダーがありません。カスタムプロバイダーを追加して始めましょう。',
|
||
builtIn: '組み込み',
|
||
customType: 'カスタム',
|
||
provider: 'プロバイダー',
|
||
local: 'ローカル ({host})',
|
||
selectProviderRequired: 'プロバイダーを選択してください',
|
||
baseUrlRequired: 'ベース URL は必須です',
|
||
apiKeyRequired: 'API キーは必須です',
|
||
modelRequired: 'デフォルトモデルは必須です',
|
||
enterBaseUrl: 'ベース URL を先に入力してください',
|
||
unexpectedFormat: '予期しないレスポンス形式です',
|
||
foundModels: '{count} 個のモデルが見つかりました',
|
||
fetchFailed: 'モデルの取得に失敗しました',
|
||
},
|
||
|
||
// プロファイル
|
||
profiles: {
|
||
title: 'プロファイル',
|
||
create: 'プロファイルを作成',
|
||
import: 'インポート',
|
||
export: 'エクスポート',
|
||
rename: '名前変更',
|
||
delete: '削除',
|
||
switchTo: '切り替え',
|
||
switchConfirm: 'プロファイル「{name}」に切り替えるとゲートウェイが再起動されます。続行しますか?',
|
||
switchSuccess: 'プロファイル「{name}」に切り替えました',
|
||
switchFailed: 'プロファイルの切り替えに失敗しました。ゲートウェイの手動再起動が必要な場合があります。',
|
||
createSuccess: 'プロファイル「{name}」を作成しました',
|
||
createFailed: 'プロファイルの作成に失敗しました',
|
||
renameSuccess: 'プロファイル名を変更しました',
|
||
renameFailed: 'プロファイル名の変更に失敗しました',
|
||
deleteConfirm: 'プロファイル「{name}」を削除しますか?',
|
||
deleteSuccess: 'プロファイルを削除しました',
|
||
deleteFailed: 'プロファイルの削除に失敗しました',
|
||
exportSuccess: 'プロファイルをエクスポートしました',
|
||
exportFailed: 'プロファイルのエクスポートに失敗しました',
|
||
importSuccess: 'プロファイルをインポートしました',
|
||
importFailed: 'プロファイルのインポートに失敗しました',
|
||
importSelectFile: 'アーカイブファイルを選択',
|
||
importInvalidFile: '有効なアーカイブファイルを選択してください (.tar.gz, .tgz, .gz, .zip)',
|
||
name: 'プロファイル名',
|
||
namePlaceholder: '英数字、ハイフンのみ',
|
||
newName: '新しい名前',
|
||
newNamePlaceholder: '新しい名前を入力',
|
||
cloneFromCurrent: '現在のプロファイルから複製',
|
||
archivePath: 'アーカイブパス',
|
||
archivePathPlaceholder: 'アーカイブファイルのサーバーパス',
|
||
importName: 'プロファイル名(任意)',
|
||
importNamePlaceholder: '空白の場合はアーカイブ名を使用',
|
||
active: 'アクティブ',
|
||
model: 'モデル',
|
||
gateway: 'ゲートウェイ',
|
||
alias: 'エイリアス',
|
||
provider: 'プロバイダー',
|
||
path: 'パス',
|
||
skills: 'スキル',
|
||
hasEnv: '.env あり',
|
||
hasSoulMd: 'soul.md あり',
|
||
noProfiles: 'プロファイルがありません。作成して始めましょう。',
|
||
},
|
||
|
||
// ログ
|
||
logs: {
|
||
title: 'ログ',
|
||
all: 'すべて',
|
||
searchPlaceholder: '検索...',
|
||
refresh: '更新',
|
||
noEntries: 'ログエントリがありません',
|
||
},
|
||
|
||
// 設定
|
||
settings: {
|
||
title: '設定',
|
||
saved: '保存しました',
|
||
saveFailed: '保存に失敗しました',
|
||
tabs: {
|
||
display: '表示',
|
||
account: 'アカウント',
|
||
agent: 'エージェント',
|
||
memory: 'メモリ',
|
||
session: 'セッション',
|
||
privacy: 'プライバシー',
|
||
apiServer: 'API サーバー',
|
||
},
|
||
display: {
|
||
streaming: 'ストリームレスポンス',
|
||
streamingHint: 'AI の返信をリアルタイムで表示',
|
||
compact: 'コンパクトモード',
|
||
compactHint: 'メッセージの間隔を狭める',
|
||
showReasoning: '推論過程を表示',
|
||
showReasoningHint: 'モデルの思考プロセスを表示',
|
||
showCost: 'コストを表示',
|
||
showCostHint: '返信にトークン使用量を表示',
|
||
inlineDiffs: 'インライン差分',
|
||
inlineDiffsHint: 'コード変更をインラインで表示',
|
||
bellOnComplete: '完了通知音',
|
||
bellOnCompleteHint: 'AI の応答完了時に通知音を再生',
|
||
busyInputMode: '処理中入力モード',
|
||
busyInputModeHint: 'AI 処理中でも入力を許可',
|
||
theme: 'テーマ',
|
||
themeHint: 'ライト、ダーク、またはシステム設定に従う',
|
||
themeLight: 'ライト',
|
||
themeDark: 'ダーク',
|
||
themeSystem: 'システム',
|
||
},
|
||
agent: {
|
||
maxTurns: '最大ターン数',
|
||
maxTurnsHint: '1回の会話の最大インタラクション回数',
|
||
gatewayTimeout: 'ゲートウェイタイムアウト',
|
||
gatewayTimeoutHint: 'リクエストタイムアウト(秒)',
|
||
restartDrainTimeout: '再起動ドレインタイムアウト',
|
||
restartDrainTimeoutHint: '再起動前のドレインタイムアウト(秒)',
|
||
toolEnforcement: 'ツール実行ポリシー',
|
||
toolEnforcementHint: 'ツール呼び出しの実行モードを制御',
|
||
auto: '自動',
|
||
always: '常に',
|
||
never: 'しない',
|
||
},
|
||
memory: {
|
||
enabled: 'メモリを有効化',
|
||
enabledHint: 'AI に会話コンテキストを記憶させる',
|
||
userProfile: 'ユーザープロファイル',
|
||
userProfileHint: 'AI にユーザーの設定を記憶させる',
|
||
charLimit: 'メモリ文字数上限',
|
||
charLimitHint: 'MEMORY.md の最大文字数',
|
||
userCharLimit: 'ユーザープロファイル文字数上限',
|
||
userCharLimitHint: 'USER.md の最大文字数',
|
||
},
|
||
session: {
|
||
mode: 'リセットモード',
|
||
modeHint: 'セッションリセットのトリガー条件',
|
||
modeBoth: 'アイドル + スケジュール',
|
||
modeIdle: 'アイドルのみ',
|
||
modeHourly: 'スケジュールのみ',
|
||
idleMinutes: 'アイドルタイムアウト',
|
||
idleMinutesHint: '自動リセットまでの待機時間(分)',
|
||
atHour: 'スケジュールリセット時刻',
|
||
humanOnly: '人間のセッションのみ表示',
|
||
humanOnlyHint: 'サブエージェントやセッション監視ノイズを既定で隠します',
|
||
liveMonitorHumanOnly: 'ライブモニター: 人間のセッションのみ表示',
|
||
liveMonitorHumanOnlyHint: 'ライブモニターでサブエージェントやセッション監視ノイズを既定で隠します',
|
||
atHourHint: '毎日指定時刻にセッションをリセット',
|
||
},
|
||
privacy: {
|
||
redactPii: '個人情報のマスキング',
|
||
redactPiiHint: '機密情報を自動検出して隠す(パスワード、キーなど)',
|
||
},
|
||
apiServer: {
|
||
enable: '有効化',
|
||
enableHint: 'API サーバーを有効にする',
|
||
host: 'ホスト',
|
||
hostHint: 'リッスンアドレス',
|
||
port: 'ポート',
|
||
portHint: 'リッスンポート',
|
||
key: 'キー',
|
||
keyHint: 'API アクセスキー',
|
||
cors: 'CORS 許可元',
|
||
corsHint: '許可するクロスオリジン',
|
||
},
|
||
},
|
||
|
||
// プラットフォームチャンネル設定
|
||
platform: {
|
||
requireMention: "メンションが必要",
|
||
requireMentionGroup: "グループで応答するには {'@'}メンションが必要",
|
||
requireMentionChannel: "チャンネルで応答するには {'@'}メンションが必要",
|
||
requireMentionRoom: "ルームで応答するには {'@'}メンションが必要",
|
||
reactions: 'リアクション',
|
||
reactionsHint: 'メッセージに絵文字でリアクションする',
|
||
freeResponseChats: '自由応答チャット',
|
||
freeResponseChatsHint: "{'@'}メンションなしで応答するチャット ID(カンマ区切り)",
|
||
freeResponseChannels: '自由応答チャンネル',
|
||
freeResponseChannelsHint: "{'@'}メンションなしで応答するチャンネル ID(カンマ区切り)",
|
||
freeResponseRooms: '自由応答ルーム',
|
||
freeResponseRoomsHint: "{'@'}メンションなしで応答するルーム ID(カンマ区切り)",
|
||
mentionPatterns: 'カスタムメンションパターン',
|
||
mentionPatternsHint: '追加のトリガーパターン',
|
||
autoThread: '自動スレッド',
|
||
autoThreadHint: "{'@'}メンション後に自動で返信スレッドを作成",
|
||
autoThreadHintRoom: 'ルームで自動的に返信スレッドを作成',
|
||
dmMentionThreads: 'DM メンションスレッド',
|
||
dmMentionThreadsHint: 'DM 内のメンションにスレッド返信を使用',
|
||
allowBots: 'ボットメッセージを許可',
|
||
allowBotsHint: '他のボットからのメッセージに応答する',
|
||
allowedChannels: '許可チャンネル',
|
||
allowedChannelsHint: 'ホワイトリストのチャンネル ID(カンマ区切り)',
|
||
ignoredChannels: '除外チャンネル',
|
||
ignoredChannelsHint: 'ボットが応答しないチャンネル ID(カンマ区切り)',
|
||
noThreadChannels: 'スレッドなしチャンネル',
|
||
noThreadChannelsHint: 'スレッドなしで応答するチャンネル ID(カンマ区切り)',
|
||
botToken: 'ボットトークン',
|
||
botTokenHint: '開発者ポータルから取得したボットトークン',
|
||
accessToken: 'アクセストークン',
|
||
accessTokenHint: 'Matrix アクセストークン',
|
||
homeserver: 'Homeserver URL',
|
||
homeserverHint: 'Matrix ホームサーバー URL',
|
||
appId: 'App ID',
|
||
appIdHint: 'Feishu App ID',
|
||
appSecret: 'App Secret',
|
||
appSecretHint: 'Feishu App Secret',
|
||
clientId: 'Client ID',
|
||
clientIdHint: 'DingTalk Client ID',
|
||
clientSecret: 'Client Secret',
|
||
clientSecretHint: 'DingTalk Client Secret',
|
||
botId: 'Bot ID',
|
||
botIdHint: 'WeCom Bot ID',
|
||
wecomSecretHint: 'WeCom Bot Secret',
|
||
waEnabled: 'WhatsApp を有効化',
|
||
waEnabledHint: 'QR コードペアリングで WhatsApp を有効にする',
|
||
weixinToken: 'Weixin トークン',
|
||
weixinTokenHint: 'weixin CLI の QR ログインから取得 (hermes weixin)',
|
||
accountId: 'Account ID',
|
||
accountIdHint: 'Weixin アカウント ID',
|
||
qrLogin: 'QR ログイン',
|
||
qrRelogin: '再ログイン',
|
||
qrFetching: 'QR コードを取得中...',
|
||
qrScanHint: 'WeChat でスキャンしてログイン',
|
||
qrScanedHint: 'スキャン済み、スマートフォンで確認してください...',
|
||
},
|
||
|
||
// 言語
|
||
language: {
|
||
label: '言語',
|
||
zh: '中文',
|
||
en: 'English',
|
||
ja: '日本語',
|
||
},
|
||
|
||
// ターミナル
|
||
terminal: {
|
||
sessions: 'セッション',
|
||
newTab: '新しいターミナル',
|
||
closeSession: 'このセッションを閉じますか?',
|
||
sessionExited: '終了しました',
|
||
processExited: 'プロセスが終了しました(コード {code})',
|
||
},
|
||
|
||
// 使用統計
|
||
usage: {
|
||
title: '使用統計',
|
||
refresh: '更新',
|
||
totalTokens: '総トークン数',
|
||
inputTokens: '入力',
|
||
outputTokens: '出力',
|
||
totalSessions: '総セッション数',
|
||
avgPerDay: '1日平均 ~{n}',
|
||
estimatedCost: '推定コスト',
|
||
cacheHitRate: 'キャッシュヒット率',
|
||
modelBreakdown: 'モデル別内訳',
|
||
dailyTrend: '日別使用量(過去30日間)',
|
||
date: '日付',
|
||
tokens: 'トークン',
|
||
cache: 'キャッシュ',
|
||
sessions: 'セッション',
|
||
cost: 'コスト',
|
||
noData: '使用データがありません',
|
||
},
|
||
|
||
// 更新履歴
|
||
changelog: {
|
||
new_0_4_3_1: 'トークン認証に加えてユーザー名/パスワードログインを追加',
|
||
new_0_4_3_2: '資格情報管理のためのアカウント設定を追加',
|
||
new_0_4_3_3: 'サイドバーにログアウトボタンを追加',
|
||
new_0_4_3_4: 'バージョン番号クリックで更新履歴ポップアップを追加',
|
||
new_0_4_2_1: 'トークン使用量追跡と動的コンテキスト長を追加',
|
||
new_0_4_2_2: 'セッション検索モーダルを追加',
|
||
new_0_4_2_3: 'Socket.IOとSQLiteによるグループチャットシステムを復元',
|
||
new_0_4_2_4: 'チャットページにピン留めセッションとライブモニターを追加',
|
||
new_0_4_2_5: '組み込みプロバイダー検出とモデルマッチングを修正',
|
||
new_0_4_1_1: '認証バイパスとSPAファイル配信を修正',
|
||
},
|
||
}
|