@happy-nut/monacori 0.1.5 → 0.1.6
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 -21
- package/assets/monacori-demo.gif +0 -0
- package/dist/viewer.client.js +6 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,10 +1,30 @@
|
|
|
1
1
|
# monacori
|
|
2
2
|
|
|
3
|
-
**A local desktop
|
|
3
|
+
**A local desktop review workspace for AI-generated code changes.**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Run `mo` after an AI edits your repository. monacori opens a side-by-side diff, lets you attach line-level questions or change requests, and bundles that feedback back into the AI CLI (command-line interface) session running in the built-in terminal.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
## Why monacori
|
|
10
|
+
|
|
11
|
+
AI coding tools are fast, but their "done" message is not a review. monacori gives the human reviewer a dedicated control surface for the gap between generated code and trusted code:
|
|
12
|
+
|
|
13
|
+
- See every changed, added, and untracked file in an IntelliJ-style review sidebar.
|
|
14
|
+
- Review side-by-side diffs with syntax highlighting, changed-line emphasis, and keyboard navigation.
|
|
15
|
+
- Leave questions or change requests directly on the relevant line.
|
|
16
|
+
- Send all reviewer comments, with file paths and code context, into `claude`, `codex`, or another terminal session without copy-paste.
|
|
17
|
+
- Keep all generated review state local, plain, and inspectable under `.monacori/`.
|
|
18
|
+
|
|
19
|
+
## Workflow
|
|
20
|
+
|
|
21
|
+
1. Let an AI coding tool make changes in your repository.
|
|
22
|
+
2. Run `mo` from that repository.
|
|
23
|
+
3. Inspect the diff, mark files as viewed, and attach line comments where needed.
|
|
24
|
+
4. Open the built-in terminal and keep your AI CLI session beside the review.
|
|
25
|
+
5. Send the merged questions or change requests back to the session as a focused follow-up prompt.
|
|
26
|
+
|
|
27
|
+
The result is a tighter review loop: the AI produces changes, the human reviews the actual diff, and the next prompt is grounded in exact file and line context.
|
|
8
28
|
|
|
9
29
|
## Install
|
|
10
30
|
|
|
@@ -12,43 +32,61 @@ A chat log or a "done" claim is a poor way to review what an AI changed. monacor
|
|
|
12
32
|
npm install -g @happy-nut/monacori
|
|
13
33
|
```
|
|
14
34
|
|
|
15
|
-
|
|
35
|
+
The short command is `mo`.
|
|
16
36
|
|
|
17
|
-
|
|
37
|
+
Homebrew users can install from the tap as well:
|
|
18
38
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
39
|
+
```bash
|
|
40
|
+
brew install happy-nut/monacori/monacori
|
|
41
|
+
```
|
|
22
42
|
|
|
23
|
-
## Quick
|
|
43
|
+
## Quick Start
|
|
24
44
|
|
|
25
|
-
Inside
|
|
45
|
+
Inside any Git repository:
|
|
26
46
|
|
|
27
47
|
```bash
|
|
28
48
|
mo
|
|
29
49
|
```
|
|
30
50
|
|
|
31
|
-
On first run, `mo` creates `.monacori/`, adds it to `.gitignore`, and includes untracked files so new AI-created files
|
|
51
|
+
On first run, `mo` creates `.monacori/`, adds it to `.gitignore`, and includes untracked files so new AI-created files appear immediately.
|
|
52
|
+
|
|
53
|
+
## Highlights
|
|
54
|
+
|
|
55
|
+
- **Desktop diff review**: reads the repository directly, refreshes from local Git state, and does not require a web server.
|
|
56
|
+
- **AI handoff comments**: questions and change requests are stored with their file, line, and code context.
|
|
57
|
+
- **Integrated terminal**: keep `claude`, `codex`, or a shell open inside the same window, with split panes when needed.
|
|
58
|
+
- **Source navigation**: jump between changed files, search indexed files, preview source, and move through hunks from the keyboard.
|
|
59
|
+
- **Plain local artifacts**: generated review files and state are Markdown, JSON, and static HTML under `.monacori/`.
|
|
32
60
|
|
|
33
61
|
## Commands
|
|
34
62
|
|
|
35
63
|
| Command | What it does |
|
|
36
64
|
| --- | --- |
|
|
37
|
-
| `mo` | Open the desktop diff-review app
|
|
38
|
-
| `monacori
|
|
65
|
+
| `mo` | Open the desktop diff-review app for the current repository. Alias for `monacori open`. |
|
|
66
|
+
| `monacori open` | Launch the review app, auto-initialize `.monacori/`, and include untracked files by default. |
|
|
67
|
+
| `monacori app` | Launch the same desktop app explicitly. |
|
|
39
68
|
| `monacori init` | Initialize `.monacori/` in the current directory. |
|
|
40
|
-
| `monacori install` | Initialize and write agent instruction snippets. `--apply-agent-docs`
|
|
69
|
+
| `monacori install` | Initialize and write agent instruction snippets. Use `--apply-agent-docs` to patch `AGENTS.md` or `CLAUDE.md`. |
|
|
70
|
+
|
|
71
|
+
Useful review options:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
mo --staged # review only staged changes
|
|
75
|
+
mo --tracked-only # exclude untracked files
|
|
76
|
+
mo --base main # compare against a specific base
|
|
77
|
+
mo --context 20 # show more context around each hunk
|
|
78
|
+
```
|
|
41
79
|
|
|
42
|
-
##
|
|
80
|
+
## Local State
|
|
43
81
|
|
|
44
|
-
`monacori init`
|
|
82
|
+
`monacori init` creates a git-ignored `.monacori/` directory for generated diff reviews, local config, comments, logs, and validation notes. Keep it ignored unless your team intentionally wants to version review artifacts.
|
|
45
83
|
|
|
46
|
-
## Design
|
|
84
|
+
## Design Principles
|
|
47
85
|
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
- No required
|
|
86
|
+
- Real diffs beat chat summaries.
|
|
87
|
+
- Human review should stay close to the code and the running AI session.
|
|
88
|
+
- The core should be local, inspectable, and agent-agnostic.
|
|
89
|
+
- No required terminal multiplexer, editor plugin, hosted service, or worktree strategy.
|
|
52
90
|
|
|
53
91
|
## License
|
|
54
92
|
|
|
Binary file
|
package/dist/viewer.client.js
CHANGED
|
@@ -2138,7 +2138,12 @@ refreshComments();
|
|
|
2138
2138
|
// 2+ panes: dim every pane but the active one (no border, just a clean focus cue). A lone pane stays full.
|
|
2139
2139
|
q.el.classList.toggle('is-inactive', panes.length > 1 && q !== p);
|
|
2140
2140
|
});
|
|
2141
|
-
if (p) requestAnimationFrame(function () {
|
|
2141
|
+
if (p) requestAnimationFrame(function () {
|
|
2142
|
+
try {
|
|
2143
|
+
if (p.labelEl && p.labelEl.getAttribute('contenteditable') === 'true') return;
|
|
2144
|
+
p.term.focus();
|
|
2145
|
+
} catch (e) {}
|
|
2146
|
+
});
|
|
2142
2147
|
}
|
|
2143
2148
|
|
|
2144
2149
|
function makePane() {
|