opencode-review-helper 0.1.0 ā 0.1.2
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/README.md +5 -17
- package/dist/cli.js +54 -9
- package/dist/cli.js.map +1 -1
- package/package.json +7 -3
package/README.md
CHANGED
|
@@ -10,26 +10,14 @@ OpenCode plugin for reviewing AI-generated code changes. Helps humans efficientl
|
|
|
10
10
|
## Installation
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
|
-
|
|
13
|
+
bunx opencode-review-helper setup
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
This will:
|
|
17
|
+
1. Add the plugin to your `~/.config/opencode/opencode.jsonc`
|
|
18
|
+
2. Let you choose which model to use for the impact-explorer sub-agent (default: `google/gemini-3-flash`)
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
{
|
|
20
|
-
"plugin": ["opencode-review-helper"]
|
|
21
|
-
}
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## Setup
|
|
25
|
-
|
|
26
|
-
Configure the sub-agent model (optional):
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
npx opencode-review-helper setup
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
This lets you choose which model to use for the impact-explorer sub-agent (default: `google/gemini-3-flash`).
|
|
20
|
+
Restart opencode after setup to load the plugin.
|
|
33
21
|
|
|
34
22
|
## Usage
|
|
35
23
|
|
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { saveGlobalConfig } from "./config.js";
|
|
3
3
|
import { createInterface } from "node:readline";
|
|
4
|
+
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
|
5
|
+
import { existsSync } from "node:fs";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
import { homedir } from "node:os";
|
|
8
|
+
import JSONC from "tiny-jsonc";
|
|
9
|
+
const PLUGIN_NAME = "opencode-review-helper";
|
|
4
10
|
const MODELS = [
|
|
5
11
|
{ value: "google/gemini-3-flash", label: "Google Gemini 3 Flash (fast, recommended)" },
|
|
6
12
|
{ value: "google/gemini-3-flash-lite", label: "Google Gemini 3 Flash Lite (fastest)" },
|
|
@@ -19,9 +25,52 @@ async function prompt(question) {
|
|
|
19
25
|
});
|
|
20
26
|
});
|
|
21
27
|
}
|
|
28
|
+
function getOpencodeConfigPath() {
|
|
29
|
+
const paths = [
|
|
30
|
+
join(homedir(), ".config", "opencode", "opencode.jsonc"),
|
|
31
|
+
join(homedir(), ".config", "opencode", "opencode.json"),
|
|
32
|
+
];
|
|
33
|
+
for (const p of paths) {
|
|
34
|
+
if (existsSync(p))
|
|
35
|
+
return p;
|
|
36
|
+
}
|
|
37
|
+
return paths[0];
|
|
38
|
+
}
|
|
39
|
+
async function ensurePluginInConfig() {
|
|
40
|
+
const configPath = getOpencodeConfigPath();
|
|
41
|
+
const configDir = join(homedir(), ".config", "opencode");
|
|
42
|
+
await mkdir(configDir, { recursive: true });
|
|
43
|
+
let config = {};
|
|
44
|
+
if (existsSync(configPath)) {
|
|
45
|
+
const content = await readFile(configPath, "utf-8");
|
|
46
|
+
try {
|
|
47
|
+
config = JSONC.parse(content);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
console.error(`Warning: Could not parse ${configPath}`);
|
|
51
|
+
return { added: false, path: configPath };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const plugins = config.plugin || [];
|
|
55
|
+
const hasPlugin = plugins.some((p) => p === PLUGIN_NAME || p.startsWith(`${PLUGIN_NAME}@`));
|
|
56
|
+
if (hasPlugin) {
|
|
57
|
+
return { added: false, path: configPath };
|
|
58
|
+
}
|
|
59
|
+
config.plugin = [...plugins, PLUGIN_NAME];
|
|
60
|
+
await writeFile(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
61
|
+
return { added: true, path: configPath };
|
|
62
|
+
}
|
|
22
63
|
async function setup() {
|
|
23
64
|
console.log("\nš OpenCode Review Helper - Setup\n");
|
|
24
|
-
console.log("
|
|
65
|
+
console.log("Step 1: Configuring opencode.jsonc...\n");
|
|
66
|
+
const { added, path } = await ensurePluginInConfig();
|
|
67
|
+
if (added) {
|
|
68
|
+
console.log(` ā
Added plugin to ${path}\n`);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
console.log(` ā
Plugin already configured in ${path}\n`);
|
|
72
|
+
}
|
|
73
|
+
console.log("Step 2: Select model for impact-explorer sub-agent:\n");
|
|
25
74
|
MODELS.forEach((m, i) => {
|
|
26
75
|
console.log(` ${i + 1}. ${m.label}`);
|
|
27
76
|
});
|
|
@@ -49,23 +98,19 @@ async function setup() {
|
|
|
49
98
|
explorer: selectedModel,
|
|
50
99
|
},
|
|
51
100
|
});
|
|
52
|
-
console.log(`\nā
|
|
101
|
+
console.log(`\nā
Setup complete!`);
|
|
53
102
|
console.log(` Explorer model: ${selectedModel}`);
|
|
54
|
-
console.log(`
|
|
55
|
-
console.log(
|
|
56
|
-
console.log(' { "plugin": ["opencode-review-helper"] }\n');
|
|
103
|
+
console.log(` Plugin config: ~/.config/opencode/review-helper.json`);
|
|
104
|
+
console.log(`\n Restart opencode to use the plugin.\n`);
|
|
57
105
|
}
|
|
58
106
|
function showHelp() {
|
|
59
107
|
console.log(`
|
|
60
108
|
opencode-review-helper - OpenCode plugin for AI code review
|
|
61
109
|
|
|
62
110
|
Commands:
|
|
63
|
-
setup Configure the plugin (model selection)
|
|
111
|
+
setup Configure the plugin (adds to opencode.jsonc + model selection)
|
|
64
112
|
help Show this help message
|
|
65
113
|
|
|
66
|
-
Usage in opencode.jsonc:
|
|
67
|
-
{ "plugin": ["opencode-review-helper"] }
|
|
68
|
-
|
|
69
114
|
Tools provided:
|
|
70
115
|
review_order - Suggests optimal order to review changed files
|
|
71
116
|
impact_analysis - Finds code outside changeset that could be affected
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-review-helper",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "OpenCode plugin for reviewing AI-generated code changes - suggests review order and analyzes impact",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -17,10 +17,14 @@
|
|
|
17
17
|
"build": "tsc",
|
|
18
18
|
"dev": "tsc --watch",
|
|
19
19
|
"prepublishOnly": "npm run build",
|
|
20
|
-
"typecheck": "tsc --noEmit"
|
|
20
|
+
"typecheck": "tsc --noEmit",
|
|
21
|
+
"release:patch": "npm version patch && git push && git push --tags && npm publish --access public",
|
|
22
|
+
"release:minor": "npm version minor && git push && git push --tags && npm publish --access public",
|
|
23
|
+
"release:major": "npm version major && git push && git push --tags && npm publish --access public"
|
|
21
24
|
},
|
|
22
25
|
"dependencies": {
|
|
23
26
|
"@opencode-ai/plugin": "^1.0.209",
|
|
27
|
+
"tiny-jsonc": "^1.0.2",
|
|
24
28
|
"zod": "^4.1.8"
|
|
25
29
|
},
|
|
26
30
|
"devDependencies": {
|
|
@@ -36,7 +40,7 @@
|
|
|
36
40
|
],
|
|
37
41
|
"repository": {
|
|
38
42
|
"type": "git",
|
|
39
|
-
"url": "https://github.com/shamashel/opencode-review-helper"
|
|
43
|
+
"url": "git+https://github.com/shamashel/opencode-review-helper.git"
|
|
40
44
|
},
|
|
41
45
|
"author": "shamashel",
|
|
42
46
|
"license": "MIT",
|