@jiawang1209/codex-hud 0.1.5 → 0.1.7
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/CHANGELOG.md +7 -0
- package/README.md +62 -6
- package/dist/installer.d.ts +2 -0
- package/dist/installer.js +12 -4
- package/dist/installer.js.map +1 -1
- package/dist/native-runner.d.ts +6 -3
- package/dist/native-runner.js +42 -10
- package/dist/native-runner.js.map +1 -1
- package/dist/sources/codex.js +2 -2
- package/dist/sources/codex.js.map +1 -1
- package/docs/installation.md +11 -0
- package/docs/native-codex-cli-patch.md +1 -1
- package/package.json +1 -1
- package/patches/codex-cli-command-statusline.patch +10 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
- Add Windows native shim support with `codex.cmd` and `codex-hud.cmd status` for command-backed HUD injection.
|
|
6
|
+
- Use npm's global shim directory as the default Windows shim target, with backup/restore for existing official `codex.cmd` shims.
|
|
7
|
+
- Run command-backed status lines through `cmd.exe /C` on native Windows while keeping `sh -lc` for macOS, Linux, and WSL.
|
|
8
|
+
- Document the difference between Codex CLI built-in status-line items and the exact `codex-hud status` renderer.
|
|
9
|
+
|
|
3
10
|
## 0.1.1
|
|
4
11
|
|
|
5
12
|
- Clarify npm, source, and Marketplace installation paths in the README.
|
package/README.md
CHANGED
|
@@ -77,18 +77,26 @@ Install the package:
|
|
|
77
77
|
npm install -g @jiawang1209/codex-hud
|
|
78
78
|
```
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
Install the native HUD adapter and launch Codex:
|
|
81
81
|
|
|
82
82
|
```bash
|
|
83
|
-
codex-hud
|
|
83
|
+
codex-hud install
|
|
84
|
+
codex-hud doctor
|
|
84
85
|
codex
|
|
85
86
|
```
|
|
86
87
|
|
|
87
|
-
This is the
|
|
88
|
+
This is the recommended path on macOS, Linux, and Windows. The command is the same on each platform; `codex-hud install` chooses the right shim internally:
|
|
89
|
+
|
|
90
|
+
| Platform | Shim | Footer command |
|
|
91
|
+
| --- | --- | --- |
|
|
92
|
+
| macOS/Linux | `codex` | `codex-hud status` |
|
|
93
|
+
| Windows | `codex.cmd` | `codex-hud.cmd status` |
|
|
94
|
+
|
|
95
|
+
After installation, the bottom footer uses the same renderer as `codex-hud status`, so the style and rate-limit data match across macOS and Windows.
|
|
88
96
|
|
|
89
97
|
## Native Auto-Launch
|
|
90
98
|
|
|
91
|
-
|
|
99
|
+
`codex-hud install` builds a patched Codex CLI adapter and installs a reversible `codex` shim. After that, the normal `codex` command launches Codex with the Codex HUD renderer wired into the footer.
|
|
92
100
|
|
|
93
101
|
macOS prerequisites:
|
|
94
102
|
|
|
@@ -102,16 +110,64 @@ Linux, Debian/Ubuntu prerequisites:
|
|
|
102
110
|
sudo apt install -y git cargo tmux
|
|
103
111
|
```
|
|
104
112
|
|
|
113
|
+
Windows, PowerShell prerequisites:
|
|
114
|
+
|
|
115
|
+
```powershell
|
|
116
|
+
winget install Git.Git Rustlang.Rustup
|
|
117
|
+
```
|
|
118
|
+
|
|
105
119
|
Install and launch:
|
|
106
120
|
|
|
107
121
|
```bash
|
|
108
122
|
codex-hud install
|
|
123
|
+
codex-hud doctor
|
|
124
|
+
codex
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
If `codex` still resolves to the official binary after install, put the shim directory before the existing Codex binary in `PATH`.
|
|
128
|
+
|
|
129
|
+
On Windows, `codex-hud install` writes `codex.cmd` and injects `codex-hud.cmd status` so PowerShell execution policy does not block npm's `.ps1` shim. The default Windows shim directory is npm's global shim directory under `%APPDATA%\npm`. If an official `codex.cmd` already exists there, Codex HUD backs it up before installing its own shim and restores it during `codex-hud uninstall-shim`.
|
|
130
|
+
|
|
131
|
+
### Windows: PowerShell/CMD and WSL
|
|
132
|
+
|
|
133
|
+
Windows has two supported install styles. Keep them separate so the correct shim is first in `PATH`.
|
|
134
|
+
|
|
135
|
+
PowerShell or CMD uses the native Windows `.cmd` shim:
|
|
136
|
+
|
|
137
|
+
```powershell
|
|
138
|
+
npm install -g @openai/codex
|
|
139
|
+
npm install -g @jiawang1209/codex-hud
|
|
140
|
+
codex-hud install
|
|
141
|
+
where codex
|
|
142
|
+
codex-hud doctor
|
|
143
|
+
codex
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
`where codex` should list the Codex HUD shim first, usually under `C:\Users\<you>\AppData\Roaming\npm\codex.cmd`. This path launches `codex-hud.cmd status` in the footer. Use `codex-hud install --bin-dir <path>` only if you want a different shim directory.
|
|
147
|
+
|
|
148
|
+
WSL uses the Linux shim inside WSL:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
npm install -g @openai/codex
|
|
152
|
+
npm install -g @jiawang1209/codex-hud
|
|
153
|
+
codex-hud install
|
|
154
|
+
which codex
|
|
155
|
+
codex-hud doctor
|
|
109
156
|
codex
|
|
110
157
|
```
|
|
111
158
|
|
|
112
|
-
|
|
159
|
+
`which codex` should point to the WSL/Linux shim, usually under `~/.local/bin/codex`. Do not mix the Windows `codex.cmd` path into WSL, and do not use the WSL shim from PowerShell.
|
|
160
|
+
|
|
161
|
+
## Built-In Status Line Fallback
|
|
162
|
+
|
|
163
|
+
If you cannot build the native adapter, configure Codex CLI's built-in status line instead:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
codex-hud setup
|
|
167
|
+
codex
|
|
168
|
+
```
|
|
113
169
|
|
|
114
|
-
|
|
170
|
+
This fallback uses Codex CLI's supported native status-line items. It is useful, but it is not the full Codex HUD renderer, so the style and rate-limit percentages can differ from `codex-hud status`.
|
|
115
171
|
|
|
116
172
|
## HUD Pane Mode
|
|
117
173
|
|
package/dist/installer.d.ts
CHANGED
package/dist/installer.js
CHANGED
|
@@ -33,13 +33,16 @@ export function defaultCodexSource() {
|
|
|
33
33
|
return path.join(os.homedir(), ".codex-hud", "native", "openai-codex");
|
|
34
34
|
}
|
|
35
35
|
export function buildInstallPlan(options) {
|
|
36
|
+
const platform = options.platform ?? process.platform;
|
|
36
37
|
const codexSource = options.codexSource ?? defaultCodexSource();
|
|
37
|
-
const
|
|
38
|
-
const
|
|
38
|
+
const codexBinaryName = platform === "win32" ? "codex.exe" : "codex";
|
|
39
|
+
const codexBinary = path.join(codexSource, "codex-rs", "target", "debug", codexBinaryName);
|
|
40
|
+
const binDir = options.binDir ?? defaultShimBinDir({ env: options.env, platform });
|
|
41
|
+
const shimName = platform === "win32" ? "codex.cmd" : "codex";
|
|
39
42
|
return {
|
|
40
43
|
codexSource,
|
|
41
44
|
codexBinary,
|
|
42
|
-
shimPath: path.join(binDir,
|
|
45
|
+
shimPath: path.join(binDir, shimName),
|
|
43
46
|
commands: [
|
|
44
47
|
["git", "clone", "--depth", "1", "--branch", "rust-v0.131.0", "https://github.com/openai/codex.git", codexSource],
|
|
45
48
|
["git", "apply", "patches/codex-cli-command-statusline.patch"],
|
|
@@ -72,7 +75,12 @@ export async function installProduct(options) {
|
|
|
72
75
|
const buildCode = await spawnInherited("cargo", ["build", "-p", "codex-cli"], path.join(plan.codexSource, "codex-rs"));
|
|
73
76
|
if (buildCode !== 0)
|
|
74
77
|
return buildCode;
|
|
75
|
-
const shim = await installCodexShim({
|
|
78
|
+
const shim = await installCodexShim({
|
|
79
|
+
binDir: options.binDir,
|
|
80
|
+
codexPath: plan.codexBinary,
|
|
81
|
+
env: options.env,
|
|
82
|
+
platform: options.platform,
|
|
83
|
+
});
|
|
76
84
|
const action = shim.changed ? "installed" : "already installed";
|
|
77
85
|
process.stdout.write(`codex-hud: native Codex adapter ready at ${plan.codexBinary}\n`);
|
|
78
86
|
process.stdout.write(`codex-hud: codex shim ${action} at ${shim.path}\n`);
|
package/dist/installer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"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"}
|
package/dist/native-runner.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export interface NativeOptions {
|
|
|
6
6
|
export interface ShimOptions {
|
|
7
7
|
binDir?: string;
|
|
8
8
|
codexPath?: string;
|
|
9
|
+
env?: NodeJS.ProcessEnv;
|
|
10
|
+
platform?: NodeJS.Platform;
|
|
9
11
|
}
|
|
10
12
|
export interface ShimResult {
|
|
11
13
|
changed: boolean;
|
|
@@ -17,12 +19,13 @@ export interface RemoveShimResult {
|
|
|
17
19
|
}
|
|
18
20
|
export declare function parseNativeArgs(args: string[]): NativeOptions;
|
|
19
21
|
export declare function parseShimArgs(args: string[]): ShimOptions;
|
|
20
|
-
export declare function buildNativeCodexArgs(codexArgs: string[]): string[];
|
|
22
|
+
export declare function buildNativeCodexArgs(codexArgs: string[], options?: Pick<ShimOptions, "platform">): string[];
|
|
21
23
|
export declare function resolveNativeCodexPath(explicitPath?: string): string;
|
|
22
24
|
export declare function runNativeCodex(options: NativeOptions): Promise<number>;
|
|
23
|
-
export declare function defaultShimBinDir(): string;
|
|
25
|
+
export declare function defaultShimBinDir(options?: Pick<ShimOptions, "env" | "platform">): string;
|
|
24
26
|
export declare function buildShimScript(options: {
|
|
25
27
|
codexPath: string;
|
|
28
|
+
platform?: NodeJS.Platform;
|
|
26
29
|
}): string;
|
|
27
30
|
export declare function installCodexShim(options?: ShimOptions): Promise<ShimResult>;
|
|
28
|
-
export declare function removeCodexShim(options?: Pick<ShimOptions, "binDir">): Promise<RemoveShimResult>;
|
|
31
|
+
export declare function removeCodexShim(options?: Pick<ShimOptions, "binDir" | "platform">): Promise<RemoveShimResult>;
|
package/dist/native-runner.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
-
import { chmod, mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { chmod, mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
3
3
|
import os from "node:os";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import process from "node:process";
|
|
6
6
|
import { shellQuote } from "./tmux-runner.js";
|
|
7
7
|
const HUD_STATUS_LINE_CONFIG = 'tui.status_line=["command: codex-hud status"]';
|
|
8
|
+
const WINDOWS_HUD_STATUS_LINE_CONFIG = 'tui.status_line=["command: codex-hud.cmd status"]';
|
|
8
9
|
const SHIM_MARKER = "codex-hud shim";
|
|
9
10
|
export function parseNativeArgs(args) {
|
|
10
11
|
const separatorIndex = args.indexOf("--");
|
|
@@ -42,8 +43,9 @@ export function parseShimArgs(args) {
|
|
|
42
43
|
}
|
|
43
44
|
return { binDir, codexPath };
|
|
44
45
|
}
|
|
45
|
-
export function buildNativeCodexArgs(codexArgs) {
|
|
46
|
-
|
|
46
|
+
export function buildNativeCodexArgs(codexArgs, options = {}) {
|
|
47
|
+
const statusLineConfig = isWindows(options.platform) ? WINDOWS_HUD_STATUS_LINE_CONFIG : HUD_STATUS_LINE_CONFIG;
|
|
48
|
+
return ["-c", statusLineConfig, ...codexArgs];
|
|
47
49
|
}
|
|
48
50
|
export function resolveNativeCodexPath(explicitPath) {
|
|
49
51
|
if (explicitPath)
|
|
@@ -64,10 +66,23 @@ export async function runNativeCodex(options) {
|
|
|
64
66
|
CODEX_HUD_FORCE_COLOR: "1",
|
|
65
67
|
});
|
|
66
68
|
}
|
|
67
|
-
export function defaultShimBinDir() {
|
|
69
|
+
export function defaultShimBinDir(options = {}) {
|
|
70
|
+
const platform = options.platform ?? process.platform;
|
|
71
|
+
const env = options.env ?? process.env;
|
|
72
|
+
if (platform === "win32" && env.APPDATA) {
|
|
73
|
+
return path.join(env.APPDATA, "npm");
|
|
74
|
+
}
|
|
68
75
|
return path.join(os.homedir(), ".local", "bin");
|
|
69
76
|
}
|
|
70
77
|
export function buildShimScript(options) {
|
|
78
|
+
if (isWindows(options.platform)) {
|
|
79
|
+
return [
|
|
80
|
+
"@echo off",
|
|
81
|
+
`REM ${SHIM_MARKER}`,
|
|
82
|
+
`codex-hud.cmd native --codex ${quoteCmdArg(options.codexPath)} -- %*`,
|
|
83
|
+
"",
|
|
84
|
+
].join("\r\n");
|
|
85
|
+
}
|
|
71
86
|
return [
|
|
72
87
|
"#!/bin/sh",
|
|
73
88
|
`# ${SHIM_MARKER}`,
|
|
@@ -76,15 +91,19 @@ export function buildShimScript(options) {
|
|
|
76
91
|
].join("\n");
|
|
77
92
|
}
|
|
78
93
|
export async function installCodexShim(options = {}) {
|
|
79
|
-
const binDir = options.binDir ?? defaultShimBinDir();
|
|
80
|
-
const shimPath = path.join(binDir, "codex");
|
|
94
|
+
const binDir = options.binDir ?? defaultShimBinDir({ env: options.env, platform: options.platform });
|
|
95
|
+
const shimPath = path.join(binDir, isWindows(options.platform) ? "codex.cmd" : "codex");
|
|
96
|
+
const backupPath = backupShimPath(shimPath);
|
|
81
97
|
const codexPath = resolveNativeCodexPath(options.codexPath);
|
|
82
|
-
const script = buildShimScript({ codexPath });
|
|
98
|
+
const script = buildShimScript({ codexPath, platform: options.platform });
|
|
83
99
|
await mkdir(binDir, { recursive: true });
|
|
84
100
|
const existing = await readOptionalFile(shimPath);
|
|
85
101
|
if (existing !== undefined) {
|
|
86
102
|
if (!existing.includes(SHIM_MARKER)) {
|
|
87
|
-
|
|
103
|
+
if (await readOptionalFile(backupPath) !== undefined) {
|
|
104
|
+
throw new Error(`codex already exists at ${shimPath} and backup already exists at ${backupPath}`);
|
|
105
|
+
}
|
|
106
|
+
await rename(shimPath, backupPath);
|
|
88
107
|
}
|
|
89
108
|
if (existing === script) {
|
|
90
109
|
return { changed: false, path: shimPath };
|
|
@@ -95,15 +114,28 @@ export async function installCodexShim(options = {}) {
|
|
|
95
114
|
return { changed: true, path: shimPath };
|
|
96
115
|
}
|
|
97
116
|
export async function removeCodexShim(options = {}) {
|
|
98
|
-
const binDir = options.binDir ?? defaultShimBinDir();
|
|
99
|
-
const shimPath = path.join(binDir, "codex");
|
|
117
|
+
const binDir = options.binDir ?? defaultShimBinDir({ platform: options.platform });
|
|
118
|
+
const shimPath = path.join(binDir, isWindows(options.platform) ? "codex.cmd" : "codex");
|
|
119
|
+
const backupPath = backupShimPath(shimPath);
|
|
100
120
|
const existing = await readOptionalFile(shimPath);
|
|
101
121
|
if (existing === undefined || !existing.includes(SHIM_MARKER)) {
|
|
102
122
|
return { path: shimPath, removed: false };
|
|
103
123
|
}
|
|
104
124
|
await rm(shimPath, { force: true });
|
|
125
|
+
if (await readOptionalFile(backupPath) !== undefined) {
|
|
126
|
+
await rename(backupPath, shimPath);
|
|
127
|
+
}
|
|
105
128
|
return { path: shimPath, removed: true };
|
|
106
129
|
}
|
|
130
|
+
function isWindows(platform) {
|
|
131
|
+
return (platform ?? process.platform) === "win32";
|
|
132
|
+
}
|
|
133
|
+
function quoteCmdArg(value) {
|
|
134
|
+
return `"${value.replace(/"/g, '""')}"`;
|
|
135
|
+
}
|
|
136
|
+
function backupShimPath(shimPath) {
|
|
137
|
+
return `${shimPath}.codex-hud-backup`;
|
|
138
|
+
}
|
|
107
139
|
async function readOptionalFile(filePath) {
|
|
108
140
|
try {
|
|
109
141
|
return await readFile(filePath, "utf8");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-runner.js","sourceRoot":"","sources":["../src/native-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"native-runner.js","sourceRoot":"","sources":["../src/native-runner.ts"],"names":[],"mappings":"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"}
|
package/dist/sources/codex.js
CHANGED
|
@@ -76,12 +76,12 @@ export async function createDoctorReport(deps = {}) {
|
|
|
76
76
|
const version = codexPath ? await (deps.readCodexVersion ?? readCodexVersion)() : undefined;
|
|
77
77
|
const exists = deps.pathExists ?? pathExists;
|
|
78
78
|
const homeExists = await exists(codexHome);
|
|
79
|
-
const shimPath = deps.shimPath ?? path.join(defaultShimBinDir(), "codex");
|
|
79
|
+
const shimPath = deps.shimPath ?? path.join(defaultShimBinDir(), process.platform === "win32" ? "codex.cmd" : "codex");
|
|
80
80
|
const shimText = await (deps.readTextFile ?? readOptionalText)(shimPath);
|
|
81
81
|
const shimInstalled = Boolean(shimText?.includes("codex-hud shim"));
|
|
82
82
|
const patchedCodexPath = parseShimCodexPath(shimText) ?? resolveNativeCodexPath();
|
|
83
83
|
const patchedCodexFound = await exists(patchedCodexPath);
|
|
84
|
-
const nativeStatusCommandConfigured = Boolean(shimText
|
|
84
|
+
const nativeStatusCommandConfigured = Boolean(shimText && /codex-hud(?:\.cmd)?\s+native/.test(shimText));
|
|
85
85
|
const lines = [];
|
|
86
86
|
if (codexPath) {
|
|
87
87
|
lines.push(`Codex CLI: ${version ?? "found"} (${codexPath})`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/sources/codex.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/sources/codex.ts"],"names":[],"mappings":"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"}
|
package/docs/installation.md
CHANGED
|
@@ -14,6 +14,8 @@ codex
|
|
|
14
14
|
- applies the bundled command-backed status-line patch
|
|
15
15
|
- builds the patched Codex binary
|
|
16
16
|
- installs a reversible `codex` shim in `~/.local/bin`
|
|
17
|
+
- on Windows, writes `codex.cmd` in npm's global shim directory and uses `codex-hud.cmd status` to avoid PowerShell `.ps1` execution-policy blocks
|
|
18
|
+
- backs up an existing official `codex.cmd` shim before replacing it, then restores that backup during `codex-hud uninstall-shim`
|
|
17
19
|
|
|
18
20
|
After that, users run `codex` normally and Codex HUD is injected into the native Codex footer.
|
|
19
21
|
|
|
@@ -33,6 +35,15 @@ codex-hud install --codex-source ~/src/openai-codex --bin-dir ~/.local/bin
|
|
|
33
35
|
|
|
34
36
|
Use this when you already keep a Codex source checkout somewhere else or need a custom shim directory.
|
|
35
37
|
|
|
38
|
+
Windows PowerShell example:
|
|
39
|
+
|
|
40
|
+
```powershell
|
|
41
|
+
codex-hud install
|
|
42
|
+
where codex
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
`where codex` should list the Codex HUD shim first. Use `--bin-dir <path>` only when you want to install the shim into another directory that already appears early in `PATH`.
|
|
46
|
+
|
|
36
47
|
## Fallback Without Native Adapter
|
|
37
48
|
|
|
38
49
|
```bash
|
|
@@ -8,7 +8,7 @@ This repository currently tracks a local proof-of-concept patch against OpenAI C
|
|
|
8
8
|
/Users/liuyue/Desktop/Github_repos/openai-codex
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
The patch adds support for a `command:` item in `tui.status_line`. When present, Codex runs the command from the current session directory and renders stdout in the native bottom footer. Multi-line stdout is preserved, so `codex-hud status` can appear as a lower native HUD:
|
|
11
|
+
The patch adds support for a `command:` item in `tui.status_line`. When present, Codex runs the command from the current session directory and renders stdout in the native bottom footer. It uses `sh -lc` on macOS/Linux/WSL and `cmd.exe /C` on native Windows. Multi-line stdout is preserved, so `codex-hud status` can appear as a lower native HUD:
|
|
12
12
|
|
|
13
13
|
```text
|
|
14
14
|
[gpt-5.5 medium] │ codex-hud git:(feat/codex-hud-mvp*)
|
package/package.json
CHANGED
|
@@ -391,12 +391,16 @@ index e34fe46..a369367 100644
|
|
|
391
391
|
+}
|
|
392
392
|
+
|
|
393
393
|
+fn status_line_command_output(command: &str, cwd: &Path) -> Option<Vec<Line<'static>>> {
|
|
394
|
-
+ let
|
|
395
|
-
+
|
|
396
|
-
+ .arg(command)
|
|
397
|
-
+
|
|
398
|
-
+
|
|
399
|
-
+
|
|
394
|
+
+ let mut process = if cfg!(windows) {
|
|
395
|
+
+ let mut process = Command::new("cmd");
|
|
396
|
+
+ process.arg("/C").arg(command);
|
|
397
|
+
+ process
|
|
398
|
+
+ } else {
|
|
399
|
+
+ let mut process = Command::new("sh");
|
|
400
|
+
+ process.arg("-lc").arg(command);
|
|
401
|
+
+ process
|
|
402
|
+
+ };
|
|
403
|
+
+ let output = process.current_dir(cwd).output().ok()?;
|
|
400
404
|
+
|
|
401
405
|
+ if !output.status.success() {
|
|
402
406
|
+ return None;
|