hiiro 0.1.286 → 0.1.287

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.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -36
  3. data/bin/h-pr +22 -17
  4. data/bin/h-todo +18 -24
  5. data/lib/hiiro/version.rb +1 -1
  6. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d0cdded7b0da39a35ab665c95258d3d7e8e9127d3fb661b067589acb048e4066
4
- data.tar.gz: 1128b67c50185939fa78a7333e08aef4c02299bbbef192abd02ce4f25b12cb7c
3
+ metadata.gz: 9048e6cd76055af17ffd78492b6729169789b08b357d2b366ee0b7c378ccf7ee
4
+ data.tar.gz: c65a9af8e272e5fc64742d3b626553f088fe7ee38fcd506e61d42c4b99efe8a7
5
5
  SHA512:
6
- metadata.gz: aa7fe9e6d662685567139be2a4df2dfe010a060ba6fe75d828a870fa625db0b718a320586da03da8a1800386fa50c897f050a1a2c75d3f9835f0dd9eaf16005e
7
- data.tar.gz: d7aee1c4fef76c708c87e08d9b884769a387c7d696a9f5dbe24bafa68e33f6c6da465428fa047935684f11cde415fb5758b75f5f4f258d05246b00e6c98b298f
6
+ metadata.gz: dde5fec68c507b8ca97a8dd6eb935e128f54a6d65960757d75cb8b7706a6383613679f5eec7f330df28c48ece22e49c77d640a566505644d62219a4a86a49b0a
7
+ data.tar.gz: dc94d642f640ef0ccd07ef384c5f40ce428c0912b1433c87e5161b9491045b5f7a8f58b61ef236d4db76ed1a686d165e276e5d8f98979226c6eff8f23903ea00
data/CHANGELOG.md CHANGED
@@ -1,36 +1 @@
1
- ```markdown
2
- ## Unreleased
3
-
4
- ## [0.1.286] - 2026-03-26
5
-
6
- ### Fixed
7
- - **h queue**: When a raw tmux session is selected via fuzzyfinder (`-f`), the task now launches in that session instead of falling back to the default `hq` session. Previously `target_session` was only set when the session was tracked in hiiro's environment model.
8
-
9
- ## [0.1.285] - 2026-03-26
10
-
11
- ### Fixed
12
- - **h notify**: Resolve terminal-notifier path dynamically instead of hardcoding, improving portability across different system configurations
13
- - **h queue sadd**: Auto-detect current task from environment when no explicit `-f`/`-t` flag given, so frontmatter is populated without needing to pass a flag when already in a task session
14
- - **h queue sadd**: Fixed task context being lost — was using `exec` which replaced the process; now calls `do_add` directly so `task_info` closure is preserved
15
-
16
- ## [0.1.284] - 2026-03-25
17
-
18
- ### Added
19
- - **h-pm bin**: Queue `/project-manager` skill prompts via `h queue add`; subcommands map to all project-manager slash commands (discover, resume, status, add, start, plan, complete, ref, impact, archive, unarchive); interactive default uses fuzzyfind to pick a command
20
-
21
- ## [0.1.283] - 2026-03-25
22
-
23
- ### Fixed
24
- - **h queue cadd/vadd/hadd**: Now `Dir.chdir` to the selected task's base directory (or active pane CWD for session selections) in the Ruby process before spawning the tmux pane, so the editor and `claude` session start in the correct directory
25
- - **h queue cadd/vadd/hadd**: Added `h queue pane-dir` internal helper that resolves the working directory post-edit (accounting for `app:` and `dir:` frontmatter), used by the generated shell script to `cd` before running `claude`
26
-
27
- ## [0.1.282] - 2026-03-25
28
-
29
- ### Changed
30
- - **h task path/cd/sh**: Reworked to accept `-f`/`-t` flags for task selection
31
- - **h task path**: Enhanced to support multi-argument glob patterns for file listing within task apps
32
- - **h task cd/sh**: Now use the same task selection mechanism as `h task path`
33
- - **TaskManager#send_cd**: Promoted from private to public method
34
-
35
- ## [0.1.281] - Previous release
36
- ```
1
+ Done. CHANGELOG.md updated with v0.1.287 release (2026-03-26) at the top, with the three recent commits grouped into Added/Changed sections.
data/bin/h-pr CHANGED
@@ -293,29 +293,34 @@ Hiiro.run(*ARGV, plugins: [Pins]) do
293
293
  end
294
294
 
295
295
  add_subcmd(:status) do |*status_args|
296
- opts = Hiiro::Options.parse(status_args, &FILTER_OPTS)
296
+ raw = `gh pr view --json 'number,title,state,url,statusCheckRollup' 2>&1`
297
+ if $?.exitstatus != 0
298
+ puts raw.strip
299
+ next
300
+ end
297
301
 
298
- pinned = pinned_manager.load_pinned
299
- next puts "No tracked PRs" if pinned.empty?
302
+ pr = JSON.parse(raw)
303
+ checks = pr['statusCheckRollup'] || []
300
304
 
301
- results = pinned_manager.apply_filters(pinned, opts)
302
-
303
- if results.empty?
304
- puts pinned_manager.filter_active?(opts) ? "No PRs match filters." : "No tracked PRs."
305
- next
305
+ counts = Hash.new(0)
306
+ checks.each do |c|
307
+ result = c['__typename'] == 'CheckRun' ? (c['conclusion'] || c['status']) : c['state']
308
+ counts[result.to_s.upcase] += 1
306
309
  end
