openqodex 0.6.0 → 0.6.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.
package/README.md CHANGED
@@ -1,4 +1,7 @@
1
- <!-- banner: added before launch -->
1
+ <picture>
2
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/openqodex/openqodex/main/.github/assets/readme-banner-dark.png">
3
+ <img alt="OpenQodex" src="https://raw.githubusercontent.com/openqodex/openqodex/main/.github/assets/readme-banner-light.png" width="1280">
4
+ </picture>
2
5
 
3
6
  # OpenQodex
4
7
 
@@ -6,7 +9,7 @@
6
9
  [![licence](https://img.shields.io/badge/licence-Apache--2.0-blue)](LICENSE)
7
10
  [![CI](https://github.com/openqodex/openqodex/actions/workflows/ci.yml/badge.svg)](https://github.com/openqodex/openqodex/actions/workflows/ci.yml)
8
11
 
9
- OpenQodex is open source code review that runs before you push, from your coding agent or your terminal. One command, `openqodex review`, works out your change: the commits not yet pushed plus everything uncommitted. It runs the scanners that fit the changed files and keeps only findings on the lines you changed. Then it starts its own reviewer, a separate Claude Code or Codex process that reads a frozen copy of the change. The reviewer checks every scanner finding and is given every changed line. OpenQodex checks its answer with scripts and prints one report. It needs Claude Code or Codex installed and logged in, and no other key, account or server.
12
+ OpenQodex is open source AI code review for Claude Code and Codex. It runs before you push, from your coding agent or your terminal. One command, `openqodex review`, works out your change: the commits not yet pushed plus everything uncommitted. It runs the scanners that fit the changed files and keeps only findings on the lines you changed. Then it starts its own reviewer, a separate Claude Code or Codex process that reads a frozen copy of the change. The reviewer checks every scanner finding and is given every changed line. OpenQodex checks its answer with scripts and prints one report. It needs Claude Code or Codex installed and logged in, and no other key, account or server.
10
13
 
11
14
  ## Install
12
15
 
@@ -163,11 +166,12 @@ The docs ship inside the package. `npx openqodex guide <topic>` prints a page of
163
166
  - [Agents](docs/agents.md)
164
167
  - [GitHub Action](docs/github-action.md)
165
168
  - [Security](docs/security.md)
169
+ - [Privacy](docs/privacy.md)
166
170
  - [FAQ](docs/faq.md)
167
171
 
168
172
  ## Telemetry
169
173
 
170
- None. OpenQodex sends no usage data. semgrep runs with its own metrics switched off. See [docs/telemetry.md](docs/telemetry.md).
174
+ None. OpenQodex sends no usage data. semgrep runs with its own metrics switched off. See [docs/telemetry.md](docs/telemetry.md) and the privacy policy, [docs/privacy.md](docs/privacy.md).
171
175
 
172
176
  ## Security
173
177
 
@@ -179,6 +183,8 @@ OpenQodex is new and on the way to 1.0. Commands, flags and the config file can
179
183
 
180
184
  ## Made by Qodex
181
185
 
186
+ [![Made by Qodex](https://raw.githubusercontent.com/openqodex/openqodex/main/.github/assets/made-by-qodex.svg)](https://qodex.ai?utm_source=openqodex&utm_medium=readme)
187
+
182
188
  OpenQodex is made by [Qodex](https://qodex.ai?utm_source=openqodex&utm_medium=readme), which also runs a hosted review on every pull request.
183
189
 
184
190
  Licensed under [Apache 2.0](LICENSE). See [NOTICE](NOTICE) for the scanners' licences.
package/dist/bin.js CHANGED
@@ -39813,7 +39813,7 @@ function launcherStarted(env = process.env, entry = process.argv[1]) {
39813
39813
  return named !== void 0 && named !== "" && entry !== void 0 && resolve6(named) === resolve6(entry);
39814
39814
  }
39815
39815
  function directRunner(entry = process.argv[1]) {
39816
- const npx = `npx -y openqodex@${"0.6.0"}`;
39816
+ const npx = `npx -y openqodex@${"0.6.1"}`;
39817
39817
  if (entry === void 0) return npx;
39818
39818
  let file2;
39819
39819
  let own2;
@@ -40223,7 +40223,7 @@ function composeIssue(problem, command, args2) {
40223
40223
  `Scanners: ${scanners}`,
40224
40224
  `Environment: ${osName()}, ${process.arch}, Node ${process.versions.node.split(".")[0]}`
40225
40225
  ].join("\n");
40226
- return { title: `OpenQodex ${"0.6.0"}: ${problem.code}`, body: body2 };
40226
+ return { title: `OpenQodex ${"0.6.1"}: ${problem.code}`, body: body2 };
40227
40227
  }
40228
40228
  function issueText(issue2) {
40229
40229
  return [
@@ -41505,7 +41505,7 @@ Nothing was written.
41505
41505
  const record3 = loadRecord(home);
41506
41506
  const recordBefore = serialize(record3);
41507
41507
  try {
41508
- const runtime2 = planRuntime(record3, "0.6.0", home);
41508
+ const runtime2 = planRuntime(record3, "0.6.1", home);
41509
41509
  const refused = runtime2.find((a2) => a2.failed);
41510
41510
  if (refused) return fail2(`openqodex hook install: ${refused.path}: ${refused.note}`);
41511
41511
  await applyAll(runtime2);
@@ -41618,7 +41618,7 @@ var init_hook = __esm({
41618
41618
  BRANCH = /^[A-Za-z0-9._][A-Za-z0-9._/-]*$/;
41619
41619
  CANNOT_TELL = "OpenQodex could not tell what this push sends; run openqodex review and push with plain git push";
41620
41620
  ZERO_SHA = /^0+$/;
41621
- MANAGED_LINE = (manager) => hookLine(`npx -y openqodex@${"0.6.0"}`, manager.args);
41621
+ MANAGED_LINE = (manager) => hookLine(`npx -y openqodex@${"0.6.1"}`, manager.args);
41622
41622
  }
41623
41623
  });
41624
41624
 
@@ -50102,7 +50102,7 @@ async function runReview(o2) {
50102
50102
  created_at: (/* @__PURE__ */ new Date()).toISOString(),
50103
50103
  lenses: lenses.map((l2) => ({ name: l2.name, confidenceFloor: l2.confidenceFloor })),
50104
50104
  instructions_hash: instructions.hash,
50105
- runtime_version: "0.6.0",
50105
+ runtime_version: "0.6.1",
50106
50106
  ...prep.target ? { target: prep.target } : {}
50107
50107
  };
50108
50108
  writeReportFiles(
@@ -53582,7 +53582,7 @@ ${USAGE2}
53582
53582
  home,
53583
53583
  oqHome: openqodexHomeDir(),
53584
53584
  repoRoot,
53585
- version: "0.6.0",
53585
+ version: "0.6.1",
53586
53586
  written: [],
53587
53587
  before: /* @__PURE__ */ new Map()
53588
53588
  };
@@ -53675,7 +53675,7 @@ function maybeStartUpdate(home, state) {
53675
53675
  child.unref();
53676
53676
  }
53677
53677
  function notices(home, state) {
53678
- if (state.notice === null || state.notice.version !== "0.6.0") return;
53678
+ if (state.notice === null || state.notice.version !== "0.6.1") return;
53679
53679
  process.stderr.write(`${state.notice.text}
53680
53680
  `);
53681
53681
  updateState(home, { notice: null });
@@ -53687,7 +53687,7 @@ function afterCommand(name2, args2) {
53687
53687
  const state = readState(home);
53688
53688
  const sub = name2 === "hook" ? args2[0] : void 0;
53689
53689
  if (!launcherStarted()) {
53690
- const note3 = name2 === "review" || name2 === "scan" ? pinnedNote(state, "0.6.0") : null;
53690
+ const note3 = name2 === "review" || name2 === "scan" ? pinnedNote(state, "0.6.1") : null;
53691
53691
  if (note3 !== null) process.stderr.write(`openqodex: ${note3}
53692
53692
  `);
53693
53693
  return;
@@ -53890,7 +53890,7 @@ async function writeBrief(p3, flags2, noGraph, scope, target) {
53890
53890
  created_at: (/* @__PURE__ */ new Date()).toISOString(),
53891
53891
  lenses: lenses.map((l2) => ({ name: l2.name, confidenceFloor: l2.confidenceFloor })),
53892
53892
  instructions_hash: instructions.hash,
53893
- runtime_version: "0.6.0",
53893
+ runtime_version: "0.6.1",
53894
53894
  ...target ? { target, run_id: runId } : {}
53895
53895
  };
53896
53896
  const impact = await buildImpact(p3, flags2, noGraph);
@@ -54026,7 +54026,7 @@ async function runAll(flags2, only, skip, noGraph) {
54026
54026
  created_at: (/* @__PURE__ */ new Date()).toISOString(),
54027
54027
  lenses: lenses.map((l2) => ({ name: l2.name, confidenceFloor: l2.confidenceFloor })),
54028
54028
  instructions_hash: instructions.hash,
54029
- runtime_version: "0.6.0"
54029
+ runtime_version: "0.6.1"
54030
54030
  });
54031
54031
  writeScan(repoRoot, dir, p3.scan);
54032
54032
  const { impact, hot, note: note3 } = await buildHotSpots(p3, flags2, noGraph);
@@ -54174,7 +54174,7 @@ async function runFinalize(flags2, path11, all, args2, handedOff, runId) {
54174
54174
  if (target !== void 0 && runId === void 0) {
54175
54175
  throw new OpenQodexError(`this run reviewed ${target.spec}; finalize it with review --finalize --run ${basename11(dir)}`);
54176
54176
  }
54177
- if (manifest !== null && manifest.runtime_version !== void 0 && manifest.runtime_version !== "0.6.0") {
54177
+ if (manifest !== null && manifest.runtime_version !== void 0 && manifest.runtime_version !== "0.6.1") {
54178
54178
  if (target !== void 0) {
54179
54179
  throw new OpenQodexError(`this brief was written by openqodex ${manifest.runtime_version}; run the review of ${target.spec} again`);
54180
54180
  }
@@ -54481,7 +54481,7 @@ var init_fetch = __esm({
54481
54481
  DEADLINE_MS2 = 12e4;
54482
54482
  MB = 1024 * 1024;
54483
54483
  LIMITS = { metadata: 20 * MB, attestations: 5 * MB, tarball: 50 * MB };
54484
- VERSION = true ? "0.6.0" : "dev";
54484
+ VERSION = true ? "0.6.1" : "dev";
54485
54485
  UpdateFetchError = class extends Error {
54486
54486
  constructor(message5) {
54487
54487
  super(message5);
@@ -59817,7 +59817,7 @@ async function runUpdateWorker(opts) {
59817
59817
  async function work(home, env, anyAge, wait) {
59818
59818
  const now = Date.now();
59819
59819
  const test = seam(env);
59820
- const running = test.as ?? "0.6.0";
59820
+ const running = test.as ?? "0.6.1";
59821
59821
  const from = activeVersion(home);
59822
59822
  if (from === null || !existsSync15(launcherPath(home))) return { outcome: "failed", lines: ["No launcher install here; run npx openqodex init."] };
59823
59823
  for (const tmp of tempRuntimes(home, false)) rmSync15(tmp, { recursive: true, force: true });
@@ -59946,14 +59946,14 @@ function statusLines(home) {
59946
59946
  const launched = launcherStarted();
59947
59947
  const allowed = updatesAllowed(home, process.env);
59948
59948
  const lines3 = [
59949
- `running ${"0.6.0"}${launched ? " (through the launcher)" : " (pinned: not started through the launcher, never updates)"}`,
59949
+ `running ${"0.6.1"}${launched ? " (through the launcher)" : " (pinned: not started through the launcher, never updates)"}`,
59950
59950
  `latest seen ${state.latestSeen ?? "not checked yet"}`,
59951
59951
  `last check ${ago(state.checkedAt)}`,
59952
59952
  `updates ${allowed.why}`,
59953
59953
  `last error ${state.lastError ?? "none"}`
59954
59954
  ];
59955
59955
  if (!launched) {
59956
- const note3 = pinnedNote(state, "0.6.0");
59956
+ const note3 = pinnedNote(state, "0.6.1");
59957
59957
  if (note3 !== null) lines3.push(`note ${note3}`);
59958
59958
  }
59959
59959
  return lines3;
@@ -60245,7 +60245,7 @@ async function run12(args2) {
60245
60245
  const { positionals } = parseFlags(args2, { positionals: 1 });
60246
60246
  const topic = positionals[0];
60247
60247
  if (topic === void 0 || topic === "skill") {
60248
- const runner = launcherStarted() ? launcherRunner(launcherPath(openqodexHomeDir())) : `npx -y openqodex@${"0.6.0"}`;
60248
+ const runner = launcherStarted() ? launcherRunner(launcherPath(openqodexHomeDir())) : `npx -y openqodex@${"0.6.1"}`;
60249
60249
  process.stdout.write(renderSkill(runner));
60250
60250
  return EXIT_OK;
60251
60251
  }
@@ -60446,7 +60446,7 @@ function reportError(error62, command, args2) {
60446
60446
  return EXIT_TOOL_FAILED;
60447
60447
  }
60448
60448
  async function main(argv) {
60449
- const program2 = new Command("openqodex").description("Open source code review that runs inside your coding agent, before you push.").version("0.6.0", "-v, --version", "Print the version").exitOverride();
60449
+ const program2 = new Command("openqodex").description("Open source code review that runs inside your coding agent, before you push.").version("0.6.1", "-v, --version", "Print the version").exitOverride();
60450
60450
  for (const [name2, entry] of Object.entries(commands)) {
60451
60451
  const command = program2.command(name2, { hidden: entry.hidden === true });
60452
60452
  if (entry.usage !== void 0) command.usage(entry.usage);
package/docs/agents.md CHANGED
@@ -168,6 +168,8 @@ Before each push it runs `openqodex hook pre-push` through the launcher. For eac
168
168
 
169
169
  - The skill alone: `npx skills add openqodex/openqodex`. This writes the skill but no hook.
170
170
  - Claude Code plugin: the repository holds a plugin marketplace with an `openqodex` plugin. The plugin carries the skill and the push gate hook. Its hook calls `npx -y openqodex@<version>`.
171
+ - Codex plugin: `plugins/codex/` packages the skill alone for the OpenAI plugin directory. It writes no hook and no instruction file.
172
+ - Cursor plugin: `.cursor-plugin/plugin.json` at the repository root makes the repository a Cursor plugin that carries the skill alone. It holds no rule. The rule that asks Cursor to review before every push comes from `init`, which writes `.cursor/rules/openqodex.mdc` in your repository. A rule shipped inside the plugin would go in a `rules/` folder at the repository root.
171
173
 
172
174
  ## Inside a sandbox
173
175
 
@@ -85,7 +85,7 @@ The repository also ships a pre-commit hook for the pre-push stage. Add this to
85
85
  ```yaml
86
86
  repos:
87
87
  - repo: https://github.com/openqodex/openqodex
88
- rev: v0.6.0
88
+ rev: v0.6.1
89
89
  hooks:
90
90
  - id: openqodex-scan
91
91
  ```
package/docs/index.md CHANGED
@@ -26,4 +26,5 @@ These pages ship inside the npm package. `npx openqodex guide <topic>` prints on
26
26
  - `github-action`: run the scan on pull requests.
27
27
  - `security`: what runs, what is sent where, and where files go.
28
28
  - `telemetry`: there is none.
29
+ - `privacy`: the privacy policy: what OpenQodex collects (nothing) and every network call it makes.
29
30
  - `faq`: short answers.
package/docs/llms.txt CHANGED
@@ -9,6 +9,7 @@
9
9
  - [OpenQodex docs](index.md)
10
10
  - [Reviewer drivers](internal-reviewer-drivers.md)
11
11
  - [Plumbing commands](plumbing.md)
12
+ - [Privacy](privacy.md)
12
13
  - [Quickstart](quickstart.md)
13
14
  - [Scanners](scanners.md)
14
15
  - [Security](security.md)
@@ -0,0 +1,43 @@
1
+ # Privacy
2
+
3
+ This page is the privacy policy for OpenQodex: the `openqodex` package on npm, its skill, its plugins for Claude Code, Codex and Cursor, its GitHub Action and its pre-commit hook. `security` and `telemetry` give the details behind each line.
4
+
5
+ ## What OpenQodex collects
6
+
7
+ Nothing. OpenQodex collects no usage data, no crash reports and no identifiers. It has no server and no account, and it sends no telemetry. semgrep runs with its own metrics switched off.
8
+
9
+ ## Who reviews your code
10
+
11
+ The review runs in a reviewer process OpenQodex starts on your machine: Claude Code or Codex, on your own login. That process sends the brief and what the reviewer reads to the model your login uses. OpenQodex adds no other model and needs no other key. By default the reviewer can also search the web, and Claude Code can open web pages; `reviewer_web: off` in `~/.openqodex/config.yaml` removes that.
12
+
13
+ When neither Claude Code nor Codex can be the reviewer, the coding agent you are in reviews the change itself, on the model that agent already uses.
14
+
15
+ ## Every network use
16
+
17
+ OpenQodex and the built-in scanners send no code anywhere. They use the network for these things only:
18
+
19
+ - Scanner downloads on first use, into `~/.openqodex/tools/`. GitHub release files are checked against sha256 sums pinned in the package. semgrep and bandit come from PyPI through uv, with a Python 3.11 that uv downloads. oxlint comes from npm. brakeman and rubocop come from RubyGems. These package installs are pinned by version.
20
+ - Semgrep rule packs. semgrep fetches `p/default`, `p/security-audit` and `p/secrets` from the Semgrep registry on each run.
21
+ - The dependency check. When the change holds a lockfile, osv-scanner sends the names and versions of the dependencies in it to osv.dev. It never sends code.
22
+ - Custom scanners. `openqodex trust` reads the scanner's release from the GitHub API and downloads the asset.
23
+ - The problem report, only when you choose it. When OpenQodex fails, a scanner breaks, or you run `openqodex report`, it prints the GitHub issue it would create and two choices. Nothing is sent unless you press 1 or run `openqodex report --send-last`. The issue holds the OpenQodex version, the command and its arguments with paths and secrets taken out, the part that failed, a scrubbed error line, the scanner statuses and your platform. It never holds code, file names, paths, repository names, config or secrets.
24
+ - The daily version check, for an install made with `init`. It sends GET requests to `registry.npmjs.org` only, with nothing about you, your code or your repository. `security` describes what it checks before it installs a release.
25
+ - A review of a branch or a pull request. git fetches it from your own remote with git's own credentials, and the GitHub CLI, when it is installed and signed in, is asked for the pull request's base. OpenQodex reads no token.
26
+
27
+ `--offline` skips osv-scanner and semgrep and turns scanner downloads and the version check off.
28
+
29
+ The plugins, the GitHub Action and the pre-commit hook fetch the `openqodex` package from npm to run it.
30
+
31
+ The GitHub Action uploads its findings to code scanning in your own repository on GitHub: each finding's message, file path and line numbers, as a SARIF file. Set `upload-sarif: false` in the workflow to turn that off.
32
+
33
+ ## Custom scanners
34
+
35
+ A custom scanner named in `.openqodex.yaml` is a command that runs on your machine with your permissions. It never runs until you approve that exact entry with `openqodex trust`, and an edited entry needs a new approval. After approval, a custom scanner does whatever its own command does, including any network use. OpenQodex does not control it.
36
+
37
+ ## What stays on your machine
38
+
39
+ Scanners, caches and your approvals stay under `~/.openqodex/`. Each review writes its brief, findings and reports under `.openqodex/` in your repository. When gitleaks finds a secret in the change, OpenQodex removes it from the brief, every report file and the terminal.
40
+
41
+ ## Contact
42
+
43
+ Questions about this page: siddhant@qodex.ai. Report a vulnerability through GitHub's private vulnerability reporting on the openqodex/openqodex repository, never in a public issue.
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "openqodex",
3
- "version": "0.6.0",
4
- "description": "Open source code review that runs inside your coding agent, before you push.",
3
+ "version": "0.6.1",
4
+ "description": "Open source AI code review for Claude Code and Codex, before you push: scanners on your changed lines, then a separate reviewer that checks every scanner finding and is given every changed line.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
7
- "homepage": "https://github.com/openqodex/openqodex#readme",
7
+ "homepage": "https://qodex.ai/openqodex",
8
8
  "repository": {
9
9
  "type": "git",
10
10
  "url": "git+https://github.com/openqodex/openqodex.git",
@@ -15,12 +15,28 @@
15
15
  },
16
16
  "keywords": [
17
17
  "code-review",
18
+ "ai-code-review",
19
+ "code-review-tool",
18
20
  "static-analysis",
21
+ "sast",
22
+ "security",
23
+ "secret-scanning",
24
+ "linter",
25
+ "code-quality",
26
+ "pre-commit",
27
+ "pre-push",
28
+ "git-hooks",
19
29
  "claude-code",
30
+ "claude-code-plugin",
31
+ "agent-skills",
20
32
  "cursor",
21
33
  "codex",
22
34
  "cline",
23
- "pre-commit"
35
+ "coding-agent",
36
+ "semgrep",
37
+ "gitleaks",
38
+ "osv-scanner",
39
+ "cli"
24
40
  ],
25
41
  "engines": {
26
42
  "node": ">=22"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: openqodex
3
- description: Review the current code change before it is pushed. One command runs the security and lint scanners that fit the changed files, a separate reviewer that checks every scanner finding and is given every changed line, and prints the report. Use before every git push, when asked to review changes, and when a push was blocked or warned by OpenQodex.
3
+ description: Code review for the current change, before it is pushed. One command runs the security, secret, dependency and lint scanners that fit the changed files, a separate reviewer that checks every scanner finding and is given every changed line, and prints the report. Use before every git push, when asked for a code review, a security scan, or to review changes, a diff or a pull request, and when a push was blocked or warned by OpenQodex.
4
4
  ---
5
5
 
6
6
  # OpenQodex: review the change before it is pushed
@@ -27,13 +27,13 @@ When the file `~/.openqodex/bin/openqodex` exists, run it in place of `npx -y op
27
27
  1. From the repository, run:
28
28
 
29
29
  ```
30
- npx -y openqodex@0.6.0 review
30
+ npx -y openqodex@0.6.1 review
31
31
  ```
32
32
 
33
33
  It reviews the change: the commits not yet pushed plus everything uncommitted, untracked files included. To review the whole repository instead, run:
34
34
 
35
35
  ```
36
- npx -y openqodex@0.6.0 review --all
36
+ npx -y openqodex@0.6.1 review --all
37
37
  ```
38
38
 
39
39
  2. Wait for it. A review takes one to three minutes. Many agents stop a command after two minutes, so give it up to ten minutes, or run it in the background and wait until it exits. While the reviewer works, it prints a progress line every 15 seconds on stderr. Do not start it a second time while one runs.
@@ -50,8 +50,8 @@ When the file `~/.openqodex/bin/openqodex` exists, run it in place of `npx -y op
50
50
  When the developer asks you to review a branch or a pull request that is not their current work, name it:
51
51
 
52
52
  ```
53
- npx -y openqodex@0.6.0 review feature/login
54
- npx -y openqodex@0.6.0 review '#42'
53
+ npx -y openqodex@0.6.1 review feature/login
54
+ npx -y openqodex@0.6.1 review '#42'
55
55
  ```
56
56
 
57
57
  Quote `#42`: in a shell `#` starts a comment. A pull request link works too. OpenQodex fetches the target, checks it out in a temporary folder and reviews what it added since it left its base. This is someone else's code: never run its tests, scripts, builds or services, and never edit it.
@@ -62,7 +62,7 @@ Quote `#42`: in a shell `#` starts a comment. A pull request link works too. Ope
62
62
  - Never run `openqodex trust` without asking the developer first. It approves a custom scanner, which is a command that runs on their machine.
63
63
  - Never set `OPENQODEX_SKIP`. It is the developer's switch, not yours.
64
64
  - When the verdict is `blocked`, do not push unless the developer says so after seeing the findings.
65
- - When OpenQodex prints "OpenQodex had a problem. Nothing has been sent." with `1 create a GitHub issue` and `2 ignore`, tell the developer in one line what went wrong and give them the two choices. Never choose 1 yourself. If they say 1, run `npx -y openqodex@0.6.0 report --send-last` from the same folder. Anything else means 2: do nothing.
65
+ - When OpenQodex prints "OpenQodex had a problem. Nothing has been sent." with `1 create a GitHub issue` and `2 ignore`, tell the developer in one line what went wrong and give them the two choices. Never choose 1 yourself. If they say 1, run `npx -y openqodex@0.6.1 report --send-last` from the same folder. Anything else means 2: do nothing.
66
66
 
67
67
  ## Reading the report
68
68
 
@@ -74,7 +74,7 @@ Quote `#42`: in a shell `#` starts a comment. A pull request link works too. Ope
74
74
  - `installing`: it is being downloaded for the first time; it is included from the next run. Say so to the developer rather than waiting.
75
75
  - `not installed`: it could not be installed here; the reason says why.
76
76
  - `needs Ruby 2.7+` or `needs Go`: brakeman and rubocop need Ruby, golangci-lint needs Go. OpenQodex does not install language runtimes. If the developer wants those scanners, they install Ruby or Go the usual way for their system (for example `brew install ruby go` on a Mac) and run the review again.
77
- - `untrusted`: a custom scanner from the repo's config that the developer has not approved. Tell the developer; approving it is their decision (`npx -y openqodex@0.6.0 trust`).
77
+ - `untrusted`: a custom scanner from the repo's config that the developer has not approved. Tell the developer; approving it is their decision (`npx -y openqodex@0.6.1 trust`).
78
78
  - `failed`: the scanner ran and broke; the reason has its error. A scanner problem never changes the exit code.
79
79
 
80
80
  ## Inside a sandbox
@@ -82,11 +82,11 @@ Quote `#42`: in a shell `#` starts a comment. A pull request link works too. Ope
82
82
  Some agents run commands in a sandbox that cannot reach the network or write outside the project. There the first run cannot download the scanners, and the reviewer may not reach its model. Tell the developer to run this once in their own terminal, outside the agent:
83
83
 
84
84
  ```
85
- npx -y openqodex@0.6.0 doctor --install
85
+ npx -y openqodex@0.6.1 doctor --install
86
86
  ```
87
87
 
88
- It downloads every scanner that fits the machine into `~/.openqodex/tools/`. If the review still says "Full review unavailable" inside the sandbox, the developer runs `npx -y openqodex@0.6.0 review` in their own terminal.
88
+ It downloads every scanner that fits the machine into `~/.openqodex/tools/`. If the review still says "Full review unavailable" inside the sandbox, the developer runs `npx -y openqodex@0.6.1 review` in their own terminal.
89
89
 
90
90
  ## More
91
91
 
92
- `npx -y openqodex@0.6.0 guide` prints this guide. `npx -y openqodex@0.6.0 guide <topic>` prints a page of the docs, offline: `quickstart`, `config`, `scanners`, `custom-scanners`, `security`, `agents`, `cli`.
92
+ `npx -y openqodex@0.6.1 guide` prints this guide. `npx -y openqodex@0.6.1 guide <topic>` prints a page of the docs, offline: `quickstart`, `config`, `scanners`, `custom-scanners`, `security`, `agents`, `cli`.