80 """Resolved directories a module is importable from (``__file__`` parent +
81 every ``__path__`` entry, for regular and namespace packages)."""
83 f = getattr(module,
"__file__",
None)
86 dirs.append(Path(f).resolve(strict=
False).parent)
87 except (OSError, ValueError):
89 for entry
in getattr(module,
"__path__",
None)
or []:
91 dirs.append(Path(entry).resolve(strict=
False))
92 except (OSError, ValueError, TypeError):
119 """Return the resolved importable roots derived from loaded ``sys.modules``.
121 For each harness/contract package (force-loaded if not yet imported), its package
122 directory(ies); plus the active ``site-packages`` / per-user site; plus a
123 hardcoded repo-root fallback (``oc_chat``'s parent) in case an editable finder hid
127 roots: set[Path] = set()
128 for name
in _IMPORTABLE_PACKAGES:
129 module = sys.modules.get(name)
130 if module
is not None:
133 site_dirs: list[str] = []
135 site_dirs.extend(site.getsitepackages())
139 user_site = site.getusersitepackages()
141 site_dirs.append(user_site)
142 except (AttributeError, Exception):
146 roots.add(Path(d).resolve(strict=
False))
147 except (OSError, ValueError):
150 oc_chat_mod = sys.modules.get(
"oc_chat")
151 f = getattr(oc_chat_mod,
"__file__",
None)
154 roots.add(Path(f).resolve(strict=
False).parent.parent)
155 except (OSError, ValueError):