@lmctl-ai/lmctl 0.1.80 → 0.1.82
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/README.md +13 -1
- package/dist/cli/index.js +770 -726
- package/dist/cli/schema.sql +12 -1
- package/examples/README.md +25 -0
- package/examples/book-team.lmctl +15 -0
- package/examples/opencode.json +24 -58
- package/examples/research-team.lmctl +15 -0
- package/examples/review-team.lmctl +15 -0
- package/package.json +1 -2
package/dist/cli/schema.sql
CHANGED
|
@@ -672,7 +672,8 @@ CREATE TABLE IF NOT EXISTS delegation_job (
|
|
|
672
672
|
attempt_count INTEGER NOT NULL DEFAULT 0,
|
|
673
673
|
permission_mode TEXT,
|
|
674
674
|
idle_timeout_ms INTEGER,
|
|
675
|
-
delivered_at TEXT
|
|
675
|
+
delivered_at TEXT,
|
|
676
|
+
meta TEXT
|
|
676
677
|
);
|
|
677
678
|
CREATE INDEX IF NOT EXISTS idx_delegation_job_status_created
|
|
678
679
|
ON delegation_job(status, created_at DESC);
|
|
@@ -690,3 +691,13 @@ CREATE TABLE IF NOT EXISTS delegation_event (
|
|
|
690
691
|
);
|
|
691
692
|
CREATE INDEX IF NOT EXISTS idx_delegation_event_job_id
|
|
692
693
|
ON delegation_event(delegation_job_id, id);
|
|
694
|
+
|
|
695
|
+
-- v43: generic runtime checkpoint substrate for meta-lead/toolkit state.
|
|
696
|
+
CREATE TABLE IF NOT EXISTS runtime_state (
|
|
697
|
+
scope TEXT NOT NULL,
|
|
698
|
+
key TEXT NOT NULL,
|
|
699
|
+
kind TEXT NOT NULL,
|
|
700
|
+
data TEXT NOT NULL,
|
|
701
|
+
updated_at TEXT NOT NULL,
|
|
702
|
+
PRIMARY KEY(scope, key, kind)
|
|
703
|
+
);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# lmctl Examples
|
|
2
|
+
|
|
3
|
+
This directory contains public examples that are safe to copy into a project and
|
|
4
|
+
customize. Teamfiles are intentionally unseeded: run `lmctl lint` first, edit
|
|
5
|
+
providers or models if needed, then run `lmctl seed` in the target project.
|
|
6
|
+
|
|
7
|
+
## Teamfile Gallery
|
|
8
|
+
|
|
9
|
+
- [`research-team.lmctl`](research-team.lmctl) - fan out a question to multiple
|
|
10
|
+
researchers and consolidate the answer.
|
|
11
|
+
- [`book-team.lmctl`](book-team.lmctl) - plan, draft, edit, and fact-check a
|
|
12
|
+
long-form document or book chapter.
|
|
13
|
+
- [`review-team.lmctl`](review-team.lmctl) - implement code with independent
|
|
14
|
+
review, security review, and repair loops.
|
|
15
|
+
|
|
16
|
+
Validate all checked-in teamfile examples:
|
|
17
|
+
|
|
18
|
+
```sh
|
|
19
|
+
lmctl lint examples/research-team.lmctl
|
|
20
|
+
lmctl lint examples/book-team.lmctl
|
|
21
|
+
lmctl lint examples/review-team.lmctl
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
`opencode.json` is a sample OpenCode model catalog. Copy and adjust it only if
|
|
25
|
+
your teamfile uses `provider=opencode`.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Book Team
|
|
2
|
+
|
|
3
|
+
# Use this team for long-form writing projects. Lead keeps the outline and
|
|
4
|
+
# acceptance criteria current, then coordinates drafting, editing, and factual
|
|
5
|
+
# checks. Keep chapter plans and decisions in durable-memory/ so refreshed
|
|
6
|
+
# sessions can recover the book state.
|
|
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>
|
|
10
|
+
|
|
11
|
+
_MEMBER_ alias=Lead provider=claude
|
|
12
|
+
_MEMBER_ alias=Outliner provider=claude
|
|
13
|
+
_MEMBER_ alias=Drafter provider=codex
|
|
14
|
+
_MEMBER_ alias=Editor provider=codex
|
|
15
|
+
_MEMBER_ alias=FactChecker provider=qwen
|
package/examples/opencode.json
CHANGED
|
@@ -99,8 +99,8 @@
|
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
},
|
|
102
|
-
"claude-sonnet-
|
|
103
|
-
"name": "Claude Sonnet
|
|
102
|
+
"claude-sonnet-5": {
|
|
103
|
+
"name": "Claude Sonnet 5",
|
|
104
104
|
"reasoning": true,
|
|
105
105
|
"provider": {
|
|
106
106
|
"npm": "@ai-sdk/github-copilot"
|
|
@@ -108,81 +108,47 @@
|
|
|
108
108
|
"variants": {
|
|
109
109
|
"high": {
|
|
110
110
|
"thinking": {
|
|
111
|
-
"type": "adaptive"
|
|
111
|
+
"type": "adaptive",
|
|
112
|
+
"display": "summarized"
|
|
112
113
|
},
|
|
113
114
|
"effort": "high"
|
|
114
115
|
},
|
|
116
|
+
"xhigh": {
|
|
117
|
+
"thinking": {
|
|
118
|
+
"type": "adaptive",
|
|
119
|
+
"display": "summarized"
|
|
120
|
+
},
|
|
121
|
+
"effort": "xhigh"
|
|
122
|
+
},
|
|
115
123
|
"max": {
|
|
116
124
|
"thinking": {
|
|
117
|
-
"type": "adaptive"
|
|
125
|
+
"type": "adaptive",
|
|
126
|
+
"display": "summarized"
|
|
118
127
|
},
|
|
119
128
|
"effort": "max"
|
|
120
129
|
}
|
|
121
130
|
}
|
|
122
131
|
},
|
|
123
|
-
"
|
|
124
|
-
"name": "
|
|
125
|
-
"provider": {
|
|
126
|
-
"npm": "@ai-sdk/github-copilot"
|
|
127
|
-
}
|
|
128
|
-
},
|
|
129
|
-
"gemini-3.5-flash": {
|
|
130
|
-
"name": "Gemini 3.5 Flash",
|
|
131
|
-
"provider": {
|
|
132
|
-
"npm": "@ai-sdk/github-copilot"
|
|
133
|
-
}
|
|
134
|
-
},
|
|
135
|
-
"gpt-5.5": {
|
|
136
|
-
"name": "GPT-5.5",
|
|
137
|
-
"reasoning": true,
|
|
138
|
-
"provider": {
|
|
139
|
-
"npm": "@ai-sdk/github-copilot"
|
|
140
|
-
},
|
|
141
|
-
"variants": {
|
|
142
|
-
"high": {
|
|
143
|
-
"reasoningEffort": "high",
|
|
144
|
-
"reasoningSummary": "auto",
|
|
145
|
-
"include": [
|
|
146
|
-
"reasoning.encrypted_content"
|
|
147
|
-
]
|
|
148
|
-
},
|
|
149
|
-
"xhigh": {
|
|
150
|
-
"reasoningEffort": "xhigh",
|
|
151
|
-
"reasoningSummary": "auto",
|
|
152
|
-
"include": [
|
|
153
|
-
"reasoning.encrypted_content"
|
|
154
|
-
]
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
|
-
"gpt-5.4": {
|
|
159
|
-
"name": "GPT-5.4",
|
|
132
|
+
"claude-sonnet-4.6": {
|
|
133
|
+
"name": "Claude Sonnet 4.6",
|
|
160
134
|
"reasoning": true,
|
|
161
135
|
"provider": {
|
|
162
136
|
"npm": "@ai-sdk/github-copilot"
|
|
163
137
|
},
|
|
164
138
|
"variants": {
|
|
165
139
|
"high": {
|
|
166
|
-
"
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
]
|
|
140
|
+
"thinking": {
|
|
141
|
+
"type": "adaptive"
|
|
142
|
+
},
|
|
143
|
+
"effort": "high"
|
|
171
144
|
},
|
|
172
|
-
"
|
|
173
|
-
"
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
]
|
|
145
|
+
"max": {
|
|
146
|
+
"thinking": {
|
|
147
|
+
"type": "adaptive"
|
|
148
|
+
},
|
|
149
|
+
"effort": "max"
|
|
178
150
|
}
|
|
179
151
|
}
|
|
180
|
-
},
|
|
181
|
-
"gemini-2.5-pro": {
|
|
182
|
-
"name": "Gemini 2.5 Pro",
|
|
183
|
-
"provider": {
|
|
184
|
-
"npm": "@ai-sdk/github-copilot"
|
|
185
|
-
}
|
|
186
152
|
}
|
|
187
153
|
}
|
|
188
154
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Research Team
|
|
2
|
+
|
|
3
|
+
# Use this team when the operator needs a researched answer with clear caveats.
|
|
4
|
+
# Lead owns the final answer. Delegate independent passes to the researchers,
|
|
5
|
+
# ask Critic to identify weak evidence or contradictions, then have Synthesizer
|
|
6
|
+
# merge the strongest findings into a concise response.
|
|
7
|
+
# Suggested flow:
|
|
8
|
+
# lmctl chat research-team.lmctl Lead "Research <question>" --detach
|
|
9
|
+
# lmctl jobs watch <job_id>
|
|
10
|
+
|
|
11
|
+
_MEMBER_ alias=Lead provider=claude
|
|
12
|
+
_MEMBER_ alias=Researcher1 provider=codex
|
|
13
|
+
_MEMBER_ alias=Researcher2 provider=claude
|
|
14
|
+
_MEMBER_ alias=Critic provider=qwen
|
|
15
|
+
_MEMBER_ alias=Synthesizer provider=codex
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Review Team
|
|
2
|
+
|
|
3
|
+
# Use this team for implementation tasks that need independent review. Lead
|
|
4
|
+
# sends implementation work to Author, asks Reviewer1 and Reviewer2 for separate
|
|
5
|
+
# reviews, asks SecurityReviewer for trust-boundary concerns when relevant, and
|
|
6
|
+
# routes findings back to Author before final signoff.
|
|
7
|
+
# Suggested flow:
|
|
8
|
+
# lmctl chat review-team.lmctl Lead "Implement <task> and get review signoff" --detach
|
|
9
|
+
# lmctl jobs watch <job_id>
|
|
10
|
+
|
|
11
|
+
_MEMBER_ alias=Lead provider=claude
|
|
12
|
+
_MEMBER_ alias=Author provider=codex
|
|
13
|
+
_MEMBER_ alias=Reviewer1 provider=codex
|
|
14
|
+
_MEMBER_ alias=Reviewer2 provider=claude
|
|
15
|
+
_MEMBER_ alias=SecurityReviewer provider=agy
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lmctl-ai/lmctl",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.82",
|
|
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",
|
|
@@ -38,7 +38,6 @@
|
|
|
38
38
|
"hono": "4.6.20",
|
|
39
39
|
"jexl": "^2.3.0",
|
|
40
40
|
"marked": "^18.0.3",
|
|
41
|
-
"node-pty": "^1.1.0",
|
|
42
41
|
"write-excel-file": "^4.1.1",
|
|
43
42
|
"zod": "4.4.3"
|
|
44
43
|
}
|