{"record":{"id":"000cb138e726206b","repo":"HKUDS/DeepTutor","slug":"str-e-000cb1","errorCode":null,"errorMessage":"str(e)","messagePattern":"str\\(e\\)","errorType":"http","errorClass":"HTTPException","httpStatus":500,"severity":"error","filePath":"deeptutor/api/routers/knowledge.py","lineNumber":1735,"sourceCode":"    local/self-hosted deployment); the Obsidian capability reads it live.\n    \"\"\"\n    name = (payload.name or \"\").strip()\n    vault_path = (payload.vault_path or \"\").strip()\n    if not name or not vault_path:\n        raise HTTPException(status_code=400, detail=\"Both name and vault_path are required.\")\n    try:\n        folder = assert_path_allowed(vault_path)\n        manager = get_kb_manager()\n        entry = manager.register_obsidian_vault(name, str(folder))\n        return {\"status\": \"connected\", \"name\": name, \"vault_path\": entry[\"vault_path\"]}\n    except ValueError as e:\n        # Missing/invalid path, disallowed location, or a name clash → 400.\n        raise HTTPException(status_code=400, detail=str(e))\n    except HTTPException:\n        raise\n    except Exception as e:\n        logger.error(f\"Error connecting Obsidian vault: {e}\")\n        raise HTTPException(status_code=500, detail=str(e))\n\n\nclass ConnectMarginNote4Request(BaseModel):\n    name: str\n    db_path: str = \"\"\n    description: str = \"\"\n\n\n@router.post(\"/connect-marginnote4\")\nasync def connect_marginnote4(payload: ConnectMarginNote4Request):\n    \"\"\"Register a connected MarginNote 4 library as a knowledge base.\n\n    Creates a ``type: marginnote4`` pointer so the MarginNote capability can\n    bind to it on turns where the user selects this KB. When ``db_path`` is\n    omitted the capability derives a default SQLite path from the KB name.\n    \"\"\"\n    name = (payload.name or \"\").strip()\n    if not name:","sourceCodeStart":1717,"sourceCodeEnd":1753,"githubUrl":"https://github.com/HKUDS/DeepTutor/blob/3e82f130422a813cdd73c10b21a44e9325f5821a/deeptutor/api/routers/knowledge.py#L1717-L1753","documentation":"Error \"str(e)\" thrown in HKUDS/DeepTutor.","triggerScenarios":"Thrown at deeptutor/api/routers/knowledge.py:1735 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3e82f130422a813cdd73c10b21a44e9325f5821a","analyzedAt":"2026-08-27T06:57:25.364Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}