@armstrongnate/april 0.0.7 → 0.0.8

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.
package/README.md CHANGED
@@ -149,6 +149,12 @@ After editing:
149
149
  - **Linux** uses systemd user services at `~/.config/systemd/user/april.service`. Logs go to the journal (`journalctl --user -u april`).
150
150
  - **macOS** uses launchd LaunchAgents at `~/Library/LaunchAgents/dev.april.daemon.plist`. Logs go to `~/Library/Logs/april/april.log`.
151
151
 
152
+ ### Restarts and tmux sessions
153
+
154
+ The unit/plist sets `KillMode=process` (systemd) / `AbandonProcessGroup=true` (launchd), which means `april restart` only signals the daemon itself — tmux sessions and the Claude processes inside them keep running. The daemon's shutdown handler explicitly terminates the `gh webhook forward` children before exiting.
155
+
156
+ If the daemon ever has to be SIGKILLed (it hung past the systemd stop timeout), the forwarders will be orphaned to PID 1. Clean them up with `pkill -f 'gh webhook forward'`.
157
+
152
158
  ### Node version managers
153
159
 
154
160
  `april install` captures the absolute path of the `node` binary it was invoked with (e.g. `~/.nvm/versions/node/v22.x.x/bin/node`) and bakes it into the unit/plist. If you later remove or change that node version, the service will fail to start — re-run `april install` after switching.
@@ -58,6 +58,11 @@ ${envEntries}
58
58
  <string>${escapeXml(log)}</string>
59
59
  <key>ProcessType</key>
60
60
  <string>Background</string>
61
+ <!-- launchd's equivalent of systemd's KillMode=process: when the daemon
62
+ exits, don't kill children that share its process group. Keeps tmux
63
+ sessions and any in-flight Claude work alive across restarts. -->
64
+ <key>AbandonProcessGroup</key>
65
+ <true/>
61
66
  </dict>
62
67
  </plist>
63
68
  `;
@@ -32,6 +32,10 @@ Environment=NODE_ENV=production
32
32
  EnvironmentFile=-${envFilePath()}
33
33
  StandardOutput=journal
34
34
  StandardError=journal
35
+ # Only signal the main process on stop; leave tmux sessions and any other
36
+ # children running so an april restart doesn't trash in-flight Claude work.
37
+ # The daemon's own shutdown handler still SIGTERMs the gh webhook forwarders.
38
+ KillMode=process
35
39
 
36
40
  [Install]
37
41
  WantedBy=default.target
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@armstrongnate/april",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "description": "She does all the work so you don't have to. Watches GitHub issues and spawns Claude Code sessions to work them.",
5
5
  "type": "module",
6
6
  "bin": {