meshcode 2.11.141__tar.gz → 2.11.143__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.11.141 → meshcode-2.11.143}/PKG-INFO +1 -1
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/__init__.py +1 -1
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/meshcode_mcp/backend.py +23 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/meshcode_mcp/server.py +56 -16
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/run_agent.py +10 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.141 → meshcode-2.11.143}/pyproject.toml +1 -1
- {meshcode-2.11.141 → meshcode-2.11.143}/README.md +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/__main__.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/_session_handoff_template.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/claude_update.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/cli.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/compat.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/daemon.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/doctor.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/helper_visuals.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/hooks/__init__.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/hooks/repo_path_lock.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/hostd.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/invites.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/launcher.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/meshcode_mcp/swarm.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/meshcode_mcp/test_swarm.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/preferences.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/secrets.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/self_update.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/up.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode/upload.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/setup.cfg +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_autonomous_closegap_1.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_autonomous_closegap_2.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_autonomous_closegap_3.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_autonomous_prompt_inject.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_core.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_doctor.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_file_upload.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_helper_visuals.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_hostd_zombie_sessions.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_live_mesh_guard.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_marketplace_ratings.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_pretrust_claude.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_session_replay_gate.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_stop_ghost_terminal.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_swarm_events.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_task_progress.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_terminal_lifecycle.py +0 -0
- {meshcode-2.11.141 → meshcode-2.11.143}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -1297,6 +1297,29 @@ def set_status(project_id: str, agent: str, status: str, task: str = "", api_key
|
|
|
1297
1297
|
return {"ok": True, "status": status}
|
|
1298
1298
|
|
|
1299
1299
|
|
|
1300
|
+
def loop_tick(api_key: str, project_id: str, agent: str,
|
|
1301
|
+
since_ts: Optional[str] = None, msg_limit: int = 20,
|
|
1302
|
+
task_limit: int = 10) -> Dict:
|
|
1303
|
+
"""mc_agent_loop_tick: 1 RPC replaces count_pending + task_list + heartbeat.
|
|
1304
|
+
|
|
1305
|
+
Returns pending_count, new_messages_since, new_tasks_since, heartbeat_set
|
|
1306
|
+
in one round-trip. Falls back to None on any error so callers can use legacy.
|
|
1307
|
+
"""
|
|
1308
|
+
params: Dict[str, Any] = {
|
|
1309
|
+
"p_api_key": api_key,
|
|
1310
|
+
"p_project_id": project_id,
|
|
1311
|
+
"p_agent": agent,
|
|
1312
|
+
"p_msg_limit": msg_limit,
|
|
1313
|
+
"p_task_limit": task_limit,
|
|
1314
|
+
}
|
|
1315
|
+
if since_ts:
|
|
1316
|
+
params["p_since_ts"] = since_ts
|
|
1317
|
+
result = sb_rpc("mc_agent_loop_tick", params)
|
|
1318
|
+
if isinstance(result, dict) and result.get("ok"):
|
|
1319
|
+
return result
|
|
1320
|
+
return {"ok": False, "error": result}
|
|
1321
|
+
|
|
1322
|
+
|
|
1300
1323
|
def task_create(api_key, project_id, creator_agent, title, description="",
|
|
1301
1324
|
assignee="*", priority="normal", parent_task_id=None,
|
|
1302
1325
|
goal_id=None, strict=False,
|
|
@@ -3727,6 +3727,28 @@ def _wait_poll_or_legacy() -> Dict[str, Any]:
|
|
|
3727
3727
|
}
|
|
3728
3728
|
|
|
3729
3729
|
|
|
3730
|
+
# ── LOOP TICK (mig 311): 1 RPC replaces task_list + count_pending + heartbeat ──
|
|
3731
|
+
_LAST_LOOP_TICK_TS: Optional[str] = None # ISO ts from server for incremental polling
|
|
3732
|
+
|
|
3733
|
+
|
|
3734
|
+
def _loop_tick() -> Optional[Dict[str, Any]]:
|
|
3735
|
+
"""Call mc_agent_loop_tick: pending_count + messages + tasks + heartbeat in 1 RPC.
|
|
3736
|
+
Returns None on any error so callers fall back to legacy multi-RPC path."""
|
|
3737
|
+
global _LAST_LOOP_TICK_TS
|
|
3738
|
+
try:
|
|
3739
|
+
api_key = _get_api_key()
|
|
3740
|
+
if not api_key:
|
|
3741
|
+
return None
|
|
3742
|
+
result = be.loop_tick(api_key, _PROJECT_ID, AGENT_NAME,
|
|
3743
|
+
since_ts=_LAST_LOOP_TICK_TS)
|
|
3744
|
+
if isinstance(result, dict) and result.get("ok"):
|
|
3745
|
+
_LAST_LOOP_TICK_TS = result.get("server_now")
|
|
3746
|
+
return result
|
|
3747
|
+
except Exception as e:
|
|
3748
|
+
log.debug(f"[meshcode] mc_agent_loop_tick failed; legacy fallback: {e}")
|
|
3749
|
+
return None
|
|
3750
|
+
|
|
3751
|
+
|
|
3730
3752
|
def _drain_unread_response(include_acks: bool,
|
|
3731
3753
|
rpc_result: Optional[Dict[str, Any]] = None) -> Optional[Dict[str, Any]]:
|
|
3732
3754
|
"""SDK-EFF (task ab1f9f5a): read+mark unread DB messages and shape them as
|
|
@@ -4396,10 +4418,12 @@ async def meshcode_wait(timeout_seconds: int = 20, include_acks: bool = False) -
|
|
|
4396
4418
|
# offline at create time" gap. Always-on, not gated on
|
|
4397
4419
|
# autonomous_mode. Best-effort.
|
|
4398
4420
|
try:
|
|
4399
|
-
#
|
|
4400
|
-
#
|
|
4401
|
-
#
|
|
4402
|
-
#
|
|
4421
|
+
# LOOP-TICK (mig 311 adoption, task f81a5060): mc_agent_loop_tick
|
|
4422
|
+
# gives pending_count + heartbeat in 1 RPC (replaces count_pending).
|
|
4423
|
+
# task_list is kept for auto-claim sweep because new_tasks_since is
|
|
4424
|
+
# incremental and could miss older unclaimed tasks (commander review).
|
|
4425
|
+
_entry_tick = _loop_tick()
|
|
4426
|
+
_entry_tick_pending = _entry_tick.get("pending_count", 0) or 0 if _entry_tick else 0
|
|
4403
4427
|
_entry_tasks_raw = None
|
|
4404
4428
|
try:
|
|
4405
4429
|
_tl = be.task_list(_get_api_key(), _PROJECT_ID, AGENT_NAME, status_filter=None)
|
|
@@ -4410,6 +4434,7 @@ async def meshcode_wait(timeout_seconds: int = 20, include_acks: bool = False) -
|
|
|
4410
4434
|
_wait_entry_auto_claimed = _try_auto_claim_self_assigned_tasks(tasks=_entry_tasks_raw)
|
|
4411
4435
|
except Exception:
|
|
4412
4436
|
_wait_entry_auto_claimed = []
|
|
4437
|
+
_entry_tick_pending = 0
|
|
4413
4438
|
|
|
4414
4439
|
pending_tasks = (_pending_filter(_entry_tasks_raw) if _entry_tasks_raw is not None
|
|
4415
4440
|
else _get_pending_tasks_summary())
|
|
@@ -4447,13 +4472,14 @@ async def meshcode_wait(timeout_seconds: int = 20, include_acks: bool = False) -
|
|
|
4447
4472
|
# ("te escribo y no sale palomita azul en nadie"). If there are unread messages,
|
|
4448
4473
|
# skip task_pull and fall through to PRODUCT RULE 2 so they get delivered + marked
|
|
4449
4474
|
# read first. Task-pull still fires normally when the inbox is empty.
|
|
4450
|
-
#
|
|
4451
|
-
#
|
|
4452
|
-
_entry_db_pending =
|
|
4453
|
-
|
|
4454
|
-
|
|
4455
|
-
|
|
4456
|
-
|
|
4475
|
+
# LOOP-TICK: reuse pending_count from _loop_tick (already fetched above).
|
|
4476
|
+
# Falls back to count_pending RPC only if loop_tick didn't run.
|
|
4477
|
+
_entry_db_pending = _entry_tick_pending
|
|
4478
|
+
if not _entry_db_pending and not _entry_tick:
|
|
4479
|
+
try:
|
|
4480
|
+
_entry_db_pending = be.count_pending(_PROJECT_ID, AGENT_NAME, api_key=_get_api_key()) or 0
|
|
4481
|
+
except Exception:
|
|
4482
|
+
_entry_db_pending = 0
|
|
4457
4483
|
_has_unread = bool(_entry_db_pending)
|
|
4458
4484
|
if _tasks_to_start and not _is_leader_agent() and not _has_unread:
|
|
4459
4485
|
# Auto-start the highest priority OPEN task so the agent sees it as
|
|
@@ -4952,6 +4978,8 @@ async def _meshcode_wait_inner(actual_timeout: int, include_acks: bool) -> Dict[
|
|
|
4952
4978
|
else:
|
|
4953
4979
|
# 2b) Realtime NOT subscribed — aggressive DB polling every 5s
|
|
4954
4980
|
# so messages arrive within seconds, not after 120s timeout.
|
|
4981
|
+
# LOOP-TICK (task f81a5060): use mc_agent_loop_tick (1 RPC) instead
|
|
4982
|
+
# of count_pending + read_inbox (2 RPCs). Falls back to legacy on error.
|
|
4955
4983
|
_poll_interval = 5
|
|
4956
4984
|
_elapsed = 0
|
|
4957
4985
|
while _elapsed < actual_timeout:
|
|
@@ -4962,10 +4990,18 @@ async def _meshcode_wait_inner(actual_timeout: int, include_acks: bool) -> Dict[
|
|
|
4962
4990
|
return {"timed_out": True, "reason": "cancelled_by_client"}
|
|
4963
4991
|
_elapsed += _poll_interval
|
|
4964
4992
|
try:
|
|
4965
|
-
|
|
4966
|
-
|
|
4967
|
-
|
|
4968
|
-
|
|
4993
|
+
_tick = _loop_tick()
|
|
4994
|
+
_has_pending = False
|
|
4995
|
+
if _tick:
|
|
4996
|
+
_has_pending = bool(_tick.get("pending_count", 0))
|
|
4997
|
+
else:
|
|
4998
|
+
# Fallback: legacy count_pending
|
|
4999
|
+
api_key = _get_api_key()
|
|
5000
|
+
if api_key:
|
|
5001
|
+
_has_pending = bool(be.count_pending(_PROJECT_ID, AGENT_NAME, api_key=api_key))
|
|
5002
|
+
if _has_pending:
|
|
5003
|
+
api_key = _get_api_key()
|
|
5004
|
+
if api_key:
|
|
4969
5005
|
raw = be.read_inbox(_PROJECT_ID, AGENT_NAME, mark_read=True, api_key=api_key)
|
|
4970
5006
|
if raw:
|
|
4971
5007
|
msgs = [
|
|
@@ -7791,12 +7827,16 @@ def meshcode_health() -> Dict[str, Any]:
|
|
|
7791
7827
|
health["uptime_seconds"] = "unknown (psutil not available)"
|
|
7792
7828
|
|
|
7793
7829
|
# Server-side system health (aggregate metrics from DB)
|
|
7830
|
+
# mig 558: pass p_project_id to scope active/stale counts to THIS mesh
|
|
7794
7831
|
try:
|
|
7795
|
-
sys_health = be.sb_rpc("mc_system_health", {})
|
|
7832
|
+
sys_health = be.sb_rpc("mc_system_health", {"p_project_id": _PROJECT_ID})
|
|
7796
7833
|
if isinstance(sys_health, dict) and sys_health.get("ok"):
|
|
7797
7834
|
health["system"] = {
|
|
7835
|
+
"scope": sys_health.get("scope", "global"),
|
|
7798
7836
|
"active_agents": sys_health.get("active_agent_count"),
|
|
7837
|
+
"active_agents_global": sys_health.get("active_agent_count_global"),
|
|
7799
7838
|
"stale_agents": sys_health.get("stale_agent_count"),
|
|
7839
|
+
"stale_agents_global": sys_health.get("stale_agent_count_global"),
|
|
7800
7840
|
"message_delivery_rate": sys_health.get("message_delivery_rate"),
|
|
7801
7841
|
"messages_1h": sys_health.get("total_messages_1h"),
|
|
7802
7842
|
"failed_rpcs_1h": sys_health.get("failed_rpc_count_1h"),
|
|
@@ -32,6 +32,10 @@ from . import claude_update
|
|
|
32
32
|
WORKSPACES_ROOT = Path.home() / "meshcode"
|
|
33
33
|
REGISTRY_PATH = WORKSPACES_ROOT / ".registry.json"
|
|
34
34
|
|
|
35
|
+
# Samuel directive 2026-06-17: all agents boot with the best model by default.
|
|
36
|
+
# Overrides (settings.json "model" or mc_agent_model_pref RPC) still respected.
|
|
37
|
+
PLATFORM_DEFAULT_MODEL = "opus"
|
|
38
|
+
|
|
35
39
|
|
|
36
40
|
def _pretrust_claude_workspace(*paths) -> None:
|
|
37
41
|
"""Pre-trust workspace dirs in ~/.claude.json (task 2e6a8d63, Samuel
|
|
@@ -1351,6 +1355,12 @@ def run(agent: str, project: Optional[str] = None, editor_override: Optional[str
|
|
|
1351
1355
|
except Exception as _me:
|
|
1352
1356
|
print(f"[meshcode] model-pref skipped: {_me}", file=sys.stderr)
|
|
1353
1357
|
|
|
1358
|
+
# Platform default: best model for all agents (Samuel directive 2026-06-17).
|
|
1359
|
+
# Applied only when no explicit override was set via settings.json or model_pref RPC.
|
|
1360
|
+
if "--model" not in cmd:
|
|
1361
|
+
cmd += ["--model", PLATFORM_DEFAULT_MODEL]
|
|
1362
|
+
print(f"[meshcode] Model: {PLATFORM_DEFAULT_MODEL} (platform default)", file=sys.stderr)
|
|
1363
|
+
|
|
1354
1364
|
if mode == "bypass":
|
|
1355
1365
|
bypass_check_cmd = effective_editor if not pinned_version else "claude"
|
|
1356
1366
|
if pinned_version or _claude_supports_bypass(bypass_check_cmd):
|
|
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
|
|
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
|
|
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
|
|
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
|