{"record":{"id":"df1d04f125e30685","repo":"theonedev/onedev","slug":"criteria-is-not-supported-here","errorCode":null,"errorMessage":"Criteria '' is not supported here","messagePattern":"Criteria '' is not supported here","errorType":"exception","errorClass":"ExplicitException","httpStatus":null,"severity":"error","filePath":"server-core/src/main/java/io/onedev/server/search/entity/agent/AgentQuery.java","lineNumber":104,"sourceCode":"\t\t\tCommonTokenStream tokens = new CommonTokenStream(lexer);\n\t\t\tAgentQueryParser parser = new AgentQueryParser(tokens);\n\t\t\tparser.removeErrorListeners();\n\t\t\tparser.setErrorHandler(new BailErrorStrategy());\n\t\t\tQueryContext queryContext = parser.query();\n\t\t\tCriteriaContext criteriaContext = queryContext.criteria();\n\t\t\tCriteria<Agent> agentCriteria;\n\t\t\tif (criteriaContext != null) {\n\t\t\t\tagentCriteria = new AgentQueryBaseVisitor<Criteria<Agent>>() {\n\n\t\t\t\t\t@Override\n\t\t\t\t\tpublic Criteria<Agent> visitFuzzyCriteria(FuzzyCriteriaContext ctx) {\n\t\t\t\t\t\treturn new FuzzyCriteria(getValue(ctx.getText()));\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t@Override\n\t\t\t\t\tpublic Criteria<Agent> visitOperatorCriteria(OperatorCriteriaContext ctx) {\n\t\t\t\t\t\tif (forRunner)\n\t\t\t\t\t\t\tthrow new ExplicitException(\"Criteria '\" + ctx.operator.getText() + \"' is not supported here\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tswitch (ctx.operator.getType()) {\n\t\t\t\t\t\tcase Online:\n\t\t\t\t\t\t\treturn new OnlineCriteria();\n\t\t\t\t\t\tcase Offline:\n\t\t\t\t\t\t\treturn new OfflineCriteria();\n\t\t\t\t\t\tcase Paused:\n\t\t\t\t\t\t\treturn new PausedCriteria();\n\t\t\t\t\t\tcase HasRunningBuilds:\n\t\t\t\t\t\t\treturn new HasRunningBuildsCriteria();\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new ExplicitException(\"Unexpected operator: \" + ctx.operator.getText());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t@Override\n\t\t\t\t\tpublic Criteria<Agent> visitOperatorValueCriteria(OperatorValueCriteriaContext ctx) {\n\t\t\t\t\t\tif (forRunner && ctx.HasAttribute() == null)","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/search/entity/agent/AgentQuery.java#L86-L122","documentation":"In AgentQuery's visitor, operator-only criteria (online/offline/paused/has running builds) are not allowed when the query is parsed for a runner (forRunner=true); the parser throws ExplicitException \"Criteria '<op>' is not supported here\".","triggerScenarios":"Parsing an agent query containing an operator criterion (e.g. 'online', 'paused') in a context where forRunner is true — i.e. a runner-facing query that only permits certain criteria.","commonSituations":"Writing a runner-side agent query using server-side-only operators; reusing a server query string in a runner context.","solutions":["Remove operator criteria unsupported in the runner context","Use only criteria permitted for runner queries (e.g. HasAttribute value criteria)","Parse with forRunner=false if the server context is what's intended"],"exampleFix":"// before\nnew AgentQuery(\"online\", true /* forRunner */)\n// after\nnew AgentQuery(\"HasAttribute is \\\"gpu\\\"\", true)","handlingStrategy":"validation","validationCode":"Set<String> runnerAllowed = Set.of(\"HasAttribute\");\nfor (String crit : extractCriteria(q)) if (!runnerAllowed.contains(crit) && forRunner) throw new IllegalArgumentException(\"unsupported in runner query: \" + crit);","typeGuard":null,"tryCatchPattern":"try { new AgentQuery(q, true); } catch (ExplicitException e) { /* fall back to runner-safe query */ }","preventionTips":["Keep separate query strings for server and runner contexts","Restrict runner queries to HasAttribute criteria","Document which operators are runner-safe"],"tags":["query-syntax","agent","onedev"],"backgroundTag":"unsupported-operation","analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}