Skip to content

Commit b2acc61

Browse files
committed
chore: cleanup codex extensions space
1 parent 0821d19 commit b2acc61

12 files changed

Lines changed: 1405 additions & 1183 deletions

File tree

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
---
2+
name: gettokens-codex-extensions-management
3+
description: GetTokens Codex Skills / MCP 扩展管理:源码校准解析、全局 Skill roots、MCP section/tool 语义、Git source、UI 验收与整理拆分。
4+
---
5+
6+
# GetTokens Codex Extensions Management
7+
8+
用于实现、审查或整理 Codex `Skills` / `MCP Servers` 工作区。触发词包括:Codex skills、MCP servers、`~/.codex/config.toml``[[skills.config]]``tk://github.com``tk://gitlab.com`、Skill 预览/移除/更新。
9+
10+
## 1. Source Truth
11+
- 先读当前仓库实现,再核对 Codex 源码或已归档参考,不凭记忆补字段。
12+
- Skills 只展示全局 roots,不展示 project / repo / git 追加 roots:
13+
- `$CODEX_HOME/skills`
14+
- `$HOME/.agents/skills`
15+
- `$CODEX_HOME/skills/.system`
16+
- `/etc/codex/skills`
17+
- MCP 列表只把 `[mcp_servers.<id>]` 一级 table 作为 server。
18+
- `[mcp_servers.<id>.tools.<tool>]` 是 parent server 的嵌套 tool approval,不是独立 server。
19+
20+
## 2. Skills Rules
21+
- 只识别含 `SKILL.md` 的目录。
22+
- `SKILL.md` 预览使用 `react-markdown` + `rehype-sanitize`,渲染前移除 YAML front matter。
23+
- Snapshot 只返回文件路径、类型和可预览标记;文件内容必须点击单个文件后懒加载并前端缓存。
24+
- Skill 启停使用 Codex 支持的 `[[skills.config]] enabled = false`
25+
- 启用 Skill 时移除匹配的禁用 override,不写 `enabled = true`
26+
- 移除 Skill 必须删除本地目录并校验目录不存在,否则 Codex 仍会扫描到。
27+
- 移除需 alert dialog 二次确认,成功后关闭详情 modal 并显示短暂成功 HUD。
28+
- Finder 打开必须校验路径属于已配置 skill roots。
29+
- Git source 只支持显式 schema:
30+
- `tk://github.com/<owner>/<repo>?ref=<ref>&path=<skill-dir>`
31+
- `tk://gitlab.com/<namespace>/<repo>?ref=<ref>&path=<skill-dir>`
32+
- 自建 GitLab 需要 allowlist;凭据不得写入 manifest。
33+
34+
## 3. MCP Rules
35+
- Transport 由字段推断:`command` => `stdio``url` => `streamable_http`
36+
- `command``url` 同时存在时不能保存。
37+
- `bearer_token` 不是 Codex MCP 保存字段;只支持 `bearer_token_env_var`
38+
- 保存单个 server 时只 patch 目标 section,保留未知字段、其他 server 和非 MCP 配置。
39+
- 编辑 modal 左侧表单只展示当前 server 有值的可选字段;必填字段保留。
40+
- 右侧当前值只展示有用值;空可选项直接忽略。
41+
- 原始 `config.toml` 编辑器保存后必须重读结构化 snapshot,避免结构化视图用旧数据。
42+
43+
## 4. UI Preferences
44+
- 侧边栏内 Skills / MCP 拆成两个 tab/entry。
45+
- 右侧主体按会话页面的信息层级组织:列表为主,详情/编辑用 modal 或 detail layer。
46+
- 不使用多层卡片嵌套。
47+
- 优先复用已有通用组件和全局样式:
48+
- `WorkspacePageHeader`
49+
- `SegmentedControl`
50+
- `ToggleSwitch`
51+
- `btn-swiss`
52+
- `input-swiss`
53+
- `select-swiss`
54+
- Skill 列表点击整行打开详情,嵌套 toggle 必须阻止行点击冒泡。
55+
- modal 要有视口约束高度和底部间距;长内容在内部明确滚动,不让文件切换导致整个页面跳动。
56+
57+
## 5. Split & Cleanup Pattern
58+
- 前端大文件优先按稳定边界拆:
59+
- `CodexExtensionsFeature.tsx`:页面 controller、列表、加载保存调度。
60+
- `SkillsModals.tsx`:Skill 预览、Git 安装、删除确认、成功 HUD。
61+
- `McpModals.tsx`:MCP server editor、config TOML editor、MCP 字段组件。
62+
- `adapters.ts`:Wails DTO 与前端 model 互转、clone、来源格式化。
63+
- `model.ts`:纯解析/序列化/dirty diff 逻辑。
64+
- 后端大文件第一刀优先移动 DTO / 内部结构体到 `*_types.go`,保持 Wails 方法签名和解析函数行为不变。
65+
- 不在同一轮把 UI 拆分、解析算法重写、存储 schema 迁移混在一起。
66+
67+
## 6. Verification
68+
- 前端结构调整后至少运行:
69+
- `npm run typecheck`
70+
- `npm run test:unit -- src/features/codex-extensions/model.test.mjs`
71+
- 后端 Codex extensions 变更后至少运行:
72+
- `go test ./internal/wailsapp -run 'Codex|Mcp|Skill'`
73+
- 视觉/交互变化需要浏览器或 Wails 实际截图,截图归档到对应 `space/screenshots/`
74+
- 收尾时更新 space README、`docs-linhay/dev/``docs-linhay/memory/YYYY-MM-DD.md`,再执行 `qmd update``qmd embed`

