feat(codex): import local Codex sessions into Hapi (#796)

* local: add Codex Desktop session sync controls

* feat(codex): import local Codex sessions into Hapi

---------

Co-authored-by: Codex Local <codex-local@example.invalid>
This commit is contained in:
DolphinZZZZZ
2026-06-04 17:53:12 +08:00
committed by GitHub
co-authored by Codex Local
parent 39fba5292c
commit f9ef3a4489
25 changed files with 3156 additions and 15 deletions
+43
View File
@@ -53,6 +53,45 @@ export default {
'sessions.group.showMore': 'Show {n} more',
'sessions.group.showLess': 'Show less',
'sessions.group.new': 'New session in this directory',
'codexSync.tooltip': 'Import sessions from Codex into Hapi',
'codexSync.confirm.title': 'Import Codex sessions',
'codexSync.confirm.description': 'Choose Codex sessions to import into Hapi',
// 中文注释:以下文案支撑导入弹窗的多选列表、加载态,以及右上角重启 Codex 客户端按钮提示。
'codexSync.confirm.selectAll': 'Select all',
'codexSync.confirm.clearAll': 'Clear all',
'codexSync.confirm.selectedCount': '{n} sessions selected',
'codexSync.confirm.empty': 'No local Codex sessions found',
'codexSync.confirm.current': 'Linked',
'codexSync.confirm.confirm': 'Import',
'codexSync.confirm.confirming': 'Importing…',
'codexSync.confirm.loading': 'Loading local Codex sessions…',
'codexSync.success.title': 'Import complete',
'codexSync.success.body': 'Imported {n} Codex session(s) into Hapi.',
'codexSync.error.timeout': 'Operation timed out',
'codexSync.error.active': 'This session is still active. Please wait until it ends and try again.',
'codexSync.failed.title': 'Failed to import Codex sessions',
'codexSync.failed.body': 'Failed to import Codex sessions.',
'codexSync.failed.bodyWithReason': 'Import failed: {reason}',
'codexSync.restart.tooltip': 'Restart Codex client',
'codexSync.restart.title': 'Restart Codex client',
'codexSync.restart.description': 'Restart Codex client now to refresh sessions?',
'codexSync.restart.confirm': 'Restart',
'codexSync.restart.confirming': 'Restarting…',
'codexSync.restart.failed.title': 'Failed to restart Codex client',
'codexSync.restart.failed.notFound': 'Failed to restart Codex client: not installed or not found',
'codexSync.restart.failed.body': 'Failed to run the restart script.',
'codexSync.restart.started.title': 'Restart started',
'codexSync.restart.started.body': 'Codex client is restarting to refresh sessions.',
'codexSync.duplicates.confirm.title': 'Duplicate sessions detected',
'codexSync.duplicates.confirm.description': 'Duplicate sessions were detected. Merge them?',
'codexSync.duplicates.confirm.confirm': 'Merge',
'codexSync.duplicates.confirm.confirming': 'Merging…',
'codexSync.duplicates.detect.failed.title': 'Failed to detect duplicate sessions',
'codexSync.duplicates.detect.failed.body': 'Failed to detect duplicate sessions.',
'codexSync.duplicates.merge.success.title': 'Duplicate sessions merged',
'codexSync.duplicates.merge.success.body': 'Merged duplicates for the selected Codex sessions.',
'codexSync.duplicates.merge.failed.title': 'Failed to merge duplicate sessions',
'codexSync.duplicates.merge.failed.body': 'Failed to merge duplicate sessions.',
// Session list
'session.item.path': 'path',
@@ -71,6 +110,10 @@ export default {
'session.time.minutesAgo': '{n}m ago',
'session.time.hoursAgo': '{n}h ago',
'session.time.daysAgo': '{n}d ago',
'session.time.importedFromCodex.justNow': 'just imported from Codex',
'session.time.importedFromCodex.minutesAgo': 'imported from Codex {n}m ago',
'session.time.importedFromCodex.hoursAgo': 'imported from Codex {n}h ago',
'session.time.importedFromCodex.daysAgo': 'imported from Codex {n}d ago',
// Session header
'session.title': 'Files',
+43
View File
@@ -53,6 +53,45 @@ export default {
'sessions.group.showMore': '再显示 {n} 个',
'sessions.group.showLess': '收起',
'sessions.group.new': '在此目录新建会话',
'codexSync.tooltip': '从 Codex 导入会话到 Hapi',
'codexSync.confirm.title': '导入 Codex 会话',
'codexSync.confirm.description': '选择需要导入到 Hapi 的 Codex 会话',
// 中文注释:以下文案支撑导入弹窗的多选列表、加载态,以及右上角重启 Codex 客户端按钮提示。
'codexSync.confirm.selectAll': '全选',
'codexSync.confirm.clearAll': '全取消',
'codexSync.confirm.selectedCount': '已选择 {n} 个会话',
'codexSync.confirm.empty': '未找到本地 Codex 会话',
'codexSync.confirm.current': '当前关联',
'codexSync.confirm.confirm': '导入',
'codexSync.confirm.confirming': '导入中…',
'codexSync.confirm.loading': '正在读取本地 Codex 会话…',
'codexSync.success.title': '导入完成',
'codexSync.success.body': '已导入 {n} 个 Codex 会话到 Hapi。',
'codexSync.error.timeout': '执行超时',
'codexSync.error.active': '当前会话仍处于活跃状态,请等待会话结束后重试',
'codexSync.failed.title': '导入 Codex 会话失败',
'codexSync.failed.body': '导入 Codex 会话失败。',
'codexSync.failed.bodyWithReason': '导入失败:{reason}',
'codexSync.restart.tooltip': '重启codex客户端',
'codexSync.restart.title': '重启 Codex 客户端',
'codexSync.restart.description': '是否立即重启 Codex 客户端以刷新会话?',
'codexSync.restart.confirm': '重启',
'codexSync.restart.confirming': '重启中…',
'codexSync.restart.failed.title': '重启 Codex 客户端失败',
'codexSync.restart.failed.notFound': '尝试重启codex客户端失败,未安装/找不到codex客户端',
'codexSync.restart.failed.body': '重启脚本执行失败。',
'codexSync.restart.started.title': '已发起重启',
'codexSync.restart.started.body': 'Codex 客户端正在重启以刷新会话。',
'codexSync.duplicates.confirm.title': '检测到重复会话',
'codexSync.duplicates.confirm.description': '检测到重复会话,是否进行合并?',
'codexSync.duplicates.confirm.confirm': '合并',
'codexSync.duplicates.confirm.confirming': '合并中…',
'codexSync.duplicates.detect.failed.title': '重复会话检测失败',
'codexSync.duplicates.detect.failed.body': '重复会话检测失败。',
'codexSync.duplicates.merge.success.title': '重复会话已合并',
'codexSync.duplicates.merge.success.body': '已按本次选中的 Codex 会话完成去重合并。',
'codexSync.duplicates.merge.failed.title': '重复会话合并失败',
'codexSync.duplicates.merge.failed.body': '重复会话合并失败。',
// Session list
'session.item.path': '路径',
@@ -71,6 +110,10 @@ export default {
'session.time.minutesAgo': '{n} 分钟前',
'session.time.hoursAgo': '{n} 小时前',
'session.time.daysAgo': '{n} 天前',
'session.time.importedFromCodex.justNow': '刚刚从codex客户端导入',
'session.time.importedFromCodex.minutesAgo': '{n} 分钟前从codex客户端导入',
'session.time.importedFromCodex.hoursAgo': '{n} 小时前从codex客户端导入',
'session.time.importedFromCodex.daysAgo': '{n} 天前从codex客户端导入',
// Session header
'session.title': '文件',