meshcode 2.10.7__tar.gz → 2.10.8__tar.gz
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.
- {meshcode-2.10.7 → meshcode-2.10.8}/PKG-INFO +1 -1
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/__init__.py +1 -1
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/comms_v4.py +12 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/run_agent.py +25 -3
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.10.7 → meshcode-2.10.8}/pyproject.toml +1 -1
- {meshcode-2.10.7 → meshcode-2.10.8}/README.md +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/ascii_art.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/cli.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/invites.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/launcher.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/launcher_install.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/preferences.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/secrets.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/self_update.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode/setup_clients.py +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/setup.cfg +0 -0
- {meshcode-2.10.7 → meshcode-2.10.8}/tests/test_status_enum_coverage.py +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""MeshCode — Real-time communication between AI agents."""
|
|
2
|
-
__version__ = "2.10.
|
|
2
|
+
__version__ = "2.10.8"
|
|
@@ -440,6 +440,18 @@ def _find_claude():
|
|
|
440
440
|
if c and os.path.isfile(c):
|
|
441
441
|
if sys.platform == "win32" or os.access(c, os.X_OK):
|
|
442
442
|
return c
|
|
443
|
+
# Last resort on Windows: ask npm where its global bin directory is
|
|
444
|
+
if sys.platform == "win32":
|
|
445
|
+
try:
|
|
446
|
+
import subprocess as _sp
|
|
447
|
+
npm_bin = _sp.check_output(["npm", "root", "-g"], text=True, timeout=5).strip()
|
|
448
|
+
npm_bin_dir = os.path.dirname(npm_bin)
|
|
449
|
+
for name in ("claude.cmd", "claude.ps1", "claude", "claude.exe"):
|
|
450
|
+
p = os.path.join(npm_bin_dir, name)
|
|
451
|
+
if os.path.isfile(p):
|
|
452
|
+
return p
|
|
453
|
+
except Exception:
|
|
454
|
+
pass
|
|
443
455
|
return "claude" # last resort — will fail with -127, logged clearly
|
|
444
456
|
|
|
445
457
|
|
|
@@ -364,10 +364,22 @@ def _detect_editor() -> Optional[str]:
|
|
|
364
364
|
os.path.join(localappdata, "Programs", "claude", "claude.exe"),
|
|
365
365
|
os.path.join(localappdata, "Programs", "cursor", "Cursor.exe"),
|
|
366
366
|
os.path.join(os.environ.get("ProgramFiles", r"C:\Program Files"), "Claude", "claude.exe"),
|
|
367
|
+
os.path.join(os.environ.get("ProgramFiles", r"C:\Program Files"), "nodejs", "claude.cmd"),
|
|
367
368
|
]
|
|
368
369
|
for c in win_candidates:
|
|
369
370
|
if c and os.path.isfile(c):
|
|
370
371
|
return c
|
|
372
|
+
# Last resort: ask npm where its global bin is
|
|
373
|
+
try:
|
|
374
|
+
npm_bin = subprocess.check_output(["npm", "root", "-g"], text=True, timeout=5).strip()
|
|
375
|
+
# npm root -g returns node_modules dir, bin is one level up
|
|
376
|
+
npm_bin_dir = os.path.dirname(npm_bin)
|
|
377
|
+
for name in ("claude.cmd", "claude.ps1", "claude", "claude.exe"):
|
|
378
|
+
p = os.path.join(npm_bin_dir, name)
|
|
379
|
+
if os.path.isfile(p):
|
|
380
|
+
return p
|
|
381
|
+
except Exception:
|
|
382
|
+
pass
|
|
371
383
|
|
|
372
384
|
return None
|
|
373
385
|
|
|
@@ -411,10 +423,20 @@ def run(agent: str, project: Optional[str] = None, editor_override: Optional[str
|
|
|
411
423
|
|
|
412
424
|
editor = editor_override or _detect_editor()
|
|
413
425
|
if not editor:
|
|
414
|
-
print("[meshcode] ERROR:
|
|
426
|
+
print("[meshcode] ERROR: 'claude' not found in PATH", file=sys.stderr)
|
|
415
427
|
print(f"[meshcode] Workspace is ready at: {ws}", file=sys.stderr)
|
|
416
|
-
print("[meshcode] Install
|
|
417
|
-
|
|
428
|
+
print("[meshcode] Install Claude Code: npm install -g @anthropic-ai/claude-code", file=sys.stderr)
|
|
429
|
+
if sys.platform == "win32":
|
|
430
|
+
print("[meshcode] Then verify: where claude", file=sys.stderr)
|
|
431
|
+
print("[meshcode] If 'where' finds it, open a NEW terminal and try again.", file=sys.stderr)
|
|
432
|
+
print("[meshcode] Or set: set MESHCODE_EDITOR=<full path to claude.cmd>", file=sys.stderr)
|
|
433
|
+
try:
|
|
434
|
+
npm_root = subprocess.check_output(["npm", "root", "-g"], text=True, timeout=5).strip()
|
|
435
|
+
print(f"[meshcode] npm global root: {npm_root}", file=sys.stderr)
|
|
436
|
+
except Exception:
|
|
437
|
+
print("[meshcode] (npm not found — install Node.js first)", file=sys.stderr)
|
|
438
|
+
else:
|
|
439
|
+
print("[meshcode] Then verify: which claude", file=sys.stderr)
|
|
418
440
|
return 2
|
|
419
441
|
|
|
420
442
|
# ── Welcome banner with unique ASCII art + personality ──────────
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|