{"record":{"id":"2693f5ec5fbb8c47","repo":"iflytek/astron-agent","slug":"node-dep-node-id-has-no-ref-node-info","errorCode":null,"errorMessage":"Node {dep_node_id} has no ref node info","messagePattern":"Node (.+?) has no ref node info","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"core/workflow/engine/nodes/base_node.py","lineNumber":544,"sourceCode":"        \"\"\"\n        Check if a dependency node supports streaming output.\n\n        This method determines whether a dependent node can provide streaming\n        output based on its node type and configuration.\n\n        :param dep_node_id: ID of the dependent node\n        :param template_unit: Template unit containing variable information\n        :param variable_pool: Pool containing system parameters and node configurations\n        :return: True if the dependency supports streaming, False otherwise\n        \"\"\"\n        node_type = dep_node_id.split(\":\")[0]\n\n        if node_type in [NodeType.LLM.value, NodeType.AGENT.value]:\n            # LLM and Agent nodes always support streaming\n            return True\n\n        if not template_unit.ref_node_info:\n            raise ValueError(f\"Node {dep_node_id} has no ref node info\")\n\n        if node_type == NodeType.KNOWLEDGE_PRO.value:\n            # Knowledge Pro nodes support streaming except for result variables\n            return not template_unit.ref_node_info.ref_var_name.startswith(\"result\")\n\n        if node_type == NodeType.FLOW.value:\n            # Flow nodes support streaming only in prompt mode\n            flow_output_mode = variable_pool.system_params.get(\n                ParamKey.FlowOutputMode, node_id=dep_node_id\n            )\n            return flow_output_mode == EndNodeOutputModeEnum.PROMPT_MODE.value\n\n        return False\n\n    async def _process_llm_output_stream(\n        self,\n        dep_node_id: str,\n        variable_pool: VariablePool,","sourceCodeStart":526,"sourceCodeEnd":562,"githubUrl":"https://github.com/iflytek/astron-agent/blob/5e758547a83371a5a4b29dadf4ac03e8dd527635/core/workflow/engine/nodes/base_node.py#L526-L562","documentation":"Raised by BaseNode._is_valid_stream_dependency when determining whether a dependency template unit can stream its output to msg/end nodes: for node types other than LLM/AGENT, the template unit must carry ref_node_info identifying the referenced node and variable. Missing ref_node_info is an invalid internal reference configuration.","triggerScenarios":"A workflow dependency edge references a node's output but its template_unit lacks ref_node_info — e.g. hand-edited or older-format DSL where the reference metadata was not filled in, or a knowledge/flow node reference missing its ref variable.","commonSituations":"Importing workflows exported from other versions with different reference metadata shape; deleting/renaming nodes in the DSL editor leaving dangling references; programmatic workflow construction that skips populating ref_node_info.","solutions":["Re-open and re-save the workflow in the editor so ref_node_info is regenerated for each template unit","Fix the DSL so every referenced template unit includes ref_node_info (node id + ref var name)","Remove the broken dependency/variable reference from the msg/end node configuration","Validate the workflow definition against the current schema version before running"],"exampleFix":"// before\n{\"templateUnit\": {\"type\": \"knowledge_pro\"}}\n// after\n{\"templateUnit\": {\"type\": \"knowledge_pro\", \"refNodeInfo\": {\"nodeId\": \"node-1\", \"refVarName\": \"answer\"}}}","handlingStrategy":"validation","validationCode":"def stream_deps_have_ref_info(template_units: list[dict]) -> bool:\n    return all(\n        u.get(\"refNodeInfo\") or u.get(\"type\") in (\"llm\", \"agent\")\n        for u in template_units\n    )","typeGuard":null,"tryCatchPattern":"try:\n    await node.msg_or_end_node_stream_output(...)\nexcept ValueError as e:\n    if \"has no ref node info\" in str(e):\n        log.error(\"broken dependency reference: %s\", e)\n        return None\n    raise","preventionTips":["Edit dependencies in the workflow editor rather than hand-editing DSL","Re-export workflows when migrating between engine versions","Clean up dangling references when deleting nodes"],"tags":["workflow","streaming","internal-reference","validation"],"backgroundTag":"missing-required-argument","analyzedSha":"5e758547a83371a5a4b29dadf4ac03e8dd527635","analyzedAt":"2026-09-12T08:03:51.356Z","contentChangedAt":"2026-09-12T08:03:51.356Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}