aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-node/src/meshbay_node/cli/groups.py
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-10-12 00:17:32 +0200
committerChristophe Besson <cbesson@gmail.com>2026-10-12 00:17:32 +0200
commit14911aae21ec4975f7a805b91e3c4867cb41974b (patch)
tree8c00230a88053905fd77938f3a9539efeb4c3094 /packages/meshbay-node/src/meshbay_node/cli/groups.py
parentf6f107e02c7a4aa7326c9a82310a239327d81ed6 (diff)
downloadmeshbay-14911aae21ec4975f7a805b91e3c4867cb41974b.tar.gz
feat: let the operator pause and resume a root's indexing (MNP 6.2)
A whole-root walk now checks its root before every file: removed or ejected, it stops instead of reading the drive to the end; paused, it finishes from the hash cache alone. A paused root is not watched, not swept by reconcile and survives a restart (roster), its indexed files stay served. Resume runs the reconcile sweep over the root, so entries and their enrichment are kept. Signed root_pause / root_resume over MNP, loopback routes, CLI `root pause|resume`, a pause button on the indexing dock and pause/resume in the roots table of Group settings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node/cli/groups.py')
-rw-r--r--packages/meshbay-node/src/meshbay_node/cli/groups.py29
1 files changed, 27 insertions, 2 deletions
diff --git a/packages/meshbay-node/src/meshbay_node/cli/groups.py b/packages/meshbay-node/src/meshbay_node/cli/groups.py
index fca4800..b402930 100644
--- a/packages/meshbay-node/src/meshbay_node/cli/groups.py
+++ b/packages/meshbay-node/src/meshbay_node/cli/groups.py
@@ -33,6 +33,8 @@ def group(args) -> None:
flags.append("removable")
if r.get("ejected"):
flags.append("ejected")
+ if r.get("paused"):
+ flags.append("paused")
flag_str = f" ({', '.join(flags)})" if flags else ""
live = "" if r.get("available", True) else " [UNAVAILABLE]"
print(f" root {r['name']}{flag_str}{live}")
@@ -128,6 +130,8 @@ def root(args) -> None:
flags.append("removable")
if r.get("ejected"):
flags.append("EJECTED")
+ if r.get("paused"):
+ flags.append("PAUSED")
avail = "available" if r.get("available", True) else "UNAVAILABLE"
flags.append(avail)
print(f" {r['name']:<20} {', '.join(flags)}")
@@ -215,8 +219,29 @@ def root(args) -> None:
print(f"plugged root {name} — files are visible again")
return
- print("usage: meshbay-node root list|add|remove|set|eject|plug [name] "
- "[--group NAME]")
+ if sub == "pause":
+ name = args.target
+ if not name:
+ print("usage: meshbay-node root pause <name> [--group NAME]")
+ sys.exit(1)
+ _daemon_api(cfg, f"/api/groups/{group_id}/roots/{name}/pause",
+ method="PUT")
+ print(f"paused root {name} — indexed files stay listed, nothing new "
+ f"is indexed until resumed")
+ return
+
+ if sub == "resume":
+ name = args.target
+ if not name:
+ print("usage: meshbay-node root resume <name> [--group NAME]")
+ sys.exit(1)
+ _daemon_api(cfg, f"/api/groups/{group_id}/roots/{name}/resume",
+ method="PUT")
+ print(f"resumed root {name} — indexing continues in the background")
+ return
+
+ print("usage: meshbay-node root list|add|remove|set|eject|plug|pause|resume "
+ "[name] [--group NAME]")
sys.exit(1)