sideye 0.1.3

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jimmy Guzman
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,87 @@
1
+ # sideye
2
+
3
+ Keep a skeptical side-eye on your CLI coding agents. Run claude code, opencode, or codex in one terminal pane
4
+ and `sideye` in the next — and stop opening an editor just to see **what is there, what is
5
+ happening, and what is the difference**.
6
+
7
+ Everything an IDE shows you, nothing it does for you. The "integrated" part is deliberately
8
+ missing: your agent, your editor, and `sideye` stay decoupled. It never reviews, explains,
9
+ approves, or talks back to an agent — you render judgment on the robot's output, then paste a
10
+ `path:line` reference back into the agent conversation to redirect it in your own words.
11
+
12
+ ## Pillars
13
+
14
+ - **The whole repo, with changes overlaid.** The full project tree renders like an IDE sidebar
15
+ (gitignore respected), changed files tinted and tagged, unchanged files quietly browsable.
16
+ Open any file read-only with syntax highlighting; open a changed file as a diff.
17
+ - **Simple change scopes.** Cycle between all changes, staged only, and unstaged only with one
18
+ key — no restart, no flags to remember.
19
+ - **Live, with activity awareness.** The view polls git while the agent works. Recently touched
20
+ files get a recency dot that decays, the status bar shows the last activity, and one key jumps
21
+ to whatever the agent just edited.
22
+ - **Static analysis where an IDE would put it.** lint, tsc, and prettier findings show up as a
23
+ problems panel, inline line markers in the viewer, and per-file markers in the tree — anywhere
24
+ in the repo, not just changed files. Checks re-run automatically once the repo goes quiet.
25
+
26
+ ## Install
27
+
28
+ ```sh
29
+ # standalone binary (macOS / Linux, no runtime needed)
30
+ curl -fsSL https://raw.githubusercontent.com/jimmy-guzman/sideye/main/install.sh | bash
31
+
32
+ # npm (works with npm, bun, pnpm, yarn — pulls a prebuilt binary)
33
+ npm i -g sideye
34
+
35
+ # homebrew
36
+ brew install jimmy-guzman/tap/sideye
37
+ ```
38
+
39
+ ## Use it
40
+
41
+ ```sh
42
+ sideye # whole repo, worktree vs HEAD
43
+ sideye main # compare against another ref
44
+ sideye --staged # start in the staged scope
45
+ sideye --unstaged # start in the unstaged scope
46
+ ```
47
+
48
+ ## Keys
49
+
50
+ | Key | Action |
51
+ | ----------- | ----------------------------------------------- |
52
+ | `j` / `k` | move in the tree, viewer, or problems panel |
53
+ | `h` / `l` | collapse / expand folders |
54
+ | `tab` | switch focus between tree and viewer |
55
+ | `enter` | open the focused item / jump to a problem |
56
+ | `ctrl-p` | go to file: fuzzy-search the whole repo |
57
+ | `s` | cycle scope: all changes → staged → unstaged |
58
+ | `c` | toggle changes-only filter for the tree |
59
+ | `v` | toggle diff ↔ full file view for a changed file |
60
+ | `p` | toggle the problems panel |
61
+ | `.` | jump to the most recently changed file |
62
+ | `n` | jump to the next file with findings |
63
+ | `y` | copy `path:line` + snippet at the cursor |
64
+ | `f` | load full content when truncated |
65
+ | `r` | re-run checks |
66
+ | `ctrl-d/u` | half-page cursor movement in the viewer |
67
+ | `g` / `G` | jump to first / last line |
68
+ | `q` / `esc` | quit (esc closes the problems panel first) |
69
+
70
+ ## Requirements
71
+
72
+ - git
73
+ - macOS for clipboard copy (`pbcopy`) in v1
74
+
75
+ ## Development
76
+
77
+ ```sh
78
+ bun install
79
+ bun run src/main.tsx # run from source
80
+ bun run check # tests + typecheck
81
+ bun run build:dist # build standalone binaries for all targets
82
+ ```
83
+
84
+ ## What it will not do
85
+
86
+ No AI integration, no gating, no accept/reject protocol, no generated review explanations.
87
+ The agent never hears from `sideye` — only from you.
package/bin/sideye.js ADDED
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env node
2
+
3
+ // npm launcher: resolves the platform-specific sideye binary package and execs it.
4
+ // Pattern from opencode's bin launcher (anomalyco/opencode packages/opencode/bin/opencode).
5
+
6
+ const childProcess = require("node:child_process")
7
+ const fs = require("node:fs")
8
+ const path = require("node:path")
9
+ const os = require("node:os")
10
+
11
+ const forwardedSignals = ["SIGINT", "SIGTERM", "SIGHUP"]
12
+
13
+ function run(target) {
14
+ const child = childProcess.spawn(target, process.argv.slice(2), { stdio: "inherit" })
15
+
16
+ child.on("error", (error) => {
17
+ console.error(error.message)
18
+ process.exit(1)
19
+ })
20
+
21
+ for (const signal of forwardedSignals) {
22
+ process.on(signal, () => {
23
+ try {
24
+ child.kill(signal)
25
+ } catch {
26
+ // the child may have already exited
27
+ }
28
+ })
29
+ }
30
+
31
+ child.on("exit", (code, signal) => {
32
+ if (signal) {
33
+ process.kill(process.pid, signal)
34
+ return
35
+ }
36
+ process.exit(code === null ? 1 : code)
37
+ })
38
+ }
39
+
40
+ const packageName = `sideye-${os.platform()}-${os.arch()}`
41
+
42
+ function findBinary(startDir) {
43
+ let current = startDir
44
+ for (;;) {
45
+ const candidate = path.join(current, "node_modules", packageName, "bin", "sideye")
46
+ if (fs.existsSync(candidate)) {
47
+ return candidate
48
+ }
49
+
50
+ const parent = path.dirname(current)
51
+ if (parent === current) {
52
+ return undefined
53
+ }
54
+ current = parent
55
+ }
56
+ }
57
+
58
+ const resolved = process.env.SIDEYE_BIN_PATH || findBinary(__dirname)
59
+
60
+ if (!resolved) {
61
+ console.error(
62
+ `Could not find the sideye binary for your platform. Your package manager may have skipped optional dependencies; try reinstalling, or install "${packageName}" directly. Supported platforms: darwin/linux on arm64/x64.`,
63
+ )
64
+ process.exit(1)
65
+ }
66
+
67
+ run(resolved)
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "sideye",
3
+ "version": "0.1.3",
4
+ "description": "Read-only companion TUI for CLI coding agents",
5
+ "repository": "github:jimmy-guzman/sideye",
6
+ "homepage": "https://github.com/jimmy-guzman/sideye",
7
+ "bugs": "https://github.com/jimmy-guzman/sideye/issues",
8
+ "keywords": [
9
+ "tui",
10
+ "diff",
11
+ "git",
12
+ "code-review",
13
+ "coding-agent",
14
+ "terminal"
15
+ ],
16
+ "license": "MIT",
17
+ "bin": {
18
+ "sideye": "./bin/sideye.js"
19
+ },
20
+ "optionalDependencies": {
21
+ "sideye-darwin-arm64": "0.1.3",
22
+ "sideye-darwin-x64": "0.1.3",
23
+ "sideye-linux-x64": "0.1.3",
24
+ "sideye-linux-arm64": "0.1.3"
25
+ }
26
+ }