code-gate 0.1.0 → 1.0.1

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.
Files changed (133) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +222 -114
  3. package/README_ZH.md +224 -0
  4. package/bin/code-gate.js +12 -19
  5. package/dist/__tests__/config.test.js +1 -1
  6. package/dist/__tests__/config.test.js.map +1 -1
  7. package/dist/__tests__/render.test.js +24 -7
  8. package/dist/__tests__/render.test.js.map +1 -1
  9. package/dist/cli/commands/hook.d.ts +1 -0
  10. package/dist/cli/commands/hook.js +164 -0
  11. package/dist/cli/commands/hook.js.map +1 -0
  12. package/dist/cli/commands/init.d.ts +1 -0
  13. package/dist/cli/commands/init.js +157 -0
  14. package/dist/cli/commands/init.js.map +1 -0
  15. package/dist/cli/commands/setup.d.ts +1 -0
  16. package/dist/cli/commands/setup.js +19 -0
  17. package/dist/cli/commands/setup.js.map +1 -0
  18. package/dist/cli/index.d.ts +2 -0
  19. package/dist/cli/index.js +26 -0
  20. package/dist/cli/index.js.map +1 -0
  21. package/dist/commands/hook.js +7 -0
  22. package/dist/commands/hook.js.map +1 -1
  23. package/dist/commands/init.js +20 -20
  24. package/dist/config/defaults.d.ts +2 -0
  25. package/dist/config/defaults.js +33 -0
  26. package/dist/config/defaults.js.map +1 -0
  27. package/dist/config/index.d.ts +4 -0
  28. package/dist/config/index.js +77 -0
  29. package/dist/config/index.js.map +1 -0
  30. package/dist/config/types.d.ts +55 -0
  31. package/dist/config/types.js +2 -0
  32. package/dist/config/types.js.map +1 -0
  33. package/dist/config.d.ts +111 -21
  34. package/dist/config.js +83 -21
  35. package/dist/config.js.map +1 -1
  36. package/dist/core/git.d.ts +7 -0
  37. package/dist/core/git.js +67 -0
  38. package/dist/core/git.js.map +1 -0
  39. package/dist/core/review-flow.js +105 -59
  40. package/dist/core/review-flow.js.map +1 -1
  41. package/dist/core/review.d.ts +6 -0
  42. package/dist/core/review.js +167 -0
  43. package/dist/core/review.js.map +1 -0
  44. package/dist/index.d.ts +1 -1
  45. package/dist/index.js +1 -1
  46. package/dist/index.js.map +1 -1
  47. package/dist/llm/base.d.ts +14 -0
  48. package/dist/llm/base.js +10 -0
  49. package/dist/llm/base.js.map +1 -0
  50. package/dist/llm/deepseek.js +3 -3
  51. package/dist/llm/deepseek.js.map +1 -1
  52. package/dist/llm/index.d.ts +4 -0
  53. package/dist/llm/index.js +41 -0
  54. package/dist/llm/index.js.map +1 -0
  55. package/dist/llm/ollama.js +2 -2
  56. package/dist/llm/ollama.js.map +1 -1
  57. package/dist/llm/providers/aliyun.d.ts +4 -0
  58. package/dist/llm/providers/aliyun.js +25 -0
  59. package/dist/llm/providers/aliyun.js.map +1 -0
  60. package/dist/llm/providers/anthropic.d.ts +4 -0
  61. package/dist/llm/providers/anthropic.js +52 -0
  62. package/dist/llm/providers/anthropic.js.map +1 -0
  63. package/dist/llm/providers/azure.d.ts +4 -0
  64. package/dist/llm/providers/azure.js +38 -0
  65. package/dist/llm/providers/azure.js.map +1 -0
  66. package/dist/llm/providers/cohere.d.ts +4 -0
  67. package/dist/llm/providers/cohere.js +39 -0
  68. package/dist/llm/providers/cohere.js.map +1 -0
  69. package/dist/llm/providers/deepseek.d.ts +4 -0
  70. package/dist/llm/providers/deepseek.js +25 -0
  71. package/dist/llm/providers/deepseek.js.map +1 -0
  72. package/dist/llm/providers/gemini.d.ts +4 -0
  73. package/dist/llm/providers/gemini.js +40 -0
  74. package/dist/llm/providers/gemini.js.map +1 -0
  75. package/dist/llm/providers/mistral.d.ts +4 -0
  76. package/dist/llm/providers/mistral.js +42 -0
  77. package/dist/llm/providers/mistral.js.map +1 -0
  78. package/dist/llm/providers/ollama.d.ts +5 -0
  79. package/dist/llm/providers/ollama.js +67 -0
  80. package/dist/llm/providers/ollama.js.map +1 -0
  81. package/dist/llm/providers/openai.d.ts +4 -0
  82. package/dist/llm/providers/openai.js +27 -0
  83. package/dist/llm/providers/openai.js.map +1 -0
  84. package/dist/llm/providers/volcengine.d.ts +4 -0
  85. package/dist/llm/providers/volcengine.js +29 -0
  86. package/dist/llm/providers/volcengine.js.map +1 -0
  87. package/dist/llm/providers/zhipu.d.ts +4 -0
  88. package/dist/llm/providers/zhipu.js +25 -0
  89. package/dist/llm/providers/zhipu.js.map +1 -0
  90. package/dist/locales/de.d.ts +2 -0
  91. package/dist/locales/de.js +33 -0
  92. package/dist/locales/de.js.map +1 -0
  93. package/dist/locales/en.d.ts +2 -0
  94. package/dist/locales/en.js +33 -0
  95. package/dist/locales/en.js.map +1 -0
  96. package/dist/locales/fr.d.ts +2 -0
  97. package/dist/locales/fr.js +33 -0
  98. package/dist/locales/fr.js.map +1 -0
  99. package/dist/locales/index.d.ts +3 -0
  100. package/dist/locales/index.js +41 -0
  101. package/dist/locales/index.js.map +1 -0
  102. package/dist/locales/ja.d.ts +2 -0
  103. package/dist/locales/ja.js +33 -0
  104. package/dist/locales/ja.js.map +1 -0
  105. package/dist/locales/ko.d.ts +2 -0
  106. package/dist/locales/ko.js +33 -0
  107. package/dist/locales/ko.js.map +1 -0
  108. package/dist/locales/types.d.ts +32 -0
  109. package/dist/locales/types.js +2 -0
  110. package/dist/locales/types.js.map +1 -0
  111. package/dist/locales/zh-CN.d.ts +2 -0
  112. package/dist/locales/zh-CN.js +33 -0
  113. package/dist/locales/zh-CN.js.map +1 -0
  114. package/dist/locales/zh-TW.d.ts +2 -0
  115. package/dist/locales/zh-TW.js +33 -0
  116. package/dist/locales/zh-TW.js.map +1 -0
  117. package/dist/ui/render/assets.d.ts +8 -0
  118. package/dist/ui/render/assets.js +89 -0
  119. package/dist/ui/render/assets.js.map +1 -0
  120. package/dist/ui/render/html.d.ts +35 -0
  121. package/dist/ui/render/html.js +294 -0
  122. package/dist/ui/render/html.js.map +1 -0
  123. package/dist/ui/render.d.ts +11 -0
  124. package/dist/ui/render.js +198 -13
  125. package/dist/ui/render.js.map +1 -1
  126. package/dist/ui/server.d.ts +4 -2
  127. package/dist/ui/server.js +30 -8
  128. package/dist/ui/server.js.map +1 -1
  129. package/dist/utils/logger.d.ts +3 -0
  130. package/dist/utils/logger.js +10 -0
  131. package/dist/utils/logger.js.map +1 -0
  132. package/package.json +27 -8
  133. package/scripts/hook.sh +12 -0
