{"record":{"id":"330c4aa6e09c55b1","repo":"langchain-ai/deepagents","slug":"task-field-responseschema-must-be-an-object-wh","errorCode":null,"errorMessage":"task() field `responseSchema` must be an object when provided","messagePattern":"task\\(\\) field `responseSchema` must be an object when provided","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"libs/partners/quickjs/langchain_quickjs/_repl.py","lineNumber":566,"sourceCode":"            raise ValueError(msg)\n\n        subagent_type = payload.get(\"subagentType\")\n        if not isinstance(subagent_type, str) or not subagent_type:\n            msg = \"task() requires non-empty string field `subagentType`\"\n            raise ValueError(msg)\n\n        raw_label = payload.get(\"label\")\n        if raw_label is not None and not isinstance(raw_label, str):\n            msg = \"task() field `label` must be a string when provided\"\n            raise ValueError(msg)\n        label = raw_label.strip() if isinstance(raw_label, str) else None\n        if label == \"\":\n            label = None\n\n        response_schema = payload.get(\"responseSchema\")\n        if response_schema is not None and not isinstance(response_schema, dict):\n            msg = \"task() field `responseSchema` must be an object when provided\"\n            raise ValueError(msg)\n\n        return description, subagent_type, label, response_schema\n\n    async def _ainvoke_task_on_outer_loop(\n        self,\n        payload: dict[str, Any],\n        *,\n        state: _PTCState,\n    ) -> Any:\n        \"\"\"Validate JS `task()` input and invoke the runner on the right loop.\n\n        The QuickJS host call runs on the REPL worker loop, but subagent runnables\n        should execute on the parent LangGraph loop when one exists so callbacks,\n        context, and async loop affinity match normal tool execution.\n        \"\"\"\n        validated = self._validate_task_payload(payload)\n        description, subagent_type, label, response_schema = validated\n","sourceCodeStart":548,"sourceCodeEnd":584,"githubUrl":"https://github.com/langchain-ai/deepagents/blob/a1af029e6e73cb17c36bff823d227747b28e91e1/libs/partners/quickjs/langchain_quickjs/_repl.py#L548-L584","documentation":"`_validate_task_payload` rejects a `responseSchema` field that is present but is not an object (Python dict). `responseSchema` is optional and describes the structured output shape the subagent should return. Raised as a ValueError before subagent dispatch.","triggerScenarios":"JS calls `task({..., responseSchema: 'name'})` passing a string, array, boolean, or other non-object value where a JSON object schema is expected.","commonSituations":"Model-generated JS passing a schema name instead of an inline schema object, marshaling a JS array where an object was intended, or double-encoding the schema as a JSON string.","solutions":["Pass a plain object schema, e.g. `responseSchema: {type: 'object', properties: {answer: {type: 'string'}}}`","If you meant to reference a named schema, inline the full object instead","Remove `responseSchema` if structured output is not needed"],"exampleFix":"// before\nawait task({ description: 'X', subagentType: 'researcher', responseSchema: 'AnswerSchema' })\n// after\nawait task({ description: 'X', subagentType: 'researcher', responseSchema: { type: 'object', properties: { answer: { type: 'string' } } } })","handlingStrategy":"type-guard","validationCode":"if (payload.responseSchema !== undefined && payload.responseSchema !== null\n    && (typeof payload.responseSchema !== 'object' || Array.isArray(payload.responseSchema))) {\n  throw new Error('responseSchema must be an object');\n}","typeGuard":"function isValidResponseSchema(v) {\n  return v === undefined || v === null\n    || (typeof v === 'object' && v !== null && !Array.isArray(v));\n}","tryCatchPattern":"try {\n  await task(payload);\n} catch (e) {\n  if (String(e).includes('responseSchema')) {\n    delete payload.responseSchema; // structured output is optional\n    return await task(payload);\n  }\n  throw e;\n}","preventionTips":["Pass inline JSON-schema objects, never schema names or JSON strings","Arrays are not valid — wrap items in an object schema","Omit responseSchema when no structured output is required"],"tags":["validation","quickjs","task-bridge"],"backgroundTag":"schema-validation-failed","analyzedSha":"a1af029e6e73cb17c36bff823d227747b28e91e1","analyzedAt":"2026-08-29T11:43:24.718Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}