sentry-tui 0.1.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/LICENSE +21 -0
- package/README.md +116 -0
- package/bin/sentry-tui.mjs +6 -0
- package/package.json +39 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Billy Vong
|
|
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,116 @@
|
|
|
1
|
+
# sentry-tui
|
|
2
|
+
|
|
3
|
+
sentry.io in your terminal — a TUI client built with [OpenTUI](https://opentui.com),
|
|
4
|
+
mirroring Sentry's real information architecture and screen layouts.
|
|
5
|
+
|
|
6
|
+
## Status
|
|
7
|
+
|
|
8
|
+
Hackweek 2026. The Issues path is built end to end; other nav sections are
|
|
9
|
+
honest stubs.
|
|
10
|
+
|
|
11
|
+
- [x] Phase 1 — app shell, focus ring, theme, command catalog
|
|
12
|
+
- [x] Phase 2 — API client, auth, domain types
|
|
13
|
+
- [x] Phase 2.5 — loading states
|
|
14
|
+
- [x] Phase 3 — issue stream
|
|
15
|
+
- [x] Phase 4 — issue detail + stack traces
|
|
16
|
+
- [x] Phase 5 — triage actions
|
|
17
|
+
- [x] Phase 6 — OAuth device-flow login
|
|
18
|
+
|
|
19
|
+
Next: command palette, org/project switcher, and the remaining nav sections.
|
|
20
|
+
|
|
21
|
+
## Install
|
|
22
|
+
|
|
23
|
+
Every route below installs the same self-contained binary — no Bun, Node, or
|
|
24
|
+
npm needed at runtime.
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# Homebrew
|
|
28
|
+
brew install billyvg/tap/sentry-tui
|
|
29
|
+
|
|
30
|
+
# Shell installer → ~/.local/bin (set SENTRY_TUI_INSTALL_DIR to change that)
|
|
31
|
+
curl -fsSL https://raw.githubusercontent.com/billyvg/sentry-tui/main/install.sh | bash
|
|
32
|
+
|
|
33
|
+
# npm — one-off, or installed globally
|
|
34
|
+
npx sentry-tui
|
|
35
|
+
npm install -g sentry-tui
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
`sentry-tui` and `@billyvg/sentry-tui` are the same package; the platform
|
|
39
|
+
binary arrives as an optional dependency, so you download one binary rather
|
|
40
|
+
than four. Binaries are also attached to every
|
|
41
|
+
[release](https://github.com/billyvg/sentry-tui/releases).
|
|
42
|
+
|
|
43
|
+
Supported: macOS and Linux, on arm64 and x64. Windows and musl-based Linux
|
|
44
|
+
(Alpine) aren't built — run from source there.
|
|
45
|
+
|
|
46
|
+
### From source
|
|
47
|
+
|
|
48
|
+
Running from source needs **Bun ≥ 1.3.0**. OpenTUI reaches its native renderer
|
|
49
|
+
through `bun:ffi`; the Node backend wants `node:ffi`, which is Node 26.1+ behind
|
|
50
|
+
`--experimental-ffi`, so Bun is the supported path.
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
git clone https://github.com/billyvg/sentry-tui
|
|
54
|
+
cd sentry-tui
|
|
55
|
+
bun install
|
|
56
|
+
bun start
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Authentication
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
sentry-tui login # OAuth device flow — opens your browser
|
|
63
|
+
sentry-tui status # who you're signed in as, and for how long
|
|
64
|
+
sentry-tui logout # forget the stored credentials
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
`login` prints a short code, opens <https://sentry.io/oauth/device/>, and waits
|
|
68
|
+
for you to approve it (RFC 8628). Starting the TUI with no credentials offers
|
|
69
|
+
the same flow. Access tokens are renewed automatically; Sentry rotates the
|
|
70
|
+
refresh token on each renewal, so the new pair is written back immediately.
|
|
71
|
+
|
|
72
|
+
Use `--no-browser` to print the URL instead of opening one, and `SENTRY_URL` +
|
|
73
|
+
`SENTRY_CLIENT_ID` to log in to a self-hosted install (needs Sentry ≥ 26.1.0 and
|
|
74
|
+
a **public** OAuth application from Settings → Account → API → Applications).
|
|
75
|
+
|
|
76
|
+
### Personal token instead
|
|
77
|
+
|
|
78
|
+
Create one at <https://sentry.io/settings/account/api/auth-tokens/> with these
|
|
79
|
+
scopes — the same set `login` requests:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
org:read project:read event:read event:write member:read team:read
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
export SENTRY_AUTH_TOKEN=sntryu_…
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Resolution order is `SENTRY_AUTH_TOKEN` → `SENTRY_TOKEN` → the credential file.
|
|
90
|
+
Environment tokens are used exactly as given and never refreshed.
|
|
91
|
+
|
|
92
|
+
### Files
|
|
93
|
+
|
|
94
|
+
| Path | Holds |
|
|
95
|
+
| --------------------------------------- | ----------------------------------------------- |
|
|
96
|
+
| `~/.config/sentry-tui/config.json` | preferences (default org), rewritten by the app |
|
|
97
|
+
| `~/.config/sentry-tui/credentials.json` | tokens, written `0600` |
|
|
98
|
+
|
|
99
|
+
Secrets live apart from the file the app has to keep writable. A token left in
|
|
100
|
+
`config.json` by an older build is moved across on the next run.
|
|
101
|
+
|
|
102
|
+
## Development
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
bun run dev # watch mode
|
|
106
|
+
bun test # test suite
|
|
107
|
+
bun run typecheck # tsc --noEmit
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Set `SENTRY_TUI_LATENCY=3000` to inject artificial API latency and exercise
|
|
111
|
+
loading states.
|
|
112
|
+
|
|
113
|
+
## Keys
|
|
114
|
+
|
|
115
|
+
`?` for the full list. The basics: `j`/`k` move, `tab` switches pane,
|
|
116
|
+
`enter` opens, `r` resolves, `a` archives, `q` quits.
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "sentry.io in your terminal — a TUI client for Sentry",
|
|
3
|
+
"license": "MIT",
|
|
4
|
+
"author": "Billy Vong",
|
|
5
|
+
"homepage": "https://github.com/billyvg/sentry-tui#readme",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/billyvg/sentry-tui.git"
|
|
9
|
+
},
|
|
10
|
+
"bugs": {
|
|
11
|
+
"url": "https://github.com/billyvg/sentry-tui/issues"
|
|
12
|
+
},
|
|
13
|
+
"name": "sentry-tui",
|
|
14
|
+
"version": "0.1.0",
|
|
15
|
+
"keywords": [
|
|
16
|
+
"sentry",
|
|
17
|
+
"tui",
|
|
18
|
+
"terminal",
|
|
19
|
+
"cli",
|
|
20
|
+
"errors",
|
|
21
|
+
"observability",
|
|
22
|
+
"opentui"
|
|
23
|
+
],
|
|
24
|
+
"type": "module",
|
|
25
|
+
"bin": {
|
|
26
|
+
"sentry-tui": "bin/sentry-tui.mjs"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"bin",
|
|
30
|
+
"README.md",
|
|
31
|
+
"LICENSE"
|
|
32
|
+
],
|
|
33
|
+
"engines": {
|
|
34
|
+
"node": ">=18.0.0"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@billyvg/sentry-tui": "0.1.0"
|
|
38
|
+
}
|
|
39
|
+
}
|