Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
5dbee84
feat(web-ui): refine layout hierarchy inspired by dory
awsldev Apr 7, 2026
214f4fd
fix(web-ui): tighten light layout refresh and parity coverage
awsldev Apr 7, 2026
1f673fb
fix(web-ui): hide scrollbars and harden reset-main
awsldev Apr 7, 2026
4c39313
fix(web-ui): tighten layout polish and parity drift
awsldev Apr 7, 2026
49a9567
refactor(web-ui): harden layout hierarchy
awsldev Apr 7, 2026
5309210
refactor(web-ui): tighten desktop hierarchy
awsldev Apr 7, 2026
8a9240b
refactor(web-ui): simplify navigation chrome
awsldev Apr 7, 2026
25b08de
feat(reset): support interactive PR sync
awsldev Apr 7, 2026
8f0324e
refactor(web-ui): remove landing-page chrome
awsldev Apr 7, 2026
4705477
refactor(web-ui): focus homepage on local workspace
awsldev Apr 7, 2026
51c4bbc
refactor(web-ui): rebuild workspace shell
awsldev Apr 7, 2026
cc38298
refactor(web-ui): tighten workspace density
awsldev Apr 7, 2026
0239f53
refactor(web-ui): align compact layout spec
awsldev Apr 7, 2026
4238b92
refactor(web-ui): normalize compact navigation rail
awsldev Apr 7, 2026
14d5551
refactor(web-ui): remove compact layout noise
awsldev Apr 7, 2026
e4374b8
refactor(web-ui): simplify workspace information flow
awsldev Apr 7, 2026
451b3a5
refactor(web-ui): shift settings panel into document flow
awsldev Apr 7, 2026
5452622
refactor(web-ui): keep split layout on tablet
awsldev Apr 8, 2026
e18aaaa
refactor(web-ui): tidy split layout nav details
awsldev Apr 8, 2026
4971406
refactor(web-ui): restyle shell like SaaS console
awsldev Apr 8, 2026
386b32a
refactor(web-ui): soften shell palette for reading
awsldev Apr 8, 2026
abd41cc
refactor(web-ui): keep shell chrome pinned
awsldev Apr 8, 2026
7f97d29
refactor(web-ui): always show nav meta and logo
awsldev Apr 8, 2026
9a18f45
refactor(web-ui): balance trash actions and content width
awsldev Apr 8, 2026
7844b7a
refactor(web-ui): widen main content wrapper
awsldev Apr 8, 2026
4ebcbfe
refactor(web-ui): move cli install guide into docs tab
awsldev Apr 8, 2026
b856f6b
test(web-ui): fix parity method drift ordering
awsldev Apr 8, 2026
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
17 changes: 12 additions & 5 deletions cmd/reset-main.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
/**
* Reset working tree to origin/main:
* - fetch origin/main
* - discard local changes
* - checkout main
* - hard reset to origin/main
* - clean untracked files/dirs
Expand All @@ -24,19 +25,25 @@ function main() {
process.exit(1);
}

console.log('[1/5] Fetch origin/main');
console.log('[1/6] Fetch origin/main');
run('git fetch origin main --prune');

console.log('[2/5] Checkout main');
console.log('[2/6] Discard local changes');
run('git reset --hard');
run('git clean -fd');

console.log('[3/6] Checkout main');
run('git checkout main');

console.log('[3/5] Reset local changes to origin/main');
console.log('[4/6] Reset local changes to origin/main');
run('git reset --hard origin/main');

console.log('[4/5] Remove untracked files');
// Defensive extra clean: keep this pass in case future reset steps create
// untracked files before the final status check.
console.log('[5/6] Remove untracked files');
run('git clean -fd');

console.log('[5/5] Final status');
console.log('[6/6] Final status');
run('git status --short --branch');

console.log('Done. Working tree synced to origin/main.');
Expand Down
4 changes: 2 additions & 2 deletions tests/unit/web-ui-behavior-parity.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -319,10 +319,10 @@ test('captured bundled app skeleton only exposes expected data key drift versus
const headDataKeys = Object.keys(headAppOptions.data()).sort();
const extraCurrentKeys = currentDataKeys.filter((key) => !headDataKeys.includes(key)).sort();
const missingCurrentKeys = headDataKeys.filter((key) => !currentDataKeys.includes(key)).sort();
const allowedExtraCurrentKeys = [];
const allowedMissingCurrentKeys = [
const allowedExtraCurrentKeys = parityAgainstHead ? [] : [
'sessionsViewMode'
];
const allowedMissingCurrentKeys = parityAgainstHead ? [] : [];
if (parityAgainstHead) {
const allowedExtraKeySet = new Set(allowedExtraCurrentKeys);
const allowedMissingKeySet = new Set(allowedMissingCurrentKeys);
Expand Down
1 change: 1 addition & 0 deletions web-ui/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ document.addEventListener('DOMContentLoaded', () => {
skillsMarketLocalLoadedOnce: false,
skillsMarketImportLoadedOnce: false,
sessionPinnedMap: {},
sessionsViewMode: 'browser',
sessionsUsageTimeRange: '7d',
sessionsList: [],
sessionsLoadedOnce: false,
Expand Down
62 changes: 34 additions & 28 deletions web-ui/partials/index/layout-header.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,39 @@
</span>
</button>

<div class="hero" v-if="!sessionStandalone">
<img class="hero-logo" src="/res/logo.png" alt="Codex Mate logo">
<div class="hero-title">
Codex <span class="accent">Mate.</span>
</div>
<div class="hero-subtitle">
配置中枢:管理 Codex / Claude / OpenClaw / 会话
<span class="sr-only">本地配置中枢,统一管理 Codex / Claude Code / OpenClaw / 会话。</span>
<section class="hero-surface" v-if="!sessionStandalone">
<div class="hero-copy">
<div class="hero-meta-row">
<div class="hero-eyebrow">Codex Mate 工作台</div>
<div class="hero-summary-pill">
<span class="hero-summary-label">当前区域</span>
<span class="hero-summary-value">{{ mainTab === 'config' ? '配置中心' : (mainTab === 'sessions' ? '会话浏览' : (mainTab === 'usage' ? 'Usage' : (mainTab === 'market' ? '技能市场' : '设置'))) }}</span>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Extract the mainTab copy to one explicit map.

The same branch chain is now duplicated in the hero pill and the panel header, and both fall through to the settings strings for any unexpected value. web-ui/modules/config-mode.computed.mjs:48-56 already treats settings explicitly and falls back to 未知, so reusing one computed map here would avoid misleading copy and future drift.

Also applies to: 270-274

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@web-ui/partials/index/layout-header.html` around lines 15 - 17, Extract the
tab label logic into a single computed mapping (e.g., tabLabelMap or a computed
getter like getMainTabLabel) and use that in both the hero pill and the panel
header instead of the inline ternary chain; specifically reference the mainTab
prop/variable and ensure the map explicitly defines 'settings' and uses the same
fallback ('未知') as web-ui/modules/config-mode.computed.mjs so unexpected values
don't fall through to "设置"/"Settings". Update the template spans (the
hero-summary-value and the panel header) to bind to this computed label, remove
duplicated ternaries, and reuse the existing computed module if possible to
avoid copy/drift.

</div>
<a
class="hero-link-pill"
href="https://github.com/SakuraByteCore/codexmate"
target="_blank"
rel="noopener noreferrer"
title="打开 GitHub 仓库">
<span class="hero-link-label">仓库</span>
<span class="hero-link-value">SakuraByteCore/codexmate</span>
</a>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
</div>
<div class="hero-title-block">
<div class="hero-title">本地配置、会话与技能入口</div>
<div class="hero-subtitle">
统一处理 Codex、Claude Code、OpenClaw 与本地会话。
<span class="sr-only">本地配置中枢,统一管理 Codex / Claude Code / OpenClaw / 会话。</span>
</div>
</div>
</div>
</div>
</section>
<div v-if="!sessionStandalone" class="hero-github">
<a
class="github-badge github-badge-mobile"
href="https://github.com/SakuraByteCore/codexmate"
target="_blank"
rel="noopener"
rel="noopener noreferrer"
title="打开 GitHub 仓库">
<span class="github-badge-left">
<svg class="github-badge-icon" viewBox="0 0 24 24" aria-hidden="true">
Expand Down Expand Up @@ -131,7 +148,7 @@
class="github-badge github-badge-rail"
href="https://github.com/SakuraByteCore/codexmate"
target="_blank"
rel="noopener"
rel="noopener noreferrer"
title="打开 GitHub 仓库">
<span class="github-badge-left">
<svg class="github-badge-icon" viewBox="0 0 24 24" aria-hidden="true">
Expand Down Expand Up @@ -257,23 +274,12 @@
</div>
</aside>
<main class="main-panel">
<div class="panel-header" v-if="!sessionStandalone">
<h1 class="main-title">
{{ mainTab === 'config' ? '配置中心' : (mainTab === 'sessions' ? '会话浏览' : (mainTab === 'usage' ? 'Usage' : (mainTab === 'market' ? '技能市场' : '设置'))) }}
</h1>
<p class="subtitle" v-if="mainTab === 'config'">
配置中枢:管理 Codex / Claude / OpenClaw
<span class="sr-only">本地配置中枢,统一管理 Codex / Claude Code / OpenClaw。</span>
</p>
<p class="subtitle" v-else-if="mainTab === 'sessions'">
统一查看与导出 Codex / Claude 会话。
</p>
<p class="subtitle" v-else-if="mainTab === 'usage'">
单独查看本地会话用量、趋势与高频路径。
</p>
<p class="subtitle" v-else-if="mainTab === 'market'">
统一管理 Codex / Claude Skills,并聚焦本地导入与分发。
</p>
<div class="panel-header panel-header-refined" v-if="!sessionStandalone">
<div class="panel-header-copy">
<div class="panel-kicker">{{ mainTab === 'config' ? '配置中心' : (mainTab === 'sessions' ? '会话浏览' : (mainTab === 'usage' ? 'Usage' : (mainTab === 'market' ? '技能市场' : '设置'))) }}</div>
<h1 class="main-title">{{ mainTab === 'config' ? '配置与运行' : (mainTab === 'sessions' ? '会话与上下文' : (mainTab === 'usage' ? '本地用量与趋势' : (mainTab === 'market' ? '技能与分发' : '运行与数据设置'))) }}</h1>
<p class="subtitle">{{ mainTab === 'config' ? '统一处理 Provider、Claude Code 与 OpenClaw 配置。' : (mainTab === 'sessions' ? '查看、检索、导出并继续处理本地会话记录。' : (mainTab === 'usage' ? '单独查看本地使用趋势与活跃来源。' : (mainTab === 'market' ? '围绕本地 Skills 的安装、导入与同步整理入口。' : '管理下载、数据目录与全局行为。'))) }}</p>
</div>
</div>

<div class="status-strip" v-if="!sessionStandalone && mainTab === 'config'">
Expand Down
Loading
Loading