66 Commits

Author SHA1 Message Date
kite e48b132ebf fix(tool,agent): parse git grep output correctly in range mode and retry on empty results
code_search used SplitN(":", 3) to parse git grep output, but in
range/commit mode git grep prefixes each line with the ref
(ref:file:line:content). All matches silently failed Atoi on the
filepath field, returning an empty string that caused the review
session to terminate immediately.

Fix code_search to detect the ref prefix and adjust split/index
accordingly. Also replace the hard stop on empty tool results with
a retry loop (up to 3 consecutive empty rounds) so the LLM can
recover or call task_done gracefully.
v1.1.18
2026-06-04 23:43:26 +08:00
kite eccb0d2b4b feat(session): track LLM request failure count with JSONL persistence
Record each LLM failure as an llm_error entry in the session JSONL log
and surface the total count in the viewer's Token Usage summary.
2026-06-04 23:11:35 +08:00
kite 99e6709603 fix(diff,tool): read file content at reviewed ref in range/commit mode
file_find and finalizeDiff always read from the working tree, even in
range/commit mode where the review targets a specific git ref. This
caused inconsistent file versions compared to file_read and code_search
which correctly used git show. Fix file_find to use git ls-tree and
finalizeDiff to use git show when a ref is specified.
v1.1.17
2026-06-04 15:20:14 +08:00
Coldaine a53b16cff5 fix(agent): stop leaking {{plan_guidance}} into MAIN_TASK prompts (#33)
Replace the hard-coded Chinese-only empty-plan branch with a compiled
regex + helper that strips the "### Review Plan …" wrapper (any language
variant) when the plan phase produces no output.

TWO BUGS fixed:
- The wrapper was only stripped for the Chinese literal `### 审查计划`,
  not the actual English `### Review Plan (Optional)` shipped in the
  template, so `{{plan_guidance}}` leaked into the rendered prompt on
  every review where the plan phase was skipped or failed.
- The strip ran AFTER `ReplaceAll("{{plan_guidance}}", "")`, so the
  token was already gone and the regex couldn't match the wrapper.
  Fixed ordering: strip BEFORE replace.

Also simplifies the regex alternation per Copilot review feedback:
`Review Plan` and `审查计划` already subsume the `(Optional)`/`(可选)`
suffixes because the trailing `[^\n]*` consumes them.

Adds unit tests for English, Chinese, and integration (production flow).

Co-authored-by: Copilot <copilot-pull-request-reviewer@github.com>
v1.1.16
2026-06-04 14:11:31 +08:00
Lei Zhang 1e18a661cf fix: handle Windows paths in session encodeRepoPath (#36)
Make encodeRepoPath cross-platform by properly handling volume names, backslash separators, and drive letter colons. Add unit tests covering Unix, Windows, and edge-case inputs.
v1.1.15
2026-06-04 12:55:29 +08:00
kite d2c8a9a560 chore(Makefile): Add fmt, vet, and check targets for code quality checks 2026-06-04 11:57:56 +08:00
kite cfd62ae834 feat(cli): auto-load commit message as background in commit review mode 2026-06-04 11:54:14 +08:00
Lei Zhang 482de7ac52 fix: skip binary review (#28)
* fix(agent): skip binary files during code review

Previously, binary files were passed through the review pipeline because
shouldReview only checked path/extension rules. This caused the agent to
incorrectly attempt reviewing binary content.

- Add ExcludeBinary reason to the exclusion filter
- Change shouldReview/whyExcluded to accept model.Diff instead of path
  string, enabling access to the IsBinary flag
- Check IsBinary as the first gate in whyExcluded
- Differentiate skip log messages for binary vs path-filtered files

* test: add unit tests for preview.go

* fix: normalize dash to em-dash in binary file skip log message

* test(agent): strengthen UserIncludePattern tests to cover additive semantics

- Document that include patterns are additive, not exclusive
- Add cases verifying include bypasses default-path exclusion
- Add cases for extension filter precedence over include logic
- Add TestWhyExcluded_IncludeBypassesDefaultPath for rescue semantics
- Add TestWhyExcluded_IncludeAndExcludeInteraction for priority order
v1.1.14
2026-06-03 18:01:30 +08:00
kite 6ce1ec7511 style: apply go fmt formatting 2026-06-03 17:34:28 +08:00
@aaronjmars 7be4926372 fix(viewer): add Host-header allowlist to block DNS rebinding (#10)
The viewer's HTTP server (StartServer in internal/viewer/server.go) had no
Host-header validation, so a web page the user visits could DNS-rebind its
own origin to 127.0.0.1:5483 and read every session JSONL — which contains
LLM request messages (= source code being reviewed) and the LLM's analysis.

Adds a default-deny host guard that always allows loopback names plus the
concrete bind host. Wildcard binds and extra hostnames go through the new
OCR_VIEWER_ALLOWED_HOSTS env var, so an operator who binds the viewer on a
LAN interface has to acknowledge the exposure explicitly.

Detected by Aeon + manual review.
Severity: high
CWE-346 (Origin Validation Error), CWE-200 (Exposure of Sensitive Info)

Co-authored-by: aeonframework <aeonframework@users.noreply.github.com>
2026-06-03 17:21:27 +08:00
kite 49e1c700ed fix(cli): embed summary into JSON output to avoid breaking JSON parsing
When using --audience agent --format json, the text summary line was
printed before the JSON body, causing parse failures for integrations.
Move summary data into the JSON "summary" field and skip PrintTraceSummary
in JSON mode.
v1.1.13
2026-06-03 15:38:22 +08:00
kite fe647bc489 feat(cli): display GitHub repository URL in version and help output v1.1.12 2026-06-02 22:50:36 +08:00
kite 558ffe9a91 fix(build): improve Windows support based on PR #13 review feedback
Unify BUILD_PLATFORM macro with optional suffix parameter to eliminate
  duplication, centralize IS_WINDOWS/BINARY_NAME exports in install.js,
  add Windows-safe rename-then-replace strategy in update.js, and add
  PATH guidance in README for Windows users.
v1.1.11
2026-06-02 22:37:27 +08:00
Bison Xu 89effb6b22 feat(build): add Windows platform support (#13)
* feat(build): add Windows platform support

Add windows/amd64 and windows/arm64 to CI build matrix, Makefile
cross-platform targets, and handle .exe suffix in install/update
scripts and binary wrapper. Skip chmod on Windows where unsupported.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* docs(README): add Windows download instructions

Add Windows x86_64 and ARM64 binary download commands to both
English and Chinese README install sections.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-02 21:57:31 +08:00
kite 712d562691 docs(readme): add star history chart to README files 2026-06-02 11:44:46 +08:00
kite d3e29bd581 fix(config): update main_task template v1.1.10 2026-06-02 11:32:57 +08:00
kite 21e47cef9c docs: add --max-tools flag to README and pages documentation 2026-06-01 21:44:52 +08:00
kite 45ee52f5b8 feat(cli): add --max-tools flag to control max tool call rounds per file v1.1.9 2026-06-01 20:04:24 +08:00
kite 290ff33a9c docs(readme): update integration examples 2026-06-01 18:31:40 +08:00
Lei Zhang 128787b627 Add CI/CD integration section and examples to documentation (#11)
* docs: add CI/CD integration section and examples

- Add CI/CD Integration section to README.md and README.zh-CN.md
- Add GitHub Actions workflow example (examples/github_actions/)
- Add GitLab CI pipeline example (examples/gitlab_ci/)
- Add examples README with overview of integration options

* feat(examples): enhance GitHub Actions demo with comment trigger and improved error handling

- Add issue_comment event trigger with /open-code-review and @open-code-review keywords
- Add PR context resolution for comment-triggered events via GitHub API
- Improve ref handling to support both PR events and comment events
- Add individual comment fallback with retry when batch review fails
- Add posting statistics (success/failed counts) to summary comment
- Update README with comment trigger flow and customization guide

* docs(examples): add --background flag usage guide for GitHub Actions and GitLab CI

Explain how to pass PR/MR title as background context to help OCR
provide more relevant and context-aware review comments.

* feat(examples): simplify PR trigger and add skip-existing-review guide for GitLab CI

- Reduce GitHub Actions PR trigger to 'opened' only (avoid redundant
  reviews on synchronize/reopened events)
- Add GitLab CI documentation for checking existing OCR comments before
  running review to save LLM tokens
2026-06-01 16:44:24 +08:00
kite ed2302c164 chore: remove unused NPM-README.md and related script references 2026-05-31 19:11:41 +08:00
kite f363702a15 feat(agent): integrate session recording and token tracking for re-location task
Re-location LLM calls were invisible in session history and their token
  consumption was unaccounted for. Refactor the code_comment handling path
  to record re-location requests/responses into session JSONL, accumulate
  token usage into global counters, and display them in the viewer.

  Also fixes: async context cancellation risk (WithoutCancel), duplicate
  telemetry recording, missing timeout enforcement, missing {existing_code}
  placeholder in the re-location prompt, and renames Parse to ParseComments
  for clarity.
v1.1.8
2026-05-30 23:25:12 +08:00
kite 4fe9f0ef84 docs(README): update 2026-05-30 19:17:53 +08:00
kite 103a213d77 docs(README): rewrite README with product positioning, design philosophy, and agent integration guide 2026-05-30 19:04:45 +08:00
Lei Zhang d0a24c4de3 Add issue and PR templates with bilingual contributing guide (#9)
* docs: add GitHub issue and PR templates

Add structured issue templates for bug reports, feature requests, and docs reports with YAML forms. Include a pull request template with checklist for contribution quality.

* docs: add bilingual contributing guide (EN & zh-CN)

Provide detailed contribution guidelines covering development setup, coding standards, commit conventions, PR workflow, and community conduct in both English and Chinese.
2026-05-30 14:22:50 +08:00
Lei Zhang 2d7697a7fe Feat: add support for plugins and skills installation (#5)
* feat: add open-code-review skill for agent integration

Add skills/open-code-review/SKILL.md that teaches coding agents
how to invoke ocr for code review, classify issues by priority,
and optionally apply fixes.

* feat: add Claude Code plugin for open-code-review

Add .claude-plugin/marketplace.json and plugins/open-code-review/
with plugin configuration and review command, enabling installation
as a Claude Code slash command plugin.

* docs: add agent integration section to README (EN/ZH)

Add 'Integration into Coding Agents' section covering three methods:
skill installation, Claude Code plugin, and direct command file copy.
Bilingual update for both README.md and README.zh-CN.md.

* docs: update manual setup curl URLs to new plugin path
2026-05-29 10:19:25 +08:00
kite e6bac87344 fix(pages): Update title capitalization for consistency 2026-05-29 08:48:43 +08:00
kite 8b87a4534d fix: Update favicon path in index.html v1.1.7 2026-05-29 00:05:12 +08:00
kite 5f4e5a2b40 feat(llm): auto-append /chat/completions to OpenAI-compatible base URLs
Allow users to configure either a base URL (e.g. https://api.example.com/v1)
or a full endpoint URL for OpenAI-compatible services. The client now
normalizes the URL on initialization, matching the existing behavior of
the Anthropic client.
2026-05-29 00:04:30 +08:00
kite 9a6a87b397 feat(i18n): add highlights section translations 2026-05-28 16:26:51 +08:00
kite a91fec38ef fix(bin): Update OCR update interval default value 2026-05-28 15:00:52 +08:00
kite 95b77e2b48 fix: Update project branding and improve documentation links 2026-05-28 14:47:53 +08:00
kite 2305d4b923 fix(README): Remove branch parameter from GitHub Actions badge link 2026-05-28 14:05:08 +08:00
kite 58b6df3fef fix(README): Update GitHub Actions workflow links and improve language navigation formatting 2026-05-28 14:02:29 +08:00
kite 0e1b6438de docs(README): Update logo size and remove bold title tag 2026-05-28 13:57:17 +08:00
kite 3407739c75 docs(README): Update README files with new layout and badges 2026-05-28 13:43:13 +08:00
kite f003004fae docs: add preview option documentation for ocr review command v1.1.6 2026-05-26 23:13:09 +08:00
kite f611301372 chore: add claude code /tag slash command for creating annotated git tags 2026-05-26 23:09:05 +08:00
kite e71fa597d8 feat(review): add --preview flag to show files before running LLM review 2026-05-26 23:06:47 +08:00
kite 834a4e7e3f feat(rules): add ocr rules check command to preview effective rule for a file path 2026-05-26 22:11:39 +08:00
kite 971ab0a626 feat(rules): extract inline rule content into separate markdown files
Move verbose rule definitions from system_rules.json into individual
  markdown files under rule_docs/, loaded at runtime via embed.FS.
  This improves maintainability by separating rule content from config
  structure and merges duplicate mapper/dao XML patterns into one entry.
2026-05-26 21:39:32 +08:00
kite ce73f388d1 feat(resolver): strip model name suffix and prioritize config file over env vars v1.1.5 2026-05-26 17:58:03 +08:00
kite 5053e6dca8 refactor(config): rename config directory from .open-code-review to .opencodereview
Unify the config folder name to `.opencodereview` across all runtime paths,
  tests, docs, and i18n strings. Also make defaultConfigPath() return an error
  instead of silently falling back to a current-directory file when $HOME is
  unresolvable.
v1.1.4
2026-05-25 23:07:36 +08:00
kite bbf673d4d1 chore(workflow): Add environment variables for npm publish step v1.1.3 2026-05-25 22:52:21 +08:00
kite db5bc4b8a9 feat(rules): add include/exclude file filter support in rule.json
Allow users to configure include/exclude glob patterns in
  .open-code-review/rule.json (global or project-level) to control
  which files are reviewed. Exclude has highest priority, include
  penetrates default path exclusions but not the extension allowlist.
  Only one layer takes effect following --rule > project > global priority.
v1.1.2
2026-05-25 20:19:02 +08:00
kite d44fd31989 feat(rules): unify rule resolution behind Resolver interface with four-layer priority
Consolidate review rules into a composedResolver that supports four layers
  (--rule flag > project .open-code-review/rule.json > global ~/rule.json >
  embedded system default), each with first-match-wins fall-through semantics.
v1.1.1
2026-05-25 17:45:53 +08:00
kite 58defe6c03 docs(readme): adds new installation instructions via GitHub releases 2026-05-23 09:32:00 +08:00
kite 994db24ca5 docs(README): Add language switcher link to README 2026-05-23 09:08:08 +08:00
kite 29564a891b refactor(diff): Simplify hunk resolution logic with helper functions
This change refactors the `resolveFromHunk` function by introducing several helper functions (`extractSideLines`, `matchConsecutive`) to improve readability and maintainability. The new implementation attempts to match against both new and old sides of the diff hunk, making comment resolution more robust.
v1.1.0
2026-05-23 00:36:51 +08:00
kite 35424d18bf feat(config): add path exclusion patterns for file filtering
This change introduces a new configuration mechanism for excluding specific file paths during code reviews. It adds support for glob patterns including recursive directory matching (**), single-segment wildcards (*), and brace expansion ({a,b}), allowing more flexible control over which files should be reviewed or skipped based on their location within the repository.
2026-05-23 00:11:35 +08:00