Class: Harnex::Doctor

Inherits:
Object
  • Object
show all
Defined in:
lib/harnex/commands/doctor.rb

Constant Summary collapse

MIN_CODEX_VERSION =
Gem::Version.new("0.128.0")

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(argv = []) ⇒ Doctor

Returns a new instance of Doctor.



38
39
40
41
42
43
44
45
46
# File 'lib/harnex/commands/doctor.rb', line 38

def initialize(argv = [])
  @argv = argv.dup
  @options = {
    sweep: false,
    prune: false,
    dry_run: false,
    help: false
  }
end

Class Method Details

.usageObject



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/harnex/commands/doctor.rb', line 8

def self.usage
  <<~TEXT
    Usage: harnex doctor [--sweep] [--prune [--dry-run]]

    Runs preflight checks for harnex's adapter dependencies.
    Currently verifies that Codex CLI is installed and at version
    >= #{MIN_CODEX_VERSION} (required for the JSON-RPC `app-server`
    adapter).

    Options:
      --sweep      Include a read-only report of harnex/tmux session drift
      --prune      Apply bounded harnex events/output retention pruning
      --dry-run    Preview --prune candidates without deleting
      -h, --help   Show this help

    Common patterns:
      harnex doctor
      harnex doctor --sweep
      harnex doctor --prune --dry-run
      harnex doctor --prune
      harnex doctor --help

    Gotchas:
      doctor validates local adapter prerequisites; it does not start sessions.
      --sweep is diagnostic only; it does not stop sessions or remove files.
      --dry-run must be paired with --prune.
      Run it after installing or upgrading Codex CLI.
  TEXT
end

Instance Method Details

#runObject



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/harnex/commands/doctor.rb', line 48

def run
  parser.parse!(@argv)
  validate_options!
  if @options[:help]
    puts self.class.usage
    return 0
  end

  checks = [check_codex]
  retention = retention_payload
  summary = {
    ok: checks.all? { |c| c[:ok] } && retention.fetch(:ok, true),
    checks: checks,
    retention: retention
  }
  summary[:sweep] = sweep_payload if @options[:sweep]
  puts JSON.generate(summary)
  summary[:ok] ? 0 : 1
end