.agents/skills/gettokens-domain-engineering/SKILL.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ This skill unifies the technical rules for building, styling, and debugging GetT
8080
## 3.1 Codex Workspace & Local Config Surfaces
8181
- **Codex Binary**: For Codex CLI binary version/source management, use the dedicated `gettokens-codex-binary-management` skill. Keep it as an independent binary-management business; do not merge it into account pool, local apply, usage, session, or routing flows.
8282
- **Codex Account List**: For Codex account request order, route probing, OAuth/auth-file model aliasing, openai-compatible model mappings, and `#frame=codex&workspace=account-list`, use the dedicated `gettokens-codex-account-list` skill. Keep request order semantics in that skill: draggable account order is the test order, while allow/deny only filters candidates.
83+
- **Codex Extensions**: For Codex Skills / MCP Servers, `[[skills.config]]`, `tk://github.com` / `tk://gitlab.com` skill sources, and `#frame=codex&workspace=skills|mcp-servers`, use the dedicated `gettokens-codex-extensions-management` skill. Keep source-accurate parsing, modal/list UI semantics, and cleanup split rules in that skill instead of expanding this general domain skill.
8384
- **Browser Support**: New Codex workspace tabs must be usable in a normal browser preview when the interaction is layout/config-flow checkable. Do not let missing `window.go.main.App` make the page blank; provide explicit preview data and visible preview-only save behavior.
8485
- **Frame URL Rule**: Modal/detail layers opened from Codex workspaces should preserve the frame hash, for example `#frame=codex&workspace=<key>&detail=<id>`, when the surrounding feature already follows frame/detail routing. Closing a modal should remove only the detail marker.
8586
- **Wails Binding Boundary**: Any Wails-facing Codex method added under `internal/wailsapp` must also be exposed through root `app.go`, mirrored in root DTOs/mappers when needed, and regenerated into `frontend/wailsjs`. Frontend should import from generated bindings only after the root `main.App` method exists.

