codexmate 0.0.20 → 0.0.22
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 +289 -152
- package/README.zh.md +321 -0
- package/cli/agents-files.js +224 -0
- package/cli/archive-helpers.js +446 -0
- package/cli/auth-profiles.js +359 -0
- package/cli/builtin-proxy.js +1044 -0
- package/cli/claude-proxy.js +998 -0
- package/cli/config-bootstrap.js +384 -0
- package/cli/openai-bridge.js +950 -0
- package/cli/openclaw-config.js +629 -0
- package/cli/session-usage.concurrent.js +28 -0
- package/cli/session-usage.js +112 -0
- package/cli/session-usage.models.js +176 -0
- package/cli/skills.js +1141 -0
- package/cli/zip-commands.js +510 -0
- package/cli.js +9408 -9719
- package/lib/cli-models-utils.js +109 -1
- package/lib/cli-path-utils.js +69 -0
- package/lib/cli-sessions.js +386 -0
- package/lib/download-artifacts.js +77 -0
- package/lib/task-orchestrator.js +869 -0
- package/package.json +14 -10
- package/res/logo.png +0 -0
- package/res/vue.global.prod.js +13 -0
- package/web-ui/app.js +193 -15
- package/web-ui/index.html +5 -1
- package/web-ui/logic.agents-diff.mjs +1 -1
- package/web-ui/logic.claude.mjs +60 -0
- package/web-ui/logic.runtime.mjs +11 -7
- package/web-ui/logic.sessions.mjs +372 -21
- package/web-ui/modules/api.mjs +22 -1
- package/web-ui/modules/app.computed.dashboard.mjs +23 -10
- package/web-ui/modules/app.computed.index.mjs +4 -0
- package/web-ui/modules/app.computed.main-tabs.mjs +198 -0
- package/web-ui/modules/app.computed.session.mjs +521 -9
- package/web-ui/modules/app.methods.agents.mjs +62 -11
- package/web-ui/modules/app.methods.codex-config.mjs +189 -34
- package/web-ui/modules/app.methods.index.mjs +7 -1
- package/web-ui/modules/app.methods.install.mjs +24 -20
- package/web-ui/modules/app.methods.navigation.mjs +142 -1
- package/web-ui/modules/app.methods.openclaw-core.mjs +339 -39
- package/web-ui/modules/app.methods.openclaw-editing.mjs +39 -4
- package/web-ui/modules/app.methods.openclaw-persist.mjs +122 -4
- package/web-ui/modules/app.methods.providers.mjs +192 -53
- package/web-ui/modules/app.methods.session-actions.mjs +99 -19
- package/web-ui/modules/app.methods.session-browser.mjs +196 -5
- package/web-ui/modules/app.methods.session-timeline.mjs +22 -15
- package/web-ui/modules/app.methods.session-trash.mjs +3 -0
- package/web-ui/modules/app.methods.startup-claude.mjs +70 -71
- package/web-ui/modules/app.methods.task-orchestration.mjs +471 -0
- package/web-ui/modules/config-mode.computed.mjs +2 -0
- package/web-ui/modules/config-template-confirm-pref.mjs +33 -0
- package/web-ui/modules/i18n.mjs +1609 -0
- package/web-ui/modules/plugins.computed.mjs +220 -0
- package/web-ui/modules/plugins.methods.mjs +620 -0
- package/web-ui/modules/plugins.storage.mjs +37 -0
- package/web-ui/partials/index/layout-footer.html +1 -57
- package/web-ui/partials/index/layout-header.html +299 -175
- package/web-ui/partials/index/modal-config-template-agents.html +79 -29
- package/web-ui/partials/index/modal-confirm-toast.html +1 -1
- package/web-ui/partials/index/modal-health-check.html +14 -14
- package/web-ui/partials/index/modal-openclaw-config.html +47 -42
- package/web-ui/partials/index/modal-skills.html +130 -114
- package/web-ui/partials/index/modals-basic.html +71 -102
- package/web-ui/partials/index/panel-config-claude.html +50 -12
- package/web-ui/partials/index/panel-config-codex.html +34 -37
- package/web-ui/partials/index/panel-config-openclaw.html +10 -16
- package/web-ui/partials/index/panel-docs.html +147 -0
- package/web-ui/partials/index/panel-market.html +38 -38
- package/web-ui/partials/index/panel-orchestration.html +397 -0
- package/web-ui/partials/index/panel-plugins.html +243 -0
- package/web-ui/partials/index/panel-sessions.html +51 -146
- package/web-ui/partials/index/panel-settings.html +188 -96
- package/web-ui/partials/index/panel-usage.html +353 -0
- package/web-ui/session-helpers.mjs +221 -10
- package/web-ui/styles/base-theme.css +120 -229
- package/web-ui/styles/controls-forms.css +59 -51
- package/web-ui/styles/docs-panel.css +247 -0
- package/web-ui/styles/layout-shell.css +394 -128
- package/web-ui/styles/modals-core.css +18 -3
- package/web-ui/styles/navigation-panels.css +184 -183
- package/web-ui/styles/plugins-panel.css +518 -0
- package/web-ui/styles/responsive.css +102 -62
- package/web-ui/styles/sessions-list.css +13 -27
- package/web-ui/styles/sessions-preview.css +13 -7
- package/web-ui/styles/sessions-toolbar-trash.css +25 -0
- package/web-ui/styles/sessions-usage.css +581 -6
- package/web-ui/styles/settings-panel.css +166 -0
- package/web-ui/styles/skills-list.css +16 -11
- package/web-ui/styles/skills-market.css +63 -2
- package/web-ui/styles/task-orchestration.css +776 -0
- package/web-ui/styles/titles-cards.css +67 -66
- package/web-ui/styles.css +4 -0
- package/README.en.md +0 -259
- package/res/screenshot.png +0 -0
- package/res/vue.global.js +0 -18552
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
主标题
|
|
3
3
|
============================================ */
|
|
4
4
|
.main-title {
|
|
5
|
-
font-size:
|
|
6
|
-
font-weight:
|
|
7
|
-
line-height:
|
|
8
|
-
letter-spacing: -0.
|
|
9
|
-
margin-bottom:
|
|
5
|
+
font-size: clamp(18px, 1.3vw, 22px);
|
|
6
|
+
font-weight: 700;
|
|
7
|
+
line-height: 1.15;
|
|
8
|
+
letter-spacing: -0.02em;
|
|
9
|
+
margin-bottom: 0;
|
|
10
10
|
color: var(--color-text-primary);
|
|
11
11
|
font-family: var(--font-family-display);
|
|
12
|
-
background:
|
|
13
|
-
-webkit-background-clip:
|
|
14
|
-
-webkit-text-fill-color:
|
|
15
|
-
background-clip:
|
|
12
|
+
background: none;
|
|
13
|
+
-webkit-background-clip: border-box;
|
|
14
|
+
-webkit-text-fill-color: currentColor;
|
|
15
|
+
background-clip: border-box;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
.main-title .accent {
|
|
@@ -22,12 +22,12 @@
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
.subtitle {
|
|
25
|
-
font-size:
|
|
26
|
-
color: var(--color-text-
|
|
27
|
-
line-height:
|
|
28
|
-
margin-bottom:
|
|
29
|
-
max-width:
|
|
30
|
-
letter-spacing: 0
|
|
25
|
+
font-size: 13px;
|
|
26
|
+
color: var(--color-text-secondary);
|
|
27
|
+
line-height: 1.58;
|
|
28
|
+
margin-bottom: 0;
|
|
29
|
+
max-width: 70ch;
|
|
30
|
+
letter-spacing: 0;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
/* ============================================
|
|
@@ -35,30 +35,30 @@
|
|
|
35
35
|
============================================ */
|
|
36
36
|
.segmented-control {
|
|
37
37
|
display: flex;
|
|
38
|
-
background:
|
|
39
|
-
border-radius:
|
|
40
|
-
padding:
|
|
41
|
-
margin-bottom:
|
|
38
|
+
background: var(--color-surface);
|
|
39
|
+
border-radius: 10px;
|
|
40
|
+
padding: 4px;
|
|
41
|
+
margin-bottom: 14px;
|
|
42
42
|
position: relative;
|
|
43
|
-
box-shadow:
|
|
44
|
-
border: 1px solid
|
|
45
|
-
backdrop-filter:
|
|
43
|
+
box-shadow: none;
|
|
44
|
+
border: 1px solid var(--color-border);
|
|
45
|
+
backdrop-filter: none;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
.segment {
|
|
49
49
|
flex: 1;
|
|
50
|
-
padding:
|
|
50
|
+
padding: 8px 10px;
|
|
51
51
|
border: none;
|
|
52
52
|
background: transparent;
|
|
53
53
|
font-size: var(--font-size-body);
|
|
54
54
|
font-weight: var(--font-weight-secondary);
|
|
55
55
|
color: var(--color-text-secondary);
|
|
56
56
|
cursor: pointer;
|
|
57
|
-
border-radius:
|
|
58
|
-
transition:
|
|
57
|
+
border-radius: 8px;
|
|
58
|
+
transition: color var(--transition-fast) var(--ease-smooth), background-color var(--transition-fast) var(--ease-smooth);
|
|
59
59
|
position: relative;
|
|
60
60
|
z-index: 2;
|
|
61
|
-
letter-spacing: 0
|
|
61
|
+
letter-spacing: 0;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
.segment:hover {
|
|
@@ -66,9 +66,9 @@
|
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
.segment.active {
|
|
69
|
-
color: var(--color-
|
|
70
|
-
background:
|
|
71
|
-
box-shadow:
|
|
69
|
+
color: var(--color-brand-dark);
|
|
70
|
+
background: var(--color-brand-light);
|
|
71
|
+
box-shadow: inset 0 0 0 1px rgba(199, 116, 98, 0.12);
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
/* ============================================
|
|
@@ -77,36 +77,36 @@
|
|
|
77
77
|
.card-list {
|
|
78
78
|
display: flex;
|
|
79
79
|
flex-direction: column;
|
|
80
|
-
gap:
|
|
81
|
-
margin-bottom:
|
|
80
|
+
gap: 8px;
|
|
81
|
+
margin-bottom: 8px;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
/* ============================================
|
|
85
85
|
卡片
|
|
86
86
|
============================================ */
|
|
87
87
|
.card {
|
|
88
|
-
background:
|
|
89
|
-
border-radius:
|
|
90
|
-
padding: 10px;
|
|
88
|
+
background: var(--color-surface);
|
|
89
|
+
border-radius: 10px;
|
|
90
|
+
padding: 10px 12px;
|
|
91
91
|
display: flex;
|
|
92
92
|
align-items: center;
|
|
93
93
|
justify-content: space-between;
|
|
94
94
|
cursor: pointer;
|
|
95
95
|
transition:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
box-shadow:
|
|
96
|
+
border-color var(--transition-fast) var(--ease-smooth),
|
|
97
|
+
background-color var(--transition-fast) var(--ease-smooth),
|
|
98
|
+
box-shadow var(--transition-fast) var(--ease-smooth);
|
|
99
|
+
box-shadow: none;
|
|
100
100
|
user-select: none;
|
|
101
|
-
will-change:
|
|
102
|
-
border: 1px solid
|
|
101
|
+
will-change: auto;
|
|
102
|
+
border: 1px solid var(--color-border);
|
|
103
103
|
position: relative;
|
|
104
104
|
overflow: hidden;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
.card:hover {
|
|
108
|
-
|
|
109
|
-
box-shadow:
|
|
108
|
+
border-color: var(--color-border-strong);
|
|
109
|
+
box-shadow: none;
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
.card::before,
|
|
@@ -118,10 +118,11 @@
|
|
|
118
118
|
|
|
119
119
|
.card::before {
|
|
120
120
|
left: 0;
|
|
121
|
-
top:
|
|
122
|
-
|
|
121
|
+
top: 50%;
|
|
122
|
+
transform: translateY(-50%);
|
|
123
123
|
width: 3px;
|
|
124
|
-
|
|
124
|
+
height: 18px;
|
|
125
|
+
border-radius: 0 2px 2px 0;
|
|
125
126
|
background: transparent;
|
|
126
127
|
transition: background var(--transition-fast) var(--ease-smooth);
|
|
127
128
|
}
|
|
@@ -129,9 +130,9 @@
|
|
|
129
130
|
.card::after {
|
|
130
131
|
inset: 0;
|
|
131
132
|
border-radius: inherit;
|
|
132
|
-
background: linear-gradient(120deg, rgba(255, 255, 255, 0.
|
|
133
|
+
background: linear-gradient(120deg, rgba(255, 255, 255, 0.1) 0%, transparent 55%);
|
|
133
134
|
opacity: 0;
|
|
134
|
-
transition: opacity var(--transition-
|
|
135
|
+
transition: opacity var(--transition-fast) var(--ease-smooth);
|
|
135
136
|
}
|
|
136
137
|
|
|
137
138
|
.card:active {
|
|
@@ -140,13 +141,13 @@
|
|
|
140
141
|
}
|
|
141
142
|
|
|
142
143
|
.card.active {
|
|
143
|
-
background:
|
|
144
|
-
border-color: rgba(
|
|
145
|
-
box-shadow:
|
|
144
|
+
background: var(--color-brand-light);
|
|
145
|
+
border-color: rgba(199, 116, 98, 0.18);
|
|
146
|
+
box-shadow: none;
|
|
146
147
|
}
|
|
147
148
|
|
|
148
149
|
.card.active::before {
|
|
149
|
-
background:
|
|
150
|
+
background: var(--color-brand);
|
|
150
151
|
}
|
|
151
152
|
|
|
152
153
|
.card:hover::after {
|
|
@@ -160,44 +161,44 @@
|
|
|
160
161
|
.card-leading {
|
|
161
162
|
display: flex;
|
|
162
163
|
align-items: center;
|
|
163
|
-
gap:
|
|
164
|
+
gap: 10px;
|
|
164
165
|
flex: 1;
|
|
165
166
|
min-width: 0;
|
|
166
167
|
}
|
|
167
168
|
|
|
168
169
|
.card-icon {
|
|
169
|
-
width:
|
|
170
|
-
height:
|
|
171
|
-
border-radius:
|
|
172
|
-
background:
|
|
170
|
+
width: 32px;
|
|
171
|
+
height: 32px;
|
|
172
|
+
border-radius: 8px;
|
|
173
|
+
background: rgba(199, 116, 98, 0.1);
|
|
173
174
|
display: flex;
|
|
174
175
|
align-items: center;
|
|
175
176
|
justify-content: center;
|
|
176
177
|
font-size: var(--font-size-title);
|
|
177
178
|
font-weight: var(--font-weight-title);
|
|
178
|
-
color: var(--color-
|
|
179
|
+
color: var(--color-brand-dark);
|
|
179
180
|
flex-shrink: 0;
|
|
180
|
-
transition:
|
|
181
|
-
box-shadow:
|
|
181
|
+
transition: background-color var(--transition-fast) var(--ease-smooth), color var(--transition-fast) var(--ease-smooth);
|
|
182
|
+
box-shadow: none;
|
|
182
183
|
}
|
|
183
184
|
|
|
184
185
|
.card.active .card-icon {
|
|
185
|
-
background:
|
|
186
|
-
color:
|
|
187
|
-
box-shadow:
|
|
186
|
+
background: rgba(199, 116, 98, 0.14);
|
|
187
|
+
color: var(--color-brand-dark);
|
|
188
|
+
box-shadow: none;
|
|
188
189
|
}
|
|
189
190
|
|
|
190
191
|
.card-content {
|
|
191
192
|
display: flex;
|
|
192
193
|
flex-direction: column;
|
|
193
|
-
gap:
|
|
194
|
+
gap: 1px;
|
|
194
195
|
min-width: 0;
|
|
195
196
|
}
|
|
196
197
|
|
|
197
198
|
.card-title {
|
|
198
199
|
display: flex;
|
|
199
200
|
align-items: center;
|
|
200
|
-
gap:
|
|
201
|
+
gap: 6px;
|
|
201
202
|
min-width: 0;
|
|
202
203
|
font-size: var(--font-size-body);
|
|
203
204
|
font-weight: var(--font-weight-secondary);
|
|
@@ -230,12 +231,12 @@
|
|
|
230
231
|
}
|
|
231
232
|
|
|
232
233
|
.card-subtitle {
|
|
233
|
-
font-size:
|
|
234
|
+
font-size: 12px;
|
|
234
235
|
color: var(--color-text-tertiary);
|
|
235
236
|
white-space: nowrap;
|
|
236
237
|
overflow: hidden;
|
|
237
238
|
text-overflow: ellipsis;
|
|
238
|
-
opacity: 0.
|
|
239
|
+
opacity: 0.9;
|
|
239
240
|
}
|
|
240
241
|
|
|
241
242
|
.card-trailing {
|
package/web-ui/styles.css
CHANGED
|
@@ -3,14 +3,18 @@
|
|
|
3
3
|
@import url('./styles/navigation-panels.css');
|
|
4
4
|
@import url('./styles/titles-cards.css');
|
|
5
5
|
@import url('./styles/controls-forms.css');
|
|
6
|
+
@import url('./styles/settings-panel.css');
|
|
6
7
|
@import url('./styles/sessions-toolbar-trash.css');
|
|
7
8
|
@import url('./styles/sessions-list.css');
|
|
8
9
|
@import url('./styles/sessions-preview.css');
|
|
9
10
|
@import url('./styles/sessions-usage.css');
|
|
11
|
+
@import url('./styles/task-orchestration.css');
|
|
10
12
|
@import url('./styles/modals-core.css');
|
|
11
13
|
@import url('./styles/health-check-dialog.css');
|
|
12
14
|
@import url('./styles/openclaw-structured.css');
|
|
13
15
|
@import url('./styles/skills-market.css');
|
|
14
16
|
@import url('./styles/skills-list.css');
|
|
17
|
+
@import url('./styles/plugins-panel.css');
|
|
18
|
+
@import url('./styles/docs-panel.css');
|
|
15
19
|
@import url('./styles/feedback.css');
|
|
16
20
|
@import url('./styles/responsive.css');
|
package/README.en.md
DELETED
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
<div align="center">
|
|
2
|
-
|
|
3
|
-
# Codex Mate
|
|
4
|
-
|
|
5
|
-
**Local configuration and session manager for Codex / Claude Code / OpenClaw**
|
|
6
|
-
|
|
7
|
-
[](https://github.com/SakuraByteCore/codexmate/actions/workflows/release.yml)
|
|
8
|
-
[](https://www.npmjs.com/package/codexmate)
|
|
9
|
-
[](https://www.npmjs.com/package/codexmate)
|
|
10
|
-
[](LICENSE)
|
|
11
|
-
[](https://nodejs.org)
|
|
12
|
-
|
|
13
|
-
[Quick Start](#quick-start) · [Commands](#command-reference) · [Web UI](#web-ui) · [MCP](#mcp) · [中文](README.md)
|
|
14
|
-
|
|
15
|
-
</div>
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## What Is This?
|
|
20
|
-
|
|
21
|
-
Codex Mate is a local-first CLI + Web UI for unified management of:
|
|
22
|
-
|
|
23
|
-
- Codex provider/model switching and config writes
|
|
24
|
-
- Claude Code profiles (writes to `~/.claude/settings.json`)
|
|
25
|
-
- OpenClaw JSON5 profiles and workspace `AGENTS.md`
|
|
26
|
-
- Local skills market for Codex / Claude Code (target switching, local skills management, cross-app import, ZIP distribution)
|
|
27
|
-
- Local Codex/Claude sessions (list/filter/export/delete) with Usage analytics overview
|
|
28
|
-
|
|
29
|
-
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.
|
|
30
|
-
|
|
31
|
-
## Comparison
|
|
32
|
-
|
|
33
|
-
| Dimension | Codex Mate | Manual File Editing |
|
|
34
|
-
| --- | --- | --- |
|
|
35
|
-
| Multi-tool management | Codex + Claude Code + OpenClaw in one entry | Different files and folders per tool |
|
|
36
|
-
| Operation mode | CLI + local Web UI | Manual TOML/JSON/JSON5 edits |
|
|
37
|
-
| Session handling | Browse/filter/Usage analytics/export/batch cleanup | Manual file location and processing |
|
|
38
|
-
| Skills reuse | Local skills market + cross-app import + ZIP distribution | Manual folder copy and reconciliation |
|
|
39
|
-
| Operational visibility | Unified view of config, sessions, and Usage summaries | Depends on manual file inspection and scattered commands |
|
|
40
|
-
| Rollback readiness | Backup before first takeover | Easy to overwrite by mistake |
|
|
41
|
-
| Automation integration | MCP stdio (read-only by default) | Requires custom scripting |
|
|
42
|
-
|
|
43
|
-
## Core Features
|
|
44
|
-
|
|
45
|
-
**Configuration**
|
|
46
|
-
- Provider/model switching (`switch`, `use`)
|
|
47
|
-
- Codex `config.toml` template confirmation before write
|
|
48
|
-
- Claude Code profile management and apply
|
|
49
|
-
- OpenClaw JSON5 profile management
|
|
50
|
-
|
|
51
|
-
**Session Management**
|
|
52
|
-
- Unified Codex + Claude session list
|
|
53
|
-
- Local session pinning with persistent pinned state and pinned-first ordering
|
|
54
|
-
- Keyword/source/cwd filters
|
|
55
|
-
- Usage subview with 7d / 30d session trends, message trends, source share, and top paths
|
|
56
|
-
- Markdown export
|
|
57
|
-
- Session-level and message-level delete (supports batch)
|
|
58
|
-
|
|
59
|
-
**Skills Market**
|
|
60
|
-
- Switch the skills install target between Codex and Claude Code
|
|
61
|
-
- Inspect local installed skills, root paths, and status
|
|
62
|
-
- Scan importable sources from `Codex` / `Claude Code` / `Agents`
|
|
63
|
-
- Support cross-app import, ZIP import/export, and batch delete
|
|
64
|
-
|
|
65
|
-
**Engineering Utilities**
|
|
66
|
-
- MCP stdio domains (`tools`, `resources`, `prompts`)
|
|
67
|
-
- Built-in proxy controls (`proxy`)
|
|
68
|
-
- Auth profile management (`auth`)
|
|
69
|
-
- Zip/unzip utilities
|
|
70
|
-
|
|
71
|
-
## Architecture
|
|
72
|
-
|
|
73
|
-
```mermaid
|
|
74
|
-
flowchart TB
|
|
75
|
-
subgraph Interfaces["Entry Surfaces"]
|
|
76
|
-
CLI["CLI"]
|
|
77
|
-
WEB["Web UI"]
|
|
78
|
-
MCP["MCP Client"]
|
|
79
|
-
OAI["Codex / OpenAI Client"]
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
subgraph Runtime["Codex Mate Runtime"]
|
|
83
|
-
ENTRY["cli.js Entry"]
|
|
84
|
-
API["Local HTTP API"]
|
|
85
|
-
MCPS["MCP stdio Server"]
|
|
86
|
-
PROXY["Built-in Proxy"]
|
|
87
|
-
SERVICES["Config / Sessions & Usage / Skills Market / Workflow"]
|
|
88
|
-
CORE["File IO / Network / Diff / Session Utils"]
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
subgraph Data["Local Files"]
|
|
92
|
-
CODEX["~/.codex/config + auth + models"]
|
|
93
|
-
CLAUDE["~/.claude/settings.json"]
|
|
94
|
-
OPENCLAW["~/.openclaw/*.json5 + ~/.openclaw/openclaw.json + workspace/AGENTS.md"]
|
|
95
|
-
SKILLS["~/.codex/skills / ~/.claude/skills / ~/.agents/skills"]
|
|
96
|
-
STATE["sessions / usage aggregates / trash / workflow runs / skill exports"]
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
CLI --> ENTRY
|
|
100
|
-
WEB -->|GET / + POST /api| API
|
|
101
|
-
MCP -->|stdio JSON-RPC| MCPS
|
|
102
|
-
OAI -->|HTTP /v1| PROXY
|
|
103
|
-
|
|
104
|
-
ENTRY --> SERVICES
|
|
105
|
-
API --> SERVICES
|
|
106
|
-
MCPS --> SERVICES
|
|
107
|
-
PROXY --> CORE
|
|
108
|
-
|
|
109
|
-
SERVICES --> CORE
|
|
110
|
-
|
|
111
|
-
CORE --> CODEX
|
|
112
|
-
CORE --> CLAUDE
|
|
113
|
-
CORE --> OPENCLAW
|
|
114
|
-
CORE --> SKILLS
|
|
115
|
-
CORE --> STATE
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
## Quick Start
|
|
119
|
-
|
|
120
|
-
### Install from npm
|
|
121
|
-
|
|
122
|
-
```bash
|
|
123
|
-
npm install -g codexmate
|
|
124
|
-
codexmate setup
|
|
125
|
-
codexmate status
|
|
126
|
-
codexmate run
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
Default listen address is `0.0.0.0:3737` for LAN access, and browser auto-open is enabled by default.
|
|
130
|
-
|
|
131
|
-
> Safety note: the unauthenticated management UI is exposed to your current LAN by default. Use trusted networks only; for local-only access, set `CODEXMATE_HOST=127.0.0.1` or pass `--host 127.0.0.1`.
|
|
132
|
-
|
|
133
|
-
### Run from source
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
git clone https://github.com/SakuraByteCore/codexmate.git
|
|
137
|
-
cd codexmate
|
|
138
|
-
npm install
|
|
139
|
-
npm start run
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
### Tests / CI (service only)
|
|
143
|
-
|
|
144
|
-
```bash
|
|
145
|
-
npm start run --no-browser
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
> Convention: automated tests validate service and API behavior only, without opening browser pages.
|
|
149
|
-
|
|
150
|
-
## Command Reference
|
|
151
|
-
|
|
152
|
-
| Command | Description |
|
|
153
|
-
| --- | --- |
|
|
154
|
-
| `codexmate status` | Show current config status |
|
|
155
|
-
| `codexmate setup` | Interactive setup |
|
|
156
|
-
| `codexmate list` / `codexmate models` | List providers / models |
|
|
157
|
-
| `codexmate switch <provider>` / `codexmate use <model>` | Switch provider / model |
|
|
158
|
-
| `codexmate add <name> <URL> [API_KEY]` | Add provider |
|
|
159
|
-
| `codexmate delete <name>` | Delete provider |
|
|
160
|
-
| `codexmate claude <BaseURL> <API_KEY> [model]` | Write Claude Code config |
|
|
161
|
-
| `codexmate auth <list\|import\|switch\|delete\|status>` | Auth profile management |
|
|
162
|
-
| `codexmate proxy <status\|set\|apply\|enable\|start\|stop>` | Built-in proxy management |
|
|
163
|
-
| `codexmate workflow <list\|get\|validate\|run\|runs>` | MCP workflow management |
|
|
164
|
-
| `codexmate codex [args...] [--follow-up <text> repeatable]` | Codex CLI passthrough entrypoint (auto-adds `--yolo`, supports queued follow-up appends) |
|
|
165
|
-
| `codexmate qwen [args...]` | Qwen CLI passthrough entrypoint |
|
|
166
|
-
| `codexmate run [--host <HOST>] [--no-browser]` | Start Web UI |
|
|
167
|
-
| `codexmate mcp serve [--read-only\|--allow-write]` | Start MCP stdio server |
|
|
168
|
-
| `codexmate export-session --source <codex\|claude> ...` | Export session to Markdown |
|
|
169
|
-
| `codexmate zip <path> [--max:0-9]` / `codexmate unzip <zip> [out]` | Zip / unzip |
|
|
170
|
-
| `codexmate unzip-ext <zip-dir> [out] [--ext:suffix[,suffix...]] [--no-recursive]` | Extract files with target suffixes from ZIP files in a directory (default `.json`, recursive by default) |
|
|
171
|
-
|
|
172
|
-
### Codex Follow-up Append (Optional)
|
|
173
|
-
|
|
174
|
-
```bash
|
|
175
|
-
codexmate codex --follow-up "scan repository first" --follow-up "then fix failing tests"
|
|
176
|
-
codexmate codex --model gpt-5.3-codex --follow-up "step1" --follow-up "step2"
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
> Note: both `--follow-up` and `--queued-follow-up` are accepted and repeatable.
|
|
180
|
-
|
|
181
|
-
## Web UI
|
|
182
|
-
|
|
183
|
-
### Codex Mode
|
|
184
|
-
- Provider/model switching
|
|
185
|
-
- Model list management
|
|
186
|
-
- `~/.codex/AGENTS.md` editing
|
|
187
|
-
|
|
188
|
-
### Claude Code Mode
|
|
189
|
-
- Multi-profile management
|
|
190
|
-
- Default write to `~/.claude/settings.json`
|
|
191
|
-
- Shareable import command copy
|
|
192
|
-
|
|
193
|
-
### OpenClaw Mode
|
|
194
|
-
- JSON5 multi-profile management
|
|
195
|
-
- Apply to `~/.openclaw/openclaw.json`
|
|
196
|
-
- Manage `~/.openclaw/workspace/AGENTS.md`
|
|
197
|
-
|
|
198
|
-
### Sessions Mode
|
|
199
|
-
- Unified Codex + Claude sessions
|
|
200
|
-
- Browser / Usage subview switching
|
|
201
|
-
- Local pin/unpin with persistent storage and pinned-first ordering
|
|
202
|
-
- Search, filter, export, delete, batch cleanup
|
|
203
|
-
- Usage view includes 7d / 30d session trends, message trends, source share, and top paths
|
|
204
|
-
|
|
205
|
-
### Skills Market Tab
|
|
206
|
-
- Switch the skills install target between `Codex` and `Claude Code`
|
|
207
|
-
- Show the current local skills root, installed items, and importable items
|
|
208
|
-
- Scan importable sources under `Codex` / `Claude Code` / `Agents`
|
|
209
|
-
- Support cross-app import, ZIP import/export, and batch delete
|
|
210
|
-
|
|
211
|
-
## MCP
|
|
212
|
-
|
|
213
|
-
> Transport: `stdio`
|
|
214
|
-
|
|
215
|
-
- Default: read-only tools
|
|
216
|
-
- Enable writes: `--allow-write` or `CODEXMATE_MCP_ALLOW_WRITE=1`
|
|
217
|
-
- Domains: `tools`, `resources`, `prompts`
|
|
218
|
-
|
|
219
|
-
Examples:
|
|
220
|
-
|
|
221
|
-
```bash
|
|
222
|
-
codexmate mcp serve --read-only
|
|
223
|
-
codexmate mcp serve --allow-write
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
## Config Files
|
|
227
|
-
|
|
228
|
-
- `~/.codex/config.toml`
|
|
229
|
-
- `~/.codex/auth.json`
|
|
230
|
-
- `~/.codex/models.json`
|
|
231
|
-
- `~/.codex/provider-current-models.json`
|
|
232
|
-
- `~/.claude/settings.json`
|
|
233
|
-
- `~/.openclaw/openclaw.json`
|
|
234
|
-
- `~/.openclaw/workspace/AGENTS.md`
|
|
235
|
-
|
|
236
|
-
## Environment Variables
|
|
237
|
-
|
|
238
|
-
| Variable | Default | Description |
|
|
239
|
-
| --- | --- | --- |
|
|
240
|
-
| `CODEXMATE_PORT` | `3737` | Web server port |
|
|
241
|
-
| `CODEXMATE_HOST` | `0.0.0.0` | Web listen host (set `127.0.0.1` for local-only access) |
|
|
242
|
-
| `CODEXMATE_NO_BROWSER` | unset | Set `1` to disable browser auto-open |
|
|
243
|
-
| `CODEXMATE_MCP_ALLOW_WRITE` | unset | Set `1` to allow MCP write tools by default |
|
|
244
|
-
| `CODEXMATE_FORCE_RESET_EXISTING_CONFIG` | `0` | Set `1` to force bootstrap reset of existing config |
|
|
245
|
-
|
|
246
|
-
## Tech Stack
|
|
247
|
-
|
|
248
|
-
- Node.js
|
|
249
|
-
- Vue.js 3 (Web UI)
|
|
250
|
-
- Native HTTP server
|
|
251
|
-
- `@iarna/toml`, `json5`
|
|
252
|
-
|
|
253
|
-
## Contributing
|
|
254
|
-
|
|
255
|
-
Issues and pull requests are accepted.
|
|
256
|
-
|
|
257
|
-
## License
|
|
258
|
-
|
|
259
|
-
Apache-2.0
|
package/res/screenshot.png
DELETED
|
Binary file
|