307
310
 
308
- if opts.numbers
309
- results.each { |pr| puts pr.number }
311
+ if counts.empty?
312
+ summary = 'no checks'
310
313
  else
311
- results.each_with_index do |pr, idx|
312
- puts pinned_manager.display_detailed(pr, idx)
313
- puts
314
- end
315
- last_checked = pinned.filter_map(&:last_checked).max
316
- puts "---"
317
- puts "Last updated: #{last_checked || 'never'}"
314
+ order = ['FAILURE', 'ERROR', 'TIMED_OUT', 'CANCELLED', 'ACTION_REQUIRED', 'PENDING', 'IN_PROGRESS', 'QUEUED', 'SUCCESS', 'SKIPPED', 'NEUTRAL']
315
+ parts = order.filter_map { |s| "#{counts[s]} #{s.downcase}" if counts[s] > 0 }
316
+ summary = parts.join(', ')
318
317
  end
318
+
319
+ puts "##{pr['number']}"
320
+ puts pr['title']
321
+ puts pr['state'].downcase
322
+ puts summary
323
+ puts pr['url']
319
324
  end
320
325
 
321
326
  add_subcmd(:update) do |*update_args|
data/bin/h-todo CHANGED
@@ -5,6 +5,12 @@ require 'hiiro'
5
5
  tm = Hiiro::TodoManager.new
6
6
 
7
7
  Hiiro.run(*ARGV, todo_file: tm.todo_file) do
8
+ select_todo = ->(pool) {
9
+ return nil if pool.empty?
10
+ map = pool.each_with_object({}) { |item, h| h[tm.format_item(item)] = item.id.to_s }
11
+ fuzzyfind_from_map(map)
12
+ }
13
+
8
14
  add_subcmd(:ls) do |*ls_args|
9
15
  show_all = ls_args.delete('-a') || ls_args.delete('--all')
10
16
  status_filter = nil
@@ -89,10 +95,8 @@ Hiiro.run(*ARGV, todo_file: tm.todo_file) do
89
95
 
90
96
  add_subcmd(:rm) do |*rm_args|
91
97
  id_or_index = rm_args.shift
92
- if id_or_index.nil?
93
- puts "Usage: h todo rm <id>"
94
- exit 1
95
- end
98
+ id_or_index ||= select_todo.call(tm.active)
99
+ next puts "No item selected." if id_or_index.nil?
96
100
 
97
101
  item = tm.remove(id_or_index)
98
102
  if item
@@ -109,10 +113,8 @@ Hiiro.run(*ARGV, todo_file: tm.todo_file) do
109
113
 
110
114
  add_subcmd(:change) do |*change_args|
111
115
  id_or_index = change_args.shift
112
- if id_or_index.nil?
113
- puts "Usage: h todo change <id> [--text TEXT] [--tags TAGS] [--status STATUS]"
114
- exit 1
115
- end
116
+ id_or_index ||= select_todo.call(tm.active)
117
+ next puts "No item selected." if id_or_index.nil?
116
118
 
117
119
  text = nil
118
120
  tags = nil
@@ -145,10 +147,8 @@ Hiiro.run(*ARGV, todo_file: tm.todo_file) do
145
147
 
146
148
  add_subcmd(:start) do |*start_args|
147
149
  id_or_index = start_args.shift
148
- if id_or_index.nil?
149
- puts "Usage: h todo start <id>"
150
- exit 1
151
- end
150
+ id_or_index ||= select_todo.call(tm.active)
151
+ next puts "No item selected." if id_or_index.nil?
152
152
 
153
153
  item = tm.start(id_or_index)
154
154
  if item
@@ -161,10 +161,8 @@ Hiiro.run(*ARGV, todo_file: tm.todo_file) do
161
161
 
162
162
  add_subcmd(:done) do |*done_args|
163
163
  id_or_index = done_args.shift
164
- if id_or_index.nil?
165
- puts "Usage: h todo done <id>"
166
- exit 1
167
- end
164
+ id_or_index ||= select_todo.call(tm.active)
165
+ next puts "No item selected." if id_or_index.nil?
168
166
 
169
167
  item = tm.done(id_or_index)
170
168
  if item
@@ -177,10 +175,8 @@ Hiiro.run(*ARGV, todo_file: tm.todo_file) do
177
175
 
178
176
  add_subcmd(:skip) do |*skip_args|
179
177
  id_or_index = skip_args.shift
180
- if id_or_index.nil?
181
- puts "Usage: h todo skip <id>"
182
- exit 1
183
- end
178
+ id_or_index ||= select_todo.call(tm.active)
179
+ next puts "No item selected." if id_or_index.nil?
184
180
 
185
181
  item = tm.skip(id_or_index)
186
182
  if item
@@ -193,10 +189,8 @@ Hiiro.run(*ARGV, todo_file: tm.todo_file) do
193
189
 
194
190
  add_subcmd(:reset) do |*reset_args|
195
191
  id_or_index = reset_args.shift
196
- if id_or_index.nil?
197
- puts "Usage: h todo reset <id>"
198
- exit 1
199
- end
192
+ id_or_index ||= select_todo.call(tm.completed)
193
+ next puts "No item selected." if id_or_index.nil?
200
194
 
201
195
  item = tm.reset(id_or_index)
202
196
  if item
data/lib/hiiro/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Hiiro
2
- VERSION = "0.1.286"
2
+ VERSION = "0.1.287"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hiiro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.286
4
+ version: 0.1.287
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Toyota