.
authorThomas Walker Lynch <eknp9n@reasoningtechnology.com>
Mon, 3 Nov 2025 05:53:58 +0000 (05:53 +0000)
committerThomas Walker Lynch <eknp9n@reasoningtechnology.com>
Mon, 3 Nov 2025 05:53:58 +0000 (05:53 +0000)
developer/source/manager/CLI [deleted file]
developer/source/manager/CLI.py [new file with mode: 0755]
developer/source/manager/subu [new symlink]

diff --git a/developer/source/manager/CLI b/developer/source/manager/CLI
deleted file mode 100755 (executable)
index a79691e..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/usr/bin/env python3
-# -*- mode: python; coding: utf-8; python-indent-offset: 2; indent-tabs-mode: nil -*-
-"""
-CLI.py — thin command-line harness
-Version: 0.2.0
-"""
-import sys, argparse
-from text import USAGE, HELP, EXAMPLE, VERSION
-import core
-
-def CLI(argv=None) -> int:
-  argv = argv or sys.argv[1:]
-  if not argv:
-    print(USAGE)
-    return 0
-
-  # simple verbs that bypass argparse (so `help/version/example` always work)
-  simple = {"help": HELP, "--help": HELP, "-h": HELP, "usage": USAGE, "example": EXAMPLE, "version": VERSION}
-  if argv[0] in simple:
-    out = simple[argv[0]]
-    print(out if isinstance(out, str) else out())
-    return 0
-
-  p = argparse.ArgumentParser(prog="subu", add_help=False)
-  p.add_argument("-V", "--Version", action="store_true", help="print version")
-  sub = p.add_subparsers(dest="verb")
-
-  # init
-  ap = sub.add_parser("init")
-  ap.add_argument("token", nargs="?")
-
-  # create/list/info
-  ap = sub.add_parser("create")
-  ap.add_argument("owner")
-  ap.add_argument("name")
-
-  sub.add_parser("list")
-  ap = sub.add_parser("info"); ap.add_argument("subu_id")
-  ap = sub.add_parser("information"); ap.add_argument("subu_id")
-
-  # lo
-  ap = sub.add_parser("lo")
-  ap.add_argument("state", choices=["up","down"])
-  ap.add_argument("subu_id")
-
-  # WG
-  ap = sub.add_parser("WG")
-  ap.add_argument("verb", choices=["global","create","server_provided_public_key","info","information","up","down"])
-  ap.add_argument("arg1", nargs="?")
-  ap.add_argument("arg2", nargs="?")
-
-  # attach/detach
-  ap = sub.add_parser("attach")
-  ap.add_argument("what", choices=["WG"])
-  ap.add_argument("subu_id")
-  ap.add_argument("wg_id")
-
-  ap = sub.add_parser("detach")
-  ap.add_argument("what", choices=["WG"])
-  ap.add_argument("subu_id")
-
-  # network
-  ap = sub.add_parser("network")
-  ap.add_argument("state", choices=["up","down"])
-  ap.add_argument("subu_id")
-
-  # option
-  ap = sub.add_parser("option")
-  ap.add_argument("verb", choices=["set","get","list"])
-  ap.add_argument("subu_id")
-  ap.add_argument("name", nargs="?")
-  ap.add_argument("value", nargs="?")
-
-  # exec
-  ap = sub.add_parser("exec")
-  ap.add_argument("subu_id")
-  ap.add_argument("--", dest="cmd", nargs=argparse.REMAINDER, default=[])
-
-  ns = p.parse_args(argv)
-  if ns.Version:
-    print(VERSION); return 0
-
-  try:
-    if ns.verb == "init":
-      return core.cmd_init(ns.token)
-
-    if ns.verb == "create":
-      core.create_subu(ns.owner, ns.name); return 0
-    if ns.verb == "list":
-      core.list_subu(); return 0
-    if ns.verb in ("info","information"):
-      core.info_subu(ns.subu_id); return 0
-
-    if ns.verb == "lo":
-      core.lo_toggle(ns.subu_id, ns.state); return 0
-
-    if ns.verb == "WG":
-      v = ns.verb
-      if ns.arg1 is None and v in ("info","information"):
-        print("WG info requires WG_ID"); return 2
-      if v == "global":
-        core.wg_global(ns.arg1); return 0
-      if v == "create":
-        wid = core.wg_create(ns.arg1); print(wid); return 0
-      if v == "server_provided_public_key":
-        core.wg_set_pubkey(ns.arg1, ns.arg2); return 0
-      if v in ("info","information"):
-        core.wg_info(ns.arg1); return 0
-      if v == "up":
-        core.wg_up(ns.arg1); return 0
-      if v == "down":
-        core.wg_down(ns.arg1); return 0
-
-    if ns.verb == "attach":
-      if ns.what == "WG":
-        core.attach_wg(ns.subu_id, ns.wg_id); return 0
-
-    if ns.verb == "detach":
-      if ns.what == "WG":
-        core.detach_wg(ns.subu_id); return 0
-
-    if ns.verb == "network":
-      core.network_toggle(ns.subu_id, ns.state); return 0
-
-    if ns.verb == "option":
-      if ns.verb == "option" and ns.name is None and ns.value is None and ns.verb == "list":
-        core.option_list(ns.subu_id); return 0
-      if ns.verb == "set":
-        core.option_set(ns.subu_id, ns.name, ns.value); return 0
-      if ns.verb == "get":
-        core.option_get(ns.subu_id, ns.name); return 0
-      if ns.verb == "list":
-        core.option_list(ns.subu_id); return 0
-
-    if ns.verb == "exec":
-      if not ns.cmd:
-        print("subu exec <Subu_ID> -- <cmd> ..."); return 2
-      core.exec_in_subu(ns.subu_id, ns.cmd); return 0
-
-    print(USAGE); return 2
-  except Exception as e:
-    print(f"error: {e}")
-    return 1
-
-if __name__ == "__main__":
-  sys.exit(CLI())
diff --git a/developer/source/manager/CLI.py b/developer/source/manager/CLI.py
new file mode 100755 (executable)
index 0000000..a79691e
--- /dev/null
@@ -0,0 +1,146 @@
+#!/usr/bin/env python3
+# -*- mode: python; coding: utf-8; python-indent-offset: 2; indent-tabs-mode: nil -*-
+"""
+CLI.py — thin command-line harness
+Version: 0.2.0
+"""
+import sys, argparse
+from text import USAGE, HELP, EXAMPLE, VERSION
+import core
+
+def CLI(argv=None) -> int:
+  argv = argv or sys.argv[1:]
+  if not argv:
+    print(USAGE)
+    return 0
+
+  # simple verbs that bypass argparse (so `help/version/example` always work)
+  simple = {"help": HELP, "--help": HELP, "-h": HELP, "usage": USAGE, "example": EXAMPLE, "version": VERSION}
+  if argv[0] in simple:
+    out = simple[argv[0]]
+    print(out if isinstance(out, str) else out())
+    return 0
+
+  p = argparse.ArgumentParser(prog="subu", add_help=False)
+  p.add_argument("-V", "--Version", action="store_true", help="print version")
+  sub = p.add_subparsers(dest="verb")
+
+  # init
+  ap = sub.add_parser("init")
+  ap.add_argument("token", nargs="?")
+
+  # create/list/info
+  ap = sub.add_parser("create")
+  ap.add_argument("owner")
+  ap.add_argument("name")
+
+  sub.add_parser("list")
+  ap = sub.add_parser("info"); ap.add_argument("subu_id")
+  ap = sub.add_parser("information"); ap.add_argument("subu_id")
+
+  # lo
+  ap = sub.add_parser("lo")
+  ap.add_argument("state", choices=["up","down"])
+  ap.add_argument("subu_id")
+
+  # WG
+  ap = sub.add_parser("WG")
+  ap.add_argument("verb", choices=["global","create","server_provided_public_key","info","information","up","down"])
+  ap.add_argument("arg1", nargs="?")
+  ap.add_argument("arg2", nargs="?")
+
+  # attach/detach
+  ap = sub.add_parser("attach")
+  ap.add_argument("what", choices=["WG"])
+  ap.add_argument("subu_id")
+  ap.add_argument("wg_id")
+
+  ap = sub.add_parser("detach")
+  ap.add_argument("what", choices=["WG"])
+  ap.add_argument("subu_id")
+
+  # network
+  ap = sub.add_parser("network")
+  ap.add_argument("state", choices=["up","down"])
+  ap.add_argument("subu_id")
+
+  # option
+  ap = sub.add_parser("option")
+  ap.add_argument("verb", choices=["set","get","list"])
+  ap.add_argument("subu_id")
+  ap.add_argument("name", nargs="?")
+  ap.add_argument("value", nargs="?")
+
+  # exec
+  ap = sub.add_parser("exec")
+  ap.add_argument("subu_id")
+  ap.add_argument("--", dest="cmd", nargs=argparse.REMAINDER, default=[])
+
+  ns = p.parse_args(argv)
+  if ns.Version:
+    print(VERSION); return 0
+
+  try:
+    if ns.verb == "init":
+      return core.cmd_init(ns.token)
+
+    if ns.verb == "create":
+      core.create_subu(ns.owner, ns.name); return 0
+    if ns.verb == "list":
+      core.list_subu(); return 0
+    if ns.verb in ("info","information"):
+      core.info_subu(ns.subu_id); return 0
+
+    if ns.verb == "lo":
+      core.lo_toggle(ns.subu_id, ns.state); return 0
+
+    if ns.verb == "WG":
+      v = ns.verb
+      if ns.arg1 is None and v in ("info","information"):
+        print("WG info requires WG_ID"); return 2
+      if v == "global":
+        core.wg_global(ns.arg1); return 0
+      if v == "create":
+        wid = core.wg_create(ns.arg1); print(wid); return 0
+      if v == "server_provided_public_key":
+        core.wg_set_pubkey(ns.arg1, ns.arg2); return 0
+      if v in ("info","information"):
+        core.wg_info(ns.arg1); return 0
+      if v == "up":
+        core.wg_up(ns.arg1); return 0
+      if v == "down":
+        core.wg_down(ns.arg1); return 0
+
+    if ns.verb == "attach":
+      if ns.what == "WG":
+        core.attach_wg(ns.subu_id, ns.wg_id); return 0
+
+    if ns.verb == "detach":
+      if ns.what == "WG":
+        core.detach_wg(ns.subu_id); return 0
+
+    if ns.verb == "network":
+      core.network_toggle(ns.subu_id, ns.state); return 0
+
+    if ns.verb == "option":
+      if ns.verb == "option" and ns.name is None and ns.value is None and ns.verb == "list":
+        core.option_list(ns.subu_id); return 0
+      if ns.verb == "set":
+        core.option_set(ns.subu_id, ns.name, ns.value); return 0
+      if ns.verb == "get":
+        core.option_get(ns.subu_id, ns.name); return 0
+      if ns.verb == "list":
+        core.option_list(ns.subu_id); return 0
+
+    if ns.verb == "exec":
+      if not ns.cmd:
+        print("subu exec <Subu_ID> -- <cmd> ..."); return 2
+      core.exec_in_subu(ns.subu_id, ns.cmd); return 0
+
+    print(USAGE); return 2
+  except Exception as e:
+    print(f"error: {e}")
+    return 1
+
+if __name__ == "__main__":
+  sys.exit(CLI())
diff --git a/developer/source/manager/subu b/developer/source/manager/subu
new file mode 120000 (symlink)
index 0000000..45a8ec1
--- /dev/null
@@ -0,0 +1 @@
+CLI.py
\ No newline at end of file