@lmctl-ai/lmctl 0.1.158 → 0.1.160

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.
@@ -5,8 +5,18 @@
5
5
  # checks. Keep chapter plans and decisions in durable-memory/ so refreshed
6
6
  # sessions can recover the book state.
7
7
  # Suggested flow:
8
- # lmctl chat book-team.lmctl Lead "Draft chapter 1 from durable-memory/outline.md" --detach
9
- # lmctl jobs watch <job_id>
8
+ # lmctl chat book-team.lmctl Lead "Draft chapter 1 from durable-memory/outline.md"
9
+ #
10
+ # lmctl chat is synchronous but does not always wait for a reply: when the
11
+ # receiver is free the message is delivered and chat blocks for the reply; when
12
+ # the receiver is BUSY the message is enqueued and chat returns immediately.
13
+ # Both cases exit 0, so exit code alone cannot tell you a reply arrived.
14
+ # Check with --json: status="ok" is a delivered reply (with replyText),
15
+ # status="enqueued" means it was queued. lmctl status shows pending lanes.
16
+ #
17
+ # For async, lmctl is foreground/background agnostic: wrap the same command in
18
+ # your provider or host runtime's native background facility (e.g. Claude
19
+ # background Bash) rather than an lmctl flag.
10
20
 
11
21
  _MEMBER_ alias=Lead provider=claude
12
22
  _MEMBER_ alias=Outliner provider=claude
@@ -5,8 +5,18 @@
5
5
  # ask Critic to identify weak evidence or contradictions, then have Synthesizer
6
6
  # merge the strongest findings into a concise response.
7
7
  # Suggested flow:
8
- # lmctl chat research-team.lmctl Lead "Research <question>" --detach
9
- # lmctl jobs watch <job_id>
8
+ # lmctl chat research-team.lmctl Lead "Research <question>"
9
+ #
10
+ # lmctl chat is synchronous but does not always wait for a reply: when the
11
+ # receiver is free the message is delivered and chat blocks for the reply; when
12
+ # the receiver is BUSY the message is enqueued and chat returns immediately.
13
+ # Both cases exit 0, so exit code alone cannot tell you a reply arrived.
14
+ # Check with --json: status="ok" is a delivered reply (with replyText),
15
+ # status="enqueued" means it was queued. lmctl status shows pending lanes.
16
+ #
17
+ # For async, lmctl is foreground/background agnostic: wrap the same command in
18
+ # your provider or host runtime's native background facility (e.g. Claude
19
+ # background Bash) rather than an lmctl flag.
10
20
 
11
21
  _MEMBER_ alias=Lead provider=claude
12
22
  _MEMBER_ alias=Researcher1 provider=codex
@@ -5,8 +5,18 @@
5
5
  # reviews, asks SecurityReviewer for trust-boundary concerns when relevant, and
6
6
  # routes findings back to Author before final signoff.
7
7
  # Suggested flow:
8
- # lmctl chat review-team.lmctl Lead "Implement <task> and get review signoff" --detach
9
- # lmctl jobs watch <job_id>
8
+ # lmctl chat review-team.lmctl Lead "Implement <task> and get review signoff"
9
+ #
10
+ # lmctl chat is synchronous but does not always wait for a reply: when the
11
+ # receiver is free the message is delivered and chat blocks for the reply; when
12
+ # the receiver is BUSY the message is enqueued and chat returns immediately.
13
+ # Both cases exit 0, so exit code alone cannot tell you a reply arrived.
14
+ # Check with --json: status="ok" is a delivered reply (with replyText),
15
+ # status="enqueued" means it was queued. lmctl status shows pending lanes.
16
+ #
17
+ # For async, lmctl is foreground/background agnostic: wrap the same command in
18
+ # your provider or host runtime's native background facility (e.g. Claude
19
+ # background Bash) rather than an lmctl flag.
10
20
 
11
21
  _MEMBER_ alias=Lead provider=claude
12
22
  _MEMBER_ alias=Author provider=codex
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lmctl-ai/lmctl",
3
- "version": "0.1.158",
3
+ "version": "0.1.160",
4
4
  "description": "A provider-agnostic control plane for teams of AI coding agents — across providers, with independent review and durable memory.",
5
5
  "type": "module",
6
6
  "homepage": "https://lmctl.com",
@@ -1,50 +0,0 @@
1
- ---
2
- name: example-test
3
- description: Replace with a one-line description of what this test verifies
4
- type: smoke
5
- tags: [example]
6
- last_run_at: never
7
- last_run_status: unknown
8
- last_run_id: 0
9
- ---
10
-
11
- # Test: example
12
-
13
- Replace this content with your real test case. The structure below is what the QA Tester agent expects.
14
-
15
- ## Setup
16
-
17
- Describe what the system state must be before running this test. Examples:
18
- - A project exists with a configured team
19
- - An image fixture is present at a known path
20
- - The serve daemon is running on $LMCTL_API_URL
21
-
22
- Use shell-style commands (the Tester will execute them) or describe in prose if manual steps are needed.
23
-
24
- ## Action
25
-
26
- What the test actually does. Be specific about commands, inputs, and expected intermediate observations.
27
-
28
- ```bash
29
- # Example action
30
- curl -X GET $LMCTL_API_URL/api/status \
31
- -H "Authorization: Bearer $LMCTL_API_TOKEN"
32
- ```
33
-
34
- ## Expected
35
-
36
- What "pass" looks like:
37
- - HTTP 200 response
38
- - JSON body contains key `jobs` with `total >= 0`
39
- - Response time under 1 second
40
-
41
- The Interpreter agent reads this section + the Action's actual observations to emit STANCE: pass / fail / inconclusive.
42
-
43
- ## Cleanup
44
-
45
- Idempotent cleanup steps. Should be safe to run even if Setup or Action failed.
46
-
47
- ```bash
48
- # Example cleanup
49
- # (nothing to clean up for this read-only example)
50
- ```
@@ -1,27 +0,0 @@
1
- # AI Test Suite - index
2
-
3
- This directory holds **AI-driven manual tests** for this project. Each chapter (`*.md`) describes one test case that an LLM agent (the QA Tester) executes; an Interpreter agent judges pass/fail.
4
-
5
- **This is NOT for unit/integration tests** - those live in `tests/` and run via your test framework (e.g., `npm test`). `ai-test/` is for things that need LLM-quality judgment: vision quality, prompt-driven behavior, end-to-end scenarios that exercise the full stack.
6
-
7
- ## Conventions
8
-
9
- - One test case per `.md` file
10
- - YAML frontmatter (agent-writable: `last_run_*` fields)
11
- - Markdown body sections: `## Setup`, `## Action`, `## Expected`, `## Cleanup`
12
- - Issues found by qa-suite reference the chapter via `ai_test_path` (e.g. `ai-test/test-image-upload-basic.md`)
13
-
14
- ## Test cases
15
-
16
- See individual chapters in this directory. Use `grep -l 'type: smoke' ai-test/*.md` (etc.) to filter.
17
-
18
- ## How to add a new test case
19
-
20
- 1. Copy a chapter as a template: `cp ai-test/example-test.md ai-test/test-my-new-case.md`
21
- 2. Edit frontmatter (name, description, type, tags)
22
- 3. Edit body (Setup, Action, Expected, Cleanup)
23
- 4. Commit alongside the code change that motivated the test
24
-
25
- ## Pointer to lmctl's own ai-test/ (canonical example)
26
-
27
- See `<lmctl-repo>/ai-test/` for the test corpus used to verify lmctl itself.