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 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
- npm install -g opencode-review-helper
13
+ bunx opencode-review-helper setup
14
14
  ```
15
15
 
16
- Then add to your `~/.config/opencode/opencode.jsonc`:
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
- ```json
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("Select a model for the impact-explorer sub-agent:\n");
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āœ… Configuration saved!`);
101
+ console.log(`\nāœ… Setup complete!`);
53
102
  console.log(` Explorer model: ${selectedModel}`);
54
- console.log(` Config location: ~/.config/opencode/review-helper.json\n`);
55
- console.log("To use the plugin, add to your opencode.jsonc:\n");
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,EAAc,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,MAAM,GAAG;IACb,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,2CAA2C,EAAE;IACtF,EAAE,KAAK,EAAE,4BAA4B,EAAE,KAAK,EAAE,sCAAsC,EAAE;IACtF,EAAE,KAAK,EAAE,0BAA0B,EAAE,KAAK,EAAE,0BAA0B,EAAE;IACxE,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,oBAAoB,EAAE;CAC7D,CAAC;AAEF,KAAK,UAAU,MAAM,CAAC,QAAgB;IACpC,MAAM,EAAE,GAAG,eAAe,CAAC;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,KAAK;IAClB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IAErD,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACnE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,+BAA+B,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEvC,IAAI,aAAqB,CAAC;IAE1B,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACjD,aAAa,GAAG,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9C,CAAC;SAAM,IAAI,SAAS,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,aAAa,GAAG,MAAM,MAAM,CAAC,6CAA6C,CAAC,CAAC;QAC5E,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,aAAa,GAAG,uBAAuB,CAAC;IAC1C,CAAC;IAED,MAAM,gBAAgB,CAAC;QACrB,MAAM,EAAE;YACN,QAAQ,EAAE,aAAa;SACxB;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,sBAAsB,aAAa,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAE3E,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;CAeb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,OAAO;QACV,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM;IACR,KAAK,MAAM,CAAC;IACZ,KAAK,QAAQ,CAAC;IACd,KAAK,IAAI,CAAC;IACV;QACE,QAAQ,EAAE,CAAC;QACX,MAAM;AACV,CAAC"}
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.0",
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",