@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 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 # interactive setup wizard
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** — See GitHub issues from multiple repos and TickTick tasks in one view. Filter by repo, assignee, or backlog status.
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
- | `Enter` | Open in browser (item) or toggle (section) |
45
- | `Space` | Toggle section or multi-select |
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
- | `c` | Comment |
51
- | `n` | Create issue |
52
- | `f` | Focus mode (Pomodoro) |
53
- | `r` | Refresh |
54
- | `?` | Help |
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 # list tasks
86
- hog task add "Ship the feature" # create task
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 # show full config
101
- hog config repos # list tracked repos
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
- hog config ticktick:enable # enable TickTick integration
106
- hog config ticktick:disable # disable TickTick integration
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
- hog config profile:create work # create profile from current config
203
+ # Profiles
204
+ hog config profile:create work
109
205
  hog config profile:delete work
110
- hog config profile:default work # set default profile
206
+ hog config profile:default work
111
207
  ```
112
208
 
113
209
  ### `hog init`
114
210
 
115
- Interactive setup wizard. Detects your GitHub user, lets you pick repos, and configures everything.
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": {}, // named board profiles
159
- "defaultProfile": "" // profile to use by default
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 with `statusGroups`:
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