@@ -1,2 +1,4 @@
1
- import { Config } from '../config.js';
2
- export declare function serveReview(cfg: Config, html: string): Promise<string>;
1
+ import { Config } from '../config/index.js';
2
+ export declare function serveReview(cfg: Config, html: string, id: string, getStatus?: () => any, openNow?: boolean): Promise<string>;
3
+ export declare function saveOutput(cfg: Config, id: string, html: string): void;
4
+ export declare function triggerOpen(url: string): void;
package/dist/ui/server.js CHANGED
@@ -3,25 +3,31 @@ import os from 'node:os';
3
3
  import fs from 'node:fs';
4
4
  import path from 'node:path';
5
5
  import { spawn } from 'node:child_process';
6
- export async function serveReview(cfg, html) {
6
+ export async function serveReview(cfg, html, id, getStatus, openNow) {
7
7
  const port = cfg.ui?.port ?? 5175;
8
- const open = cfg.ui?.openBrowser ?? true;
9
- const id = Date.now().toString(36);
8
+ const openCfg = cfg.ui?.openBrowser ?? true;
10
9
  const route = `/review/${id}`;
11
10
  const server = http.createServer((req, res) => {
12
- if (req.url && req.url.startsWith(route)) {
11
+ const u = (req.url || '').split('?')[0];
12
+ if (u === route || u === `${route}/`) {
13
13
  res.setHeader('Content-Type', 'text/html; charset=utf-8');
14
14
  res.end(html);
15
15
  return;
16
16
  }
17
+ if (u === `${route}/status` && getStatus) {
18
+ const body = JSON.stringify(getStatus() || {});
19
+ res.setHeader('Content-Type', 'application/json; charset=utf-8');
20
+ res.end(body);
21
+ return;
22
+ }
17
23
  res.statusCode = 404;
18
24
  res.end('Not Found');
19
25
  });
20
26
  return new Promise((resolve) => {
21
27
  server.listen(port, () => {
22
28
  const url = `http://localhost:${port}${route}`;
23
- process.stdout.write(`预览地址:${url}\n`);
24
- if (open)
29
+ const shouldOpen = typeof openNow === 'boolean' ? openNow : openCfg;
30
+ if (shouldOpen)
25
31
  openBrowser(url);
26
32
  server.unref();
27
33
  resolve(url);
@@ -30,13 +36,26 @@ export async function serveReview(cfg, html) {
30
36
  const p = path.join(os.tmpdir(), `code-gate-${id}.html`);
31
37
  fs.writeFileSync(p, html, 'utf8');
32
38
  const url = `file://${p}`;
33
- process.stdout.write(`预览地址:${url}\n`);
34
- if (open)
39
+ const shouldOpen = typeof openNow === 'boolean' ? openNow : openCfg;
40
+ if (shouldOpen)
35
41
  openBrowser(url);
36
42
  resolve(url);
37
43
  });
38
44
  });
39
45
  }
46
+ export function saveOutput(cfg, id, html) {
47
+ try {
48
+ const outDir = (cfg.output?.dir && cfg.output.dir.trim()) || '.review-logs';
49
+ const p = path.join(process.cwd(), outDir);
50
+ fs.mkdirSync(p, { recursive: true });
51
+ const fp = path.join(p, `review-${id}.html`);
52
+ fs.writeFileSync(fp, html, 'utf8');
53
+ // process.stdout.write(`已保存审查页面:${fp}\n`)
54
+ }
55
+ catch (e) {
56
+ // process.stderr.write(`保存审查页面失败:${(e as any)?.message || e}\n`)
57
+ }
58
+ }
40
59
  function openBrowser(url) {
41
60
  const platform = process.platform;
42
61
  if (platform === 'darwin')
@@ -46,4 +65,7 @@ function openBrowser(url) {
46
65
  else
47
66
  spawn('xdg-open', [url], { stdio: 'ignore', detached: true });
48
67
  }
68
+ export function triggerOpen(url) {
69
+ openBrowser(url);
70
+ }
49
71
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/ui/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/ui/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function info(msg: string): void;
2
+ export declare function warn(msg: string): void;
3
+ export declare function error(msg: string): void;
@@ -0,0 +1,10 @@
1
+ export function info(msg) {
2
+ process.stdout.write(msg + '\n');
3
+ }
4
+ export function warn(msg) {
5
+ process.stderr.write(msg + '\n');
6
+ }
7
+ export function error(msg) {
8
+ process.stderr.write(msg + '\n');
9
+ }
10
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;AAClC,CAAC"}
package/package.json CHANGED
@@ -1,16 +1,20 @@
1
1
  {
2
2
  "name": "code-gate",
3
- "version": "0.1.0",
4
- "description": "AI-assisted code review at git commit using local Ollama or DeepSeek API, with GitHub-style diff UI.",
3
+ "version": "1.0.1",
4
+ "description": "Intelligent Git commit guard and code reviewer. Supports local (Ollama) and cloud models (DeepSeek, OpenAI, Anthropic, etc.) with a rich CLI UI.",
5
5
  "type": "module",
6
6
  "bin": {
7
- "code-gate": "bin/code-gate.js"
7
+ "code-gate": "bin/code-gate.js",
8
+ "code-gate-hook": "scripts/hook.sh"
8
9
  },
9
10
  "main": "dist/index.js",
10
11
  "files": [
11
12
  "dist",
12
13
  "bin",
13
- "README.md"
14
+ "scripts",
15
+ "README.md",
16
+ "README_ZH.md",
17
+ "LICENSE"
14
18
  ],
15
19
  "keywords": [
16
20
  "git",
@@ -20,17 +24,21 @@
20
24
  "Ollama",
21
25
  "diff2html"
22
26
  ],
27
+ "author": "Gil",
23
28
  "license": "MIT",
24
29
  "repository": {
25
30
  "type": "git",
26
- "url": "https://example.com/your-repo-url.git"
31
+ "url": "https://github.com/Gil2015/code-gate.git"
32
+ },
33
+ "homepage": "https://github.com/Gil2015/code-gate#readme",
34
+ "bugs": {
35
+ "url": "https://github.com/Gil2015/code-gate/issues"
27
36
  },
28
37
  "scripts": {
29
38
  "build": "tsc -p tsconfig.json",
30
39
  "build:watch": "tsc -w -p tsconfig.json",
31
40
  "clean": "rimraf dist",
32
41
  "dev": "node --enable-source-maps dist/cli.js",
33
- "setup": "node --enable-source-maps dist/commands/setup.js",
34
42
  "hook": "node --enable-source-maps dist/commands/hook.js",
35
43
  "prepare": "npm run build"
36
44
  },
@@ -38,15 +46,26 @@
38
46
  "node": ">=18"
39
47
  },
40
48
  "dependencies": {
49
+ "@clack/prompts": "^0.11.0",
41
50
  "commander": "^12.1.0",
42
51
  "diff2html": "^3.4.47",
52
+ "dompurify": "^3.3.1",
53
+ "dotenv": "^17.2.3",
43
54
  "highlight.js": "^11.9.0",
55
+ "jsdom": "^27.0.1",
56
+ "marked": "^17.0.1",
57
+ "micromatch": "^4.0.8",
44
58
  "openai": "^4.60.0",
59
+ "picocolors": "^1.1.1",
45
60
  "yaml": "^2.6.0"
46
61
  },
47
62
  "devDependencies": {
63
+ "@types/dompurify": "^3.0.5",
64
+ "@types/jsdom": "^27.0.0",
65
+ "@types/marked": "^5.0.2",
66
+ "@types/micromatch": "^4.0.10",
48
67
  "@types/node": "^22.7.5",
49
- "typescript": "^5.6.3",
50
- "rimraf": "^6.0.1"
68
+ "rimraf": "^6.0.1",
69
+ "typescript": "^5.6.3"
51
70
  }
52
71
  }
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env sh
2
+ # Code Gate Hook Loader
3
+ # 智能探测并执行 code-gate hook 命令
4
+ # 优先级: 本地安装 -> 全局安装 -> npx 缓存 -> npx 下载
5
+
6
+ if [ -f "./node_modules/.bin/code-gate" ]; then
7
+ exec ./node_modules/.bin/code-gate hook "$@"
8
+ elif command -v code-gate >/dev/null 2>&1; then
9
+ exec code-gate hook "$@"
10
+ else
11
+ exec npx --no-install code-gate hook "$@" || exec npx code-gate hook "$@"
12
+ fi