iflytek/astron-agent · error · BusinessException
REPO_FILE_NOT_EXIST
REPO_FILE_NOT_EXIST
Error message
REPO_FILE_NOT_EXIST
What it means
BusinessException(REPO_FILE_NOT_EXIST) thrown in enableKnowledge after the knowledge row is found: getOnly(QueryWrapper uuid = knowledge.getFileId()) returns null because no FileInfoV2 row matches the knowledge's fileId uuid. The knowledge record's backing file reference is dangling, so the enable flow cannot resolve the repo context and aborts.
Solutions
- Re-upload or re-link the backing file, then retry enabling the knowledge entry.
- Delete and recreate the knowledge entry if its file is permanently gone.
- Run a consistency check joining knowledge.file_id against file_info_v2.uuid to find orphaned rows.
- Add cascade cleanup (or a guard) so deleting a file removes/disables its dependent knowledge entries.
Example fix
// before: deleting a file leaves orphaned knowledge await repoApi.deleteFile(fileId); // after: clean up dependent knowledge entries first const dependents = await knowledgeApi.listByFileId(fileId); for (const k of dependents) await knowledgeApi.delete(k.id); await repoApi.deleteFile(fileId);
Defensive patterns
Strategy: validation
Validate before calling
const file = await repoApi.getFileByUuid(knowledge.fileId).catch(() => null);
if (!file) throw new Error(`knowledge ${knowledge.id} references missing file ${knowledge.fileId}`); Type guard
function hasBackingFile(knowledge, file) {
return Boolean(file) && file.uuid === knowledge.fileId;
} Try / catch
try {
await knowledgeApi.enable(id, enabled);
} catch (e) {
if (e.code === 'REPO_FILE_NOT_EXIST') {
throw new Error('backing file missing; re-upload the source file before enabling');
}
throw e;
} Prevention
- Delete dependent knowledge entries when their backing file is removed (cascade).
- Run periodic orphan checks joining knowledge.file_id to file_info_v2.uuid.
- Re-link knowledge entries after migrations that regenerate file uuids.
When it happens
Trigger: Enabling a knowledge entry whose backing file was deleted (file removed but knowledge row kept), or whose fileId uuid was never correctly populated / points at another environment's files.
Common situations: Orphaned knowledge rows left behind after file deletion without cascade cleanup; data migrations that regenerated FileInfoV2 records with new uuids; imports between environments breaking uuid references.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
AI-assisted analysis of iflytek/astron-agent@5e758547a8 (2026-09-12).
Data as JSON: /api/errors/45d51376f15e44c5.
Report an issue: GitHub.
Appendix: source
Thrown at console/backend/toolkit/src/main/java/com/iflytek/astron/console/toolkit/service/repo/KnowledgeService.java:243
* @return knowledge ID
* @throws BusinessException if knowledge not found or operation fails
*/
public String enableKnowledge(String id, Integer enabled) {
MysqlKnowledge mysqlKnowledge = knowledgeMapper.selectById(id);
if (mysqlKnowledge == null) {
throw new BusinessException(ResponseEnum.REPO_KNOWLEDGE_NOT_EXIST);
}
Knowledge knowledge = new Knowledge();
BeanUtils.copyProperties(mysqlKnowledge, knowledge);
Integer originEnabled = knowledge.getEnabled();
if (Objects.equals(originEnabled, enabled)) {
return knowledge.getId();
}
FileInfoV2 fileInfoV2 = fileInfoV2Service.getOnly(new QueryWrapper<FileInfoV2>().eq("uuid", knowledge.getFileId()));
if (fileInfoV2 == null) {
throw new BusinessException(ResponseEnum.REPO_FILE_NOT_EXIST);
}
RepoContext repoContext = this.getRepoContext(fileInfoV2.getId());
JSONObject content = knowledge.getContent();
String auditSuggest = content.getString("auditSuggest");
if (!(StringUtils.isEmpty(auditSuggest) || "pass".equals(auditSuggest)) && enabled == 1) {
return knowledge.getId();
}
knowledge.setEnabled(enabled);
knowledge.setUpdatedAt(LocalDateTime.now());
try {
String source = fileInfoV2.getSource();
if (enabled == 1) {// Enable - re-add
JSONArray jsonArray = new JSONArray();
View on GitHub (pinned to 5e758547a8)