@lmctl-ai/lmctl 0.1.85 → 0.1.87

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,48 @@
2
2
 
3
3
  All notable public-preview changes for `@lmctl-ai/lmctl` are recorded here.
4
4
 
5
+ ## 0.1.87 — 2026-07-07
6
+
7
+ - **`lmctl wait`/`lmctl exec` are now the synchronous wake model, on a new
8
+ `tracked_invocation` substrate.** Every backgrounded lmctl invocation records
9
+ a start row and a finish row; `lmctl wait` blocks on those rows and returns the
10
+ instant the first one in scope finishes (reporting which completed and which
11
+ are still running). `lmctl exec -- <command>` runs any shell command as a
12
+ tracked invocation, and a backgrounded `lmctl chat … --from "<teamfile>:Lead"`
13
+ is tracked the same way — so `cmd & lmctl wait` is the wake for chats and
14
+ arbitrary commands alike. This replaces the fragile "reserve one blocking job
15
+ as the wake" (N−1/1) pattern; all N launches go to the background and `wait` is
16
+ the single return-point.
17
+ - **Removed `lmctl chat --detach`, `lmctl jobs`, `lmctl nudge`, and turn-exit
18
+ auto-delivery.** The old detached-worker / `delegation_job` background model is
19
+ gone, along with its per-provider (codex/gemini) poll special-casing — every
20
+ provider now uses the same background-then-`wait` loop. The legacy
21
+ `delegation_job` / `delegation_event` tables are **kept dormant** for existing
22
+ DB compatibility (no destructive migration); only the active code paths were
23
+ removed.
24
+ - **`wait` is robust against the failure modes of a fire-and-forget loop.** A
25
+ phantom `running` row whose process died without writing a finish is reclaimed
26
+ as `error` (dead/stale holder detection) instead of hanging `wait` forever; an
27
+ appearance-grace poll covers the `cmd & lmctl wait` insert-lag race; and
28
+ `lmctl exec --json` prints its invocation id so `lmctl wait --id <id>` gives a
29
+ zero-race handshake. Scopes: default (caller, via `LMCTL_SELF_SESSIONID`),
30
+ `--from`, `<teamfile>`, `--all`, `--id`; exit `0` completed/idle, `1` timeout
31
+ (8h backstop), `2` usage. A single `idle` return means "nothing running right
32
+ now", not "done" — loop `wait`.
33
+
34
+ ## 0.1.86 — 2026-07-07
35
+
36
+ - **New `lmctl wait` — the wake primitive for the meta-lead orchestration loop.**
37
+ Dispatch N tracked background jobs (`lmctl chat --detach`), then `lmctl wait`
38
+ blocks (polling `delegation_job`) and returns the moment the first snapshot job
39
+ finishes — reporting which completed and which of that snapshot are still in
40
+ flight. Defaults to the caller's own dispatched jobs (`--all` widens, a
41
+ `<teamfile>` positional scopes); returns `idle` when nothing is in flight (so
42
+ the loop knows to pull fresh work from its queue); no default timeout
43
+ (`--timeout` optional); polls every 3s (`--interval`). It burns no tokens while
44
+ blocked and works across all providers. Replaces the fragile "reserve one
45
+ blocking job as the wake" (N-1/1) pattern.
46
+
5
47
  ## 0.1.85 — 2026-07-07
6
48
 
7
49
  - **lmplayer: a delegation job that completes with empty output is no longer
package/README.md CHANGED
@@ -49,16 +49,17 @@ lmctl chat ./my-project/my-project.lmctl Lead "Inspect the repo and propose next
49
49
  ```
50
50
 
51
51
  Start with `lmctl run <url>` for published workflows. For a custom AI-Lead team,
52
- use the plan -> lint -> seed -> chat flow. Use provider-native background
53
- execution for long turns, with `lmctl jobs` as the tracked work portal. Daemon,
54
- web, API, and MCP surfaces are secondary integration paths; the CLI/job portal
55
- is the golden path for onboarding.
52
+ use the plan -> lint -> seed -> chat flow. For long turns, background a tracked
53
+ invocation (`lmctl exec -- <command> &` or a backgrounded `lmctl chat`) and let
54
+ `lmctl wait` block until it finishes that return is the wake. Daemon, web, API,
55
+ and MCP surfaces are secondary integration paths; the CLI is the golden path for
56
+ onboarding.
56
57
  Lintable teamfile templates for research, writing, and review teams ship in the
57
58
  [examples gallery](https://lmctl.com/examples/).
58
59
 
59
- `lmctl` top-level subcommands are: `api`, `chat`, `code`, `serve`, `intake`,
60
- `mcp`, `monitor`, `device`, `team`, `terminal`, `tail`, `health`, `jobs`,
61
- `nudge`, `recover`, `ls`, `lint`, `seed`, `hire`, `refresh`, `clone`, `plan`, `workflow`,
60
+ `lmctl` top-level subcommands are: `api`, `chat`, `loop`, `code`, `serve`, `intake`,
61
+ `mcp`, `monitor`, `device`, `team`, `terminal`, `tail`, `health`, `wait`,
62
+ `exec`, `recover`, `ls`, `lint`, `seed`, `hire`, `refresh`, `clone`, `plan`, `workflow`,
62
63
  `run`, `project`, `workspace`, `diagnose`, `diagnose-prompt`, `status`, and
63
64
  `db`. Run `lmctl <command> --help` for details on each, and see the
64
65
  [documentation](https://lmctl.com/lmctl) to define your first team.