{"record":{"id":"7ca23cd3c24760fe","repo":"HKUDS/DeepTutor","slug":"deeptutor-web-assets-are-not-installed-install-th","errorCode":null,"errorMessage":"DeepTutor Web assets are not installed. Install the full app with `pip install -U deeptutor`, or run from a source checkout that contains `web/`.","messagePattern":"DeepTutor Web assets are not installed\\. Install the full app with `pip install -U deeptutor`, or run from a source checkout that contains `web/`\\.","errorType":"console","errorClass":"SystemExit","httpStatus":null,"severity":"error","filePath":"deeptutor/runtime/launcher.py","lineNumber":776,"sourceCode":"            if not node:\n                raise SystemExit(\"Node.js 20+ is required to run the source production build.\")\n            _ensure_source_production_build(\n                source,\n                npm,\n                api_base=api_base,\n                auth_enabled=auth_enabled,\n            )\n            standalone = source / SOURCE_PRODUCTION_DIST_DIR / \"standalone\"\n            return FrontendRuntime(\n                \"source-production\",\n                [node, str(standalone / \"server.js\")],\n                standalone,\n            )\n        return FrontendRuntime(\n            \"source\", [npm, \"run\", \"dev\", \"--\", \"--port\", str(frontend_port)], source\n        )\n\n    raise SystemExit(\n        \"DeepTutor Web assets are not installed. Install the full app with `pip install -U deeptutor`, \"\n        \"or run from a source checkout that contains `web/`.\"\n    )\n\n\ndef _coerce_pid(value: object) -> int | None:\n    if isinstance(value, bool) or not isinstance(value, int | str):\n        return None\n    try:\n        pid = int(value)\n    except (TypeError, ValueError):\n        return None\n    return pid if pid > 0 else None\n\n\ndef _coerce_port(value: object) -> int | None:\n    if isinstance(value, bool) or not isinstance(value, int | str):\n        return None","sourceCodeStart":758,"sourceCodeEnd":794,"githubUrl":"https://github.com/HKUDS/DeepTutor/blob/3e82f130422a813cdd73c10b21a44e9325f5821a/deeptutor/runtime/launcher.py#L758-L794","documentation":"Raised by _resolve_frontend when neither packaged web assets nor a source web/ directory exists, so there is no frontend to launch at all. The launcher exhausted all frontend runtime options (packaged assets, standalone build, source checkout).","triggerScenarios":"Running deeptutor start from a CLI-only install (pip install deeptutor-cli) or a source checkout where the web/ folder is missing/deleted, so no FrontendRuntime can be constructed.","commonSituations":"Installing the lightweight `deeptutor-cli` package (no web assets) and then running `deeptutor start`; cloning the repo without submodules or after deleting web/; corrupted wheel install missing the packaged assets directory.","solutions":["Install the full app: `pip install -U deeptutor` (includes packaged web assets)","If you intend to run from source, ensure the repo's web/ directory exists at the project root","If you only need the API/CLI, use `deeptutor serve` instead of `deeptutor start`"],"exampleFix":"# before\npip install deeptutor-cli\ndeeptutor start   # SystemExit\n# after\npip install -U deeptutor\ndeeptutor start","handlingStrategy":"validation","validationCode":"import importlib.util, pathlib\npkg = importlib.util.find_spec(\"deeptutor\")\nroot = pathlib.Path(pkg.origin).parent\nhas_web = (root / \"web\").is_dir()\nhas_assets = (root / \"web\" / \".assets\").exists() or (root / \"web_static\").exists()\nif not (has_web or has_assets):\n    raise SystemExit(\"Install full app: pip install -U deeptutor\")","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pin the full `deeptutor` package (not deeptutor-cli) when you need `deeptutor start`","Verify web/ exists in source checkouts before scripting start()","Use `deeptutor serve` for headless/API-only deployments"],"tags":["frontend","packaging","missing-assets","install"],"backgroundTag":"missing-install-artifact","analyzedSha":"3e82f130422a813cdd73c10b21a44e9325f5821a","analyzedAt":"2026-08-27T06:57:25.364Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}