• 郭阔's avatar
    feat: platform abstraction layer (auto-detect darwin/linux) · 3ac999b0
    郭阔 authored
    - bin/platform.sh: single source of truth for platform differences —
      OS detection (NH_OS override for tests), PATH bootstrap without
      shadowing caller-injected commands, platform default paths, scheduler
      abstraction (systemd timer + systemctl <-> launchd plist + launchctl
      with named entry scripts), file-level disable on darwin (survives
      reboot, one-click recoverable), sed -i / GNU-sed shims, root check
      only on linux, conf loading (EnvironmentFile equivalent)
    - bin/schedule.py: plist parse/write + auto-detect by filename
      (timer/plist/.disabled); schedule sources listing subcommand
    - harvest/continue/daily-digest: drop hardcoded nvm//home/yichu paths,
      self-bootstrap via platform.sh, harvest now loads conf itself
      (run.sh wrapper no longer required)
    - add-source/modify-source: fully cross-platform schedule management
      (plist generation + launchctl on darwin, timer + systemctl on linux)
    - status.sh: cross-platform overview/detail/journal (launchd log on darwin)
    - deploy/migrate: linux-only guard with pointer to setup.sh
    - tests: env-synced platform simulation (NH_OS), fake launchctl suite,
      darwin plist/disable/enable roundtrip tests; new disable contract
      (unload + preserve times) replaces clear-times; 37 tests green
    3ac999b0
platform.sh 15.1 KB