hiiro 0.1.302 → 0.1.303
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/bin/h-notify +34 -46
- data/lib/hiiro/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: adc8ff4a4e274d5ed9d6ee9fbafd0f4dc4db1719d207bccb6678e38e9d6da7bc
|
|
4
|
+
data.tar.gz: 6d7c4a88b1388f7518c5c5b10e4e4ff93973efb964a1c7a01bccdc0956ea9288
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bde54b4fccd5686144f3d4d0626bd8d07ada088afe03281714acae7d8ce0cb1a855ffefe17554b96f1a45438bec46f824b633a3e0e99f0b8aff8c9372dd5c86a
|
|
7
|
+
data.tar.gz: d3dea2459871cee5fcaeae8ee314826933187672194ac5cd6c03095b3a4c533daa5f34f0f8f7ff07cc9c57abe1cad2260123800db956a65a43b48017c31d222d
|
data/bin/h-notify
CHANGED
|
@@ -33,15 +33,26 @@ CLAUDE_NOTIFICATION_CMD = %q(MSG=$(cat | jq -r '.message // "Needs input"'); h a
|
|
|
33
33
|
CLAUDE_STOP_CMD = %q(h alert -t 'Claude Code' -m 'Work completed' -s b -c "echo switchc -t '$TMUX_PANE' | pbcopy"; h notify push -t success 'Work completed')
|
|
34
34
|
|
|
35
35
|
def read_log
|
|
36
|
-
return
|
|
37
|
-
YAML.safe_load(File.read(LOG_FILE))
|
|
36
|
+
return [] unless File.exist?(LOG_FILE)
|
|
37
|
+
data = YAML.safe_load(File.read(LOG_FILE))
|
|
38
|
+
if data.is_a?(Hash)
|
|
39
|
+
backup = "#{LOG_FILE}.bak.#{Time.now.strftime('%Y%m%d%H%M%S')}"
|
|
40
|
+
FileUtils.cp(LOG_FILE, backup)
|
|
41
|
+
$stderr.puts "h notify: migrated log to flat format (backup: #{backup})"
|
|
42
|
+
migrated = data.values.flatten.compact.sort_by { |e| -(e['timestamp'] || 0) }
|
|
43
|
+
write_log(migrated)
|
|
44
|
+
migrated
|
|
45
|
+
elsif data.is_a?(Array)
|
|
46
|
+
data
|
|
47
|
+
else
|
|
48
|
+
[]
|
|
49
|
+
end
|
|
38
50
|
rescue
|
|
39
|
-
|
|
51
|
+
[]
|
|
40
52
|
end
|
|
41
53
|
|
|
42
54
|
def write_log(data)
|
|
43
55
|
FileUtils.mkdir_p(File.dirname(LOG_FILE))
|
|
44
|
-
data.reject! { |_, entries| entries.nil? || entries.empty? }
|
|
45
56
|
File.write(LOG_FILE, data.to_yaml)
|
|
46
57
|
end
|
|
47
58
|
|
|
@@ -92,10 +103,9 @@ Hiiro.run(*ARGV, tasks: true) do
|
|
|
92
103
|
}
|
|
93
104
|
|
|
94
105
|
data = read_log
|
|
95
|
-
data[session] ||= []
|
|
96
106
|
# One entry per pane — replace existing, newest first
|
|
97
|
-
data
|
|
98
|
-
data
|
|
107
|
+
data.reject! { |e| e['pane_id'] == pane.id }
|
|
108
|
+
data.unshift(entry)
|
|
99
109
|
write_log(data)
|
|
100
110
|
|
|
101
111
|
binpath = `command -v terminal-notifier`
|
|
@@ -106,34 +116,21 @@ Hiiro.run(*ARGV, tasks: true) do
|
|
|
106
116
|
end
|
|
107
117
|
|
|
108
118
|
add_subcmd(:ls) do
|
|
109
|
-
|
|
110
|
-
flag(:all, short: 'a', desc: 'Show all sessions')
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
data = read_log
|
|
114
|
-
sessions = ls_opts.all ? data.keys : [Hiiro::Tmux::Session.current&.name].compact
|
|
115
|
-
|
|
116
|
-
any = false
|
|
117
|
-
sessions.each do |sess|
|
|
118
|
-
entries = data[sess] || []
|
|
119
|
-
next if entries.empty?
|
|
119
|
+
data = read_log
|
|
120
120
|
|
|
121
|
-
|
|
122
|
-
|
|
121
|
+
if data.empty?
|
|
122
|
+
puts "No notifications."
|
|
123
|
+
else
|
|
124
|
+
data.each_with_index do |e, i|
|
|
123
125
|
time_str = Time.at(e['timestamp']).strftime('%H:%M:%S')
|
|
124
126
|
prefix = TYPE_PRESETS[e['type']]&.dig(:prefix) || '[INFO]'
|
|
125
|
-
puts "%3d) %s [%s] %s: %s (%s)" % [i, prefix, e['pane_id'], e['pane_cmd'], e['message'], time_str]
|
|
127
|
+
puts "%3d) %s [%s/%s] %s: %s (%s)" % [i, prefix, e['session'], e['pane_id'], e['pane_cmd'], e['message'], time_str]
|
|
126
128
|
end
|
|
127
|
-
any = true
|
|
128
129
|
end
|
|
129
|
-
|
|
130
|
-
puts "No notifications." unless any
|
|
131
130
|
end
|
|
132
131
|
|
|
133
132
|
add_subcmd(:menu) do
|
|
134
|
-
|
|
135
|
-
data = read_log
|
|
136
|
-
entries = data[session] || []
|
|
133
|
+
entries = read_log
|
|
137
134
|
|
|
138
135
|
if entries.empty?
|
|
139
136
|
next
|
|
@@ -159,20 +156,15 @@ Hiiro.run(*ARGV, tasks: true) do
|
|
|
159
156
|
next
|
|
160
157
|
end
|
|
161
158
|
|
|
162
|
-
index
|
|
163
|
-
|
|
164
|
-
data = read_log
|
|
165
|
-
entries = data[session] || []
|
|
159
|
+
index = index_str.to_i
|
|
160
|
+
data = read_log
|
|
166
161
|
|
|
167
|
-
if index >=
|
|
168
|
-
next
|
|
169
|
-
end
|
|
162
|
+
next if index >= data.length
|
|
170
163
|
|
|
171
|
-
entry =
|
|
164
|
+
entry = data[index]
|
|
172
165
|
|
|
173
166
|
unless pane_exists?(entry['pane_id'])
|
|
174
|
-
|
|
175
|
-
data[session] = entries
|
|
167
|
+
data.delete_at(index)
|
|
176
168
|
write_log(data)
|
|
177
169
|
next
|
|
178
170
|
end
|
|
@@ -180,23 +172,19 @@ Hiiro.run(*ARGV, tasks: true) do
|
|
|
180
172
|
tmux_client.select_window(entry['window_id'])
|
|
181
173
|
tmux_client.select_pane(entry['pane_id'])
|
|
182
174
|
|
|
183
|
-
|
|
184
|
-
data[session] = entries
|
|
175
|
+
data.delete_at(index)
|
|
185
176
|
write_log(data)
|
|
186
177
|
end
|
|
187
178
|
|
|
188
179
|
add_subcmd(:clear) do
|
|
189
|
-
|
|
190
|
-
data = read_log
|
|
191
|
-
data.delete(session)
|
|
192
|
-
write_log(data)
|
|
180
|
+
write_log([])
|
|
193
181
|
end
|
|
194
182
|
|
|
195
183
|
# Called by tmux hook: after-kill-pane
|
|
196
184
|
add_subcmd(:remove_pane) do |pane_id = nil|
|
|
197
185
|
next unless pane_id
|
|
198
186
|
data = read_log
|
|
199
|
-
data.
|
|
187
|
+
data.reject! { |e| e['pane_id'] == pane_id }
|
|
200
188
|
write_log(data)
|
|
201
189
|
end
|
|
202
190
|
|
|
@@ -204,7 +192,7 @@ Hiiro.run(*ARGV, tasks: true) do
|
|
|
204
192
|
add_subcmd(:remove_window) do |window_id = nil|
|
|
205
193
|
next unless window_id
|
|
206
194
|
data = read_log
|
|
207
|
-
data.
|
|
195
|
+
data.reject! { |e| e['window_id'] == window_id }
|
|
208
196
|
write_log(data)
|
|
209
197
|
end
|
|
210
198
|
|
|
@@ -212,7 +200,7 @@ Hiiro.run(*ARGV, tasks: true) do
|
|
|
212
200
|
add_subcmd(:remove_session) do |sess = nil|
|
|
213
201
|
next unless sess
|
|
214
202
|
data = read_log
|
|
215
|
-
data.
|
|
203
|
+
data.reject! { |e| e['session'] == sess }
|
|
216
204
|
write_log(data)
|
|
217
205
|
end
|
|
218
206
|
|
data/lib/hiiro/version.rb
CHANGED
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.
|
|
4
|
+
version: 0.1.303
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Joshua Toyota
|
|
@@ -330,7 +330,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
330
330
|
- !ruby/object:Gem::Version
|
|
331
331
|
version: '0'
|
|
332
332
|
requirements: []
|
|
333
|
-
rubygems_version:
|
|
333
|
+
rubygems_version: 3.6.9
|
|
334
334
|
specification_version: 4
|
|
335
335
|
summary: A lightweight CLI framework for Ruby
|
|
336
336
|
test_files: []
|