AGENTS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
10. 当用户明确说“整理”且语境指向刚完成的一轮工作会话时,默认触发一次会话沉淀流程:先按 `gettokens-session-skill-distill` 提炼可复用模式,再按是否 repo-wide 决定是否同步更新 `AGENTS.md``docs-linhay/dev/``docs-linhay/memory/`,并执行 `qmd update``qmd embed`
4242
11. 多份独立需求稿并行推进时,默认按“一个需求单元一个 `space`,必要时再配一个同 key 的 branch 与 `worktree`”组织,不按个人姓名或临时阶段单独命名工作目录。
4343
12. 当用户明确要求“由 subagent 去做、主控 agent 负责监督”时,主控 agent 必须承担需求边界、任务拆分、集成、验收、文档与最终完成判断,不得在“代码已改完”但截图、实机验证、文档写回等验收环节仍未完成时提前停止。
44+
13. 当某个 `space` 的需求施工结束并进入整理期时,默认执行一次行为保持的收尾整理:识别大文件和大数据结构,优先按稳定边界拆分文件;同步提取可复用流程到项目级 `skills`,仅把 repo-wide 且长期稳定的规则写入 `AGENTS.md`;最后更新 space、dev 文档、memory 并重建 qmd 索引。
4445

4546
## 2. 标准工作流(必须)
4647
1. 明确需求边界与验收条件。
@@ -101,6 +102,7 @@ Git `worktree` 治理:
101102
5. 涉及 Codex 账号列表、请求顺序、路由探测、OAuth/openai-compatible 模型映射时,优先使用 `gettokens-codex-account-list`
102103
6. 涉及“主控 agent 监督、subagent 实做、直到完整需求闭环才停止”的执行模式时,优先使用 `gettokens-ops-governance` 中的 `Subagent Delivery Loop`
103104
7. 若用户希望用显式 skill 名称触发该模式,使用 `gettokens-subagent-supervision`;它是监督交付模式的轻量触发入口。
105+
8. 涉及 Codex Skills / MCP Servers、`[[skills.config]]``tk://github.com` / `tk://gitlab.com` Skill source、`~/.codex/config.toml` MCP 解析与保存时,优先使用 `gettokens-codex-extensions-management`
104106

105107
## 5. 记忆系统规则(必须)
106108

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# Codex Skills / MCP 会话整理与结构收敛
2+
3+
日期:2026-05-14
4+
5+
## 背景
6+
7+
本期 `20260511-cc-switch-codex-skills-mcp` space 的主要需求施工已经结束,进入收尾整理阶段。目标不是新增业务能力,而是降低大文件维护成本,沉淀可复用工作方式,并把长期规则分层写回到 skill / AGENTS / space / memory。
8+
9+
## 本轮代码整理
10+
11+
前端大文件 `frontend/src/features/codex-extensions/CodexExtensionsFeature.tsx` 从 1554 行收敛到 668 行。
12+
13+
拆分边界:
14+
15+
- `CodexExtensionsFeature.tsx`:页面 controller,负责列表、筛选、加载、保存调度和 preview fallback。
16+
- `SkillsModals.tsx`:Skill preview、Git 安装 modal、删除 alert dialog、成功 HUD。
17+
- `McpModals.tsx`:MCP server editor、config TOML editor、MCP status badge 与字段组件。
18+
- `adapters.ts`:Wails DTO 与前端 model 互转、MCP clone、Skill source 展示格式。
19+
- `model.ts`:保留纯解析、序列化、dirty diff 和 skill config patch 逻辑。
20+
21+
后端大文件 `internal/wailsapp/codex_extensions.go` 先做低风险第一刀:把 Wails DTO 与内部数据结构移动到 `internal/wailsapp/codex_extensions_types.go`,保留现有方法签名、解析函数和写回逻辑不变。
22+
23+
## 沉淀的稳定模式
24+
25+
新增项目级 skill:
26+
27+
- `.agents/skills/gettokens-codex-extensions-management/SKILL.md`
28+
29+
该 skill 负责 Codex Skills / MCP 的源码校准规则、UI 偏好、Git source schema、MCP section/tool 语义、文件拆分边界和验证闭环。
30+
31+
已更新:
32+
33+
- `.agents/skills/gettokens-domain-engineering/SKILL.md`:在 Codex workspace 章节中将 Skills / MCP 需求路由到专用 skill。
34+
- `AGENTS.md`:只补充 repo-wide 的整理期规则和 Codex Extensions skill 路由,不写入本期页面细节。
35+
36+
## 用户偏好
37+
38+
- 不要多层卡片嵌套;复杂页面先简化信息架构,再加组件。
39+
- 优先使用已有通用组件和全局样式,包括 `WorkspacePageHeader``SegmentedControl``ToggleSwitch``btn-swiss``input-swiss``select-swiss`
40+
- 列表页保持列表为主;详情和编辑进入独立 modal/detail layer。
41+
- 空值字段不要展示,尤其是 MCP 编辑器中未配置的可选项。
42+
- modal 需要视口约束高度和底部间距,长内容滚动区域要明确,切换内容不应导致整个页面跳动。
43+
44+
## 未升级到 AGENTS 的内容
45+
46+
以下内容属于 Codex Extensions 功能域,不写入全仓规则:
47+
48+
- Codex Skills 的具体 root 列表。
49+
- `[[skills.config]]` 的 path/name selector 语义。
50+
- MCP `bearer_token_env_var`、nested tools、transport 字段推断。
51+
- Skill Git source manifest / update / rollback 细节。
52+
53+
这些规则统一由 `gettokens-codex-extensions-management` 承载。
54+
55+
## 验证
56+
57+
已完成:
58+
59+
- `npm run typecheck`
60+
- `go test ./internal/wailsapp -run 'Codex|Mcp|Skill'`
61+
- `npm run test:unit -- src/features/codex-extensions/model.test.mjs`
62+
- `docs-linhay/scripts/check-docs.sh`
63+
- `qmd update`
64+
- `qmd embed`

