@lmctl-ai/lmctl 0.1.96 → 0.1.98

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/CHANGELOG.md CHANGED
@@ -2,6 +2,42 @@
2
2
 
3
3
  All notable public-preview changes for `@lmctl-ai/lmctl` are recorded here.
4
4
 
5
+ ## 0.1.98 — 2026-07-10
6
+
7
+ - **`lmctl push` — flush your outbound queue.** In daemon-less push mode the sender drives delivery:
8
+ `lmctl push` sequentially delivers all of this node's queued mail to receivers that are currently
9
+ idle (one lane per turn, reusing the same delivery path as `chat`), and skips busy receivers so
10
+ their mail stays queued. It is single-instance per node — a second concurrent `push` is rejected
11
+ as a conflict and delivers nothing.
12
+ - **`lmctl check` — read-only status.** Reports this node's background jobs and its outbound queued
13
+ mail, grouped by `(sender, receiver)` lane with pending counts and each receiver's busy/idle. It
14
+ never delivers, marks, or mutates anything (including creating no tracked invocation).
15
+ - **Removed `lmctl recv` and `lmctl loop`.** In push mode the receiver never pulls (delivery is
16
+ pushed), and `loop` is replaced by launching `lmctl chat`/`lmctl push` in the background and
17
+ waking on `lmctl wait`. Both now error as unknown commands. `wait` is unchanged.
18
+ - The idle-target delivery used by `chat` is now a shared `deliverLane` helper that `push` reuses,
19
+ so the two can't drift.
20
+
21
+ ## 0.1.97 — 2026-07-10
22
+
23
+ - **`lmctl chat` now carries the mailbox queue; `lmctl send` is removed.** One verb. Chatting a
24
+ member that is **busy** enqueues the message into that `(sender, receiver)` lane instead of
25
+ failing. Chatting a member that is **idle** delivers *all* of your queued messages to it **plus**
26
+ the new one, together in a single turn (FIFO, new message last), and records the member's response
27
+ as the delivery receipt. `lmctl send` now errors with `unknown command: send (use lmctl chat)`.
28
+ - **Queue key is `(sender, receiver)`.** A chat only ever drains your own lane to that member — it
29
+ never touches another sender's queued mail. Delivery marks rows delivered (it does not delete
30
+ them), so a crash before marking re-delivers rather than loses (at-least-once).
31
+ - **One `busy` predicate.** `isReceiverBusy` (terminal-lock + live-holder inflight, reusing the
32
+ 0.1.52 reclaim rule) is now the single source of truth, so `chat`'s routing can no longer disagree
33
+ with itself and drop a message.
34
+ - **`lmctl wait` no longer misses or double-reports completions.** It now claims a finished tracked
35
+ invocation by time (`ended_at >= wait_started_at`) with an atomic marker, so a job that starts and
36
+ finishes inside the wait's startup window is still reported, and two concurrent waits never both
37
+ report the same completion.
38
+ - Migration v47 adds `agent_mailbox.delivered_at`/`receipt` and `tracked_invocation.notified_by`/
39
+ `notified_at`, guarded so a fresh database and a migrated one produce identical tables.
40
+
5
41
  ## 0.1.96 — 2026-07-10
6
42
 
7
43
  - **Fixed: 0.1.95 silently stopped recording `team_chat_log`.** The chat-log INSERT omitted the
package/README.md CHANGED
@@ -57,15 +57,16 @@ onboarding.
57
57
  Lintable teamfile templates for research, writing, and review teams ship in the
58
58
  [examples gallery](https://lmctl.com/examples/).
59
59
 
60
- `lmctl` top-level subcommands are: `api`, `chat`, `send`, `recv`, `loop`, `code`, `serve`, `intake`,
60
+ `lmctl` top-level subcommands are: `api`, `chat`, `check`, `push`, `code`, `serve`, `intake`,
61
61
  `mcp`, `monitor`, `device`, `team`, `terminal`, `tail`, `health`, `wait`,
62
62
  `exec`, `recover`, `ls`, `lint`, `seed`, `hire`, `refresh`, `clone`, `plan`, `workflow`,
63
63
  `run`, `project`, `workspace`, `diagnose`, `diagnose-prompt`, `status`, and
64
64
  `db`. Run `lmctl <command> --help` for details on each, and see the
65
65
  [documentation](https://lmctl.com/lmctl) to define your first team.
66
66
 
67
- - `lmctl send <teamfile> <alias> "message"` messages a Lead; enqueues if it is up, falls back to chat if down.
68
- - `lmctl recv` drains the calling Lead's mailbox consume-on-read, inferred from `LMCTL_SELF_SESSIONID`.
67
+ - `lmctl chat <teamfile> <alias> "message"` drives or messages a member; if a member-origin target is busy, chat queues the message for that lane.
68
+ - `lmctl check` shows the calling member's background jobs and outbound queued lanes without mutating anything.
69
+ - `lmctl push` flushes the calling member's outbound queued lanes to idle receivers; busy receivers stay queued.
69
70
 
70
71
  ## Model selection
71
72