@lmctl-ai/lmctl 0.1.96 → 0.1.97

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,26 @@
2
2
 
3
3
  All notable public-preview changes for `@lmctl-ai/lmctl` are recorded here.
4
4
 
5
+ ## 0.1.97 — 2026-07-10
6
+
7
+ - **`lmctl chat` now carries the mailbox queue; `lmctl send` is removed.** One verb. Chatting a
8
+ member that is **busy** enqueues the message into that `(sender, receiver)` lane instead of
9
+ failing. Chatting a member that is **idle** delivers *all* of your queued messages to it **plus**
10
+ the new one, together in a single turn (FIFO, new message last), and records the member's response
11
+ as the delivery receipt. `lmctl send` now errors with `unknown command: send (use lmctl chat)`.
12
+ - **Queue key is `(sender, receiver)`.** A chat only ever drains your own lane to that member — it
13
+ never touches another sender's queued mail. Delivery marks rows delivered (it does not delete
14
+ them), so a crash before marking re-delivers rather than loses (at-least-once).
15
+ - **One `busy` predicate.** `isReceiverBusy` (terminal-lock + live-holder inflight, reusing the
16
+ 0.1.52 reclaim rule) is now the single source of truth, so `chat`'s routing can no longer disagree
17
+ with itself and drop a message.
18
+ - **`lmctl wait` no longer misses or double-reports completions.** It now claims a finished tracked
19
+ invocation by time (`ended_at >= wait_started_at`) with an atomic marker, so a job that starts and
20
+ finishes inside the wait's startup window is still reported, and two concurrent waits never both
21
+ report the same completion.
22
+ - Migration v47 adds `agent_mailbox.delivered_at`/`receipt` and `tracked_invocation.notified_by`/
23
+ `notified_at`, guarded so a fresh database and a migrated one produce identical tables.
24
+
5
25
  ## 0.1.96 — 2026-07-10
6
26
 
7
27
  - **Fixed: 0.1.95 silently stopped recording `team_chat_log`.** The chat-log INSERT omitted the
package/README.md CHANGED
@@ -57,14 +57,14 @@ 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`, `recv`, `loop`, `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.
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
68
  - `lmctl recv` drains the calling Lead's mailbox consume-on-read, inferred from `LMCTL_SELF_SESSIONID`.
69
69
 
70
70
  ## Model selection