cdx-manager 0.9.0 → 0.9.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # CDX Manager
2
2
 
3
- [![License](https://img.shields.io/badge/license-MIT-4C8BF5)](LICENSE) ![Version](https://img.shields.io/badge/version-v0.8.0-4C8BF5) ![Python](https://img.shields.io/badge/python-3.9%2B-3776AB?logo=python&logoColor=white)
3
+ [![License](https://img.shields.io/badge/license-MIT-4C8BF5)](LICENSE) ![Version](https://img.shields.io/badge/version-v0.9.1-4C8BF5) ![Python](https://img.shields.io/badge/python-3.9%2B-3776AB?logo=python&logoColor=white)
4
4
 
5
5
  **Run multiple Codex, Claude, Antigravity, and Ollama sessions from one terminal. Switch between accounts instantly.**
6
6
 
@@ -42,7 +42,7 @@ One command to launch any session. Zero auth juggling.
42
42
  - **Persistent launch settings.** Pin per-session power, permission, and fast-mode preferences once; `cdx` reapplies them on every launch until you unset them.
43
43
  - **Launch history.** Inspect recent launches with provider, result, duration, working directory, launch settings, and transcript path.
44
44
  - **Update prompts.** Periodic update checks surface `cdx update` directly in the `cdx`, `cdx status`, and launch output when a newer release is available. When `logics-manager` is installed, `cdx` can also suggest `logics-manager self-update`.
45
- - **Logics viewer shortcut.** `cdx view` opens the Logics browser/focus viewer through `logics-manager view` when the companion CLI is installed; `cdx view --json` reports availability and update diagnostics without opening the viewer.
45
+ - **Logics viewer shortcut.** `cdx view` opens the Logics browser/focus viewer through `logics-manager view` when the companion CLI is installed. All viewer flags are forwarded: `--lan`, `--lan-rw`, `--focus <ref>`, `--read`, `--port`, `--host`, `--refresh-interval`, `--tls`, `--tls-cert`, `--tls-key`, `--open`, `--no-open`. `cdx view --json` reports availability and update diagnostics without opening the viewer.
46
46
  - **Shared handoff context.** Keep a per-workspace Markdown context, or build one from a source session transcript, and install it into another assistant session before switching providers or accounts.
47
47
  - **Passive status resolution.** Codex status is read from the local Codex app-server rate-limit API when available, with legacy transcript/history parsing kept as a fallback.
48
48
  - **Session transcript capture.** Every launch is recorded to a local log file via `script`, giving you a full terminal transcript for each session.
@@ -352,7 +352,7 @@ cdx history --summary --from 2026-05-01 --to 2026-05-28
352
352
  | `cdx import <file> [--sessions a,b] [--passphrase-env VAR] [--force] [--json]` | Import sessions from a bundle into the current `CDX_HOME` |
353
353
  | `cdx doctor [--json]` | Inspect CLI dependencies, CDX_HOME permissions, missing state, orphan profiles, and pending quarantines |
354
354
  | `cdx repair [--dry-run] [--force] [--json]` | Plan or apply safe repairs for missing state files, quarantines, and orphan profiles |
355
- | `cdx view [--json]` | Open the Logics browser/focus viewer by delegating to `logics-manager view`; JSON mode reports diagnostics without launching it |
355
+ | `cdx view [--json] [--lan] [--lan-rw] [--focus <ref>] [--read] [--port <port>] [--host <host>] [--refresh-interval <s>] [--tls] [--tls-cert <path>] [--tls-key <path>] [--open] [--no-open]` | Open the Logics browser/focus viewer by delegating to `logics-manager view`; all viewer flags are forwarded; JSON mode reports diagnostics without launching it |
356
356
  | `cdx update [--check] [--yes] [--json] [--version TAG]` | Update cdx-manager using the installer that matches how it was installed |
357
357
  | `cdx ready [--refresh] [--json]` | Schedule an OS notification for the next cooling-down assistant that becomes ready, then return immediately |
358
358
  | `cdx notify <name> --at-reset [--poll seconds] [--once] [--schedule] [--refresh] [--json]` | Wait for a session reset time or schedule an OS wake-up notification when due |
@@ -0,0 +1,36 @@
1
+ # CDX Manager 0.9.1
2
+
3
+ ## Highlights
4
+
5
+ - `cdx view` now forwards all `logics-manager view` flags instead of rejecting them.
6
+ - Fixes a silent PATH resolution bug that could prevent `logics-manager` from being found.
7
+
8
+ ## Changes
9
+
10
+ ### cdx view: full flag passthrough
11
+
12
+ `cdx view` previously accepted only `--json` and raised a usage error for every other argument. All `logics-manager view` flags are now supported and forwarded transparently:
13
+
14
+ - `--lan` / `--lan-rw` — expose the viewer on the local network
15
+ - `--focus <ref>` / `--read` — open the viewer centered on a workflow document
16
+ - `--port <port>` / `--host <host>` — bind to a custom address
17
+ - `--refresh-interval <s>` — override the auto-refresh interval
18
+ - `--tls` / `--tls-cert <path>` / `--tls-key <path>` — serve over HTTPS
19
+ - `--open` / `--no-open` — control browser auto-open
20
+
21
+ ### Bug fixes
22
+
23
+ - `resolve_logics_manager`: `shutil.which` was called with `path=""` when `env` had no `PATH` key, causing it to search nothing and always return `None`. Now falls back to the process PATH.
24
+ - `run_logics_viewer`: the viewer subprocess now inherits the full OS environment (`os.environ` merged with any `env` overrides) instead of receiving a partial dict that stripped all inherited variables.
25
+
26
+ ### Docs
27
+
28
+ - README command table and feature description updated to list all forwarded viewer flags.
29
+ - `LOGICS_PROMPT` updated to reference `cdx view` instead of `logics-manager view` directly.
30
+
31
+ ## Validation
32
+
33
+ - `npm run prepublishOnly`
34
+ - `npm pack --dry-run`
35
+ - `logics-manager lint --require-status`
36
+ - `logics-manager audit --legacy-cutoff-version 1.1.0 --group-by-doc`
@@ -64,6 +64,10 @@
64
64
  "v0.8.0": {
65
65
  "github_tarball_sha256": "62cd461f9e22636bb85d801e21209b1762859b6662623e74c01fd40c107ea29a",
66
66
  "github_zip_sha256": "4674c8b61110f52b99c76312e9962202a2e8fc6928327f8927781f45eeaa980f"
67
+ },
68
+ "v0.9.0": {
69
+ "github_tarball_sha256": "809af5746e1287f4c5dc7a2fb7583e67e212aa250c45be905c32374e5dee26d6",
70
+ "github_zip_sha256": "9118f81645c00a4a660923a1ae290f48bd458af7ebfcf9f6580a3b91023b7c76"
67
71
  }
68
72
  }
69
73
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cdx-manager",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "description": "Terminal session manager for Codex and Claude accounts.",
5
5
  "license": "MIT",
6
6
  "author": "Alexandre Agostini",
package/pyproject.toml CHANGED
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "cdx-manager"
7
- version = "0.9.0"
7
+ version = "0.9.1"
8
8
  description = "Terminal session manager for Codex and Claude accounts."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
package/src/cli.py CHANGED
@@ -64,7 +64,7 @@ from .status_view import (
64
64
  )
65
65
  from .update_check import check_for_update, check_logics_manager_for_update
66
66
 
67
- VERSION = "0.9.0"
67
+ VERSION = "0.9.1"
68
68
 
69
69
 
70
70
  # ---------------------------------------------------------------------------
package/src/cli_view.py CHANGED
@@ -12,7 +12,7 @@ from .logics_view import (
12
12
  from .update_check import check_logics_manager_for_update
13
13
 
14
14
 
15
- VIEW_USAGE = "Usage: cdx view [--json]"
15
+ VIEW_USAGE = "Usage: cdx view [--json] [--lan] [--lan-rw] [--focus <ref>] [--read] [--port <port>] [--host <host>] [--refresh-interval <s>] [--tls] [--open] [--no-open]"
16
16
  API_SCHEMA_VERSION = 1
17
17
 
18
18
 
@@ -67,18 +67,44 @@ def _logics_manager_update_notice(ctx, env):
67
67
  )
68
68
 
69
69
 
70
+ _VIEWER_FLAGS = {
71
+ "--lan", "--lan-rw", "--tls", "--read", "--open", "--no-open",
72
+ }
73
+ _VIEWER_VALUE_FLAGS = {
74
+ "--host", "--port", "--tls-cert", "--tls-key", "--refresh-interval", "--focus",
75
+ }
76
+
77
+
78
+ def _parse_view_args(rest):
79
+ json_flag = False
80
+ viewer_args = []
81
+ i = 0
82
+ while i < len(rest):
83
+ arg = rest[i]
84
+ if arg == "--json":
85
+ json_flag = True
86
+ elif arg in _VIEWER_FLAGS:
87
+ viewer_args.append(arg)
88
+ elif arg in _VIEWER_VALUE_FLAGS:
89
+ if i + 1 >= len(rest):
90
+ raise CdxError(f"{arg} requires a value. {VIEW_USAGE}")
91
+ viewer_args.extend([arg, rest[i + 1]])
92
+ i += 1
93
+ else:
94
+ raise CdxError(f"Unknown option: {arg}\n{VIEW_USAGE}")
95
+ i += 1
96
+ return json_flag, viewer_args
97
+
98
+
70
99
  def handle_view(rest, ctx):
71
- json_flag = "--json" in rest
72
- unknown = [arg for arg in rest if arg != "--json"]
73
- if unknown:
74
- raise CdxError(VIEW_USAGE)
100
+ json_flag, viewer_args = _parse_view_args(rest)
75
101
 
76
102
  env = ctx.get("env")
77
103
  cwd = ctx.get("cwd")
78
104
  executable = resolve_logics_manager(env=env)
79
105
  update_notice = _logics_manager_update_notice(ctx, env) if executable else None
80
106
  failure = None if executable else missing_logics_manager_failure()
81
- diagnostics = build_viewer_diagnostics(executable, cwd, update_notice=update_notice, failure=failure)
107
+ diagnostics = build_viewer_diagnostics(executable, cwd, update_notice=update_notice, failure=failure, extra_args=viewer_args)
82
108
  warnings = _update_notice_warnings([update_notice])
83
109
 
84
110
  if json_flag:
@@ -92,7 +118,7 @@ def handle_view(rest, ctx):
92
118
  ctx["out"](f"{_warn(warning['message'], ctx['use_color'])}\n")
93
119
 
94
120
  try:
95
- result = run_logics_viewer(executable, cwd, env=env, runner=ctx.get("spawn_sync"))
121
+ result = run_logics_viewer(executable, cwd, env=env, extra_args=viewer_args, runner=ctx.get("spawn_sync"))
96
122
  except FileNotFoundError as error:
97
123
  raise CdxError(f"logics-manager is required for cdx view. {LOGICS_MANAGER_INSTALL_HINT}") from error
98
124
  except KeyboardInterrupt:
@@ -1,3 +1,4 @@
1
+ import os
1
2
  import shutil
2
3
  import subprocess
3
4
 
@@ -7,11 +8,11 @@ LOGICS_MANAGER_INSTALL_HINT = "Install or update it with: npm install -g @grifhi
7
8
 
8
9
  def resolve_logics_manager(env=None):
9
10
  env = env or {}
10
- return shutil.which("logics-manager", path=env.get("PATH", ""))
11
+ return shutil.which("logics-manager", path=env.get("PATH") or None)
11
12
 
12
13
 
13
- def build_viewer_diagnostics(executable, cwd, update_notice=None, failure=None):
14
- command = [executable or "logics-manager", "view"]
14
+ def build_viewer_diagnostics(executable, cwd, update_notice=None, failure=None, extra_args=None):
15
+ command = [executable or "logics-manager", "view"] + (extra_args or [])
15
16
  return {
16
17
  "available": bool(executable),
17
18
  "executable": executable,
@@ -29,9 +30,10 @@ def missing_logics_manager_failure():
29
30
  }
30
31
 
31
32
 
32
- def run_logics_viewer(executable, cwd, env=None, runner=None):
33
+ def run_logics_viewer(executable, cwd, env=None, extra_args=None, runner=None):
33
34
  runner = runner or subprocess.run
34
- argv = [executable, "view"]
35
+ argv = [executable, "view"] + (extra_args or [])
36
+ merged_env = {**os.environ, **(env or {})}
35
37
  if runner is subprocess.run:
36
- return subprocess.run(argv, cwd=cwd, env=env)
37
- return runner(argv, cwd=cwd, env=env)
38
+ return subprocess.run(argv, cwd=cwd, env=merged_env)
39
+ return runner(argv, cwd=cwd, env=merged_env)
@@ -22,7 +22,7 @@ RTK_PROMPT = (
22
22
  LOGICS_PROMPT = (
23
23
  "When `logics-manager` is available, prefer it for Logics workflow operations: use "
24
24
  "`logics-manager status`, `health`, `audit`, and `lint` for workflow state and validation; "
25
- "`logics-manager view` for the browser viewer and focus workflows; "
25
+ "`cdx view` for the browser viewer and focus workflows (supports `--lan`, `--focus <ref>`, `--port`, and all other viewer flags); "
26
26
  "`logics-manager sync read-doc|list-docs|search-docs|context-pack` for bounded document context; "
27
27
  "`logics-manager flow ...` for request/backlog/task lifecycle changes; and `logics-manager mcp ...` "
28
28
  "when an MCP surface is the right fit."