hiiro 0.1.105.pre.4 → 0.1.105
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/exe/h +1 -1
- data/lib/hiiro/queue.rb +84 -5
- data/lib/hiiro/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ed2ec948d47eefe0c380d4d356ff55d7b2542bd40d47b797d93ce75301a2f843
|
|
4
|
+
data.tar.gz: 72df03eb994937c6b77284075711b7c6b8554a71da9f5527013edda8bd2bd55b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 07cc2ba096b090a981b7a01c23813aeb46b3f44f5b8952e1582f05aa89d57a29382085f4fc81ec91d2171a12d7e140fd0014cb1e63c1baafb7a707b31cd4dadc
|
|
7
|
+
data.tar.gz: f778710abfc26fe7d6d89ad688dabe99efae892cad21daa6184d456d48cddb605ffc11c9eadcd9b06758fead837bd9d84cf827555cddbac94e7875a97614edf8
|
data/exe/h
CHANGED
data/lib/hiiro/queue.rb
CHANGED
|
@@ -114,12 +114,13 @@ class Hiiro
|
|
|
114
114
|
# Run claude interactively in tmux window, then cleanup on exit
|
|
115
115
|
shell_cmd = "cd #{Shellwords.shellescape(working_dir)} && claude #{Shellwords.shellescape(prompt_text)}; HQ_EXIT=$?; #{cleanup_ruby}; exec #{ENV['SHELL'] || 'zsh'}"
|
|
116
116
|
|
|
117
|
-
|
|
117
|
+
win_name = short_window_name(name)
|
|
118
|
+
system('tmux', 'new-window', '-d', '-t', target_session, '-n', win_name, '-c', working_dir, shell_cmd)
|
|
118
119
|
|
|
119
120
|
# Write meta sidecar
|
|
120
121
|
meta = {
|
|
121
122
|
'tmux_session' => target_session,
|
|
122
|
-
'tmux_window' =>
|
|
123
|
+
'tmux_window' => win_name,
|
|
123
124
|
'started_at' => Time.now.iso8601,
|
|
124
125
|
'working_dir' => working_dir,
|
|
125
126
|
}
|
|
@@ -130,7 +131,24 @@ class Hiiro
|
|
|
130
131
|
end
|
|
131
132
|
File.write(File.join(dirs[:running], "#{name}.meta"), meta.to_yaml)
|
|
132
133
|
|
|
133
|
-
puts "Launched: #{name} [#{target_session}]"
|
|
134
|
+
puts "Launched: #{name} [#{target_session}:#{win_name}]"
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def short_window_name(name)
|
|
138
|
+
base = name[0, 8]
|
|
139
|
+
return base unless existing_window_name?(base)
|
|
140
|
+
|
|
141
|
+
# append digits to make unique
|
|
142
|
+
(2..99).each do |i|
|
|
143
|
+
candidate = "#{base[0, 7]}#{i}"
|
|
144
|
+
return candidate unless existing_window_name?(candidate)
|
|
145
|
+
end
|
|
146
|
+
base
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def existing_window_name?(wname)
|
|
150
|
+
windows = `tmux list-windows -a -F '#\{window_name\}' 2>/dev/null`.lines(chomp: true)
|
|
151
|
+
windows.include?(wname)
|
|
134
152
|
end
|
|
135
153
|
|
|
136
154
|
def slugify(text)
|
|
@@ -262,7 +280,8 @@ class Hiiro
|
|
|
262
280
|
if name
|
|
263
281
|
meta = q.meta_for(name, :running)
|
|
264
282
|
session = meta&.[]('tmux_session') || TMUX_SESSION
|
|
265
|
-
|
|
283
|
+
win = meta&.[]('tmux_window') || name
|
|
284
|
+
exec('tmux', 'select-window', '-t', "#{session}:#{win}")
|
|
266
285
|
end
|
|
267
286
|
}
|
|
268
287
|
|
|
@@ -307,6 +326,65 @@ class Hiiro
|
|
|
307
326
|
end
|
|
308
327
|
}
|
|
309
328
|
|
|
329
|
+
h.add_subcmd(:wip) { |name = nil|
|
|
330
|
+
q.queue_dirs
|
|
331
|
+
editor = ENV['EDITOR'] || 'vim'
|
|
332
|
+
|
|
333
|
+
if name.nil?
|
|
334
|
+
existing = q.tasks_in(:wip)
|
|
335
|
+
if existing.any?
|
|
336
|
+
name = h.fuzzyfind(existing)
|
|
337
|
+
next unless name
|
|
338
|
+
else
|
|
339
|
+
puts "No wip tasks. Provide a name to create one."
|
|
340
|
+
next
|
|
341
|
+
end
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
name = name.sub(/\.md$/, '')
|
|
345
|
+
path = File.join(q.queue_dirs[:wip], "#{name}.md")
|
|
346
|
+
|
|
347
|
+
unless File.exist?(path)
|
|
348
|
+
# Pre-fill with frontmatter if task_info available
|
|
349
|
+
if task_info
|
|
350
|
+
fm_lines = ["---"]
|
|
351
|
+
fm_lines << "task_name: #{task_info[:task_name]}" if task_info[:task_name]
|
|
352
|
+
fm_lines << "tree_name: #{task_info[:tree_name]}" if task_info[:tree_name]
|
|
353
|
+
fm_lines << "session_name: #{task_info[:session_name]}" if task_info[:session_name]
|
|
354
|
+
fm_lines << "---"
|
|
355
|
+
fm_lines << ""
|
|
356
|
+
File.write(path, fm_lines.join("\n"))
|
|
357
|
+
end
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
system(editor, path)
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
h.add_subcmd(:ready) { |name = nil|
|
|
364
|
+
wip = q.tasks_in(:wip)
|
|
365
|
+
if wip.empty?
|
|
366
|
+
puts "No wip tasks"
|
|
367
|
+
next
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
if name.nil?
|
|
371
|
+
name = wip.size == 1 ? wip.first : h.fuzzyfind(wip)
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
next unless name
|
|
375
|
+
|
|
376
|
+
name = name.sub(/\.md$/, '')
|
|
377
|
+
src = File.join(q.queue_dirs[:wip], "#{name}.md")
|
|
378
|
+
unless File.exist?(src)
|
|
379
|
+
puts "Wip task not found: #{name}"
|
|
380
|
+
next
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
dst = File.join(q.queue_dirs[:pending], "#{name}.md")
|
|
384
|
+
FileUtils.mv(src, dst)
|
|
385
|
+
puts "Moved to pending: #{name}"
|
|
386
|
+
}
|
|
387
|
+
|
|
310
388
|
h.add_subcmd(:kill) { |name = nil|
|
|
311
389
|
running = q.tasks_in(:running)
|
|
312
390
|
if running.empty?
|
|
@@ -322,7 +400,8 @@ class Hiiro
|
|
|
322
400
|
|
|
323
401
|
meta = q.meta_for(name, :running)
|
|
324
402
|
session = meta&.[]('tmux_session') || TMUX_SESSION
|
|
325
|
-
|
|
403
|
+
win = meta&.[]('tmux_window') || name
|
|
404
|
+
system('tmux', 'kill-window', '-t', "#{session}:#{win}")
|
|
326
405
|
|
|
327
406
|
dirs = q.queue_dirs
|
|
328
407
|
md = File.join(dirs[:running], "#{name}.md")
|
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.105
|
|
4
|
+
version: 0.1.105
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Joshua Toyota
|
|
@@ -164,9 +164,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
164
164
|
version: 2.7.0
|
|
165
165
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
166
|
requirements:
|
|
167
|
-
- - "
|
|
167
|
+
- - ">="
|
|
168
168
|
- !ruby/object:Gem::Version
|
|
169
|
-
version:
|
|
169
|
+
version: '0'
|
|
170
170
|
requirements: []
|
|
171
171
|
rubygems_version: 3.3.7
|
|
172
172
|
signing_key:
|