kodevu 0.1.66 → 0.1.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/logger.js +21 -10
- package/src/reviewers.js +13 -1
package/package.json
CHANGED
package/src/logger.js
CHANGED
|
@@ -78,7 +78,7 @@ class Logger {
|
|
|
78
78
|
const date = formatDate(new Date()).split(" ")[0];
|
|
79
79
|
this.logFile = path.join(config.logsDir, `run-${date}.log`);
|
|
80
80
|
|
|
81
|
-
// Simple rotation:
|
|
81
|
+
// Simple rotation: Keep the most recent 7 log files
|
|
82
82
|
this.#cleanupOldLogs(config.logsDir);
|
|
83
83
|
this.initialized = true;
|
|
84
84
|
} catch (err) {
|
|
@@ -161,21 +161,32 @@ class Logger {
|
|
|
161
161
|
].join("-");
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
-
|
|
165
|
-
|
|
166
164
|
#cleanupOldLogs(logsDir) {
|
|
167
165
|
try {
|
|
168
166
|
const files = fs.readdirSync(logsDir);
|
|
169
|
-
const now = Date.now();
|
|
170
|
-
const MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
171
167
|
|
|
172
|
-
|
|
173
|
-
|
|
168
|
+
const logFiles = files
|
|
169
|
+
.filter((file) => file.startsWith("run-") && file.endsWith(".log"))
|
|
170
|
+
.map((file) => {
|
|
174
171
|
const filePath = path.join(logsDir, file);
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
172
|
+
try {
|
|
173
|
+
const stats = fs.statSync(filePath);
|
|
174
|
+
return { file, path: filePath, mtime: stats.mtimeMs };
|
|
175
|
+
} catch {
|
|
176
|
+
return null;
|
|
178
177
|
}
|
|
178
|
+
})
|
|
179
|
+
.filter(Boolean)
|
|
180
|
+
.sort((a, b) => b.mtime - a.mtime);
|
|
181
|
+
|
|
182
|
+
const KEEP_COUNT = 7;
|
|
183
|
+
const toRemove = logFiles.slice(KEEP_COUNT);
|
|
184
|
+
|
|
185
|
+
for (const entry of toRemove) {
|
|
186
|
+
try {
|
|
187
|
+
fs.unlinkSync(entry.path);
|
|
188
|
+
} catch {
|
|
189
|
+
// Ignore individual deletion errors
|
|
179
190
|
}
|
|
180
191
|
}
|
|
181
192
|
} catch (err) {
|
package/src/reviewers.js
CHANGED
|
@@ -190,9 +190,21 @@ export const REVIEWERS = {
|
|
|
190
190
|
debug: config.debug
|
|
191
191
|
});
|
|
192
192
|
|
|
193
|
+
const message = execResult.stdout || execResult.stderr || "";
|
|
194
|
+
|
|
195
|
+
// Treat non-zero exit codes as failures and throw so callers can handle them.
|
|
196
|
+
if (typeof execResult.code === "number" && execResult.code !== 0) {
|
|
197
|
+
const err = new Error(
|
|
198
|
+
`OpenCode exited with code ${execResult.code}: ${execResult.stderr || execResult.stdout || ""}`
|
|
199
|
+
);
|
|
200
|
+
// attach execResult for callers that want more details
|
|
201
|
+
err.execResult = execResult;
|
|
202
|
+
throw err;
|
|
203
|
+
}
|
|
204
|
+
|
|
193
205
|
return {
|
|
194
206
|
...execResult,
|
|
195
|
-
message
|
|
207
|
+
message
|
|
196
208
|
};
|
|
197
209
|
} finally {
|
|
198
210
|
await fs.rm(tempDir, { recursive: true, force: true });
|