hiiro 0.1.298 → 0.1.300

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8490d494506182e944c05ff1df6aec4c1230f1c44983605edd2c2cb28ab7aa2a
4
- data.tar.gz: 8f0dc4909c84d07e46434f62059a377cb68b83301dce77cc176d21041a49f60f
3
+ metadata.gz: dd49172471425b05abf798041ef7bc7e2a75bef28c48037b224474759c08fc35
4
+ data.tar.gz: 4f4a11868d26261e0495ac6b80ee585d06c51da9e27826acfbcb3f3b9f6372e7
5
5
  SHA512:
6
- metadata.gz: 38a71da929c8f8d4e8d7a640a2ec43847ffb3d32b558b21ecd0bc8f908d761aad70479e30b68c6fc5f7e675f66cda3d71ea7dedcfd33f94dbbc32d960a1a7208
7
- data.tar.gz: c27d87516084d5ebff7b580e24e849ce470c4477dd62010ac75e7310c60c812eb3b5397f695ba80c6d4e6b189f816be222037882d4e351edae859708fd226baa
6
+ metadata.gz: ab8fc4ef33a5f23ae68401a22dbad6282341efef8e550d5766f28cd5f6596ed4e468b1fc58cd6f88651525fd55cdc3086503802aefb5c6269e09cd3f68e52338
7
+ data.tar.gz: 1da0629a7fefa3353ab95ebb6200df244fab23329484e03e44950e85088a5314f2aa8684e8d34857b6a3a840b66f88d192bc2dac69a7bf8ed7f3a158a3e907cb
data/CHANGELOG.md CHANGED
@@ -1,4 +1,21 @@
1
1
  ```markdown
2
+ ## v0.1.300 (2026-03-29)
3
+
4
+ ### Added
5
+ - `bin/h-claude`: fulltext search option for agents, commands, and skills via new search flag
6
+
7
+ ### Changed
8
+ - `bin/h-claude`: agents/commands/skills directory traversal refactored for DRY principle
9
+ - `bin/h-claude`: improved output formatting to display Claude tools organized by type
10
+
11
+ ## v0.1.299 (2026-03-27)
12
+
13
+ ### Added
14
+ - `bin/h-pr open`: now supports opening multiple PRs in sequence (e.g., `h pr open 123 456`)
15
+
16
+ ### Changed
17
+ - `bin/h-claude`: simplified directory traversal and file globbing logic for better maintainability
18
+
2
19
  ## v0.1.298 (2026-03-27)
3
20
 
4
21
  ### Changed
data/bin/h-claude CHANGED
@@ -15,6 +15,50 @@ opts = Hiiro::Options.setup {
15
15
  option(:size, short: :s, default: nil)
16
16
  }
17
17
 
18
+ tool_opts = Hiiro::Options.setup {
19
+ flag(:full, short: :f, default: false, desc: 'fulltext search - full grep file or dir')
20
+ }
21
+
22
+ def glob_path(glob, bname=nil, filters: nil, fulltext: false)
23
+ bname ||= ''
24
+ filters ||= []
25
+ filters = ['.*'] if filters.empty?
26
+
27
+ claude_paths.map { |path|
28
+ [
29
+ path.split&.first,
30
+ path.glob(glob),
31
+ ]
32
+ }.each do |path, fs|
33
+ next if fs.empty?
34
+
35
+ $stderr.puts
36
+ $stderr.puts "PATH: #{path}"
37
+
38
+ re_s = filters.join(?|)
39
+ re = Regexp.new(re_s)
40
+ fs.each do |f|
41
+ more_args = f.file? ? [] : ['-r']
42
+ cmd = ['egrep', *more_args, '-m1', re_s, f.to_s]
43
+ kwcmd = { out: File.open('/dev/null', 'w') }
44
+ base_f = f.basename(bname)
45
+
46
+ matches =
47
+ if fulltext
48
+ system(*cmd, **kwcmd)
49
+ else
50
+ base_f.to_s.match?(re)
51
+ end
52
+
53
+ if matches
54
+ puts base_f
55
+ else
56
+ $stderr.puts "SKIPPING #{base_f}"
57
+ end
58
+ end
59
+ end
60
+ end
61
+
18
62
  def permission_flag(opts)
19
63
  opts.danger ? '--dangerously-skip-permissions' : '--allow-dangerously-skip-permissions'
20
64
  end
@@ -33,13 +77,11 @@ end
33
77
 
34
78
  # Walk from Dir.pwd up through parent directories, stopping before Dir.home.
35
79
  # Returns an array of existing .claude directories, closest-first.
36
- def claude_ancestor_dirs
80
+ def claude_paths
37
81
  Pathname(Dir.pwd)
38
82
  .ascend
39
- .take_while { |p| p != Pathname(Dir.home) }
40
83
  .map { |p| p / '.claude' }
41
- .select(&:directory?)
42
- .map(&:to_s)
84
+ .select(&:exist?)
43
85
  end
44
86
 
45
87
  Hiiro.run(*ARGV, plugins: [Pins]) {
@@ -105,34 +147,19 @@ add_subcmd(:env) { |*args|
105
147
  IO.popen(['claude', '-p'], 'w') { |io| io.write(prompt) }
106
148
  }
107
149
 
108
- add_subcmd(:agents) {
109
- names = []
110
- claude_ancestor_dirs.each do |claude_dir|
111
- dir = File.join(claude_dir, 'agents')
112
- next unless Dir.exist?(dir)
113
- Dir.glob("#{dir}/*.md").sort.each { |f| names << File.basename(f, '.md') }
114
- end
115
- names.uniq.each { |n| puts n }
150
+ add_subcmd(:agents) { |*args|
151
+ opts = tool_opts.parse(args)
152
+ glob_path('agents/*.md', '.md', filters: opts.args, fulltext: opts.full)
116
153
  }
117
154
 
118
- add_subcmd(:commands) {
119
- names = []
120
- claude_ancestor_dirs.each do |claude_dir|
121
- dir = File.join(claude_dir, 'commands')
122
- next unless Dir.exist?(dir)
123
- Dir.glob("#{dir}/*.md").sort.each { |f| names << File.basename(f, '.md') }
124
- end
125
- names.uniq.each { |n| puts n }
155
+ add_subcmd(:commands) { |*args|
156
+ opts = tool_opts.parse(args)
157
+ glob_path('commands/*.md', '.md', filters: opts.args, fulltext: opts.full)
126
158
  }
127
159
 
128
- add_subcmd(:skills) {
129
- names = []
130
- claude_ancestor_dirs.each do |claude_dir|
131
- dir = File.join(claude_dir, 'skills')
132
- next unless Dir.exist?(dir)
133
- Dir.glob("#{dir}/*/").sort.each { |d| names << File.basename(d) }
134
- end
135
- names.uniq.each { |n| puts n }
160
+ add_subcmd(:skills) { |*args|
161
+ opts = tool_opts.parse(args)
162
+ glob_path('skills/*/', filters: opts.args, fulltext: opts.full)
136
163
  }
137
164
 
138
165
  add_subcmd(:new) { |*args|
data/bin/h-pr CHANGED
@@ -85,8 +85,8 @@ Hiiro.run(*ARGV, plugins: [Pins]) do
85
85
  }
86
86
 
87
87
  add_subcmd(:edit) { edit_files(__FILE__) }
88
- add_subcmd(:open) { |pr_number=nil|
89
- if pr_number.nil?
88
+ add_subcmd(:open) { |*refs|
89
+ if refs.empty?
90
90
  current = pinned_manager.fetch_current_branch_pr
91
91
  if current
92
92
  pinned = pinned_manager.load_pinned
@@ -96,11 +96,14 @@ Hiiro.run(*ARGV, plugins: [Pins]) do
96
96
  next
97
97
  end
98
98
  end
99
- pr_number = resolve(:pr, pr_number)
100
- next unless pr_number
99
+ refs = [nil] if refs.empty?
101
100
  pinned = pinned_manager.load_pinned
102
- pr = pinned.find { |p| p.number.to_s == pr_number.to_s }
103
- pr&.url ? system('open', pr.url) : system('gh', 'pr', 'view', pr_number.to_s, '--web')
101
+ refs.each do |ref|
102
+ pr_number = resolve(:pr, ref)
103
+ next unless pr_number
104
+ pr = pinned.find { |p| p.number.to_s == pr_number.to_s }
105
+ pr&.url ? system('open', pr.url) : system('gh', 'pr', 'view', pr_number.to_s, '--web')
106
+ end
104
107
  }
105
108
  add_subcmd(:view) { |pr_number=nil|
106
109
  pr_number = resolve(:pr, pr_number)
data/lib/hiiro/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Hiiro
2
- VERSION = "0.1.298"
2
+ VERSION = "0.1.300"
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.298
4
+ version: 0.1.300
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Toyota