cdx-manager 0.18.6 → 0.18.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/README.md +7 -1
- package/VERSION +1 -1
- package/changelogs/CHANGELOGS_0_18_7.md +5 -0
- package/checksums/release-archives.json +11 -0
- package/package.json +1 -1
- package/pyproject.toml +1 -1
- package/src/commands/settings.py +1 -0
- package/src/provider_runtime.py +18 -3
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
<br clear="left"/>
|
|
6
6
|
|
|
7
|
-
[](LICENSE) ](LICENSE)  
|
|
8
8
|
|
|
9
9
|
**Stop guessing which AI account still has quota.** `cdx` tracks the rate-limit window of every Codex and Claude account you own, tells you which one is usable right now, and launches it with isolated auth — in one command.
|
|
10
10
|
|
|
@@ -466,6 +466,8 @@ Interactive launches and resumes set the terminal window title to `session — f
|
|
|
466
466
|
|
|
467
467
|
The title is only written when stdout is a terminal. Nothing is emitted for `--json` launches, redirected or piped output, `cdx run` and other headless runs, login flows, or Ollama sessions. Session names and directories are stripped of escape and control characters before the title is emitted, and cdx does not restore the previous title when the session ends.
|
|
468
468
|
|
|
469
|
+
Claude Code writes its own animated title while an action runs, and it redraws far more often than cdx re-asserts the shared title. So interactive Claude launches and resumes started by cdx set the Claude-specific `CLAUDE_CODE_DISABLE_TERMINAL_TITLE=1` in the provider environment, which stops Claude from setting and clearing the title and leaves `session — folder` stable while Claude is busy. Claude's in-TUI activity indicator is unaffected, the value is forced so an ambient setting in your shell cannot hand the title back, and headless `cdx run`, Claude authentication flows, and every non-Claude provider keep their previous environment.
|
|
470
|
+
|
|
469
471
|
### Launch History
|
|
470
472
|
|
|
471
473
|
Every interactive `cdx <name>` launch is recorded under `CDX_HOME`, including success/failure, duration, cwd, launch settings, and transcript path.
|
|
@@ -1047,6 +1049,10 @@ Without `--yes`, an interactive confirmation is required. `cdx` sends an idempot
|
|
|
1047
1049
|
|
|
1048
1050
|
Contribution guidelines are available in [`CONTRIBUTING.md`](CONTRIBUTING.md).
|
|
1049
1051
|
|
|
1052
|
+
Working on the tray companion? [`docs/tray-local-testing.md`](docs/tray-local-testing.md)
|
|
1053
|
+
covers the local loops, from rendering the menu to stdout to running a real icon
|
|
1054
|
+
in the menu bar.
|
|
1055
|
+
|
|
1050
1056
|
---
|
|
1051
1057
|
|
|
1052
1058
|
## License
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.18.
|
|
1
|
+
0.18.7
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# CDX Manager 0.18.7
|
|
2
|
+
|
|
3
|
+
## Fixes
|
|
4
|
+
|
|
5
|
+
- Interactive Claude sessions keep the cdx `session — folder` terminal title while Claude is running an action, instead of losing it to Claude's own animated title. Headless runs, Claude authentication flows, and other providers are unchanged.
|
|
@@ -257,6 +257,17 @@
|
|
|
257
257
|
"x86_64-pc-windows-msvc": "31a1743b0b6ec420a85c1679e93fcbd32c982a36e080a59d563276204682f152",
|
|
258
258
|
"x86_64-unknown-linux-musl": "49fba26d3deeab1e46af542528a5c71262e6c4d82898fcf989d7222a09a11d59"
|
|
259
259
|
}
|
|
260
|
+
},
|
|
261
|
+
"v0.18.6": {
|
|
262
|
+
"github_tarball_sha256": "31111eda2c31399b3fea14d80d10c0a2d10f15aab93a77a60939c86c564971ca",
|
|
263
|
+
"github_zip_sha256": "a3d78348416b3494645fa9f0467144c7e76b40d8862be959d125eb3d13805b15",
|
|
264
|
+
"tray_assets": {
|
|
265
|
+
"aarch64-apple-darwin": "aeb9267f72c3ee7426672d2e1fe98c0e39e0df795bbad6832299d4176c21022e",
|
|
266
|
+
"aarch64-unknown-linux-musl": "846969612d9a0e82f5f6cacc05aedc33153c1c325b8af95f63c8a2a5c2217261",
|
|
267
|
+
"x86_64-apple-darwin": "da5b4d3994fff9e616401e5a4cd01d68d216ddbeb6d41d96d67bbc789ef85118",
|
|
268
|
+
"x86_64-pc-windows-msvc": "296f760a7e10b7ef05936157b9de2b9d3b5e13f7ea2f57b7616705352ea97bd2",
|
|
269
|
+
"x86_64-unknown-linux-musl": "b360ea3ec14ab3aad0ccffcf477dee4bdadf6c1d4f150ef1cd13c7d293ae6829"
|
|
270
|
+
}
|
|
260
271
|
}
|
|
261
272
|
}
|
|
262
273
|
}
|
package/package.json
CHANGED
package/pyproject.toml
CHANGED
package/src/commands/settings.py
CHANGED
|
@@ -58,6 +58,7 @@ def _notification_setting_notice(settings, sessions, action):
|
|
|
58
58
|
notices.append(f"Agent alerts updated for {names} — this provider does not support notification hooks.")
|
|
59
59
|
return "\n".join(notices)
|
|
60
60
|
if "notify_preview" in settings:
|
|
61
|
+
names = _format_bulk_launch_summary(sessions)
|
|
61
62
|
if action == "set" and settings["notify_preview"]:
|
|
62
63
|
return f"Response previews enabled for {names} — completion text may be visible on the lock screen."
|
|
63
64
|
return f"Response previews disabled for {names}."
|
package/src/provider_runtime.py
CHANGED
|
@@ -108,6 +108,9 @@ def headless_permission_disables_network(provider, permission):
|
|
|
108
108
|
|
|
109
109
|
|
|
110
110
|
REDACTED_PROMPT_ARG = "[prompt redacted]"
|
|
111
|
+
# Documented Claude Code switch that stops it from setting and clearing the
|
|
112
|
+
# terminal title, leaving cdx's shared title keeper as the only writer.
|
|
113
|
+
CLAUDE_DISABLE_TERMINAL_TITLE_ENV = "CLAUDE_CODE_DISABLE_TERMINAL_TITLE"
|
|
111
114
|
CLAUDE_CLI_MODEL_ALIASES = {
|
|
112
115
|
"claude-sonnet": "sonnet",
|
|
113
116
|
"claude-opus": "opus",
|
|
@@ -148,11 +151,23 @@ def _anthropic_credentials_path(auth_home):
|
|
|
148
151
|
return os.path.join(auth_home, "credentials", f"{_anthropic_profile_name()}.json")
|
|
149
152
|
|
|
150
153
|
|
|
151
|
-
def _claude_env(base_env, auth_home):
|
|
154
|
+
def _claude_env(base_env, auth_home, own_terminal_title=False):
|
|
155
|
+
"""Build the Claude provider environment for one cdx spawn.
|
|
156
|
+
|
|
157
|
+
`own_terminal_title` is set by the interactive launch/resume paths, where
|
|
158
|
+
cdx's title keeper owns the `session — folder` title. Claude Code redraws an
|
|
159
|
+
animated busy title far more often than the keeper re-emits, so we tell it
|
|
160
|
+
to leave the title alone; its in-TUI activity indicator is unaffected. The
|
|
161
|
+
value is forced rather than defaulted so an ambient `0` in the operator's
|
|
162
|
+
shell cannot hand the title back to Claude. Headless and auth spawns do not
|
|
163
|
+
own a title and keep their previous environment.
|
|
164
|
+
"""
|
|
152
165
|
env = {**base_env, **_home_env_overrides(auth_home)}
|
|
153
166
|
env.pop("CLAUDE_CONFIG_DIR", None)
|
|
154
167
|
env.pop("CODEX_HOME", None)
|
|
155
168
|
env.setdefault("ANTHROPIC_PROFILE", _anthropic_profile_name())
|
|
169
|
+
if own_terminal_title:
|
|
170
|
+
env[CLAUDE_DISABLE_TERMINAL_TITLE_ENV] = "1"
|
|
156
171
|
return env
|
|
157
172
|
|
|
158
173
|
|
|
@@ -547,7 +562,7 @@ def _build_launch_spec(session, cwd=None, env_override=None, initial_prompt=None
|
|
|
547
562
|
if initial_prompt:
|
|
548
563
|
args.append(initial_prompt)
|
|
549
564
|
auth_home = _get_auth_home(session)
|
|
550
|
-
claude_env = _claude_env(env, auth_home)
|
|
565
|
+
claude_env = _claude_env(env, auth_home, own_terminal_title=True)
|
|
551
566
|
oauth_token = _read_claude_launch_oauth_token(auth_home)
|
|
552
567
|
if oauth_token:
|
|
553
568
|
claude_env["CLAUDE_CODE_OAUTH_TOKEN"] = oauth_token
|
|
@@ -693,7 +708,7 @@ def _build_resume_spec(session, cwd=None, env_override=None, capture_transcript=
|
|
|
693
708
|
if resume_prompt:
|
|
694
709
|
args.append(resume_prompt)
|
|
695
710
|
auth_home = _get_auth_home(session)
|
|
696
|
-
claude_env = _claude_env(env, auth_home)
|
|
711
|
+
claude_env = _claude_env(env, auth_home, own_terminal_title=True)
|
|
697
712
|
oauth_token = _read_claude_launch_oauth_token(auth_home)
|
|
698
713
|
if oauth_token:
|
|
699
714
|
claude_env["CLAUDE_CODE_OAUTH_TOKEN"] = oauth_token
|