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 +4 -4
- data/CHANGELOG.md +17 -0
- data/bin/h-claude +55 -28
- data/bin/h-pr +9 -6
- data/lib/hiiro/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dd49172471425b05abf798041ef7bc7e2a75bef28c48037b224474759c08fc35
|
|
4
|
+
data.tar.gz: 4f4a11868d26261e0495ac6b80ee585d06c51da9e27826acfbcb3f3b9f6372e7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
|
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(&:
|
|
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
|
-
|
|
110
|
-
|
|
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
|
-
|
|
120
|
-
|
|
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
|
-
|
|
130
|
-
|
|
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) { |
|
|
89
|
-
if
|
|
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
|
-
|
|
100
|
-
next unless pr_number
|
|
99
|
+
refs = [nil] if refs.empty?
|
|
101
100
|
pinned = pinned_manager.load_pinned
|
|
102
|
-
|
|
103
|
-
|
|
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