mtrx-cli 0.1.29 → 0.1.30

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
@@ -30,19 +30,3 @@ npx mtrx help
30
30
  - Python 3.10+ available as `python3`, `python`, or `py -3`
31
31
 
32
32
  This npm package is a thin wrapper around the Python CLI bundled in this repo.
33
-
34
- ## Python dependencies
35
-
36
- The tarball only ships the CLI source under `src/` and sets `PYTHONPATH` so Python can import it. **Third-party libraries** (for example `httpx`, `fastapi`, etc.) are **not** bundled—you still need the **`matrx`** Python package installed into the same interpreter npm invokes:
37
-
38
- ```bash
39
- pip install matrx
40
- ```
41
-
42
- Or from a checkout of this repo:
43
-
44
- ```bash
45
- pip install -e .
46
- ```
47
-
48
- Use `mtrx doctor` after install if commands fail with missing-module errors.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mtrx-cli",
3
- "version": "0.1.29",
3
+ "version": "0.1.30",
4
4
  "description": "MATRX CLI for routing Codex, Claude, Gemini, and Cursor through Matrx",
5
5
  "homepage": "https://mtrx.so",
6
6
  "repository": {
@@ -1 +1 @@
1
- __version__ = "0.1.29"
1
+ __version__ = "0.1.30"
@@ -998,6 +998,8 @@ def _heartbeat_cli_agent(orchestration: dict, stop_event) -> None:
998
998
  headers["X-Matrx-Project-Id"] = project_id
999
999
 
1000
1000
  interval = int(orchestration.get("heartbeat_interval_seconds") or 60)
1001
+ _announced_task_ids: set[str] = set()
1002
+
1001
1003
  while True:
1002
1004
  try:
1003
1005
  with httpx.Client(timeout=5) as client:
@@ -1015,6 +1017,25 @@ def _heartbeat_cli_agent(orchestration: dict, stop_event) -> None:
1015
1017
  )
1016
1018
  if response.status_code in {404, 401, 403}:
1017
1019
  return
1020
+ # Print a visual notification for any new incoming subtasks
1021
+ try:
1022
+ data = response.json()
1023
+ pending = data.get("pending_tasks") or []
1024
+ for task in pending:
1025
+ task_id = task.get("task_id") or ""
1026
+ if task_id and task_id not in _announced_task_ids:
1027
+ _announced_task_ids.add(task_id)
1028
+ sub_q = (task.get("sub_question") or "").strip()
1029
+ cap = (task.get("required_capability") or "").strip()
1030
+ label = sub_q or cap or "incoming subtask"
1031
+ import sys as _sys
1032
+ print(
1033
+ f"\n\033[33m[matrx]\033[0m \u26a1 Subtask incoming: \"{label}\"",
1034
+ file=_sys.stderr,
1035
+ flush=True,
1036
+ )
1037
+ except Exception:
1038
+ pass
1018
1039
  except httpx.HTTPError:
1019
1040
  return
1020
1041
  if stop_event.wait(interval):