{"record":{"id":"be00973b2f9ba947","repo":"chenhg5/cc-connect","slug":"pi-read-session-dir-w","errorCode":null,"errorMessage":"pi: read session dir: %w","messagePattern":"pi: read session dir: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agent/pi/pi.go","lineNumber":173,"sourceCode":"\t// 优先生效（getenv 返回第一个匹配项）。\n\textraEnv = append(extraEnv, core.InjectedAgentEnv(mode)...)\n\trpc := a.rpc\n\ta.mu.Unlock()\n\treturn newPiSession(ctx, a.cmd, extraArgs, a.workDir, model, mode, thinking, rpc, sessionID, extraEnv)\n}\n\nfunc (a *Agent) ListSessions(_ context.Context) ([]core.AgentSessionInfo, error) {\n\tsessDir := piSessionDir(a.workDir)\n\tif sessDir == \"\" {\n\t\treturn nil, nil\n\t}\n\n\tentries, err := os.ReadDir(sessDir)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, fmt.Errorf(\"pi: read session dir: %w\", err)\n\t}\n\n\tvar sessions []core.AgentSessionInfo\n\tfor _, entry := range entries {\n\t\tname := entry.Name()\n\t\tif entry.IsDir() || !strings.HasSuffix(name, \".jsonl\") {\n\t\t\tcontinue\n\t\t}\n\n\t\tinfo, err := entry.Info()\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tsessionID, summary, msgCount := scanPiSession(filepath.Join(sessDir, name))\n\t\tif sessionID == \"\" {\n\t\t\tcontinue\n\t\t}","sourceCodeStart":155,"sourceCodeEnd":191,"githubUrl":"https://github.com/chenhg5/cc-connect/blob/4000b2338aa6e850c99df54f8b0ed6ed7460b401/agent/pi/pi.go#L155-L191","documentation":"Wraps a failed os.ReadDir of the pi agent's session directory during listing. Not-exist returns no sessions; this error fires only on other IO failures such as permission denial while scanning the pi storage directory.","triggerScenarios":"Thrown at agent/pi/pi.go:173 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix read permissions on the pi sessions directory","Check for filesystem errors on the path","Retry /sessions after repair"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"4000b2338aa6e850c99df54f8b0ed6ed7460b401","analyzedAt":"2026-09-06T11:45:09.575Z","contentChangedAt":"2026-09-06T11:45:09.575Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}