docs-linhay/memory/2026-05-14.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,18 @@
1616
- Skill 预览 modal 的外层 dialog 改为固定视口约束高度,文件切换时只让左右内部区域滚动,避免预览内容高度变化带动整个页面跳动。
1717
- 进一步将 Skill 预览右侧内容区改为固定高度 flex 布局,标题行固定、预览面板独立滚动;Playwright 实测切换 `SKILL.md``references/anycodable.md` 时 dialog 高度保持 762px、预览面板高度保持 560px、页面滚动保持 0。
1818
- 用户反馈 Skill 预览 modal 底部贴边后,将桌面高度从 `100vh-3rem` 收到 `100vh-5rem`,max-height 从 `52rem` 收到 `48rem`;Playwright 复测 1423x810 视口下 dialog 上下间距为 40px。
19+
- 用户截图反馈 MCP editor 底部贴边后,将 MCP editor 桌面 max-height 从 `100vh-5rem` 进一步收到 `100vh-7rem`;Playwright 复测 1423x810 视口下底部间距从 16px 提升到 48px。
20+
- 用户反馈 MCP editor 中不需要的空字段不要显示后,左侧表单改为只展示当前 server 已配置的有效字段。Chrome DevTools MCP 实测左侧只剩 identity、command、args 和保存操作,空的 runtime/tool scope/cwd/env 不再渲染。
1921

2022
## Codex Account List
2123

