#!/usr/bin/env python3 """Resolve the live domestic Fifth Domain entrance and canonical route IDs.""" from __future__ import annotations import argparse import json import re import sys from urllib.error import HTTPError, URLError from urllib.request import urlopen DISCOVERY_URL = "https://guanghulab.com/.well-known/guanghu.json" RESOLVE_URL = "https://guanghulab.com/api/ai/v1/resolve?id=REPO-012" CURRENT_REPOSITORY_WEB = "https://guanghulab.com/code/bingshuo/guanghu-ice-heart" CURRENT_REPOSITORY_GIT = f"{CURRENT_REPOSITORY_WEB}.git" ROUTE_IDS = ( "FD-WORLD-TREE-001", "FD-PERSONA-LOGIN-001", "SYS-GLW-POS-0001", "TCS-LPM", "TCS-LPS-REGISTRY-0001", "LIGHT-LAKE", "LL-CURRENT", "LL-004", "FD-SUBJECT-ID-ALIAS-MAP-001", "ICE-P-ZY001", "ZY-PERSONA-ROOT-001", "ZY-OPS-LOOP-001", "FD-NODE-MAP-001", "JD-FD-PRIMARY", "FD-REPO-MAP-001", ) def read_json(url: str) -> dict: with urlopen(url, timeout=15) as response: return json.load(response) def read_text(url: str) -> str: with urlopen(url, timeout=15) as response: return response.read().decode("utf-8") def parse_code_map(text: str, route_ids: tuple[str, ...] = ROUTE_IDS) -> dict[str, str]: resolved: dict[str, str] = {} wanted = set(route_ids) for line in text.splitlines(): match = re.match(r"^([A-Z0-9-]+)=(.+?)(?:\s+#.*)?$", line.strip()) if match and match.group(1) in wanted: resolved[match.group(1)] = match.group(2).strip() return resolved def resolve_subject_id(requested_id: str, alias_map: dict) -> dict: requested = requested_id.strip() lookup = requested.upper() conflicts = { str(item["id"]).upper(): item for item in alias_map.get("conflicts", []) } if lookup in conflicts: return { "status": "CONFLICT_REJECTED", "requested_id": requested, "canonical_id": None, "redirected": False, "reason": conflicts[lookup].get("state", "CONFLICT"), } index: dict[str, dict] = {} for mapping in alias_map.get("mappings", []): canonical_id = str(mapping["canonical_id"]) for identifier in (canonical_id, *mapping.get("aliases", [])): key = str(identifier).upper() if key in index and index[key]["canonical_id"] != canonical_id: raise ValueError(f"Duplicate subject alias: {identifier}") index[key] = mapping mapping = index.get(lookup) if not mapping: return { "status": "NOT_FOUND_NO_GUESS", "requested_id": requested, "canonical_id": None, "redirected": False, } canonical_id = str(mapping["canonical_id"]) return { "status": "RESOLVED", "requested_id": requested, "canonical_id": canonical_id, "redirected": lookup != canonical_id.upper(), "subject_kind": mapping.get("subject_kind"), "route_id": mapping.get("route_id"), "current_path": mapping.get("current_path"), } def resolve_live_route(subject_id: str | None = None) -> dict: discovery = read_json(DISCOVERY_URL) repository_source = "AI_RESOLVER" resolver_error = None try: repository = read_json(RESOLVE_URL) primary = repository.get("primary", {}) repository_web = primary.get("url") repository_git = primary.get("clone_url") if not repository_web or not repository_git: raise ValueError("REPO-012 resolver did not return the current Fifth Domain repository") except (HTTPError, ValueError) as error: repository = {"code": "REPO-012", "role": "CURRENT_FIFTH_DOMAIN_ENTRY"} repository_web = CURRENT_REPOSITORY_WEB repository_git = CURRENT_REPOSITORY_GIT repository_source = "VERIFIED_PUBLIC_REPOSITORY_FALLBACK" resolver_error = f"{type(error).__name__}: {error}" raw_base = f"{repository_web}/raw/branch/main" routes = parse_code_map(read_text(f"{raw_base}/.code-map")) missing = [route_id for route_id in ROUTE_IDS if route_id not in routes] if missing: raise ValueError(f"Live .code-map is missing required route IDs: {', '.join(missing)}") result = { "status": "LIVE_DOMESTIC_PRIMARY", "repository_id": repository.get("code", "REPO-012"), "repository_role": repository.get("role", ""), "repository_web": repository_web, "repository_git": repository_git, "repository_resolution_source": repository_source, "resolver_error": resolver_error, "raw_base": raw_base, "discovery_schema": discovery.get("schema", ""), "routes": routes, } if subject_id: alias_map = read_json(f"{raw_base}/identity/subject-id-alias-map.json") identity = resolve_subject_id(subject_id, alias_map) canonical_id = identity.get("canonical_id") if canonical_id: identity["resolved_path"] = routes.get(canonical_id) or identity.get("current_path") result["identity_resolution"] = identity return result def main() -> int: parser = argparse.ArgumentParser() parser.add_argument("--json", action="store_true", help="emit machine-readable JSON") parser.add_argument("--subject-id", help="resolve a current or legacy Fifth Domain subject id") args = parser.parse_args() try: result = resolve_live_route(args.subject_id) except (OSError, URLError, ValueError, json.JSONDecodeError) as error: print(f"Live Fifth Domain resolution failed: {error}", file=sys.stderr) return 1 if args.json: print(json.dumps(result, ensure_ascii=False, indent=2)) else: print(result["repository_web"]) for route_id, path in result["routes"].items(): print(f"{route_id}={path}") if "identity_resolution" in result: identity = result["identity_resolution"] print( "SUBJECT=" f"{identity['requested_id']} -> {identity.get('canonical_id')} " f"({identity['status']}, redirected={identity['redirected']})" ) return 0 if __name__ == "__main__": raise SystemExit(main())