{"record":{"id":"b66c69e8316662ba","repo":"langchain-ai/deepagents","slug":"32602","errorCode":"-32602","errorMessage":"cwd: must match the working directory used to create the session","messagePattern":"cwd: must match the working directory used to create the session","errorType":"error_code","errorClass":"RequestError","httpStatus":null,"severity":"error","filePath":"libs/acp/deepagents_acp/server.py","lineNumber":415,"sourceCode":"        session_id: str,\n        additional_directories: list[str] | None = None,  # noqa: ARG002  # capability is not advertised\n        mcp_servers: list[McpServer] | None = None,\n        **kwargs: Any,  # noqa: ARG002  # ACP protocol interface parameter\n    ) -> LoadSessionResponse:\n        \"\"\"Restore and replay a persisted ACP session.\"\"\"\n        if not self._load_sessions:\n            method = \"session/load\"\n            raise RequestError.method_not_found(method)\n\n        self._session_cwds[session_id] = cwd\n        agent = self._checkpointed_agent(session_id)\n        metadata = (await agent.aget_state(self._session_config(session_id))).metadata or {}\n        if metadata.get(_ACP_SESSION_METADATA_KEY) is not True:\n            self._forget_session(session_id)\n            raise RequestError.resource_not_found(session_id)\n        if metadata.get(\"cwd\") != cwd:\n            self._forget_session(session_id)\n            raise RequestError.invalid_params(\n                {\"cwd\": \"must match the working directory used to create the session\"}\n            )\n\n        self._session_mcp_servers[session_id] = list(mcp_servers or [])\n        self._initialize_session_options(session_id)\n        if self._restore_session_options(session_id, metadata):\n            self._reset_agent(session_id)\n\n        await self._replay_session(session_id, agent)\n        return LoadSessionResponse(\n            modes=self._session_mode_states.get(session_id),\n            config_options=self._build_config_options(session_id) or None,\n        )\n\n    async def set_session_mode(\n        self,\n        mode_id: str,\n        session_id: str,","sourceCodeStart":397,"sourceCodeEnd":433,"githubUrl":"https://github.com/langchain-ai/deepagents/blob/a1af029e6e73cb17c36bff823d227747b28e91e1/libs/acp/deepagents_acp/server.py#L397-L433","documentation":"Every `[models].allowed` entry must be a non-empty string in `provider:model` form; `parse_model_allowlist` raises `ValueError` for non-string entries or blank strings. This keeps a silently-broken allowlist from degrading into an unintended deny-all.","triggerScenarios":"An entry like `allowed = [\"\", \"anthropic:claude-sonnet-4-5\"]`, `allowed = [42]`, `allowed = [true]`, or whitespace-only `\"   \"` in the TOML array.","commonSituations":"Leftover empty string from templated config generation; wrong TOML type (integer/boolean) in the array; entries removed leaving an empty `\"\"` behind.","solutions":["Remove empty or non-string entries from the array","Ensure every entry is a quoted `provider:model` or `provider:*` string","Regenerate or re-check the config after automated edits/templates"],"exampleFix":"# before\nallowed = [\"\", \"anthropic:claude-sonnet-4-5\"]\n# after\nallowed = [\"anthropic:claude-sonnet-4-5\"]","handlingStrategy":"validation","validationCode":"def clean_allowlist(entries: object) -> list[str]:\n    if not isinstance(entries, list):\n        raise TypeError(\"expected a list\")\n    cleaned = [e for e in entries if isinstance(e, str) and e.strip()]\n    if len(cleaned) != len(entries):\n        raise ValueError(\"allowlist contains empty or non-string entries\")\n    return cleaned","typeGuard":"def is_allowlist_value(value: object) -> bool:\n    return isinstance(value, list) and all(\n        isinstance(e, str) and e.strip() for e in value\n    )","tryCatchPattern":"try:\n    parsed = parse_model_allowlist(raw)\nexcept ValueError as exc:\n    logger.error(\"malformed [models].allowed: %s\", exc)\n    parsed = ()","preventionTips":["Filter empty strings out of generated config arrays","Keep every allowlist entry a quoted string — no bare numbers/booleans","Review templated config output for leftover empty placeholders"],"tags":["python","toml","validation","config","allowlist"],"backgroundTag":"invalid-model-allowlist","analyzedSha":"a1af029e6e73cb17c36bff823d227747b28e91e1","analyzedAt":"2026-08-29T11:43:24.718Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}