2224
- 用户要求直接移除 `AccountOrderRow` 内策略上/下移按钮,只保留拖拽顺序作为测试顺序来源。已删除行内策略上/下移 UI、`routePolicyOrderIDs` 独立状态与 `syncCodexRoutePolicyOrderForBaseOrderChange` helper;路由探测传给 sidecar 的 `orderAccountIDs` 改为当前拖拽排序后的可请求账号列表。已验证前端类型检查、Codex 账号列表单测,并在临时 GetTokens 前端 `http://127.0.0.1:5174/#frame=codex&workspace=account-list` 完成浏览器验收与截图归档。
2325
- 本期 Codex 账号列表施工结束后进入结构整理:`CodexAccountListFeature.tsx` 收敛为 controller,UI 组件拆到 `frontend/src/features/codex/components/`,模型映射与路由策略拆到 `codexModelMappings.ts``codexRoutePolicy.ts`。新增项目级 skill `.agents/skills/gettokens-codex-account-list/SKILL.md`,并在 `AGENTS.md` 只增加“Codex 账号列表 / 请求顺序 / 路由探测 / 模型映射优先使用该 skill”的路由规则。
2426
- 用户偏好沉淀:这类本期 space 收尾时需要主动整理大文件和大数据结构,提取稳定工作流到 skill;AGENTS 只承载长期路由/治理规则,不塞入功能细节。Codex 负责业务边界、接口契约、状态流转、测试门禁与最终集成;前端复杂视觉可由 Gemini 提供方案后再由 Codex 集成验收。
27+
28+
## Codex Skills / MCP 收尾整理
29+
30+
- 本期 `20260511-cc-switch-codex-skills-mcp` space 进入整理期后,已按行为保持原则拆分大文件:前端 `CodexExtensionsFeature.tsx` 从 1554 行降到 668 行,拆出 `SkillsModals.tsx``McpModals.tsx``adapters.ts`;后端将 Codex Extensions DTO / 内部结构体迁移到 `codex_extensions_types.go`
31+
- 新增项目级 skill `.agents/skills/gettokens-codex-extensions-management/SKILL.md`,覆盖 Codex Skills/MCP 源码校准解析、全局 skills root、MCP nested tools 语义、Git source schema、UI 偏好和验证闭环。
32+
- 已更新 `.agents/skills/gettokens-domain-engineering/SKILL.md``AGENTS.md`:Codex Skills / MCP 需求优先路由到专用 skill;AGENTS 只增加 space 施工结束后的 repo-wide 整理期规则,不承载功能细节。
33+
- 新增整理文档 `docs-linhay/dev/20260514-codex-extensions-session-distillation.md`,记录拆分边界、用户偏好、沉淀内容和不升级到 AGENTS 的范围。

docs-linhay/spaces/20260511-cc-switch-codex-skills-mcp/README.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ And 浏览器预览环境使用内置 preview 文本,不访问本机文件系
252252

253253
## 当前状态
254254

