repos / zmx

session persistence for terminal processes
git clone https://github.com/neurosnap/zmx.git

commit
b2833e7
parent
be4cb72
author
Eric Bower
date
2026-03-03 23:42:30 -0500 EST
chore(list): changed key names and made formatting more stable
2 files changed,  +21, -17
M CHANGELOG.md
+8, -4
 1@@ -4,12 +4,16 @@ Use spec: https://common-changelog.org/
 2 
 3 ## Staged
 4 
 5+### Changed
 6+
 7+- `zmx list` renamed keys and made formatting more stable
 8+
 9 ### Fixed
10 
11-- Run command stdin regression with ZMX_TASK_COMPLETED
12-- Run command when no client is attached, send DA response query from daemon
13-- Run command re-quote when using shell meta chars
14-- Wait command use-after-free
15+- `zmx run` stdin regression with ZMX_TASK_COMPLETED
16+- `zmx run` when no client is attached, send DA response query from daemon
17+- `zmx run` re-quote when using shell meta chars
18+- `zmx wait` use-after-free
19 
20 ## v0.4.1 - 2026-02-23
21 
M src/main.zig
+13, -13
 1@@ -1804,7 +1804,7 @@ fn writeSessionLine(writer: *std.Io.Writer, session: SessionEntry, short: bool,
 2     }
 3 
 4     if (session.is_error) {
 5-        try writer.print("{s}session_name={s}\tstatus={s}\t(cleaning up)\n", .{
 6+        try writer.print("{s}name={s}\terr={s}\tstatus=cleaning up\n", .{
 7             prefix,
 8             session.name,
 9             session.error_name.?,
10@@ -1812,28 +1812,28 @@ fn writeSessionLine(writer: *std.Io.Writer, session: SessionEntry, short: bool,
11         return;
12     }
13 
14-    try writer.print("{s}session_name={s}\tpid={d}\tclients={d}\tcreated_at={d}", .{
15+    try writer.print("{s}name={s}\tpid={d}\tclients={d}\tcreated={d}", .{
16         prefix,
17         session.name,
18         session.pid.?,
19         session.clients_len.?,
20         session.created_at,
21     });
22+    if (session.cwd) |cwd| {
23+        try writer.print("\tstart_dir={s}", .{cwd});
24+    }
25+    if (session.cmd) |cmd| {
26+        try writer.print("\tcmd={s}", .{cmd});
27+    }
28     if (session.task_ended_at) |ended_at| {
29         if (ended_at > 0) {
30-            try writer.print("\ttask_ended_at={d}", .{ended_at});
31+            try writer.print("\tended={d}", .{ended_at});
32 
33             if (session.task_exit_code) |exit_code| {
34-                try writer.print("\ttask_exit_code={d}", .{exit_code});
35+                try writer.print("\texit_code={d}", .{exit_code});
36             }
37         }
38     }
39-    if (session.cwd) |cwd| {
40-        try writer.print("\tstarted_in={s}", .{cwd});
41-    }
42-    if (session.cmd) |cmd| {
43-        try writer.print("\tcmd={s}", .{cmd});
44-    }
45     try writer.print("\n", .{});
46 }
47 
48@@ -1947,19 +1947,19 @@ test "writeSessionLine formats output for current session and short output" {
49             .session = session,
50             .short = false,
51             .current_session = "dev",
52-            .expected = "→ session_name=dev\tpid=123\tclients=2\tcreated_at=0\n",
53+            .expected = "→ name=dev\tpid=123\tclients=2\tcreated=0\n",
54         },
55         .{
56             .session = session,
57             .short = false,
58             .current_session = "other",
59-            .expected = "  session_name=dev\tpid=123\tclients=2\tcreated_at=0\n",
60+            .expected = "  name=dev\tpid=123\tclients=2\tcreated=0\n",
61         },
62         .{
63             .session = session,
64             .short = false,
65             .current_session = null,
66-            .expected = "session_name=dev\tpid=123\tclients=2\tcreated_at=0\n",
67+            .expected = "name=dev\tpid=123\tclients=2\tcreated=0\n",
68         },
69         .{
70             .session = session,