diffowl 0.2.0 → 0.3.0
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 +59 -10
- package/dist/cli.js +2875 -490
- package/dist/cli.js.map +1 -1
- package/package.json +16 -3
package/README.md
CHANGED
|
@@ -25,7 +25,8 @@ DiffOwl is a lightweight CLI that integrates into your Git workflow to provide h
|
|
|
25
25
|
- **Intelligent File Filtering**: Supports `include` and `exclude` glob patterns to focus reviews on source directories while skipping build artifacts, lockfiles, and node modules.
|
|
26
26
|
- **Project-Specific Rules**: Inject custom guidelines directly into the reviewer's system prompt (e.g., "Check for SQL injection", "Ensure TypeScript types are explicit").
|
|
27
27
|
- **Interactive Model Selector**: Automatically queries OpenCode to present a clean, interactive list of your connected providers and models.
|
|
28
|
-
- **Local Reports**: Generates markdown reviews under `.diffowl/reviews/`, including hidden session metadata that makes reports chat-capable.
|
|
28
|
+
- **Local Reports**: Generates markdown reviews under `.diffowl/reviews/`, including durable finding IDs and hidden session metadata that makes reports chat-capable.
|
|
29
|
+
- **Durable Findings (0.3)**: Persists reviews and findings in `.diffowl/state.db` with stable `fnd_*` IDs, occurrence tracking, and lifecycle commands for fix, dismiss, defer, and reopen.
|
|
29
30
|
- **Agent-Assisted Resolution**: Includes an optional portable skill that lets coding agents investigate findings, fix confirmed issues, record dismissals, and archive handled reports.
|
|
30
31
|
- **Hook Log Retention**: Bounds accumulated hook logs without deleting review history.
|
|
31
32
|
|
|
@@ -35,7 +36,7 @@ DiffOwl is a lightweight CLI that integrates into your Git workflow to provide h
|
|
|
35
36
|
|
|
36
37
|
### 1. Prerequisites
|
|
37
38
|
|
|
38
|
-
1. **Verify Node.js
|
|
39
|
+
1. **Verify Node.js 22.14.0 is installed**:
|
|
39
40
|
```bash
|
|
40
41
|
node --version
|
|
41
42
|
```
|
|
@@ -137,13 +138,14 @@ The agent will:
|
|
|
137
138
|
|
|
138
139
|
1. Treat findings as candidates and verify them against the current code.
|
|
139
140
|
2. Fix confirmed issues using the repository's normal workflow.
|
|
140
|
-
3.
|
|
141
|
-
4.
|
|
142
|
-
5.
|
|
141
|
+
3. For durable findings (0.3+), record lifecycle status with `diffowl findings fix`, `dismiss`, or `defer`.
|
|
142
|
+
4. For legacy reports, mark findings as fixed, already fixed, agent dismissed, user dismissed, deferred, or open in a `## Resolution` checklist.
|
|
143
|
+
5. Append or merge resolution state without rewriting the generated review body.
|
|
144
|
+
6. Move fully handled timestamped reports into `.diffowl/reviews/resolved/` when every finding is complete.
|
|
143
145
|
|
|
144
|
-
`latest.md` is only a copy of the newest report and is overwritten by future reviews.
|
|
146
|
+
`latest.md` is only a copy of the newest report and is overwritten by future reviews. Markdown reports from 0.3+ are immutable snapshots; SQLite is the authoritative backlog for durable findings.
|
|
145
147
|
|
|
146
|
-
|
|
148
|
+
For legacy pre-0.3 reports, resolution state is appended under `## Resolution`. To reopen the OpenCode session for an archived report, pass its explicit path:
|
|
147
149
|
|
|
148
150
|
```bash
|
|
149
151
|
diffowl chat .diffowl/reviews/resolved/review-<timestamp>.md
|
|
@@ -185,10 +187,11 @@ Runs a code review on your repository.
|
|
|
185
187
|
- `--depth <depth>`: Overrides configured review depth. Valid values: `shallow`, `default`.
|
|
186
188
|
- `--reasoning <effort>`: Overrides configured OpenCode reasoning variant. Valid values: `auto`, `none`, `minimal`, `low`, `medium`, `high`, `max`, `xhigh`.
|
|
187
189
|
- `--verbose`: Includes suppressed findings and extra review details in the report.
|
|
190
|
+
- `--format <format>`: Output format: `text` (default) or `json`. JSON writes a versioned document to stdout and persists SQLite state.
|
|
188
191
|
|
|
189
192
|
Candidates below `min_confidence` or outside changed files are excluded from actionable finding counts and review status. When any are excluded, the report includes a short diagnostic summary and points to `diffowl chat` for investigation. Outside-file candidates are shown in full with `--verbose`; below-threshold candidates remain available in the OpenCode session.
|
|
190
193
|
|
|
191
|
-
Rendered findings
|
|
194
|
+
Rendered findings use stable `Finding N` headings. Reports from DiffOwl 0.3+ also include durable `fnd_*` IDs and observation classification (`new`, `existing`, `regressed`), making prompts such as “investigate finding 2” or `diffowl findings show fnd_abc` map directly to the backlog.
|
|
192
195
|
|
|
193
196
|
Review depth controls both how much local context DiffOwl preloads and how much exploration the reviewer is expected to do:
|
|
194
197
|
|
|
@@ -275,6 +278,32 @@ diffowl server start
|
|
|
275
278
|
diffowl server stop
|
|
276
279
|
```
|
|
277
280
|
|
|
281
|
+
### `diffowl findings [list] | show | dismiss | defer | fix | reopen`
|
|
282
|
+
|
|
283
|
+
Inspect and manage the durable findings backlog stored in `.diffowl/state.db`.
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
# List unresolved findings (open and regressed)
|
|
287
|
+
diffowl findings
|
|
288
|
+
|
|
289
|
+
# Inspect one finding by full id, id prefix, or latest:N
|
|
290
|
+
diffowl findings show fnd_abc --format json
|
|
291
|
+
|
|
292
|
+
# Mark fixed after verification
|
|
293
|
+
diffowl findings fix fnd_abc --note "Added null guard." --verified-by "pnpm run test"
|
|
294
|
+
|
|
295
|
+
# Dismiss a false positive
|
|
296
|
+
diffowl findings dismiss fnd_abc --reason "Guarded by caller."
|
|
297
|
+
|
|
298
|
+
# Defer intentionally
|
|
299
|
+
diffowl findings defer fnd_abc --reason "Needs upstream change."
|
|
300
|
+
|
|
301
|
+
# Reopen a previously fixed or dismissed finding
|
|
302
|
+
diffowl findings reopen fnd_abc --reason "Regression in new path."
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
The unresolved backlog is durable: a finding does not auto-resolve just because a later review fails to mention it. Absence from a later model review never marks a finding fixed.
|
|
306
|
+
|
|
278
307
|
---
|
|
279
308
|
|
|
280
309
|
## Configuration (`.diffowl.yml`)
|
|
@@ -344,7 +373,8 @@ rules:
|
|
|
344
373
|
Each completed review starts with a timestamped report and an ephemeral `latest.md` copy. The optional resolution skill moves fully handled timestamped reports into the resolved archive:
|
|
345
374
|
|
|
346
375
|
```text
|
|
347
|
-
.diffowl/
|
|
376
|
+
.diffowl/state.db # Authoritative review and finding state (0.3+)
|
|
377
|
+
.diffowl/reviews/review-<timestamp>.md # Immutable markdown export snapshot
|
|
348
378
|
.diffowl/reviews/latest.md # Ephemeral copy of the newest report
|
|
349
379
|
.diffowl/reviews/resolved/review-<timestamp>.md # Fully handled report archived by the skill
|
|
350
380
|
```
|
|
@@ -354,12 +384,31 @@ Review reports include YAML frontmatter similar to:
|
|
|
354
384
|
```yaml
|
|
355
385
|
---
|
|
356
386
|
diffowl:
|
|
387
|
+
schema_version: 1
|
|
388
|
+
review_id: rev_...
|
|
357
389
|
session_id: ses_...
|
|
358
390
|
project_root: /path/to/project
|
|
359
391
|
---
|
|
360
392
|
```
|
|
361
393
|
|
|
362
|
-
|
|
394
|
+
Finding headings in 0.3+ reports look like:
|
|
395
|
+
|
|
396
|
+
```md
|
|
397
|
+
#### Finding 1 (`fnd_...`) — **new**
|
|
398
|
+
|
|
399
|
+
**[WARNING] src/auth.ts:12**
|
|
400
|
+
Missing null check
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
This metadata is used by `diffowl chat`. For legacy pre-0.3 reports, agents may append a `## Resolution` section. For 0.3+ reports, use `diffowl findings *` only—do not edit markdown. DiffOwl does not delete review history automatically.
|
|
404
|
+
|
|
405
|
+
### Upgrading to 0.3
|
|
406
|
+
|
|
407
|
+
- **No import step**: Existing markdown reports remain unchanged and chat-capable. They are not imported into SQLite.
|
|
408
|
+
- **New reviews persist state**: After upgrading, each `diffowl review` writes both SQLite state and a markdown snapshot.
|
|
409
|
+
- **Backlog semantics change**: Use `diffowl findings` for the unresolved backlog. Markdown `### Status` reflects the review snapshot only.
|
|
410
|
+
- **Resolution workflow**: Prefer `diffowl findings fix|dismiss|defer` over editing report checklists when durable findings exist. Never mark fixed without recorded verification (`--verified-by`).
|
|
411
|
+
- **Not in 0.3**: Semantic deduplication beyond fingerprint matching, automatic resolution when findings disappear, legacy report migration, retention cleanup, and SARIF export.
|
|
363
412
|
|
|
364
413
|
---
|
|
365
414
|
|