255-
- 状态:web-preview-implemented
255+
- 状态:implementation-cleanup-completed
256256
- 最近更新:2026-05-14
257257
- 已完成首个 Web 切片:
258258
- Codex 侧边栏新增 `Skills` / `MCP Servers` 两个独立入口。
@@ -268,7 +268,8 @@ And 浏览器预览环境使用内置 preview 文本,不访问本机文件系
268268
- Git 安装 modal 会展开展示当前 schema 可解析出的全部相关值:Source、Provider、Host、Repo、Ref、Path。
269269
- MCP Servers 支持列表过滤;点击 server 行打开独立编辑 modal,modal 内完成单 server 参数编辑、字段级 change preview 与本地保存预览;页面不包含 `Config Groups`
270270
- MCP server 编辑 modal 会展开展示当前记录的全部相关值:Server ID、Label、Enabled、Status、Transport、Source Path、stdio 字段、HTTP 字段、共享配置字段和 nested tool approval。
271-
- MCP server 编辑 modal 的滚动由整个 overlay 承担,不在表单 `main` 内做独立滚动。
271+
- MCP server 编辑 modal 左侧表单只展示当前 server 已配置的有效字段:transport 必需字段保留,空的 `cwd/env/env_vars`、HTTP header、runtime、tool filters 等可选字段不默认渲染。
272+
- MCP server 编辑 modal 的滚动由整个 overlay / dialog 承担,不在表单 `main` 内做独立滚动;桌面视口下收窄 max-height,避免底部贴边。
272273
- MCP server 编辑 modal 按 Codex transport 互斥语义分区:stdio 展示 `command/args/env/env_vars/cwd`,streamable_http 展示 `url/bearer_token_env_var/http_headers/env_http_headers/oauth_resource`,共享区展示 `required/supports_parallel_tool_calls/timeouts/tool filters/scopes`
273274
- MCP server 编辑 modal 左侧表单改为单层分区布局:左列展示分区标题与 transport/meta,右列统一字段网格;布尔项使用 `ToggleField` 展示字段名、当前 true/false 和通用 `ToggleSwitch`,避免只显示开关导致层级不齐。
274275
- MCP server 编辑 modal 在常规桌面宽度使用右侧当前值栏,结构对齐会话页 detail 布局,不把当前值区压到页面底部。
@@ -284,10 +285,16 @@ And 浏览器预览环境使用内置 preview 文本,不访问本机文件系
284285
- MCP 保存支持 patch 单个 section,移除无效 `bearer_token`,保留目标 section 内未知字段和其他非目标配置。
285286
- MCP Servers 页新增 `编辑 config.toml` 按钮;点击后打开内置文本编辑 modal。桌面环境通过 Wails 读取/保存真实 `~/.codex/config.toml`,浏览器预览使用内置 preview 文本并只保存到页面状态。
286287
- Wails root `App``app_types.go``app_mappers.go``frontend/wailsjs` 已同步,前端桌面环境优先调用真实接口,浏览器继续 fallback 预览数据。
288+
- 已完成收尾整理:
289+
- 前端 `CodexExtensionsFeature.tsx` 从单一大文件拆分为页面 controller、`SkillsModals.tsx``McpModals.tsx``adapters.ts`;业务纯函数继续留在 `model.ts`
290+
- 后端 `codex_extensions.go` 的 Wails DTO 与内部数据结构已迁移到 `codex_extensions_types.go`,保留现有 Wails 方法签名和解析/写回行为。
291+
- 新增项目级 skill `.agents/skills/gettokens-codex-extensions-management/SKILL.md`,并在领域 skill 与 `AGENTS.md` 中补充入口规则。
292+
- 整理文档已归档到 `docs-linhay/dev/20260514-codex-extensions-session-distillation.md`
287293
- 验证产物:
294+
- `go test ./internal/wailsapp -run 'Codex|Mcp|Skill'`
295+
- `npm run typecheck`
288296
- `go test ./...`
289297
- `npm run test:unit`
290-
- `npm run typecheck`
291298
- `npm run build`
292299
- `agent-browser --session codex-mcp-config-inline open 'http://127.0.0.1:5173/#frame=codex&workspace=mcp-servers'` 验证 `编辑 config.toml` 按钮可见;点击后打开内置 `config.toml` modal,textarea 载入 preview 内容,修改后保存按钮启用,保存后提示 `浏览器预览 config.toml 已保存`,浏览器 errors 为空。
293300
- 浏览器冒烟截图:
@@ -307,6 +314,8 @@ And 浏览器预览环境使用内置 preview 文本,不访问本机文件系
307314
- `screenshots/20260513/codex-extensions/20260513-codex-extensions-mcp-list-redesign-after-v01.png`
308315
- `screenshots/20260514/codex-extensions/20260514-codex-extensions-mcp-editor-before-v01.png`
309316
- `screenshots/20260514/codex-extensions/20260514-codex-extensions-mcp-editor-after-v01.png`
317+
- `screenshots/20260514/codex-extensions/20260514-codex-extensions-mcp-editor-bottom-gap-after-v01.png`
318+
- `screenshots/20260514/codex-extensions/20260514-codex-extensions-mcp-editor-hide-empty-fields-after-v01.png`
310319
- `screenshots/20260514/codex-extensions/20260514-codex-extensions-skill-preview-stable-after-v01.png`
311320
- `screenshots/20260514/codex-extensions/20260514-codex-extensions-skill-preview-bottom-gap-after-v01.png`
312321
- `screenshots/20260512/codex-extensions/20260512-codex-extensions-mcp-modal-web-after-v01.png`

0 commit comments

Comments
 (0)