@golba98/codexa 1.0.1
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 +320 -0
- package/bin/codexa.js +445 -0
- package/package.json +45 -0
- package/scripts/audit-codexa-capabilities.mjs +466 -0
- package/scripts/smoke-terminal-bench.mjs +35 -0
- package/src/app.tsx +4561 -0
- package/src/appRenderStability.test.ts +131 -0
- package/src/commands/handler.test.ts +643 -0
- package/src/commands/handler.ts +875 -0
- package/src/config/launchArgs.test.ts +158 -0
- package/src/config/launchArgs.ts +186 -0
- package/src/config/layeredConfig.test.ts +143 -0
- package/src/config/layeredConfig.ts +836 -0
- package/src/config/persistence.test.ts +110 -0
- package/src/config/persistence.ts +311 -0
- package/src/config/runtimeConfig.test.ts +218 -0
- package/src/config/runtimeConfig.ts +554 -0
- package/src/config/settings.test.ts +155 -0
- package/src/config/settings.ts +401 -0
- package/src/config/toml-serialize.ts +98 -0
- package/src/config/trustStore.test.ts +29 -0
- package/src/config/trustStore.ts +68 -0
- package/src/core/attachments.test.ts +155 -0
- package/src/core/attachments.ts +71 -0
- package/src/core/auth/codexAuth.test.ts +68 -0
- package/src/core/auth/codexAuth.ts +359 -0
- package/src/core/cleanupFastFail.test.ts +76 -0
- package/src/core/cleanupFastFail.ts +67 -0
- package/src/core/clipboard.ts +24 -0
- package/src/core/codex.ts +124 -0
- package/src/core/codexExecArgs.test.ts +195 -0
- package/src/core/codexExecArgs.ts +152 -0
- package/src/core/codexLaunch.test.ts +205 -0
- package/src/core/codexLaunch.ts +162 -0
- package/src/core/codexPrompt.test.ts +252 -0
- package/src/core/codexPrompt.ts +428 -0
- package/src/core/executables/claudeExecutable.ts +63 -0
- package/src/core/executables/codexExecutable.test.ts +212 -0
- package/src/core/executables/codexExecutable.ts +159 -0
- package/src/core/executables/executableResolver.test.ts +129 -0
- package/src/core/executables/executableResolver.ts +138 -0
- package/src/core/executables/geminiExecutable.test.ts +116 -0
- package/src/core/executables/geminiExecutable.ts +78 -0
- package/src/core/executables/pathSanityScan.test.ts +47 -0
- package/src/core/githubDiagnostics.test.ts +92 -0
- package/src/core/githubDiagnostics.ts +222 -0
- package/src/core/hollowResponseFormat.test.ts +58 -0
- package/src/core/hollowResponseFormat.ts +39 -0
- package/src/core/inputDebug.ts +51 -0
- package/src/core/launchContext.test.ts +157 -0
- package/src/core/launchContext.ts +266 -0
- package/src/core/models/codexCapabilities.test.ts +45 -0
- package/src/core/models/codexCapabilities.ts +95 -0
- package/src/core/models/codexModelCapabilities.test.ts +246 -0
- package/src/core/models/codexModelCapabilities.ts +571 -0
- package/src/core/models/modelSpecs.test.ts +283 -0
- package/src/core/models/modelSpecs.ts +300 -0
- package/src/core/perf/profiler.ts +125 -0
- package/src/core/perf/renderDebug.test.ts +230 -0
- package/src/core/perf/renderDebug.ts +373 -0
- package/src/core/planStorage.test.ts +143 -0
- package/src/core/planStorage.ts +141 -0
- package/src/core/process/CommandRunner.test.ts +105 -0
- package/src/core/process/CommandRunner.ts +269 -0
- package/src/core/process/processValidation.ts +101 -0
- package/src/core/projectInstructions.test.ts +50 -0
- package/src/core/projectInstructions.ts +54 -0
- package/src/core/providerLauncher/launcher.test.ts +238 -0
- package/src/core/providerLauncher/launcher.ts +203 -0
- package/src/core/providerLauncher/registry.test.ts +324 -0
- package/src/core/providerLauncher/registry.ts +253 -0
- package/src/core/providerLauncher/types.ts +84 -0
- package/src/core/providerLauncher/workspaceConfig.test.ts +638 -0
- package/src/core/providerLauncher/workspaceConfig.ts +407 -0
- package/src/core/providerRuntime/anthropic.test.ts +1120 -0
- package/src/core/providerRuntime/anthropic.ts +576 -0
- package/src/core/providerRuntime/capabilityProfile.test.ts +311 -0
- package/src/core/providerRuntime/capabilityProfile.ts +288 -0
- package/src/core/providerRuntime/claudeCodeDiscovery.ts +446 -0
- package/src/core/providerRuntime/contextMetadata.test.ts +468 -0
- package/src/core/providerRuntime/contextMetadata.ts +409 -0
- package/src/core/providerRuntime/gemini.test.ts +437 -0
- package/src/core/providerRuntime/gemini.ts +784 -0
- package/src/core/providerRuntime/lmstudio.test.ts +168 -0
- package/src/core/providerRuntime/lmstudio.ts +118 -0
- package/src/core/providerRuntime/local.test.ts +787 -0
- package/src/core/providerRuntime/local.ts +754 -0
- package/src/core/providerRuntime/models.ts +150 -0
- package/src/core/providerRuntime/reasoning.ts +17 -0
- package/src/core/providerRuntime/registry.test.ts +233 -0
- package/src/core/providerRuntime/registry.ts +203 -0
- package/src/core/providerRuntime/types.ts +103 -0
- package/src/core/providers/codexJsonStream.test.ts +148 -0
- package/src/core/providers/codexJsonStream.ts +305 -0
- package/src/core/providers/codexSubprocess.test.ts +68 -0
- package/src/core/providers/codexSubprocess.ts +372 -0
- package/src/core/providers/codexTranscript.test.ts +284 -0
- package/src/core/providers/codexTranscript.ts +695 -0
- package/src/core/providers/openaiNative.ts +13 -0
- package/src/core/providers/registry.ts +21 -0
- package/src/core/providers/types.ts +59 -0
- package/src/core/terminal/terminalCapabilities.test.ts +93 -0
- package/src/core/terminal/terminalCapabilities.ts +100 -0
- package/src/core/terminal/terminalControl.test.ts +75 -0
- package/src/core/terminal/terminalControl.ts +147 -0
- package/src/core/terminal/terminalSanitize.test.ts +22 -0
- package/src/core/terminal/terminalSanitize.ts +147 -0
- package/src/core/terminal/terminalSelection.test.ts +42 -0
- package/src/core/terminal/terminalSelection.ts +66 -0
- package/src/core/terminal/terminalTitle.test.ts +328 -0
- package/src/core/terminal/terminalTitle.ts +483 -0
- package/src/core/workspaceActivity.test.ts +163 -0
- package/src/core/workspaceActivity.ts +380 -0
- package/src/core/workspaceGuard.test.ts +151 -0
- package/src/core/workspaceGuard.ts +288 -0
- package/src/core/workspaceRoot.test.ts +23 -0
- package/src/core/workspaceRoot.ts +47 -0
- package/src/exec.test.ts +13 -0
- package/src/exec.ts +72 -0
- package/src/headless/execArgs.test.ts +147 -0
- package/src/headless/execArgs.ts +294 -0
- package/src/headless/execRunner.test.ts +434 -0
- package/src/headless/execRunner.ts +304 -0
- package/src/index.test.tsx +618 -0
- package/src/index.tsx +296 -0
- package/src/session/appSession.test.ts +897 -0
- package/src/session/appSession.ts +761 -0
- package/src/session/chatLifecycle.test.ts +64 -0
- package/src/session/chatLifecycle.ts +951 -0
- package/src/session/liveRenderScheduler.test.ts +201 -0
- package/src/session/liveRenderScheduler.ts +214 -0
- package/src/session/planFlow.test.ts +103 -0
- package/src/session/planFlow.ts +149 -0
- package/src/session/planTranscript.test.ts +65 -0
- package/src/session/planTranscript.ts +15 -0
- package/src/session/promptRunSchedule.test.ts +36 -0
- package/src/session/promptRunSchedule.ts +26 -0
- package/src/session/types.ts +228 -0
- package/src/test/runtimeTestUtils.ts +14 -0
- package/src/types/react-dom.d.ts +3 -0
- package/src/ui/ActionRequiredBlock.tsx +38 -0
- package/src/ui/ActivityBars.tsx +68 -0
- package/src/ui/ActivityIndicator.test.tsx +58 -0
- package/src/ui/ActivityIndicator.tsx +58 -0
- package/src/ui/AgentBlock.test.ts +6 -0
- package/src/ui/AgentBlock.tsx +130 -0
- package/src/ui/AnimatedStatusText.test.ts +16 -0
- package/src/ui/AnimatedStatusText.tsx +69 -0
- package/src/ui/AppShell.test.tsx +1739 -0
- package/src/ui/AppShell.tsx +698 -0
- package/src/ui/AttachmentImportPanel.test.tsx +204 -0
- package/src/ui/AttachmentImportPanel.tsx +98 -0
- package/src/ui/AuthPanel.tsx +113 -0
- package/src/ui/BackendPicker.tsx +28 -0
- package/src/ui/BottomComposer.test.ts +674 -0
- package/src/ui/BottomComposer.tsx +1028 -0
- package/src/ui/CodexLogo.tsx +55 -0
- package/src/ui/DashCard.tsx +82 -0
- package/src/ui/Markdown.test.ts +157 -0
- package/src/ui/Markdown.tsx +310 -0
- package/src/ui/ModePicker.tsx +27 -0
- package/src/ui/ModelPicker.tsx +31 -0
- package/src/ui/ModelPickerProviderScope.test.tsx +411 -0
- package/src/ui/ModelPickerScreen.test.tsx +99 -0
- package/src/ui/ModelPickerScreen.tsx +416 -0
- package/src/ui/ModelPickerState.test.tsx +151 -0
- package/src/ui/ModelReasoningPicker.test.tsx +447 -0
- package/src/ui/ModelReasoningPicker.tsx +458 -0
- package/src/ui/Panel.tsx +51 -0
- package/src/ui/PermissionsPanel.tsx +78 -0
- package/src/ui/PlanActionPicker.tsx +119 -0
- package/src/ui/PlanReviewPanel.test.tsx +267 -0
- package/src/ui/PlanReviewPanel.tsx +212 -0
- package/src/ui/PromptCardBorder.test.tsx +161 -0
- package/src/ui/ProviderPicker.test.tsx +289 -0
- package/src/ui/ProviderPicker.tsx +321 -0
- package/src/ui/ProviderShortcut.test.tsx +143 -0
- package/src/ui/ReasoningPicker.tsx +46 -0
- package/src/ui/RunFooter.tsx +65 -0
- package/src/ui/SelectionPanel.tsx +67 -0
- package/src/ui/SettingsPanel.test.tsx +233 -0
- package/src/ui/SettingsPanel.tsx +156 -0
- package/src/ui/Spinner.tsx +25 -0
- package/src/ui/StaticIntroItem.tsx +54 -0
- package/src/ui/StaticTranscriptItem.tsx +56 -0
- package/src/ui/TextEntryPanel.tsx +139 -0
- package/src/ui/ThemePicker.tsx +31 -0
- package/src/ui/ThinkingBlock.tsx +100 -0
- package/src/ui/Timeline.test.ts +2067 -0
- package/src/ui/Timeline.tsx +1472 -0
- package/src/ui/TimelineNavigation.test.tsx +201 -0
- package/src/ui/TopHeader.test.tsx +239 -0
- package/src/ui/TopHeader.tsx +257 -0
- package/src/ui/TurnGroup.test.tsx +365 -0
- package/src/ui/TurnGroup.tsx +657 -0
- package/src/ui/busyStatusAnimation.test.ts +30 -0
- package/src/ui/busyStatusAnimation.ts +11 -0
- package/src/ui/commandNormalize.test.ts +142 -0
- package/src/ui/commandNormalize.ts +66 -0
- package/src/ui/diffRenderer.test.ts +102 -0
- package/src/ui/diffRenderer.ts +116 -0
- package/src/ui/focus.ts +61 -0
- package/src/ui/focusFlow.test.tsx +1098 -0
- package/src/ui/inputBuffer.test.ts +151 -0
- package/src/ui/inputBuffer.ts +203 -0
- package/src/ui/layout.test.ts +145 -0
- package/src/ui/layout.ts +287 -0
- package/src/ui/modeDisplay.test.ts +42 -0
- package/src/ui/modeDisplay.ts +52 -0
- package/src/ui/outputPipeline.ts +64 -0
- package/src/ui/progressEntries.ts +156 -0
- package/src/ui/runActivityView.test.ts +89 -0
- package/src/ui/runActivityView.ts +37 -0
- package/src/ui/runLifecycleView.test.tsx +237 -0
- package/src/ui/slashCommands.ts +41 -0
- package/src/ui/statusRenderIsolation.test.tsx +654 -0
- package/src/ui/terminalAnswerFormat.test.ts +19 -0
- package/src/ui/terminalAnswerFormat.ts +128 -0
- package/src/ui/textLayout.test.ts +18 -0
- package/src/ui/textLayout.ts +338 -0
- package/src/ui/theme.tsx +395 -0
- package/src/ui/themeFlow.test.ts +53 -0
- package/src/ui/themeFlow.ts +41 -0
- package/src/ui/timelineMeasure.ts +3088 -0
- package/src/ui/timelineMeasureCache.test.ts +986 -0
- package/src/ui/useThrottledValue.ts +31 -0
package/README.md
ADDED
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
# Codexa
|
|
2
|
+
|
|
3
|
+
A terminal UI (TUI) wrapper around the `codex` CLI. Built with TypeScript, Bun, and Ink (React for terminal rendering). Codexa gives `codex` a richer interactive shell with scrollable conversation history, workspace locking, layered TOML config, themes, and in-app slash commands.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- **Bun** — required to run locally from source
|
|
8
|
+
- **codex CLI** — the underlying agent that Codexa wraps. Must be available on `PATH` or pointed to via `CODEX_EXECUTABLE`
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
**Local source install:**
|
|
13
|
+
|
|
14
|
+
```powershell
|
|
15
|
+
bun install
|
|
16
|
+
npm link
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Then run `codexa` from the workspace directory you want to use.
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
### Interactive mode
|
|
24
|
+
|
|
25
|
+
Launch from the directory you want to use as the workspace:
|
|
26
|
+
|
|
27
|
+
```powershell
|
|
28
|
+
cd "<path-to-your-workspace>"
|
|
29
|
+
codexa
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The session is locked to the directory Codexa was launched from.
|
|
33
|
+
|
|
34
|
+
### CLI flags
|
|
35
|
+
|
|
36
|
+
| Flag | Short | Description |
|
|
37
|
+
|------|-------|-------------|
|
|
38
|
+
| `--help` | `-h` | Show help |
|
|
39
|
+
| `--version` | `-v` | Show version |
|
|
40
|
+
| `--profile <name>` | | Load a named config profile |
|
|
41
|
+
| `--config <key=value>` | `-c` | Runtime config override (repeatable) |
|
|
42
|
+
| `--model <name>` | `-m` | Override the active model |
|
|
43
|
+
|
|
44
|
+
Non-flag arguments are sent as an initial prompt on startup:
|
|
45
|
+
|
|
46
|
+
```powershell
|
|
47
|
+
codexa "explain this codebase"
|
|
48
|
+
codexa --profile review --model gpt-5.4 "review src/app.tsx"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Exec mode (headless)
|
|
52
|
+
|
|
53
|
+
Run a single prompt non-interactively and exit:
|
|
54
|
+
|
|
55
|
+
```powershell
|
|
56
|
+
codexa exec "refactor src/utils.ts to use async/await"
|
|
57
|
+
codexa exec --model gpt-5.4-mini --reasoning low "summarize changes in HEAD"
|
|
58
|
+
codexa exec --timing "run the test suite and fix failures"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Exec-specific flags:
|
|
62
|
+
|
|
63
|
+
| Flag | Description |
|
|
64
|
+
|------|-------------|
|
|
65
|
+
| `--prompt <text>` | Prompt text (alternative to positional arg) |
|
|
66
|
+
| `--model <name>` | Override model |
|
|
67
|
+
| `--reasoning <level>` | Set reasoning level |
|
|
68
|
+
| `--profile <name>` | Load config profile |
|
|
69
|
+
| `-c <key=value>` | Runtime config override |
|
|
70
|
+
| `--timing` / `--benchmark-diagnostics` | Print performance timing to stderr |
|
|
71
|
+
| `--codexa-prompt-policy <raw\|wrapped>` | Prompt formatting (default: raw) |
|
|
72
|
+
|
|
73
|
+
## Execution Modes
|
|
74
|
+
|
|
75
|
+
Set via `/mode` or `[codexa].mode` in `config.toml`:
|
|
76
|
+
|
|
77
|
+
| Mode | Key | Behavior |
|
|
78
|
+
|------|-----|----------|
|
|
79
|
+
| Read-only | `suggest` | No file writes |
|
|
80
|
+
| Auto | `auto-edit` | Automatic file editing |
|
|
81
|
+
| Full Access | `full-auto` | Strongest autonomy (default) |
|
|
82
|
+
|
|
83
|
+
Mode aliases for `/mode`: `ask` → `suggest`, `add` / `auto` → `auto-edit`, `plan` / `default` → `full-auto`
|
|
84
|
+
|
|
85
|
+
## Reasoning
|
|
86
|
+
|
|
87
|
+
Set via `/reasoning` or `model_reasoning_effort` in `config.toml`:
|
|
88
|
+
|
|
89
|
+
`none` · `minimal` · `low` · `medium` · `high` (default) · `xhigh` · `max`
|
|
90
|
+
|
|
91
|
+
## Slash Commands
|
|
92
|
+
|
|
93
|
+
Type `/` in the composer to access in-app commands. Key commands:
|
|
94
|
+
|
|
95
|
+
| Command | Description |
|
|
96
|
+
|---------|-------------|
|
|
97
|
+
| `/help` | Show full command reference |
|
|
98
|
+
| `/clear` | Clear conversation and cancel active run |
|
|
99
|
+
| `/exit` · `/quit` | Exit the app |
|
|
100
|
+
| `/model [name]` · `/models` | Switch model or open picker |
|
|
101
|
+
| `/backend [name]` · `/backends` | Switch backend or list available |
|
|
102
|
+
| `/providers` | Open provider picker |
|
|
103
|
+
| `/mode [name]` | Switch execution mode |
|
|
104
|
+
| `/reasoning [level]` | Set reasoning level |
|
|
105
|
+
| `/plan [on\|off]` | Toggle plan-review workflow |
|
|
106
|
+
| `/theme [name]` · `/themes` | Switch theme or open picker |
|
|
107
|
+
| `/config` | Show layered config sources and active values |
|
|
108
|
+
| `/config trust [on\|off\|status]` | Manage project trust |
|
|
109
|
+
| `/permissions` | Open permissions panel |
|
|
110
|
+
| `/permissions approval-policy <policy>` | Set approval policy |
|
|
111
|
+
| `/permissions sandbox <mode>` | Set sandbox mode |
|
|
112
|
+
| `/permissions network [on\|off]` | Set network access |
|
|
113
|
+
| `/runtime service-tier [flex\|fast]` | Set service tier |
|
|
114
|
+
| `/runtime personality [none\|friendly\|pragmatic]` | Set personality |
|
|
115
|
+
| `/settings` | Open settings panel |
|
|
116
|
+
| `/status` | Show effective runtime config |
|
|
117
|
+
| `/workspace` | Show locked workspace path |
|
|
118
|
+
| `/workspace relaunch <path>` | Restart TUI in another directory |
|
|
119
|
+
| `/auth` · `/auth status` | Auth panel or status probe |
|
|
120
|
+
| `/mouse` | Toggle mouse mode (wheel scroll vs. native selection) |
|
|
121
|
+
| `/verbose` | Toggle verbose output |
|
|
122
|
+
| `/copy` | Copy last response to clipboard |
|
|
123
|
+
| `/diagnose github` | Run GitHub connectivity diagnostics |
|
|
124
|
+
| `!<command>` | Run a shell command inline |
|
|
125
|
+
|
|
126
|
+
## Layered Config
|
|
127
|
+
|
|
128
|
+
Runtime settings are resolved from a layered `config.toml` surface. Priority order (highest wins):
|
|
129
|
+
|
|
130
|
+
1. CLI `--config` overrides
|
|
131
|
+
2. Active profile patch (`[profiles.<name>]` section)
|
|
132
|
+
3. Project config: `.codex/config.toml` (only when project is trusted)
|
|
133
|
+
4. User config: `~/.codex/config.toml`
|
|
134
|
+
5. Built-in defaults
|
|
135
|
+
|
|
136
|
+
**Supported TOML keys:**
|
|
137
|
+
|
|
138
|
+
```toml
|
|
139
|
+
# Model and reasoning
|
|
140
|
+
model = "gpt-5.4"
|
|
141
|
+
model_reasoning_effort = "high" # none | minimal | low | medium | high | xhigh | max
|
|
142
|
+
|
|
143
|
+
# Permissions
|
|
144
|
+
approval_policy = "on-request" # untrusted | on-request | never
|
|
145
|
+
sandbox_mode = "workspace-write" # read-only | workspace-write | danger-full-access
|
|
146
|
+
service_tier = "flex" # flex | fast
|
|
147
|
+
personality = "none" # none | friendly | pragmatic
|
|
148
|
+
|
|
149
|
+
# Sandbox write permissions
|
|
150
|
+
[sandbox_workspace_write]
|
|
151
|
+
network_access = true
|
|
152
|
+
writable_roots = ["/path/to/dir"]
|
|
153
|
+
|
|
154
|
+
# Codexa-specific
|
|
155
|
+
[codexa]
|
|
156
|
+
backend = "codex-subprocess" # codex-subprocess (only active backend in v1)
|
|
157
|
+
mode = "full-auto" # suggest | auto-edit | full-auto
|
|
158
|
+
|
|
159
|
+
# Gemini CLI path (if using Gemini)
|
|
160
|
+
gemini_command_path = "C:\\path\\to\\gemini.cmd"
|
|
161
|
+
|
|
162
|
+
# Default profile to load
|
|
163
|
+
profile = "dev"
|
|
164
|
+
|
|
165
|
+
# Named profiles
|
|
166
|
+
[profiles.dev]
|
|
167
|
+
model = "gpt-5.4"
|
|
168
|
+
model_reasoning_effort = "high"
|
|
169
|
+
sandbox_mode = "workspace-write"
|
|
170
|
+
|
|
171
|
+
[profiles.safe]
|
|
172
|
+
approval_policy = "on-request"
|
|
173
|
+
sandbox_mode = "read-only"
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**Example with CLI overrides:**
|
|
177
|
+
|
|
178
|
+
```powershell
|
|
179
|
+
codexa --profile review --config model="gpt-5.4" --config codexa.mode="suggest"
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Gemini CLI Executable
|
|
183
|
+
|
|
184
|
+
Codexa resolves the Gemini executable directly by path rather than through shell aliases or wrappers. To specify the Gemini CLI location:
|
|
185
|
+
|
|
186
|
+
```powershell
|
|
187
|
+
$env:GEMINI_EXECUTABLE = "C:\Users\you\AppData\Roaming\npm\gemini.cmd"
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
or in `config.toml`:
|
|
191
|
+
|
|
192
|
+
```toml
|
|
193
|
+
gemini_command_path = "C:\\Users\\you\\AppData\\Roaming\\npm\\gemini.cmd"
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Using local models with LM Studio
|
|
197
|
+
|
|
198
|
+
Codexa can route the Local provider through OpenAI-compatible local servers such as LM Studio.
|
|
199
|
+
|
|
200
|
+
1. Start LM Studio.
|
|
201
|
+
2. Load a model.
|
|
202
|
+
3. Enable the LM Studio local server.
|
|
203
|
+
4. Confirm the endpoint is `http://localhost:1234/v1`.
|
|
204
|
+
5. Open Codexa's provider picker with `/providers`.
|
|
205
|
+
6. Select `Local`, refresh models if needed, then choose `Use in Codexa`.
|
|
206
|
+
|
|
207
|
+
Codexa checks `GET http://localhost:1234/v1/models` and uses the returned model IDs in the Local model picker. If LM Studio returns `google/gemma-4-26b-a4b`, that model appears as a selectable Local model.
|
|
208
|
+
|
|
209
|
+
Context length is detected separately from model discovery. Codexa first looks for context metadata returned by the provider, then CLI metadata, then an explicit workspace config override, then exact known registry entries. If no trusted source provides a limit, Codexa shows `Context: Unknown` and does not calculate a context percentage.
|
|
210
|
+
|
|
211
|
+
Environment variable configuration:
|
|
212
|
+
|
|
213
|
+
```powershell
|
|
214
|
+
$env:CODEXA_LOCAL_BASE_URL = "http://localhost:1234/v1"
|
|
215
|
+
$env:CODEXA_LOCAL_API_KEY = "lm-studio"
|
|
216
|
+
$env:CODEXA_LOCAL_MODEL = "google/gemma-4-26b-a4b"
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Workspace provider configuration in `.codexa/providers.json`:
|
|
220
|
+
|
|
221
|
+
```json
|
|
222
|
+
{
|
|
223
|
+
"providers": {
|
|
224
|
+
"local": {
|
|
225
|
+
"enabled": true,
|
|
226
|
+
"type": "openai-compatible",
|
|
227
|
+
"base_url": "http://localhost:1234/v1",
|
|
228
|
+
"api_key": "lm-studio",
|
|
229
|
+
"default_model": "google/gemma-4-26b-a4b",
|
|
230
|
+
"models": {
|
|
231
|
+
"google/gemma-4-26b-a4b": {
|
|
232
|
+
"contextLength": 8192
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
`OPENAI_BASE_URL`, `OPENAI_API_BASE`, and `OPENAI_API_KEY` are also accepted for the Local provider only. They do not redirect OpenAI/Codex, Gemini, or Claude routes.
|
|
241
|
+
|
|
242
|
+
Use the `models.<modelId>.contextLength` override only when you know the loaded model/server limit. Values must be positive integers; zero, negative, and non-numeric values are ignored.
|
|
243
|
+
|
|
244
|
+
### Project Trust
|
|
245
|
+
|
|
246
|
+
Project config (`.codex/config.toml`) is only applied when the detected project root is explicitly trusted. Manage trust with:
|
|
247
|
+
|
|
248
|
+
```text
|
|
249
|
+
/config trust status
|
|
250
|
+
/config trust on
|
|
251
|
+
/config trust off
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Untrusted project config is detected but blocked, and shown visibly in `/config`.
|
|
255
|
+
|
|
256
|
+
## Workspace Management
|
|
257
|
+
|
|
258
|
+
Codexa locks the session to the directory it was launched from. To start in the correct workspace:
|
|
259
|
+
|
|
260
|
+
```powershell
|
|
261
|
+
cd "<path-to-your-workspace>"
|
|
262
|
+
codexa
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
To recover from the wrong workspace without restarting manually:
|
|
266
|
+
|
|
267
|
+
```text
|
|
268
|
+
/workspace relaunch .
|
|
269
|
+
/workspace relaunch <workspace-path>
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
`/workspace relaunch` restarts the TUI process in the target directory. It does not hot-swap the workspace in the running process.
|
|
273
|
+
|
|
274
|
+
## Themes
|
|
275
|
+
|
|
276
|
+
16 built-in themes. Switch with `/theme <name>` or open the picker with `/themes`:
|
|
277
|
+
|
|
278
|
+
`purple` · `mono` · `dark` · `black` · `emerald` · `solar` · `cyber` · `ocean` · `nordic` · `green` · `amber` · `vaporwave` · `dracula` · `gruvbox` · `synthwave` · `custom`
|
|
279
|
+
|
|
280
|
+
Default: `mono` (Black & White).
|
|
281
|
+
|
|
282
|
+
## UI Preferences
|
|
283
|
+
|
|
284
|
+
UI-only preferences are stored in `~/.codexa-settings.json` (separate from runtime config):
|
|
285
|
+
|
|
286
|
+
| Setting | Command | Options |
|
|
287
|
+
|---------|---------|---------|
|
|
288
|
+
| Workspace display | `/setting workspace <mode>` | `dir` · `name` · `simple` |
|
|
289
|
+
| Terminal title | `/setting terminal-title <mode>` | `dir` · `name` · `simple` |
|
|
290
|
+
| Busy loader | `/setting busy-loader <bool>` | `true` · `false` |
|
|
291
|
+
| Mouse mode | `/mouse` | wheel scroll · native selection |
|
|
292
|
+
|
|
293
|
+
## Development
|
|
294
|
+
|
|
295
|
+
```powershell
|
|
296
|
+
bun install # Install dependencies
|
|
297
|
+
bun run dev # Start with file watching
|
|
298
|
+
bun run start # Single run without watching
|
|
299
|
+
bun run typecheck # TypeScript type-check (no emit)
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
Dev launches lock the workspace to the directory Bun was invoked from. For the normal end-user flow, use `npm link` and run `codexa` from the intended workspace instead.
|
|
303
|
+
|
|
304
|
+
## Testing
|
|
305
|
+
|
|
306
|
+
```powershell
|
|
307
|
+
bun test # Run all tests
|
|
308
|
+
bun test src/ui/layout.test.ts # Run a specific file or pattern
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
Tests are colocated with source files (`*.test.ts` / `*.test.tsx`).
|
|
312
|
+
|
|
313
|
+
## Repo Hygiene
|
|
314
|
+
|
|
315
|
+
Local-only files kept out of version control:
|
|
316
|
+
|
|
317
|
+
- `node_modules/`
|
|
318
|
+
- `.claude/`
|
|
319
|
+
- `.env` and other local secret files
|
|
320
|
+
- Editor, OS, and cache files
|