feat(apes): Phase 1b — 补 apes:apps 信息层 tab (4 tab 齐活)
- tabs.tsx: +FiGrid icon, +AppsView placeholder, +apes:apps descriptor (order 902, profile 推到 903) - locales.ts: +apesApps/apesAppsTitle/apesAppsHint zh/en 4 key - tests: 3→4 tab 断言 (id 列表/contract/order 严格递增/disposer/i18n zh+en) 4 个 apes:* tab: tasks(900) / agents(901) / apps(902) / profile(903) gate: typecheck + build + test 1250 passed / 9 skipped / 0 failed (无回归)
This commit is contained in:
@@ -19,12 +19,15 @@ export const apesZh = {
|
||||
// + menu tab titles
|
||||
apesTasks: '任务',
|
||||
apesAgents: '智能体',
|
||||
apesApps: '应用',
|
||||
apesProfile: '画像',
|
||||
// Placeholder view copy
|
||||
apesTasksTitle: '任务',
|
||||
apesTasksHint: 'Phase 1 占位 — 数据接入见 Phase 2',
|
||||
apesAgentsTitle: '智能体',
|
||||
apesAgentsHint: 'Phase 1 占位 — 数据接入见 Phase 2',
|
||||
apesAppsTitle: '应用',
|
||||
apesAppsHint: 'Phase 1 占位 — 数据接入见 Phase 2',
|
||||
apesProfileTitle: '画像',
|
||||
apesProfileHint: 'Phase 1 占位 — 数据接入见 Phase 2',
|
||||
} as const
|
||||
@@ -33,11 +36,14 @@ export const apesZh = {
|
||||
export const apesEn: Record<keyof typeof apesZh, string> = {
|
||||
apesTasks: 'Tasks',
|
||||
apesAgents: 'Agents',
|
||||
apesApps: 'Apps',
|
||||
apesProfile: 'Profile',
|
||||
apesTasksTitle: 'Tasks',
|
||||
apesTasksHint: 'Phase 1 placeholder — data wiring lands in Phase 2',
|
||||
apesAgentsTitle: 'Agents',
|
||||
apesAgentsHint: 'Phase 1 placeholder — data wiring lands in Phase 2',
|
||||
apesAppsTitle: 'Apps',
|
||||
apesAppsHint: 'Phase 1 placeholder — data wiring lands in Phase 2',
|
||||
apesProfileTitle: 'Profile',
|
||||
apesProfileHint: 'Phase 1 placeholder — data wiring lands in Phase 2',
|
||||
}
|
||||
|
||||
@@ -1,20 +1,21 @@
|
||||
/**
|
||||
* apes:* tab descriptors + static placeholder views (Phase 1).
|
||||
* apes:* tab descriptors + static placeholder views (Phase 1 / 1b).
|
||||
*
|
||||
* Phase 1 ships the three highest-value tabs as STATIC placeholders — the
|
||||
* goal is to prove the registration / render / i18n / icon pipeline end to
|
||||
* end before wiring real data (Phase 2). Each view renders a titled card
|
||||
* Phase 1/1b ship the four information-layer tabs as STATIC placeholders —
|
||||
* the goal is to prove the registration / render / i18n / icon pipeline end
|
||||
* to end before wiring real data (Phase 2). Each view renders a titled card
|
||||
* with a "TODO: data" hint; no service calls yet.
|
||||
*
|
||||
* Tab IDs follow the `apes:*` namespace (the fork's own prefix, distinct
|
||||
* from the upstream builtins' bare ids and from the legacy `wb:*` prefix).
|
||||
* All three are `single: true` (one instance each — focusing an existing
|
||||
* All four are `single: true` (one instance each — focusing an existing
|
||||
* tab instead of stacking duplicates).
|
||||
*/
|
||||
import type { ComponentType } from 'react'
|
||||
import {
|
||||
FiList,
|
||||
FiCpu,
|
||||
FiGrid,
|
||||
FiUser,
|
||||
} from 'react-icons/fi'
|
||||
import type { Context } from '../../context-types.ts'
|
||||
@@ -63,6 +64,9 @@ const TasksView = (_props: TabComponentProps) => (
|
||||
const AgentsView = (_props: TabComponentProps) => (
|
||||
<Placeholder titleKey="apesAgentsTitle" hintKey="apesAgentsHint" />
|
||||
)
|
||||
const AppsView = (_props: TabComponentProps) => (
|
||||
<Placeholder titleKey="apesAppsTitle" hintKey="apesAppsHint" />
|
||||
)
|
||||
const ProfileView = (_props: TabComponentProps) => (
|
||||
<Placeholder titleKey="apesProfileTitle" hintKey="apesProfileHint" />
|
||||
)
|
||||
@@ -94,11 +98,19 @@ export function apesTabs(_ctx: Context): readonly TabDescriptor[] {
|
||||
single: true,
|
||||
component: AgentsView,
|
||||
},
|
||||
{
|
||||
id: 'apes:apps',
|
||||
title: () => t('apesApps'),
|
||||
icon: iconOf(FiGrid),
|
||||
order: 902,
|
||||
single: true,
|
||||
component: AppsView,
|
||||
},
|
||||
{
|
||||
id: 'apes:profile',
|
||||
title: () => t('apesProfile'),
|
||||
icon: iconOf(FiUser),
|
||||
order: 902,
|
||||
order: 903,
|
||||
single: true,
|
||||
component: ProfileView,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user