@ondrej-svec/hog 1.3.0 → 1.5.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 +127 -28
- package/dist/cli.js +382 -187
- package/dist/cli.js.map +1 -1
- package/dist/fetch-worker.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ Your personal command deck — a unified task dashboard for GitHub Projects and
|
|
|
9
9
|
|
|
10
10
|
```sh
|
|
11
11
|
npm install -g @ondrej-svec/hog
|
|
12
|
-
hog init
|
|
12
|
+
hog init # interactive setup wizard
|
|
13
13
|
hog board --live
|
|
14
14
|
```
|
|
15
15
|
|
|
@@ -17,18 +17,22 @@ Requires **Node.js 22+** and the [GitHub CLI](https://cli.github.com/) (`gh auth
|
|
|
17
17
|
|
|
18
18
|
## Features
|
|
19
19
|
|
|
20
|
-
**Unified Dashboard** —
|
|
20
|
+
**Unified Dashboard** — GitHub issues from multiple repos and TickTick tasks in one view. Filter by repo, assignee, or backlog status.
|
|
21
21
|
|
|
22
22
|
**Interactive TUI** — Vim-style navigation (`j`/`k`), section collapsing, search (`/`), multi-select with bulk actions, and a detail panel on wide terminals.
|
|
23
23
|
|
|
24
|
-
**Issue Actions** — Pick up issues (`p`), assign/unassign (`a`/`u`), change status (`m`), comment (`c`), create issues (`n`) — all without leaving the terminal.
|
|
24
|
+
**Issue Actions** — Pick up issues (`p`), assign/unassign (`a`/`u`), change status (`m`), comment (`c`), create issues (`n`), add/remove labels (`l`) — all without leaving the terminal.
|
|
25
|
+
|
|
26
|
+
**Natural Language Issue Creation** — Press `I` and type `fix login bug #backend @alice due friday`. hog extracts the title, labels, assignee, and due date automatically. Optional LLM enhancement via OpenRouter.
|
|
27
|
+
|
|
28
|
+
**Multi-Line Comments** — Press `ctrl+e` in the comment overlay to open your `$EDITOR` (vim, nano, VS Code, etc.) for longer notes.
|
|
29
|
+
|
|
30
|
+
**Copy Link** — Press `y` to copy the selected issue's URL to your clipboard.
|
|
25
31
|
|
|
26
32
|
**Focus Mode** — Built-in Pomodoro timer (`f`). Lock onto an issue and focus for 25 minutes (configurable).
|
|
27
33
|
|
|
28
34
|
**Auto-Refresh** — Background refresh with age indicators (green/yellow/red) and failure tracking. Manual refresh with `r`.
|
|
29
35
|
|
|
30
|
-
**Toast Notifications** — Every async operation shows clear feedback. Errors persist with retry hints.
|
|
31
|
-
|
|
32
36
|
**Board Profiles** — Multiple board configurations for different contexts (work, personal, etc.).
|
|
33
37
|
|
|
34
38
|
**TickTick Optional** — Works with just GitHub. Enable TickTick integration when you want it.
|
|
@@ -40,20 +44,94 @@ Requires **Node.js 22+** and the [GitHub CLI](https://cli.github.com/) (`gh auth
|
|
|
40
44
|
| Key | Action |
|
|
41
45
|
|-----|--------|
|
|
42
46
|
| `j` / `k` | Navigate down / up |
|
|
47
|
+
| `↓` / `↑` | Navigate down / up |
|
|
43
48
|
| `Tab` / `Shift+Tab` | Next / previous section |
|
|
44
|
-
| `
|
|
45
|
-
| `
|
|
49
|
+
| `Space` | Toggle section (on header) or enter multi-select (on issue) |
|
|
50
|
+
| `Enter` | Open issue in browser (item) or toggle collapse (section) |
|
|
46
51
|
| `/` | Search |
|
|
52
|
+
| `n` | Create issue (form wizard) |
|
|
53
|
+
| `I` | Create issue from natural language |
|
|
47
54
|
| `p` | Pick issue (assign + sync to TickTick) |
|
|
48
55
|
| `a` / `u` | Assign / unassign |
|
|
49
|
-
| `m` | Change status |
|
|
50
|
-
| `
|
|
51
|
-
| `
|
|
52
|
-
| `
|
|
53
|
-
| `
|
|
54
|
-
|
|
|
56
|
+
| `m` | Change project status |
|
|
57
|
+
| `l` | Add / remove labels |
|
|
58
|
+
| `c` | Add comment |
|
|
59
|
+
| `ctrl+e` | Open `$EDITOR` for multi-line comment |
|
|
60
|
+
| `y` | Copy issue URL to clipboard |
|
|
61
|
+
| `f` | Focus mode (Pomodoro timer) |
|
|
62
|
+
| `C` | Collapse all sections |
|
|
63
|
+
| `r` / `R` | Refresh |
|
|
64
|
+
| `?` | Toggle help |
|
|
55
65
|
| `q` | Quit |
|
|
56
66
|
|
|
67
|
+
### Multi-Select
|
|
68
|
+
|
|
69
|
+
Press `Space` on any issue to enter multi-select mode, then:
|
|
70
|
+
|
|
71
|
+
| Key | Action |
|
|
72
|
+
|-----|--------|
|
|
73
|
+
| `Space` | Toggle item selection |
|
|
74
|
+
| `Enter` / `m` | Open bulk action menu |
|
|
75
|
+
| `Escape` | Clear selection and exit multi-select |
|
|
76
|
+
|
|
77
|
+
## Natural Language Issue Creation
|
|
78
|
+
|
|
79
|
+
Press `I` on the board to open the NL input. Type a description in plain English:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
fix auth timeout on mobile #backend #bug @alice due friday
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
hog extracts:
|
|
86
|
+
- **Title** — `fix auth timeout on mobile`
|
|
87
|
+
- **Labels** — `backend`, `bug` (validated against repo labels)
|
|
88
|
+
- **Assignee** — `alice`
|
|
89
|
+
- **Due date** — parsed from `due friday`, `due end of month`, `due 2026-03-01`, etc.
|
|
90
|
+
|
|
91
|
+
A live preview shows the parsed fields before you confirm with `Enter`.
|
|
92
|
+
|
|
93
|
+
### Heuristic Tokens
|
|
94
|
+
|
|
95
|
+
These are extracted without any API key:
|
|
96
|
+
|
|
97
|
+
| Token | Example | Extracts |
|
|
98
|
+
|-------|---------|---------|
|
|
99
|
+
| `#word` | `#backend` | label |
|
|
100
|
+
| `@user` | `@alice` | assignee (`@me` → your GitHub login) |
|
|
101
|
+
| `due <expr>` | `due friday` | due date (chrono-node) |
|
|
102
|
+
|
|
103
|
+
Everything else becomes the title.
|
|
104
|
+
|
|
105
|
+
### LLM Enhancement (optional)
|
|
106
|
+
|
|
107
|
+
With an [OpenRouter](https://openrouter.ai) API key, hog sends ambiguous input to an LLM for richer title cleanup and inference. The heuristic tokens still take priority — LLM only fills gaps.
|
|
108
|
+
|
|
109
|
+
Set up during `hog init`, or any time with:
|
|
110
|
+
|
|
111
|
+
```sh
|
|
112
|
+
hog config ai:set-key sk-or-... # store key
|
|
113
|
+
hog config ai:clear-key # remove key
|
|
114
|
+
hog config ai:status # show active source
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Or set an environment variable (takes priority over the stored key):
|
|
118
|
+
|
|
119
|
+
```sh
|
|
120
|
+
export OPENROUTER_API_KEY=sk-or-...
|
|
121
|
+
# or
|
|
122
|
+
export ANTHROPIC_API_KEY=sk-ant-...
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Agent-Native: `hog issue create`
|
|
126
|
+
|
|
127
|
+
Create issues non-interactively from scripts or AI agents:
|
|
128
|
+
|
|
129
|
+
```sh
|
|
130
|
+
hog issue create "fix login bug #backend @alice due friday" --repo owner/repo
|
|
131
|
+
hog issue create "add dark mode" --repo owner/repo --dry-run # preview only
|
|
132
|
+
hog issue create "add dark mode" --repo owner/repo --json # structured output
|
|
133
|
+
```
|
|
134
|
+
|
|
57
135
|
## Commands
|
|
58
136
|
|
|
59
137
|
### `hog board`
|
|
@@ -69,6 +147,15 @@ hog board --repo myrepo --json # filter by repo
|
|
|
69
147
|
hog board --profile work --live # use a named profile
|
|
70
148
|
```
|
|
71
149
|
|
|
150
|
+
### `hog issue`
|
|
151
|
+
|
|
152
|
+
Manage issues from the command line.
|
|
153
|
+
|
|
154
|
+
```sh
|
|
155
|
+
hog issue create "fix login bug #backend due friday" --repo owner/repo
|
|
156
|
+
hog issue create "add dark mode" --repo owner/repo --dry-run
|
|
157
|
+
```
|
|
158
|
+
|
|
72
159
|
### `hog pick`
|
|
73
160
|
|
|
74
161
|
Assign a GitHub issue to yourself and create a linked TickTick task.
|
|
@@ -82,8 +169,8 @@ hog pick myrepo/145
|
|
|
82
169
|
Manage TickTick tasks directly.
|
|
83
170
|
|
|
84
171
|
```sh
|
|
85
|
-
hog task list
|
|
86
|
-
hog task add "Ship the feature"
|
|
172
|
+
hog task list
|
|
173
|
+
hog task add "Ship the feature"
|
|
87
174
|
hog task add "Bug fix" -p high -t "urgent"
|
|
88
175
|
hog task complete <taskId>
|
|
89
176
|
hog task update <taskId> --title "New title" -p medium
|
|
@@ -97,22 +184,31 @@ hog task use-project <projectId> # set default project
|
|
|
97
184
|
View and manage configuration.
|
|
98
185
|
|
|
99
186
|
```sh
|
|
100
|
-
hog config show
|
|
101
|
-
|
|
187
|
+
hog config show
|
|
188
|
+
|
|
189
|
+
# Repos
|
|
190
|
+
hog config repos
|
|
102
191
|
hog config repos:add owner/repo --project-number 1 --status-field-id PVTSSF_xxx --completion-type closeIssue
|
|
103
192
|
hog config repos:rm reponame
|
|
104
193
|
|
|
105
|
-
|
|
106
|
-
hog config ticktick:
|
|
194
|
+
# TickTick
|
|
195
|
+
hog config ticktick:enable
|
|
196
|
+
hog config ticktick:disable
|
|
197
|
+
|
|
198
|
+
# AI / natural language issue creation
|
|
199
|
+
hog config ai:set-key sk-or-... # store OpenRouter key
|
|
200
|
+
hog config ai:clear-key # remove stored key
|
|
201
|
+
hog config ai:status # show active source and provider
|
|
107
202
|
|
|
108
|
-
|
|
203
|
+
# Profiles
|
|
204
|
+
hog config profile:create work
|
|
109
205
|
hog config profile:delete work
|
|
110
|
-
hog config profile:default work
|
|
206
|
+
hog config profile:default work
|
|
111
207
|
```
|
|
112
208
|
|
|
113
209
|
### `hog init`
|
|
114
210
|
|
|
115
|
-
Interactive setup wizard. Detects your GitHub user,
|
|
211
|
+
Interactive setup wizard. Detects your GitHub user, picks repos, configures projects, and optionally sets up an OpenRouter key for AI-enhanced issue creation.
|
|
116
212
|
|
|
117
213
|
```sh
|
|
118
214
|
hog init # interactive setup
|
|
@@ -131,7 +227,7 @@ hog sync status # show sync mappings
|
|
|
131
227
|
|
|
132
228
|
## Configuration
|
|
133
229
|
|
|
134
|
-
Config lives at `~/.config/hog/config.json`. Created by `hog init` or manually.
|
|
230
|
+
Config lives at `~/.config/hog/config.json`. Created by `hog init` or edited manually.
|
|
135
231
|
|
|
136
232
|
```jsonc
|
|
137
233
|
{
|
|
@@ -150,25 +246,27 @@ Config lives at `~/.config/hog/config.json`. Created by `hog init` or manually.
|
|
|
150
246
|
"refreshInterval": 60, // seconds (min: 10)
|
|
151
247
|
"backlogLimit": 20,
|
|
152
248
|
"assignee": "your-github-username",
|
|
153
|
-
"focusDuration": 1500 // seconds (25 min)
|
|
249
|
+
"focusDuration": 1500 // seconds (25 min default)
|
|
154
250
|
},
|
|
155
251
|
"ticktick": {
|
|
156
252
|
"enabled": true // set false to use without TickTick
|
|
157
253
|
},
|
|
158
|
-
"profiles": {},
|
|
159
|
-
"defaultProfile": ""
|
|
254
|
+
"profiles": {},
|
|
255
|
+
"defaultProfile": ""
|
|
160
256
|
}
|
|
161
257
|
```
|
|
162
258
|
|
|
259
|
+
Credentials (TickTick OAuth token, OpenRouter API key) are stored separately in `~/.config/hog/auth.json` with `0600` permissions.
|
|
260
|
+
|
|
163
261
|
### Status Groups
|
|
164
262
|
|
|
165
|
-
By default, hog auto-detects status columns from your GitHub Project. Override per-repo
|
|
263
|
+
By default, hog auto-detects status columns from your GitHub Project. Override per-repo:
|
|
166
264
|
|
|
167
265
|
```json
|
|
168
266
|
"statusGroups": ["In Progress", "In Review", "Todo,Backlog"]
|
|
169
267
|
```
|
|
170
268
|
|
|
171
|
-
Each entry is a section. Comma-separated values merge into one section (header = first value). Terminal statuses (Done, Shipped, Closed, etc.) are always hidden.
|
|
269
|
+
Each entry is a board section. Comma-separated values merge into one section (header = first value). Terminal statuses (Done, Shipped, Closed, etc.) are always hidden.
|
|
172
270
|
|
|
173
271
|
### Profiles
|
|
174
272
|
|
|
@@ -185,6 +283,7 @@ hog board --profile personal --live
|
|
|
185
283
|
- **Node.js 22+**
|
|
186
284
|
- **GitHub CLI** (`gh`) — authenticated via `gh auth login`
|
|
187
285
|
- **TickTick account** — optional, for task sync
|
|
286
|
+
- **OpenRouter API key** — optional, for AI-enhanced issue creation (`hog config ai:set-key`)
|
|
188
287
|
|
|
189
288
|
## License
|
|
190
289
|
|