@golba98/codexa 1.0.2 → 1.0.4

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.
Files changed (206) hide show
  1. package/README.md +396 -100
  2. package/bin/codexa.js +62 -144
  3. package/package.json +14 -8
  4. package/src/app.tsx +596 -306
  5. package/src/commands/handler.ts +6 -6
  6. package/src/config/buildInfo.ts +2 -2
  7. package/src/config/layeredConfig.ts +1 -1
  8. package/src/config/persistence.ts +10 -0
  9. package/src/config/runtimeConfig.ts +1 -1
  10. package/src/config/settings.ts +8 -16
  11. package/src/config/trustStore.ts +1 -1
  12. package/src/config/updateCheckCache.ts +19 -1
  13. package/src/core/README.md +52 -0
  14. package/src/core/agent/loop.ts +282 -0
  15. package/src/core/agent/protocol.ts +211 -0
  16. package/src/core/agent/tools.ts +414 -0
  17. package/src/core/{codexExecArgs.ts → codex/codexExecArgs.ts} +2 -2
  18. package/src/core/{codexLaunch.ts → codex/codexLaunch.ts} +3 -3
  19. package/src/core/{codexPrompt.ts → codex/codexPrompt.ts} +3 -3
  20. package/src/core/debug/modelStateDebug.ts +34 -0
  21. package/src/core/executables/antigravityExecutable.ts +48 -0
  22. package/src/core/executables/codexExecutable.ts +1 -0
  23. package/src/core/executables/executableResolver.ts +65 -43
  24. package/src/core/perf/renderDebug.ts +10 -6
  25. package/src/core/process/processValidation.ts +9 -5
  26. package/src/core/providerLauncher/launcher.ts +59 -42
  27. package/src/core/providerLauncher/registry.ts +30 -14
  28. package/src/core/providerLauncher/types.ts +11 -9
  29. package/src/core/providerLauncher/workspaceConfig.ts +41 -26
  30. package/src/core/providerRuntime/anthropic.ts +7 -1
  31. package/src/core/providerRuntime/antigravity.ts +305 -0
  32. package/src/core/providerRuntime/claudeCodeDiscovery.ts +268 -22
  33. package/src/core/providerRuntime/claudeCodeDiscoveryDebug.ts +55 -0
  34. package/src/core/providerRuntime/contextMetadata.ts +12 -24
  35. package/src/core/providerRuntime/local.ts +129 -51
  36. package/src/core/providerRuntime/models.ts +22 -11
  37. package/src/core/providerRuntime/registry.ts +58 -31
  38. package/src/core/providerRuntime/types.ts +19 -14
  39. package/src/core/providers/codexSubprocess.ts +2 -2
  40. package/src/core/providers/types.ts +1 -1
  41. package/src/core/{attachments.ts → shared/attachments.ts} +27 -4
  42. package/src/core/{cleanupFastFail.ts → shared/cleanupFastFail.ts} +1 -1
  43. package/src/core/{hollowResponseFormat.ts → shared/hollowResponseFormat.ts} +1 -1
  44. package/src/core/terminal/clearFrameBoundary.ts +814 -0
  45. package/src/core/terminal/frameLock.ts +109 -0
  46. package/src/core/terminal/inkRenderReset.ts +123 -0
  47. package/src/core/terminal/terminalControl.ts +22 -0
  48. package/src/core/terminal/terminalTitle.ts +16 -102
  49. package/src/core/version/channel.ts +23 -0
  50. package/src/core/version/updateCheck.ts +193 -0
  51. package/src/core/{launchContext.ts → workspace/launchContext.ts} +32 -39
  52. package/src/core/{planStorage.ts → workspace/planStorage.ts} +2 -2
  53. package/src/core/{workspaceGuard.ts → workspace/workspaceGuard.ts} +97 -13
  54. package/src/headless/execRunner.ts +2 -2
  55. package/src/index.tsx +43 -89
  56. package/src/session/appSession.ts +10 -7
  57. package/src/session/chatLifecycle.ts +1 -1
  58. package/src/session/liveRenderScheduler.ts +1 -1
  59. package/src/session/types.ts +3 -2
  60. package/src/ui/ActionRequiredBlock.tsx +5 -5
  61. package/src/ui/ActivityBars.tsx +3 -3
  62. package/src/ui/ActivityIndicator.tsx +6 -6
  63. package/src/ui/AgentBlock.tsx +6 -6
  64. package/src/ui/AnimatedStatusText.tsx +1 -1
  65. package/src/ui/AppShell.tsx +670 -719
  66. package/src/ui/AttachmentImportPanel.tsx +8 -8
  67. package/src/ui/AuthPanel.tsx +20 -20
  68. package/src/ui/BottomComposer.tsx +158 -118
  69. package/src/ui/DashCard.tsx +3 -3
  70. package/src/ui/Markdown.tsx +17 -17
  71. package/src/ui/ModelPickerScreen.tsx +222 -42
  72. package/src/ui/ModelReasoningPicker.tsx +15 -15
  73. package/src/ui/Panel.tsx +3 -3
  74. package/src/ui/PlanActionPicker.tsx +6 -6
  75. package/src/ui/PlanReviewPanel.tsx +9 -9
  76. package/src/ui/ProviderPicker.tsx +735 -321
  77. package/src/ui/RunFooter.tsx +3 -3
  78. package/src/ui/RuntimeStatusBar.tsx +108 -0
  79. package/src/ui/SelectionPanel.tsx +8 -4
  80. package/src/ui/SettingsPanel.tsx +9 -9
  81. package/src/ui/Spinner.tsx +1 -1
  82. package/src/ui/TextEntryPanel.tsx +11 -11
  83. package/src/ui/ThinkingBlock.tsx +8 -8
  84. package/src/ui/Timeline.tsx +1625 -1472
  85. package/src/ui/TopHeader.tsx +437 -293
  86. package/src/ui/TranscriptShell.tsx +322 -0
  87. package/src/ui/TurnGroup.tsx +33 -33
  88. package/src/ui/UpdateAvailableCard.tsx +41 -0
  89. package/src/ui/UpdatePromptPanel.tsx +197 -0
  90. package/src/ui/focus.ts +3 -0
  91. package/src/ui/layout.ts +299 -25
  92. package/src/ui/layoutListWindow.ts +145 -0
  93. package/src/ui/logoVariants.ts +103 -0
  94. package/src/ui/modeDisplay.ts +12 -12
  95. package/src/ui/runtimeDisplay.ts +112 -0
  96. package/src/ui/textLayout.ts +15 -4
  97. package/src/ui/theme.tsx +274 -395
  98. package/src/ui/timelineMeasure.ts +218 -136
  99. package/scripts/audit-codexa-capabilities.mjs +0 -466
  100. package/scripts/gen-build-info.mjs +0 -33
  101. package/scripts/smoke-terminal-bench.mjs +0 -35
  102. package/src/appRenderStability.test.ts +0 -131
  103. package/src/commands/handler.test.ts +0 -655
  104. package/src/config/launchArgs.test.ts +0 -189
  105. package/src/config/layeredConfig.test.ts +0 -143
  106. package/src/config/persistence.test.ts +0 -114
  107. package/src/config/runtimeConfig.test.ts +0 -218
  108. package/src/config/settings.test.ts +0 -155
  109. package/src/config/trustStore.test.ts +0 -29
  110. package/src/core/attachments.test.ts +0 -155
  111. package/src/core/auth/codexAuth.test.ts +0 -68
  112. package/src/core/cleanupFastFail.test.ts +0 -76
  113. package/src/core/codex.ts +0 -124
  114. package/src/core/codexExecArgs.test.ts +0 -195
  115. package/src/core/codexLaunch.test.ts +0 -205
  116. package/src/core/codexPrompt.test.ts +0 -252
  117. package/src/core/executables/codexExecutable.test.ts +0 -212
  118. package/src/core/executables/executableResolver.test.ts +0 -129
  119. package/src/core/executables/geminiExecutable.test.ts +0 -116
  120. package/src/core/executables/pathSanityScan.test.ts +0 -47
  121. package/src/core/githubDiagnostics.test.ts +0 -92
  122. package/src/core/hollowResponseFormat.test.ts +0 -58
  123. package/src/core/launchContext.test.ts +0 -157
  124. package/src/core/models/codexCapabilities.test.ts +0 -45
  125. package/src/core/models/codexModelCapabilities.test.ts +0 -246
  126. package/src/core/models/modelSpecs.test.ts +0 -283
  127. package/src/core/perf/renderDebug.test.ts +0 -230
  128. package/src/core/planStorage.test.ts +0 -143
  129. package/src/core/process/CommandRunner.test.ts +0 -105
  130. package/src/core/projectInstructions.test.ts +0 -50
  131. package/src/core/providerLauncher/launcher.test.ts +0 -238
  132. package/src/core/providerLauncher/registry.test.ts +0 -324
  133. package/src/core/providerLauncher/workspaceConfig.test.ts +0 -638
  134. package/src/core/providerRuntime/anthropic.test.ts +0 -1120
  135. package/src/core/providerRuntime/capabilityProfile.test.ts +0 -311
  136. package/src/core/providerRuntime/contextMetadata.test.ts +0 -468
  137. package/src/core/providerRuntime/gemini.test.ts +0 -437
  138. package/src/core/providerRuntime/lmstudio.test.ts +0 -168
  139. package/src/core/providerRuntime/local.test.ts +0 -787
  140. package/src/core/providerRuntime/registry.test.ts +0 -233
  141. package/src/core/providers/codexJsonStream.test.ts +0 -148
  142. package/src/core/providers/codexSubprocess.test.ts +0 -68
  143. package/src/core/providers/codexTranscript.test.ts +0 -284
  144. package/src/core/terminal/startupClear.test.ts +0 -55
  145. package/src/core/terminal/terminalCapabilities.test.ts +0 -93
  146. package/src/core/terminal/terminalControl.test.ts +0 -75
  147. package/src/core/terminal/terminalSanitize.test.ts +0 -22
  148. package/src/core/terminal/terminalSelection.test.ts +0 -42
  149. package/src/core/terminal/terminalTitle.test.ts +0 -328
  150. package/src/core/updateCheck.test.ts +0 -194
  151. package/src/core/updateCheck.ts +0 -172
  152. package/src/core/workspaceActivity.test.ts +0 -163
  153. package/src/core/workspaceGuard.test.ts +0 -151
  154. package/src/core/workspaceRoot.test.ts +0 -23
  155. package/src/exec.test.ts +0 -13
  156. package/src/headless/execArgs.test.ts +0 -147
  157. package/src/headless/execRunner.test.ts +0 -436
  158. package/src/index.test.tsx +0 -620
  159. package/src/session/appSession.test.ts +0 -897
  160. package/src/session/chatLifecycle.test.ts +0 -64
  161. package/src/session/liveRenderScheduler.test.ts +0 -201
  162. package/src/session/planFlow.test.ts +0 -103
  163. package/src/session/planTranscript.test.ts +0 -65
  164. package/src/session/promptRunSchedule.test.ts +0 -36
  165. package/src/ui/ActivityIndicator.test.tsx +0 -58
  166. package/src/ui/AgentBlock.test.ts +0 -6
  167. package/src/ui/AnimatedStatusText.test.ts +0 -16
  168. package/src/ui/AppShell.test.tsx +0 -1776
  169. package/src/ui/AttachmentImportPanel.test.tsx +0 -204
  170. package/src/ui/BottomComposer.test.ts +0 -674
  171. package/src/ui/CodexLogo.tsx +0 -55
  172. package/src/ui/Markdown.test.ts +0 -157
  173. package/src/ui/ModelPickerProviderScope.test.tsx +0 -411
  174. package/src/ui/ModelPickerScreen.test.tsx +0 -99
  175. package/src/ui/ModelPickerState.test.tsx +0 -151
  176. package/src/ui/ModelReasoningPicker.test.tsx +0 -447
  177. package/src/ui/PlanReviewPanel.test.tsx +0 -267
  178. package/src/ui/PromptCardBorder.test.tsx +0 -161
  179. package/src/ui/ProviderPicker.test.tsx +0 -289
  180. package/src/ui/ProviderShortcut.test.tsx +0 -143
  181. package/src/ui/SettingsPanel.test.tsx +0 -233
  182. package/src/ui/StaticTranscriptItem.tsx +0 -56
  183. package/src/ui/Timeline.test.ts +0 -2067
  184. package/src/ui/TimelineNavigation.test.tsx +0 -201
  185. package/src/ui/TopHeader.test.tsx +0 -254
  186. package/src/ui/TurnGroup.test.tsx +0 -365
  187. package/src/ui/busyStatusAnimation.test.ts +0 -30
  188. package/src/ui/commandNormalize.test.ts +0 -142
  189. package/src/ui/diffRenderer.test.ts +0 -102
  190. package/src/ui/focusFlow.test.tsx +0 -1098
  191. package/src/ui/inputBuffer.test.ts +0 -151
  192. package/src/ui/layout.test.ts +0 -146
  193. package/src/ui/modeDisplay.test.ts +0 -42
  194. package/src/ui/runActivityView.test.ts +0 -89
  195. package/src/ui/runLifecycleView.test.tsx +0 -237
  196. package/src/ui/statusRenderIsolation.test.tsx +0 -654
  197. package/src/ui/terminalAnswerFormat.test.ts +0 -19
  198. package/src/ui/textLayout.test.ts +0 -18
  199. package/src/ui/themeFlow.test.ts +0 -53
  200. package/src/ui/timelineMeasureCache.test.ts +0 -986
  201. /package/src/core/{inputDebug.ts → debug/inputDebug.ts} +0 -0
  202. /package/src/core/{clipboard.ts → shared/clipboard.ts} +0 -0
  203. /package/src/core/{githubDiagnostics.ts → shared/githubDiagnostics.ts} +0 -0
  204. /package/src/core/{projectInstructions.ts → workspace/projectInstructions.ts} +0 -0
  205. /package/src/core/{workspaceActivity.ts → workspace/workspaceActivity.ts} +0 -0
  206. /package/src/core/{workspaceRoot.ts → workspace/workspaceRoot.ts} +0 -0
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
- const titleSequencePattern = /\x1b\](?:0|2);[^\x07]*(?:\x07|\x1b\\)/g;
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-debug");
28
- mkdirSync(debugDir, { recursive: true });
29
- appendFileSync(
30
- join(debugDir, "render-debug.log"),
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-debug");
63
- mkdirSync(debugDir, { recursive: true });
64
- appendFileSync(
65
- process.env.CODEXA_TERMINAL_TITLE_DEBUG_FILE?.trim() || join(debugDir, "terminal-title-debug.log"),
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 traceTitleSequences(text, fields) {
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 buildTitleSequence(title) {
114
- const safeTitle = normalizeTerminalTitle(title);
115
- return `\x1b]0;${safeTitle}\x07\x1b]2;${safeTitle}\x07`;
116
- }
117
-
118
- function writeIntendedTitle(reason, force = true) {
119
- const sequence = buildTitleSequence(intendedTerminalTitle);
120
- writeRenderDebugRecord("stdout", {
121
- event: "directWrite",
122
- source: `bin/codexa.js:${reason}`,
123
- bytes: Buffer.byteLength(sequence),
124
- containsViewportClear: false,
125
- containsScrollbackClear: false,
126
- containsCursorHome: false,
127
- containsTerminalReset: false,
128
- containsTitleSequence: true,
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
- let stopLauncherTitleGuard = null;
255
- if (!isHeadlessMode && parentHasTTY) {
256
- intendedTerminalTitle = normalizeTerminalTitle(process.env.CODEXA_INITIAL_TERMINAL_TITLE || "Codexa");
257
- writeIntendedTitle("launcher-startup-title");
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
- writeIntendedTitle("before-bun-spawn");
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
- writeIntendedTitle("after-bun-spawn");
367
- stopLauncherTitleGuard?.();
368
- stopLauncherTitleGuard = null;
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
- const stripStdoutTitle = createTitleStripper({
400
- source: "bin/codexa.js:bun.stdout",
401
- stream: "stdout",
402
- origin: "child",
403
- action: "stripped",
404
- });
405
- const stripStderrTitle = createTitleStripper({
406
- source: "bin/codexa.js:bun.stderr",
407
- stream: "stderr",
408
- origin: "child",
409
- action: "stripped",
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
- writeIntendedTitle("bun-close");
435
- stopLauncherTitleGuard?.();
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.2",
3
+ "version": "1.0.4",
4
4
  "description": "Terminal UI for Codexa — TypeScript + Bun + Ink",
5
5
  "type": "module",
6
6
  "bin": {
@@ -9,24 +9,30 @@
9
9
  "scripts": {
10
10
  "start": "bun run --silent src/index.tsx",
11
11
  "dev": "bun --watch --silent src/index.tsx",
12
- "typecheck": "tsc --noEmit",
12
+ "dev:run": "node scripts/run-local-dev.mjs",
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",
13
16
  "test": "bun test",
14
17
  "audit:codexa-gap": "node scripts/audit-codexa-capabilities.mjs",
15
18
  "smoke:terminal-bench": "node scripts/smoke-terminal-bench.mjs",
16
19
  "gen-build-info": "node scripts/gen-build-info.mjs",
17
20
  "build": "bun run gen-build-info && bun run typecheck",
18
- "prepublishOnly": "npm run typecheck && npm test"
21
+ "prepublishOnly": "npm run gen-build-info && npm run typecheck && npm test"
19
22
  },
20
23
  "dependencies": {
21
24
  "ink": "^7.0.0",
22
25
  "ink-select-input": "^6.2.0",
23
26
  "react": "^19.2.5",
24
- "react-dom": "^19.2.5"
27
+ "react-dom": "^19.2.6"
25
28
  },
26
29
  "devDependencies": {
27
- "@types/node": "^25.5.2",
30
+ "@types/node": "^25.9.1",
28
31
  "@types/react": "^19.2.14",
29
- "typescript": "^6.0.2"
32
+ "typescript": "^6.0.3"
33
+ },
34
+ "overrides": {
35
+ "ws": "^8.21.0"
30
36
  },
31
37
  "repository": {
32
38
  "type": "git",
@@ -40,7 +46,7 @@
40
46
  "files": [
41
47
  "bin/",
42
48
  "src/",
43
- "scripts/",
44
- "config.toml"
49
+ "!src/**/*.test.ts",
50
+ "!src/**/*.test.tsx"
45
51
  ]
46
52
  }