kodevu 0.1.37 → 0.1.38

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kodevu",
3
- "version": "0.1.37",
3
+ "version": "0.1.38",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "description": "Poll SVN revisions or Git commits, send each change diff to a reviewer CLI, and write configurable review reports.",
package/src/logger.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
+ import { formatDate } from "./utils.js";
3
4
 
4
5
  class Logger {
5
6
  constructor() {
@@ -18,7 +19,7 @@ class Logger {
18
19
  if (!fs.existsSync(config.logsDir)) {
19
20
  fs.mkdirSync(config.logsDir, { recursive: true });
20
21
  }
21
- const date = new Date().toISOString().split("T")[0];
22
+ const date = formatDate(new Date()).split(" ")[0];
22
23
  this.logFile = path.join(config.logsDir, `run-${date}.log`);
23
24
 
24
25
  // Simple rotation: Clean up logs older than 7 days
@@ -57,7 +58,7 @@ class Logger {
57
58
  }
58
59
 
59
60
  _log(level, message) {
60
- const timestamp = new Date().toISOString();
61
+ const timestamp = formatDate(new Date());
61
62
  const logLine = `[${timestamp}] [${level}] ${message}`;
62
63
 
63
64
  // Write to file
@@ -1,3 +1,4 @@
1
+ import { formatDate } from "./utils.js";
1
2
  export function getCoreReviewInstruction(lang) {
2
3
  const lowLang = (lang || "").toLowerCase();
3
4
  if (lowLang.startsWith("zh")) {
@@ -176,7 +177,7 @@ export function buildPrompt(config, backend, targetInfo, details, reviewDiffPayl
176
177
  `${getPhrase("repoType", lang)}: ${backend.displayName}`,
177
178
  `${getPhrase("changeId", lang)}: ${details.displayId}`,
178
179
  `${getPhrase("author", lang)}: ${details.author}`,
179
- `${getPhrase("date", lang)}: ${details.date || "unknown"}`,
180
+ `${getPhrase("date", lang)}: ${formatDate(details.date) || "unknown"}`,
180
181
  `${getPhrase("changedFiles", lang)}:\n${fileList || "(none)"}`,
181
182
  `${getPhrase("commitMessage", lang)}:\n${details.message || "(empty)"}`
182
183
  ].join("\n");
@@ -260,8 +261,8 @@ export function buildReport(config, backend, targetInfo, details, diffPayloads,
260
261
  `- Target: \`${targetInfo.targetDisplay || config.target}\``,
261
262
  `- Change ID: \`${details.displayId}\``,
262
263
  `- Author: \`${details.author}\``,
263
- `- Commit Date: \`${details.date || "unknown"}\``,
264
- `- Generated At: \`${new Date().toISOString()}\``,
264
+ `- Commit Date: \`${formatDate(details.date)}\``,
265
+ `- Generated At: \`${formatDate(new Date())}\``,
265
266
  `- Reviewer: \`${reviewer.displayName}\``,
266
267
  `- Reviewer Exit Code: \`${reviewerResult.code}\``,
267
268
  `- Reviewer Timed Out: \`${reviewerResult.timedOut ? "yes" : "no"}\``,
@@ -309,8 +310,8 @@ export function buildJsonReport(config, backend, targetInfo, details, diffPayloa
309
310
  target: targetInfo.targetDisplay || config.target,
310
311
  changeId: details.displayId,
311
312
  author: details.author,
312
- commitDate: details.date || "unknown",
313
- generatedAt: new Date().toISOString(),
313
+ commitDate: formatDate(details.date),
314
+ generatedAt: formatDate(new Date()),
314
315
  reviewer: {
315
316
  name: reviewer.displayName,
316
317
  exitCode: reviewerResult.code,
@@ -5,7 +5,8 @@ import { logger } from "./logger.js";
5
5
  import {
6
6
  ensureDir,
7
7
  writeTextFile,
8
- writeJsonFile
8
+ writeJsonFile,
9
+ formatDate
9
10
  } from "./utils.js";
10
11
  import {
11
12
  shouldWriteFormat,
@@ -42,7 +43,7 @@ async function reviewChange(config, backend, targetInfo, changeId, progress) {
42
43
  repositoryType: backend.displayName,
43
44
  target: targetInfo.targetDisplay || config.target,
44
45
  changeId: details.displayId,
45
- generatedAt: new Date().toISOString(),
46
+ generatedAt: formatDate(new Date()),
46
47
  skipped: true,
47
48
  message: "No file changes were captured for this change under the configured target."
48
49
  });
package/src/utils.js CHANGED
@@ -32,3 +32,25 @@ export function countLines(text) {
32
32
  }
33
33
  return text.split(/\r?\n/).length;
34
34
  }
35
+
36
+ export function formatDate(dateInput) {
37
+ if (!dateInput || dateInput === "unknown") return "unknown";
38
+ const d = new Date(dateInput);
39
+ if (isNaN(d.getTime())) return dateInput;
40
+
41
+ const offsetMinutes = -d.getTimezoneOffset();
42
+ const offsetHours = Math.floor(Math.abs(offsetMinutes) / 60);
43
+ const offsetMins = Math.abs(offsetMinutes) % 60;
44
+ const sign = offsetMinutes >= 0 ? "+" : "-";
45
+
46
+ const pad = (n) => String(n).padStart(2, "0");
47
+ const year = d.getFullYear();
48
+ const month = pad(d.getMonth() + 1);
49
+ const day = pad(d.getDate());
50
+ const hours = pad(d.getHours());
51
+ const minutes = pad(d.getMinutes());
52
+ const seconds = pad(d.getSeconds());
53
+ const offset = `${sign}${pad(offsetHours)}:${pad(offsetMins)}`;
54
+
55
+ return `${year}-${month}-${day} ${hours}:${minutes}:${seconds} ${offset}`;
56
+ }