@golba98/codexa 1.0.3 → 1.0.5
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 +17 -18
- package/bin/codexa.js +62 -144
- package/package.json +4 -3
- package/src/app.tsx +642 -303
- package/src/commands/handler.ts +7 -18
- package/src/config/buildInfo.ts +2 -2
- package/src/config/layeredConfig.ts +1 -1
- package/src/config/runtimeConfig.ts +1 -1
- package/src/config/settings.ts +1 -1
- package/src/config/trustStore.ts +1 -1
- package/src/core/README.md +52 -0
- package/src/core/agent/loop.ts +282 -0
- package/src/core/agent/protocol.ts +211 -0
- package/src/core/agent/tools.ts +414 -0
- package/src/core/{codexExecArgs.ts → codex/codexExecArgs.ts} +2 -2
- package/src/core/{codexLaunch.ts → codex/codexLaunch.ts} +3 -3
- package/src/core/{codexPrompt.ts → codex/codexPrompt.ts} +3 -3
- package/src/core/debug/modelStateDebug.ts +34 -0
- package/src/core/executables/antigravityExecutable.ts +48 -0
- package/src/core/executables/executableResolver.ts +5 -1
- package/src/core/models/codexModelCapabilities.ts +57 -4
- package/src/core/models/codexModelsCacheSeed.ts +153 -0
- package/src/core/models/providerModelCache.ts +106 -0
- package/src/core/perf/renderDebug.ts +10 -6
- package/src/core/process/CommandRunner.ts +12 -1
- package/src/core/providerLauncher/registry.ts +64 -18
- package/src/core/providerLauncher/types.ts +12 -9
- package/src/core/providerLauncher/workspaceConfig.ts +41 -26
- package/src/core/providerRuntime/anthropic.ts +10 -6
- package/src/core/providerRuntime/antigravity.ts +461 -0
- package/src/core/providerRuntime/claudeCodeDiscovery.ts +724 -446
- package/src/core/providerRuntime/claudeCodeDiscoveryDebug.ts +55 -0
- package/src/core/providerRuntime/contextMetadata.ts +12 -24
- package/src/core/providerRuntime/local.ts +129 -51
- package/src/core/providerRuntime/mistralVibe.ts +663 -0
- package/src/core/providerRuntime/models.ts +40 -15
- package/src/core/providerRuntime/reasoning.ts +9 -6
- package/src/core/providerRuntime/registry.ts +76 -4
- package/src/core/providerRuntime/types.ts +20 -14
- package/src/core/providers/codexSubprocess.ts +2 -2
- package/src/core/providers/types.ts +1 -1
- package/src/core/{attachments.ts → shared/attachments.ts} +27 -4
- package/src/core/{cleanupFastFail.ts → shared/cleanupFastFail.ts} +1 -1
- package/src/core/{hollowResponseFormat.ts → shared/hollowResponseFormat.ts} +1 -1
- package/src/core/terminal/clearFrameBoundary.ts +814 -0
- package/src/core/terminal/frameLock.ts +109 -0
- package/src/core/terminal/inkRenderReset.ts +123 -0
- package/src/core/terminal/terminalControl.ts +22 -0
- package/src/core/terminal/terminalTitle.ts +16 -102
- package/src/core/{channel.ts → version/channel.ts} +1 -1
- package/src/core/{updateCheck.ts → version/updateCheck.ts} +10 -5
- package/src/core/{launchContext.ts → workspace/launchContext.ts} +9 -16
- package/src/core/{planStorage.ts → workspace/planStorage.ts} +2 -2
- package/src/core/{workspaceGuard.ts → workspace/workspaceGuard.ts} +97 -13
- package/src/headless/execRunner.ts +2 -2
- package/src/index.tsx +66 -98
- package/src/session/appSession.ts +10 -7
- package/src/session/chatLifecycle.ts +1 -1
- package/src/session/liveRenderScheduler.ts +1 -1
- package/src/session/types.ts +1 -1
- package/src/test/runtimeTestUtils.ts +90 -0
- package/src/ui/{ActivityBars.tsx → chrome/ActivityBars.tsx} +1 -1
- package/src/ui/{ActivityIndicator.tsx → chrome/ActivityIndicator.tsx} +3 -3
- package/src/ui/{AnimatedStatusText.tsx → chrome/AnimatedStatusText.tsx} +3 -3
- package/src/ui/chrome/AppShell.tsx +672 -0
- package/src/ui/{BottomComposer.tsx → chrome/BottomComposer.tsx} +159 -158
- package/src/ui/{DashCard.tsx → chrome/DashCard.tsx} +2 -2
- package/src/ui/{RunFooter.tsx → chrome/RunFooter.tsx} +3 -3
- package/src/ui/chrome/RuntimeStatusBar.tsx +108 -0
- package/src/ui/{Spinner.tsx → chrome/Spinner.tsx} +1 -1
- package/src/ui/{TopHeader.tsx → chrome/TopHeader.tsx} +54 -38
- package/src/ui/{UpdateAvailableCard.tsx → chrome/UpdateAvailableCard.tsx} +5 -5
- package/src/ui/{commandNormalize.ts → input/commandNormalize.ts} +1 -1
- package/src/ui/{focus.ts → input/focus.ts} +1 -1
- package/src/ui/{inputBuffer.ts → input/inputBuffer.ts} +3 -3
- package/src/ui/layout.ts +298 -24
- package/src/ui/{AttachmentImportPanel.tsx → panels/AttachmentImportPanel.tsx} +3 -3
- package/src/ui/{AuthPanel.tsx → panels/AuthPanel.tsx} +5 -5
- package/src/ui/{BackendPicker.tsx → panels/BackendPicker.tsx} +2 -2
- package/src/ui/{ModePicker.tsx → panels/ModePicker.tsx} +2 -2
- package/src/ui/{ModelPicker.tsx → panels/ModelPicker.tsx} +2 -2
- package/src/ui/{ModelPickerScreen.tsx → panels/ModelPickerScreen.tsx} +224 -42
- package/src/ui/{ModelReasoningPicker.tsx → panels/ModelReasoningPicker.tsx} +5 -5
- package/src/ui/{Panel.tsx → panels/Panel.tsx} +1 -1
- package/src/ui/{PermissionsPanel.tsx → panels/PermissionsPanel.tsx} +3 -3
- package/src/ui/{PlanActionPicker.tsx → panels/PlanActionPicker.tsx} +2 -2
- package/src/ui/{PlanReviewPanel.tsx → panels/PlanReviewPanel.tsx} +5 -5
- package/src/ui/panels/ProviderPicker.tsx +737 -0
- package/src/ui/{ReasoningPicker.tsx → panels/ReasoningPicker.tsx} +3 -3
- package/src/ui/{SelectionPanel.tsx → panels/SelectionPanel.tsx} +5 -1
- package/src/ui/{SettingsPanel.tsx → panels/SettingsPanel.tsx} +4 -4
- package/src/ui/{TextEntryPanel.tsx → panels/TextEntryPanel.tsx} +4 -4
- package/src/ui/{ThemePicker.tsx → panels/ThemePicker.tsx} +2 -2
- package/src/ui/{UpdatePromptPanel.tsx → panels/UpdatePromptPanel.tsx} +17 -23
- package/src/ui/{Markdown.tsx → render/Markdown.tsx} +2 -2
- package/src/ui/{diffRenderer.ts → render/diffRenderer.ts} +1 -1
- package/src/ui/{logoVariants.ts → render/logoVariants.ts} +4 -8
- package/src/ui/{modeDisplay.ts → render/modeDisplay.ts} +2 -2
- package/src/ui/{outputPipeline.ts → render/outputPipeline.ts} +2 -2
- package/src/ui/{runtimeDisplay.ts → render/runtimeDisplay.ts} +23 -10
- package/src/ui/{textLayout.ts → render/textLayout.ts} +15 -4
- package/src/ui/{ActionRequiredBlock.tsx → timeline/ActionRequiredBlock.tsx} +3 -3
- package/src/ui/{AgentBlock.tsx → timeline/AgentBlock.tsx} +10 -10
- package/src/ui/{StaticIntroItem.tsx → timeline/StaticIntroItem.tsx} +2 -2
- package/src/ui/{ThinkingBlock.tsx → timeline/ThinkingBlock.tsx} +4 -4
- package/src/ui/{Timeline.tsx → timeline/Timeline.tsx} +1620 -1471
- package/src/ui/timeline/TranscriptShell.tsx +322 -0
- package/src/ui/{TurnGroup.tsx → timeline/TurnGroup.tsx} +15 -15
- package/src/ui/timeline/layoutListWindow.ts +145 -0
- package/src/ui/{progressEntries.ts → timeline/progressEntries.ts} +3 -3
- package/src/ui/{runActivityView.ts → timeline/runActivityView.ts} +1 -1
- package/src/ui/{timelineMeasure.ts → timeline/timelineMeasure.ts} +206 -134
- package/src/core/codex.ts +0 -124
- package/src/ui/AppShell.tsx +0 -706
- package/src/ui/ProviderPicker.tsx +0 -321
- package/src/ui/StaticTranscriptItem.tsx +0 -56
- /package/src/core/{inputDebug.ts → debug/inputDebug.ts} +0 -0
- /package/src/core/{clipboard.ts → shared/clipboard.ts} +0 -0
- /package/src/core/{githubDiagnostics.ts → shared/githubDiagnostics.ts} +0 -0
- /package/src/core/{projectInstructions.ts → workspace/projectInstructions.ts} +0 -0
- /package/src/core/{workspaceActivity.ts → workspace/workspaceActivity.ts} +0 -0
- /package/src/core/{workspaceRoot.ts → workspace/workspaceRoot.ts} +0 -0
- /package/src/ui/{busyStatusAnimation.ts → chrome/busyStatusAnimation.ts} +0 -0
- /package/src/ui/{slashCommands.ts → input/slashCommands.ts} +0 -0
- /package/src/ui/{terminalAnswerFormat.ts → render/terminalAnswerFormat.ts} +0 -0
package/README.md
CHANGED
|
@@ -507,7 +507,11 @@ npm view @golba98/codexa versions --json
|
|
|
507
507
|
npm view @golba98/codexa dist-tags --json
|
|
508
508
|
```
|
|
509
509
|
|
|
510
|
-
If `dist-tags.latest` points to an older version,
|
|
510
|
+
If `dist-tags.latest` points to an older version, the registry may be slow to propagate. Wait a few minutes and retry, or install a specific version explicitly:
|
|
511
|
+
|
|
512
|
+
```bash
|
|
513
|
+
npm install -g @golba98/codexa@1.0.3
|
|
514
|
+
```
|
|
511
515
|
|
|
512
516
|
### `codexa --version` still shows an old version after updating
|
|
513
517
|
|
|
@@ -575,6 +579,12 @@ npm install -g @golba98/codexa@latest
|
|
|
575
579
|
|
|
576
580
|
Codexa checks for updates on startup and caches the result for 6 hours (stored in `~/.codexa-update-check.json`). The update notice only appears when the npm registry `latest` version is newer than the running version.
|
|
577
581
|
|
|
582
|
+
Published npm versions are immutable. Versions before the fixed update checker may not show update notices even when a newer package exists. If in doubt, update directly:
|
|
583
|
+
|
|
584
|
+
```bash
|
|
585
|
+
npm install -g @golba98/codexa@latest
|
|
586
|
+
```
|
|
587
|
+
|
|
578
588
|
If you expect a notice but don't see one:
|
|
579
589
|
|
|
580
590
|
1. Check the current registry state: `npm view @golba98/codexa dist-tags --json`
|
|
@@ -596,22 +606,11 @@ If you expect a notice but don't see one:
|
|
|
596
606
|
|
|
597
607
|
See [CHANGELOG.md](CHANGELOG.md) for the full release history.
|
|
598
608
|
|
|
599
|
-
**Current release: v1.0.
|
|
600
|
-
|
|
601
|
-
v1.0.3 is a package correctness and release-process fix:
|
|
602
|
-
- The installed `npm` package now shows the full Codexa UI (logo, header, workspace, provider)
|
|
603
|
-
- `APP_VERSION` in the package is guaranteed to match `package.json` at publish time
|
|
604
|
-
- Test files are excluded from the published tarball
|
|
605
|
-
- Semantic color-token system (`logoPrimary`, `text`, `textMuted`, etc.)
|
|
606
|
-
- Responsive ASCII logo with three fallback sizes
|
|
607
|
-
|
|
608
|
-
> Once v1.0.3 is published to npm, users on v1.0.2 will see the in-app update notice within 6 hours (cache TTL). To trigger it immediately: delete `~/.codexa-update-check.json` and restart Codexa.
|
|
609
|
-
|
|
610
|
-
## Repo Hygiene
|
|
609
|
+
**Current release: v1.0.4**
|
|
611
610
|
|
|
612
|
-
|
|
611
|
+
v1.0.4 is an update-notice reliability fix:
|
|
612
|
+
- Older installed versions can detect when npm `latest` is newer
|
|
613
|
+
- `/update check` bypasses stale cache and reports a useful status
|
|
614
|
+
- Failed registry lookups do not get cached as “up to date”
|
|
613
615
|
|
|
614
|
-
-
|
|
615
|
-
- `.claude/`
|
|
616
|
-
- `.env` and other local secret files
|
|
617
|
-
- Editor, OS, and cache files
|
|
616
|
+
> Versions before the fixed update checker may not show update notices. Update directly with `npm install -g @golba98/codexa@latest`.
|
package/bin/codexa.js
CHANGED
|
@@ -10,13 +10,10 @@ process.title = "CODEXA";
|
|
|
10
10
|
const currentFile = fileURLToPath(import.meta.url);
|
|
11
11
|
const packageRoot = dirname(dirname(currentFile));
|
|
12
12
|
const forwardArgs = process.argv.slice(2);
|
|
13
|
-
const workspaceRoot = process.cwd();
|
|
14
|
-
const launcherStartTimeMs = Number(process.env.CODEXA_EXEC_TIMING_EPOCH_MS) || Date.now();
|
|
15
|
-
let launcherPreviousElapsedMs = 0;
|
|
16
|
-
|
|
17
|
-
const titleSequenceDetectPattern = /\x1b\]([02]);([\s\S]*?)(?:\x07|\x1b\\)/g;
|
|
18
|
-
const incompleteTitleSequencePattern = /\x1b\](?:0|2);[^\x07]*$/;
|
|
19
|
-
let intendedTerminalTitle = "Codexa";
|
|
13
|
+
const workspaceRoot = process.cwd();
|
|
14
|
+
const launcherStartTimeMs = Number(process.env.CODEXA_EXEC_TIMING_EPOCH_MS) || Date.now();
|
|
15
|
+
let launcherPreviousElapsedMs = 0;
|
|
16
|
+
let intendedTerminalTitle = "Codexa";
|
|
20
17
|
|
|
21
18
|
function writeRenderDebugRecord(kind, fields) {
|
|
22
19
|
if (process.env.CODEXA_RENDER_DEBUG !== "1" && process.env.CODEXA_DEBUG_RENDER !== "1") {
|
|
@@ -24,10 +21,10 @@ function writeRenderDebugRecord(kind, fields) {
|
|
|
24
21
|
}
|
|
25
22
|
|
|
26
23
|
try {
|
|
27
|
-
const debugDir = join(workspaceRoot, ".codexa
|
|
28
|
-
mkdirSync(debugDir, { recursive: true });
|
|
29
|
-
appendFileSync(
|
|
30
|
-
join(debugDir, "render-
|
|
24
|
+
const debugDir = join(workspaceRoot, ".codexa", "debug");
|
|
25
|
+
mkdirSync(debugDir, { recursive: true });
|
|
26
|
+
appendFileSync(
|
|
27
|
+
process.env.CODEXA_RENDER_DEBUG_FILE?.trim() || join(debugDir, "render-status.log"),
|
|
31
28
|
JSON.stringify({
|
|
32
29
|
ts: Date.now(),
|
|
33
30
|
pid: process.pid,
|
|
@@ -58,11 +55,13 @@ function writeTerminalTitleDebugRecord(fields) {
|
|
|
58
55
|
return;
|
|
59
56
|
}
|
|
60
57
|
|
|
61
|
-
try {
|
|
62
|
-
const debugDir = join(workspaceRoot, ".codexa
|
|
63
|
-
mkdirSync(debugDir, { recursive: true });
|
|
64
|
-
appendFileSync(
|
|
65
|
-
process.env.CODEXA_TERMINAL_TITLE_DEBUG_FILE?.trim()
|
|
58
|
+
try {
|
|
59
|
+
const debugDir = join(workspaceRoot, ".codexa", "debug");
|
|
60
|
+
mkdirSync(debugDir, { recursive: true });
|
|
61
|
+
appendFileSync(
|
|
62
|
+
process.env.CODEXA_TERMINAL_TITLE_DEBUG_FILE?.trim()
|
|
63
|
+
|| process.env.CODEXA_RENDER_DEBUG_FILE?.trim()
|
|
64
|
+
|| join(debugDir, "render-status.log"),
|
|
66
65
|
JSON.stringify({
|
|
67
66
|
ts: Date.now(),
|
|
68
67
|
pid: process.pid,
|
|
@@ -76,26 +75,7 @@ function writeTerminalTitleDebugRecord(fields) {
|
|
|
76
75
|
}
|
|
77
76
|
}
|
|
78
77
|
|
|
79
|
-
function
|
|
80
|
-
if (!text) return false;
|
|
81
|
-
let found = false;
|
|
82
|
-
titleSequenceDetectPattern.lastIndex = 0;
|
|
83
|
-
for (let match = titleSequenceDetectPattern.exec(text); match; match = titleSequenceDetectPattern.exec(text)) {
|
|
84
|
-
found = true;
|
|
85
|
-
const title = match[2] || "";
|
|
86
|
-
writeTerminalTitleDebugRecord({
|
|
87
|
-
event: "terminalTitleSequence",
|
|
88
|
-
osc: match[1] === "2" ? "OSC 2" : "OSC 0",
|
|
89
|
-
title,
|
|
90
|
-
containsWindowsSystem: title.toLowerCase().includes("c:\\windows\\system"),
|
|
91
|
-
bytes: Buffer.byteLength(match[0] || ""),
|
|
92
|
-
...fields,
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
return found;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
function sanitizeTerminalTitle(title) {
|
|
78
|
+
function sanitizeTerminalTitle(title) {
|
|
99
79
|
return String(title ?? "")
|
|
100
80
|
.replace(/[\u0000-\u001f\u007f]/g, " ")
|
|
101
81
|
.replace(/\x1b/g, "")
|
|
@@ -110,63 +90,22 @@ function normalizeTerminalTitle(title) {
|
|
|
110
90
|
return cleanTitle;
|
|
111
91
|
}
|
|
112
92
|
|
|
113
|
-
function
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
});
|
|
130
|
-
process.stdout.write(sequence);
|
|
131
|
-
writeTerminalTitleDebugRecord({
|
|
132
|
-
event: "codexaTitleWrite",
|
|
133
|
-
source: `bin/codexa.js:${reason}`,
|
|
134
|
-
title: intendedTerminalTitle,
|
|
135
|
-
reason,
|
|
136
|
-
force,
|
|
137
|
-
bytes: Buffer.byteLength(sequence),
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
function startLauncherTitleGuard() {
|
|
142
|
-
const startedAt = Date.now();
|
|
143
|
-
const interval = setInterval(() => {
|
|
144
|
-
if (Date.now() - startedAt >= 2500) {
|
|
145
|
-
clearInterval(interval);
|
|
146
|
-
writeIntendedTitle("launcher-title-guard-end");
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
writeIntendedTitle("launcher-title-guard");
|
|
150
|
-
}, 150);
|
|
151
|
-
interval.unref?.();
|
|
152
|
-
return () => clearInterval(interval);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
function createTitleStripper(fields) {
|
|
156
|
-
let carryover = "";
|
|
157
|
-
return (chunk) => {
|
|
158
|
-
const input = carryover + Buffer.from(chunk).toString("utf8");
|
|
159
|
-
carryover = "";
|
|
160
|
-
const incomplete = incompleteTitleSequencePattern.exec(input);
|
|
161
|
-
const processable = incomplete?.index != null ? input.slice(0, incomplete.index) : input;
|
|
162
|
-
if (incomplete?.index != null) {
|
|
163
|
-
carryover = input.slice(incomplete.index);
|
|
164
|
-
}
|
|
165
|
-
return traceTitleSequences(processable, fields)
|
|
166
|
-
? processable.replace(titleSequencePattern, "")
|
|
167
|
-
: processable;
|
|
168
|
-
};
|
|
169
|
-
}
|
|
93
|
+
function recordIntendedTitle(reason, force = true) {
|
|
94
|
+
writeTerminalTitleDebugRecord({
|
|
95
|
+
event: "codexaTitleSkipped",
|
|
96
|
+
source: `bin/codexa.js:${reason}`,
|
|
97
|
+
title: intendedTerminalTitle,
|
|
98
|
+
reason,
|
|
99
|
+
force,
|
|
100
|
+
});
|
|
101
|
+
writeRenderDebugRecord("title", {
|
|
102
|
+
event: "launcherTitleSkipped",
|
|
103
|
+
source: `bin/codexa.js:${reason}`,
|
|
104
|
+
title: intendedTerminalTitle,
|
|
105
|
+
reason,
|
|
106
|
+
force,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
170
109
|
|
|
171
110
|
function hasFlag(args, longFlag, shortFlag) {
|
|
172
111
|
for (const arg of args) {
|
|
@@ -251,12 +190,10 @@ function markExecTiming(phase, fields = {}) {
|
|
|
251
190
|
|
|
252
191
|
markExecTiming("launcher_start", { pid: process.pid });
|
|
253
192
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
stopLauncherTitleGuard = startLauncherTitleGuard();
|
|
259
|
-
}
|
|
193
|
+
if (!isHeadlessMode && parentHasTTY) {
|
|
194
|
+
intendedTerminalTitle = normalizeTerminalTitle(process.env.CODEXA_INITIAL_TERMINAL_TITLE || "Codexa");
|
|
195
|
+
recordIntendedTitle("launcher-startup-title-disabled");
|
|
196
|
+
}
|
|
260
197
|
|
|
261
198
|
if (!isHeadlessMode && hasFlag(forwardArgs, "--help", "-h")) {
|
|
262
199
|
printHelp();
|
|
@@ -334,10 +271,10 @@ debugLaunch("resolved launch mode", {
|
|
|
334
271
|
childStdio,
|
|
335
272
|
});
|
|
336
273
|
|
|
337
|
-
markExecTiming("bun_spawn_start", { executable: bunExecutable });
|
|
338
|
-
if (!isHeadlessMode && parentHasTTY) {
|
|
339
|
-
|
|
340
|
-
}
|
|
274
|
+
markExecTiming("bun_spawn_start", { executable: bunExecutable });
|
|
275
|
+
if (!isHeadlessMode && parentHasTTY) {
|
|
276
|
+
recordIntendedTitle("before-bun-spawn-disabled");
|
|
277
|
+
}
|
|
341
278
|
|
|
342
279
|
const child = spawn(
|
|
343
280
|
bunExecutable,
|
|
@@ -361,13 +298,11 @@ const child = spawn(
|
|
|
361
298
|
},
|
|
362
299
|
);
|
|
363
300
|
|
|
364
|
-
child.once("spawn", () => {
|
|
365
|
-
if (!isHeadlessMode && parentHasTTY) {
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
}
|
|
370
|
-
});
|
|
301
|
+
child.once("spawn", () => {
|
|
302
|
+
if (!isHeadlessMode && parentHasTTY) {
|
|
303
|
+
recordIntendedTitle("after-bun-spawn-disabled");
|
|
304
|
+
}
|
|
305
|
+
});
|
|
371
306
|
|
|
372
307
|
if (!isHeadlessMode && !parentHasTTY) {
|
|
373
308
|
const mouseFilter = createMouseFilter();
|
|
@@ -395,46 +330,29 @@ if (!isHeadlessMode && !parentHasTTY) {
|
|
|
395
330
|
});
|
|
396
331
|
}
|
|
397
332
|
|
|
398
|
-
if (!isHeadlessMode) {
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
});
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
child.stdout?.on("data", (chunk) => {
|
|
413
|
-
const safeChunk = stripStdoutTitle(chunk);
|
|
414
|
-
if (safeChunk) process.stdout.write(safeChunk);
|
|
415
|
-
});
|
|
416
|
-
child.stderr?.on("data", (chunk) => {
|
|
417
|
-
const safeChunk = stripStderrTitle(chunk);
|
|
418
|
-
if (safeChunk) process.stderr.write(safeChunk);
|
|
419
|
-
});
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
child.on("error", (error) => {
|
|
423
|
-
if (!isHeadlessMode && parentHasTTY) {
|
|
424
|
-
writeIntendedTitle("bun-spawn-error");
|
|
425
|
-
}
|
|
333
|
+
if (!isHeadlessMode) {
|
|
334
|
+
child.stdout?.on("data", (chunk) => {
|
|
335
|
+
process.stdout.write(chunk);
|
|
336
|
+
});
|
|
337
|
+
child.stderr?.on("data", (chunk) => {
|
|
338
|
+
process.stderr.write(chunk);
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
child.on("error", (error) => {
|
|
343
|
+
if (!isHeadlessMode && parentHasTTY) {
|
|
344
|
+
recordIntendedTitle("bun-spawn-error-disabled");
|
|
345
|
+
}
|
|
426
346
|
markExecTiming("bun_spawn_error", { message: error.message });
|
|
427
347
|
console.error(`Failed to launch Bun: ${error.message}`);
|
|
428
348
|
console.error("Bun is required to launch codexa. Install Bun, then run this command again.");
|
|
429
349
|
process.exit(1);
|
|
430
350
|
});
|
|
431
351
|
|
|
432
|
-
child.on("close", (code, signal) => {
|
|
433
|
-
if (!isHeadlessMode && parentHasTTY) {
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
stopLauncherTitleGuard = null;
|
|
437
|
-
}
|
|
352
|
+
child.on("close", (code, signal) => {
|
|
353
|
+
if (!isHeadlessMode && parentHasTTY) {
|
|
354
|
+
recordIntendedTitle("bun-close-disabled");
|
|
355
|
+
}
|
|
438
356
|
markExecTiming("launcher_exit", { exit_code: code ?? 0, signal: signal ?? null });
|
|
439
357
|
if (signal) {
|
|
440
358
|
process.kill(process.pid, signal);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@golba98/codexa",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "Terminal UI for Codexa — TypeScript + Bun + Ink",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
"start": "bun run --silent src/index.tsx",
|
|
11
11
|
"dev": "bun --watch --silent src/index.tsx",
|
|
12
12
|
"dev:run": "node scripts/run-local-dev.mjs",
|
|
13
|
-
"install:dev-bin": "node scripts/install-local-dev-bin.mjs",
|
|
14
|
-
"
|
|
13
|
+
"install:dev-bin": "node scripts/install-local-dev-bin.mjs",
|
|
14
|
+
"debug:claude-models": "bun run --silent src/core/providerRuntime/claudeCodeDiscoveryDebug.ts",
|
|
15
|
+
"typecheck": "tsc --noEmit",
|
|
15
16
|
"test": "bun test",
|
|
16
17
|
"audit:codexa-gap": "node scripts/audit-codexa-capabilities.mjs",
|
|
17
18
|
"smoke:terminal-bench": "node scripts/smoke-terminal-bench.mjs",
|