codexmate 0.0.22 → 0.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -3
- package/README.zh.md +8 -5
- package/cli/auth-profiles.js +23 -7
- package/cli/doctor-core.js +903 -0
- package/cli/import-skills-url.js +334 -0
- package/cli.js +304 -208
- package/lib/cli-models-utils.js +0 -40
- package/lib/cli-network-utils.js +28 -2
- package/package.json +5 -2
- package/plugins/README.md +20 -0
- package/plugins/README.zh-CN.md +20 -0
- package/plugins/prompt-templates/comment-polish/index.mjs +25 -0
- package/plugins/prompt-templates/computed.mjs +253 -0
- package/plugins/prompt-templates/index.mjs +8 -0
- package/plugins/prompt-templates/manifest.mjs +15 -0
- package/plugins/prompt-templates/methods.mjs +619 -0
- package/plugins/prompt-templates/overview.mjs +90 -0
- package/plugins/prompt-templates/ownership.mjs +19 -0
- package/plugins/prompt-templates/rule-ack/index.mjs +21 -0
- package/plugins/prompt-templates/storage.mjs +64 -0
- package/plugins/registry.mjs +16 -0
- package/res/logo-pack.webp +0 -0
- package/web-ui/app.js +68 -34
- package/web-ui/index.html +4 -3
- package/web-ui/modules/app.computed.dashboard.mjs +22 -22
- package/web-ui/modules/app.computed.main-tabs.mjs +9 -2
- package/web-ui/modules/app.methods.agents.mjs +91 -3
- package/web-ui/modules/app.methods.codex-config.mjs +153 -164
- package/web-ui/modules/app.methods.install.mjs +16 -0
- package/web-ui/modules/app.methods.navigation.mjs +76 -0
- package/web-ui/modules/app.methods.runtime.mjs +24 -2
- package/web-ui/modules/app.methods.session-browser.mjs +73 -1
- package/web-ui/modules/app.methods.startup-claude.mjs +12 -0
- package/web-ui/modules/app.methods.task-orchestration.mjs +96 -11
- package/web-ui/modules/config-mode.computed.mjs +1 -3
- package/web-ui/modules/i18n.dict.mjs +2039 -0
- package/web-ui/modules/i18n.mjs +2 -1555
- package/web-ui/modules/plugins.computed.mjs +2 -219
- package/web-ui/modules/plugins.methods.mjs +2 -619
- package/web-ui/modules/plugins.storage.mjs +11 -37
- package/web-ui/modules/sessions-filters-url.mjs +85 -0
- package/web-ui/partials/index/layout-header.html +38 -34
- package/web-ui/partials/index/modal-config-template-agents.html +3 -4
- package/web-ui/partials/index/modal-health-check.html +33 -60
- package/web-ui/partials/index/panel-config-claude.html +56 -15
- package/web-ui/partials/index/panel-config-codex.html +68 -19
- package/web-ui/partials/index/panel-config-openclaw.html +8 -3
- package/web-ui/partials/index/panel-dashboard.html +186 -0
- package/web-ui/partials/index/panel-docs.html +1 -1
- package/web-ui/partials/index/panel-market.html +3 -0
- package/web-ui/partials/index/panel-orchestration.html +105 -111
- package/web-ui/partials/index/panel-plugins.html +48 -12
- package/web-ui/partials/index/panel-sessions.html +12 -3
- package/web-ui/partials/index/panel-settings.html +1 -1
- package/web-ui/partials/index/panel-usage.html +7 -6
- package/web-ui/styles/controls-forms.css +16 -2
- package/web-ui/styles/dashboard.css +274 -0
- package/web-ui/styles/layout-shell.css +11 -5
- package/web-ui/styles/navigation-panels.css +8 -0
- package/web-ui/styles/plugins-panel.css +5 -0
- package/web-ui/styles/sessions-list.css +3 -3
- package/web-ui/styles/sessions-usage.css +37 -0
- package/web-ui/styles/skills-market.css +12 -2
- package/web-ui/styles/task-orchestration.css +57 -11
- package/web-ui/styles.css +1 -0
- package/res/logo.png +0 -0
package/README.md
CHANGED
|
@@ -31,6 +31,7 @@ Codex Mate is a local-first CLI + Web UI for unified management of:
|
|
|
31
31
|
- Local skills market for Codex / Claude Code (target switching, local skills management, cross-app import, ZIP distribution)
|
|
32
32
|
- Local Codex/Claude sessions (list/filter/export/delete) with Usage analytics overview
|
|
33
33
|
- Plugins (Prompt templates): reusable templates with variables and one-click copy
|
|
34
|
+
- Task orchestration: plan/queue/run/review local tasks
|
|
34
35
|
|
|
35
36
|
It works on local files directly and does not require cloud hosting. The skills market is also local-first: it operates on local directories and does not depend on a remote marketplace.
|
|
36
37
|
|
|
@@ -59,9 +60,11 @@ It works on local files directly and does not require cloud hosting. The skills
|
|
|
59
60
|
- Unified Codex + Claude session list
|
|
60
61
|
- Local session pinning with persistent pinned state and pinned-first ordering
|
|
61
62
|
- Keyword/source/cwd filters
|
|
63
|
+
- Fast search UX: short-lived query result caching to avoid rescanning on each keystroke
|
|
62
64
|
- Usage subview with 7d / 30d session trends, message trends, source share, and top paths
|
|
63
65
|
- Markdown export
|
|
64
|
-
- Session-level and message-level delete (supports batch)
|
|
66
|
+
- Session-level and message-level delete (supports batch), with a local recycle bin for restore/purge
|
|
67
|
+
- Large-session preview optimization (fast tail preview path)
|
|
65
68
|
|
|
66
69
|
**Skills Market**
|
|
67
70
|
- Switch the skills install target between Codex and Claude Code
|
|
@@ -189,7 +192,7 @@ npm run reset
|
|
|
189
192
|
npm run reset 79
|
|
190
193
|
```
|
|
191
194
|
|
|
192
|
-
- `npm run reset`:
|
|
195
|
+
- `npm run reset`: reset to default `origin/main`
|
|
193
196
|
- `npm run reset 79`: sync directly to the latest head snapshot of PR `#79`
|
|
194
197
|
- The script also handles local branch switching, workspace cleanup, untracked file cleanup, and final state validation
|
|
195
198
|
|
|
@@ -205,7 +208,6 @@ npm run reset 79
|
|
|
205
208
|
| `codexmate delete <name>` | Delete provider |
|
|
206
209
|
| `codexmate claude <BaseURL> <API_KEY> [model]` | Write Claude Code config |
|
|
207
210
|
| `codexmate auth <list\|import\|switch\|delete\|status>` | Auth profile management |
|
|
208
|
-
| `codexmate proxy <status\|set\|apply\|enable\|start\|stop>` | Built-in proxy management |
|
|
209
211
|
| `codexmate workflow <list\|get\|validate\|run\|runs>` | MCP workflow management |
|
|
210
212
|
| `codexmate codex [args...] [--follow-up <text> repeatable]` | Codex CLI passthrough entrypoint (auto-adds `--yolo`, supports queued follow-up appends) |
|
|
211
213
|
| `codexmate qwen [args...]` | Qwen CLI passthrough entrypoint |
|
package/README.zh.md
CHANGED
|
@@ -31,7 +31,7 @@ Codex Mate 提供一套本地优先的 CLI + Web UI,用于统一管理:
|
|
|
31
31
|
- Codex / Claude Code Skills 市场(安装目标切换、本地 skills 管理、跨应用导入、ZIP 分发)
|
|
32
32
|
- Codex / Claude 本地会话浏览、筛选、导出、删除与 Usage 统计概览
|
|
33
33
|
- 插件(提示词模板):模板复用、变量填写、一键复制
|
|
34
|
-
-
|
|
34
|
+
- 任务编排:规划 / 排队 / 执行 / 回看
|
|
35
35
|
|
|
36
36
|
项目不依赖云端托管,配置写入你的本地文件,便于审计和回滚。Skills 市场同样坚持本地优先,只操作本地目录,不依赖远程在线市场。
|
|
37
37
|
|
|
@@ -61,9 +61,11 @@ Codex Mate 提供一套本地优先的 CLI + Web UI,用于统一管理:
|
|
|
61
61
|
- 同页查看 Codex 与 Claude 会话
|
|
62
62
|
- 支持本地会话置顶,置顶状态持久化保存并优先排序显示
|
|
63
63
|
- 关键词搜索、来源筛选、cwd 路径筛选
|
|
64
|
+
- 搜索体验优化:短周期结果缓存,避免输入时重复扫描
|
|
64
65
|
- Usage 子页:近 7 天 / 近 30 天会话趋势、消息趋势、来源占比、高频路径
|
|
65
66
|
- 会话导出 Markdown
|
|
66
|
-
-
|
|
67
|
+
- 会话与消息级删除(支持批量),并提供本地回收站用于恢复/彻底删除
|
|
68
|
+
- 大会话预览优化(快速 tail 预览路径)
|
|
67
69
|
|
|
68
70
|
**Skills 市场**
|
|
69
71
|
- 在 Codex 与 Claude Code 之间切换 skills 安装目标
|
|
@@ -75,8 +77,9 @@ Codex Mate 提供一套本地优先的 CLI + Web UI,用于统一管理:
|
|
|
75
77
|
- 提示词模板:本地保存/编辑/复用(支持变量)
|
|
76
78
|
- 编写 → 填参 → 一键复制的工作流(模板数据保存在浏览器存储)
|
|
77
79
|
|
|
78
|
-
|
|
79
|
-
-
|
|
80
|
+
**任务编排**
|
|
81
|
+
- DAG 节点拆分与波次并发
|
|
82
|
+
- 支持计划预览、执行、队列与运行详情
|
|
80
83
|
|
|
81
84
|
**工程能力**
|
|
82
85
|
- MCP stdio 能力(tools/resources/prompts)
|
|
@@ -192,7 +195,7 @@ npm run reset
|
|
|
192
195
|
npm run reset 79
|
|
193
196
|
```
|
|
194
197
|
|
|
195
|
-
- `npm run reset
|
|
198
|
+
- `npm run reset`:直接重置到默认 `origin/main`
|
|
196
199
|
- `npm run reset 79`:直接同步到 PR `#79` 的最新 head 快照
|
|
197
200
|
- 脚本会自动完成本地分支切换、工作区清理、未跟踪文件清理与最终状态校验
|
|
198
201
|
|
package/cli/auth-profiles.js
CHANGED
|
@@ -28,12 +28,17 @@ function createAuthProfileController(deps = {}) {
|
|
|
28
28
|
function normalizeAuthProfileName(value) {
|
|
29
29
|
const raw = typeof value === 'string' ? value.trim() : '';
|
|
30
30
|
if (!raw) return '';
|
|
31
|
-
|
|
31
|
+
return raw.slice(0, 120);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function sanitizeAuthProfileFileStem(value) {
|
|
35
|
+
const raw = typeof value === 'string' ? value.trim() : '';
|
|
36
|
+
if (!raw) return '';
|
|
37
|
+
return raw
|
|
32
38
|
.replace(/[\\/:*?"<>|]/g, '-')
|
|
33
39
|
.replace(/\s+/g, '-')
|
|
34
40
|
.replace(/^-+|-+$/g, '')
|
|
35
41
|
.slice(0, 120);
|
|
36
|
-
return sanitized;
|
|
37
42
|
}
|
|
38
43
|
|
|
39
44
|
function normalizeAuthRegistry(raw) {
|
|
@@ -46,7 +51,7 @@ function createAuthProfileController(deps = {}) {
|
|
|
46
51
|
version: 1,
|
|
47
52
|
current: typeof raw.current === 'string' ? raw.current.trim() : '',
|
|
48
53
|
items: items.map((item) => ({
|
|
49
|
-
name:
|
|
54
|
+
name: item.name.trim(),
|
|
50
55
|
fileName: typeof item.fileName === 'string' ? path.basename(item.fileName) : '',
|
|
51
56
|
type: typeof item.type === 'string' ? item.type : '',
|
|
52
57
|
email: typeof item.email === 'string' ? item.email : '',
|
|
@@ -135,13 +140,24 @@ function createAuthProfileController(deps = {}) {
|
|
|
135
140
|
const sourceFile = typeof options.sourceFile === 'string' ? options.sourceFile : '';
|
|
136
141
|
const preferredName = normalizeAuthProfileName(options.name || '');
|
|
137
142
|
const profileName = preferredName || getAuthProfileNameFallback(safePayload, sourceFile);
|
|
138
|
-
|
|
139
|
-
|
|
143
|
+
let fileStem = sanitizeAuthProfileFileStem(profileName) || sanitizeAuthProfileFileStem(sourceFile) || `auth-${Date.now()}`;
|
|
144
|
+
|
|
145
|
+
const registry = readAuthRegistry();
|
|
146
|
+
const existed = registry.items.find((item) => item && item.name === profileName);
|
|
147
|
+
if (existed && existed.fileName) {
|
|
148
|
+
fileStem = path.basename(existed.fileName, path.extname(existed.fileName));
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
let fileName = `${fileStem}.json`;
|
|
152
|
+
let profilePath = path.join(AUTH_PROFILES_DIR, fileName);
|
|
153
|
+
if (!existed && fs.existsSync(profilePath)) {
|
|
154
|
+
fileStem = `${fileStem}-${Date.now().toString(16).slice(-6)}`;
|
|
155
|
+
fileName = `${fileStem}.json`;
|
|
156
|
+
profilePath = path.join(AUTH_PROFILES_DIR, fileName);
|
|
157
|
+
}
|
|
140
158
|
|
|
141
159
|
ensureDir(AUTH_PROFILES_DIR);
|
|
142
160
|
writeJsonAtomic(profilePath, safePayload);
|
|
143
|
-
|
|
144
|
-
const registry = readAuthRegistry();
|
|
145
161
|
const meta = buildAuthProfileSummary(profileName, safePayload, fileName);
|
|
146
162
|
meta.importedAt = toIsoTime(Date.now());
|
|
147
163
|
meta.sourceFile = sourceFile || '';
|