overlord-cli 0.2609071220.0 → 0.2609080806.0

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.
@@ -1 +1 @@
1
- 0.3.41
1
+ 0.3.43
@@ -1,4 +1,4 @@
1
- contractVersion: "133"
1
+ contractVersion: "137"
2
2
  componentType: connector
3
3
  componentKey: antigravity
4
4
  label: "Antigravity Connector"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://antigravity.google/schemas/v1/plugin.json",
3
3
  "name": "overlord",
4
- "version": "0.3.41",
4
+ "version": "0.3.43",
5
5
  "description": "Chat-driven access to Overlord mission protocol workflows through skills and MCP.",
6
6
  "author": {
7
7
  "name": "Cooperativ",
@@ -9,4 +9,6 @@ Use this when the prompts are sequential steps toward the same feature or goal.
9
9
  Run:
10
10
  `ovld protocol add-objectives --mission-id <mission_id> --objectives-json '[{"objective":"Step one"},{"objective":"Step two"}]'`
11
11
 
12
+ To assign an agent to the appended objectives, add `"agent":"<id>"` (and optional `"model"`) to each item, or pass `--objective-agent <id>` / `--objective-model <id>` as the default.
13
+
12
14
  Index 0 is the first newly added objective to execute; later indexes queue after it.
@@ -9,6 +9,8 @@ If it already contains flags such as `--title`, `--priority`, `--project-id`, `-
9
9
  Otherwise, treat the argument as the objective text and run:
10
10
  `ovld protocol create --agent antigravity --objectives-json '[{"objective":"<objective>"}]'`
11
11
 
12
+ When the user names an agent for the work, assign it on the objective itself — add `"agent":"<id>"` (and optional `"model"`) to the objectives item, or pass `--objective-agent <id>` / `--objective-model <id>`. Never create the mission and then append a second objective just to name an agent.
13
+
12
14
  If no objective was provided, ask the user for one and stop.
13
15
 
14
16
  After the command succeeds, report the new `MISSION_ID`.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.41",
3
+ "version": "0.3.43",
4
4
  "description": "Overlord mission protocol workflow for Claude Code — attach/update/ask/deliver, slash commands, and hook-driven activity capture.",
5
5
  "author": {
6
6
  "name": "Cooperativ",
@@ -11,5 +11,7 @@ Use this when the prompts are sequential steps toward the same feature or goal.
11
11
  Run:
12
12
  `ovld protocol add-objectives --mission-id <mission_id> --objectives-json '[{"objective":"Step one"},{"objective":"Step two"}]'`
13
13
 
14
+ To assign an agent to the appended objectives, add `"agent":"<id>"` (and optional `"model"`) to each item, or pass `--objective-agent <id>` / `--objective-model <id>` as the default.
15
+
14
16
  Index 0 is the first newly added objective to execute; later indexes queue after it.
15
17
 
@@ -12,6 +12,8 @@ If it already contains flags such as `--title`, `--priority`, `--project-id`, `-
12
12
  Otherwise, treat `$ARGUMENTS` as the objective text and run:
13
13
  `ovld protocol create --agent claude-code --objectives-json '[{"objective":"<objective>"}]'`
14
14
 
15
+ When the user names an agent for the work, assign it on the objective itself — add `"agent":"<id>"` (and optional `"model"`) to the objectives item, or pass `--objective-agent <id>` / `--objective-model <id>`. Never create the mission and then append a second objective just to name an agent.
16
+
15
17
  If no objective was provided, ask the user for one and stop.
16
18
 
17
19
  After the command succeeds, report the new `MISSION_ID`.
@@ -1,4 +1,4 @@
1
- contractVersion: "133"
1
+ contractVersion: "137"
2
2
  componentType: connector
3
3
  componentKey: claude
4
4
  label: "Claude Code Connector"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.41",
3
+ "version": "0.3.43",
4
4
  "description": "Chat-driven access to Overlord mission protocol workflows with hook-driven activity capture.",
5
5
  "author": {
6
6
  "name": "Cooperativ",
@@ -1,4 +1,4 @@
1
- contractVersion: "133"
1
+ contractVersion: "137"
2
2
  componentType: connector
3
3
  componentKey: codex
4
4
  label: "Codex Connector"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.41",
3
+ "version": "0.3.43",
4
4
  "description": "Overlord mission protocol workflow for Cursor — attach/update/ask/deliver, slash commands, MCP bridge, and follow-up capture.",
5
5
  "author": {
6
6
  "name": "Cooperativ",
@@ -5,4 +5,6 @@ Use this when the prompts are sequential steps toward the same feature or goal.
5
5
  Run:
6
6
  `ovld protocol add-objectives --mission-id <mission_id> --objectives-json '[{"objective":"Step one"},{"objective":"Step two"}]'`
7
7
 
8
+ To assign an agent to the appended objectives, add `"agent":"<id>"` (and optional `"model"`) to each item, or pass `--objective-agent <id>` / `--objective-model <id>` as the default.
9
+
8
10
  Index 0 is the first newly added objective to execute; later indexes queue after it.
@@ -8,6 +8,8 @@ If it already contains flags such as `--title`, `--priority`, `--project-id`, `-
8
8
  Otherwise, treat the input as the objective text and run:
9
9
  `ovld protocol create --agent cursor --objectives-json '[{"objective":"<objective>"}]'`
10
10
 
11
+ When the user names an agent for the work, assign it on the objective itself — add `"agent":"<id>"` (and optional `"model"`) to the objectives item, or pass `--objective-agent <id>` / `--objective-model <id>`. Never create the mission and then append a second objective just to name an agent.
12
+
11
13
  If no objective was provided, ask the user for one and stop.
12
14
 
13
15
  After the command succeeds, report the new `MISSION_ID`.
@@ -1,4 +1,4 @@
1
- contractVersion: "133"
1
+ contractVersion: "137"
2
2
  componentType: connector
3
3
  componentKey: cursor
4
4
  label: "Cursor Connector"
@@ -1,4 +1,4 @@
1
- contractVersion: "133"
1
+ contractVersion: "137"
2
2
  componentType: connector
3
3
  componentKey: opencode
4
4
  label: "OpenCode Connector"
@@ -1,4 +1,4 @@
1
- contractVersion: "133"
1
+ contractVersion: "137"
2
2
  componentType: connector
3
3
  componentKey: pi
4
4
  label: "PI Connector"
@@ -29,8 +29,11 @@ Use this mode when the prompt already contains a mission ID or explicitly says t
29
29
  When review facts genuinely apply, you may add `deliveryReport.agentReport` through `--payload-json` / `--payload-file`: use
30
30
  `humanActions`, `tradeoffsMade`, `knownRisks`, `deferredWork`, and `assumptions`, with empty arrays
31
31
  when none apply. Human actions are concrete work a user must perform outside completed agent work;
32
- never include Git operations or routine review/testing. Tradeoffs record the implementation decision,
33
- alternatives considered, and rationale. These fields improve review visibility but never block delivery.
32
+ never include Git operations or routine review/testing. Every human action needs `action`, `reason`,
33
+ and `category`; add `command`, `verify`, and `link` whenever they exist so the operator can act
34
+ without re-reading the delivery (see **Delivery Evidence** below). Tradeoffs record the
35
+ implementation decision, alternatives considered, and rationale. These fields improve review
36
+ visibility but never block delivery.
34
37
 
35
38
  For full command syntax, flags, phase values, and event types see **CLI Command Reference** below.
36
39
 
@@ -205,6 +208,46 @@ configure an external integration). Never list committing, pushing, opening a pu
205
208
  reviewing code, or ordinary tests. A tradeoff must state the decision, alternatives considered,
206
209
  and rationale. Omit the report when none of these facts apply.
207
210
 
211
+ #### Writing a human action the operator can complete
212
+
213
+ Human actions are collected across every mission into the Feed page's **Human actions** rail,
214
+ where the operator reads them without the delivery context. Each item must stand alone:
215
+
216
+ | Field | Expected | What to write |
217
+ | ---------- | -------- | ---------------------------------------------------------------------------------------------- |
218
+ | `action` | required | One imperative sentence naming the exact thing to do, where, and with what value. |
219
+ | `reason` | expected | Why the step is needed and what breaks or stays incomplete until it is done. |
220
+ | `category` | expected | `environment`, `database`, `deployment`, `codegen`, `packaging`, `external_service`, or `other`.|
221
+ | `blocking` | optional | `true` when the delivered work does not function until this is done. |
222
+ | `command` | when known | The exact command, setting name, or value to apply, verbatim. Placeholders in `<angle brackets>`. |
223
+ | `verify` | when known | How the operator confirms it worked: a command to run, a URL to open, or the state to observe. |
224
+ | `link` | when known | An HTTP(S) URL or a repository-relative file path (never another URI scheme). |
225
+
226
+ Vague (the operator has to rediscover everything):
227
+
228
+ ```json
229
+ { "action": "Set up the env var for Gemini." }
230
+ ```
231
+
232
+ Good (the operator can finish it from the rail alone):
233
+
234
+ ```json
235
+ {
236
+ "action": "Add GEMINI_API_KEY to the production backend service on Railway.",
237
+ "reason": "The delivery-compose worker falls back to the raw summary until a provider key is present.",
238
+ "category": "environment",
239
+ "blocking": false,
240
+ "command": "railway variables set GEMINI_API_KEY=<key> --service backend",
241
+ "verify": "The next delivery card shows a composed presentation instead of 'fallback' in the worker log.",
242
+ "link": ".env.example"
243
+ }
244
+ ```
245
+
246
+ Overlord also derives its own `deterministic_rule` actions from the changed paths (new
247
+ migrations, `.env.example` changes, dependency manifests, CI workflow files) and always shows
248
+ them, so leaving one out never hides it; reporting it yourself with a real `command` and
249
+ `verify` replaces the generic wording with something the operator can follow.
250
+
208
251
  ### Change ledger health (diagnostic)
209
252
 
210
253
  Use this only to inspect or troubleshoot objective-ledger synchronization and hook health:
@@ -284,6 +327,7 @@ When creating missions from within a repository:
284
327
  - Add objectives to the same mission when each prompt is a sequential step toward the same feature or goal; use `ovld protocol add-objectives --mission-id <mission_id> --objectives-json '[{"objective":"..."}]'`.
285
328
  - `create` and `prompt` require `--objectives-json` or `--objectives-file` with an ordered array of `{ "objective": "...", "title": "...", "autoAdvance": true }` objects. A single objective is just an array with one item. `--auto-advance` / `--no-auto-advance` set the default when an item omits `autoAdvance` (default off).
286
329
  - `add-objectives` uses the same per-item `autoAdvance` field and `--auto-advance` / `--no-auto-advance` default.
330
+ - **Assign the agent on the objectives you are already creating.** Every objective item on `create`, `prompt`, and `add-objectives` takes optional `"agent"` (and `"model"`, which requires an agent), and `--objective-agent <id>` / `--objective-model <id>` set the default for items that name no `agent` of their own. Never create a mission and then append a second objective just to name an agent — that leaves a duplicate objective behind. Note this is **not** `--agent`, which records who created the mission (and, on `prompt`, which agent attaches).
287
331
  - To change auto-advance on an existing objective: `ovld protocol update-objective --objective-id <id> --auto-advance` or `--no-auto-advance`.
288
332
  - `record-work` is different: it creates exactly one **completed** objective. It takes a single `--objective` (or positional / an `objective` field in `--payload-json`) plus a `--summary` and the file-change data — not `--objectives-json`. See [reference/record-work.md](reference/record-work.md).
289
333
  - `create`, `prompt`, `create-mission`, and `record-work` accept `--assigned-to <member>` to set the mission's human owner. Accepts a username, an email, a user-id UUID, or the `orgid:username` member ID. When omitted, the assignee defaults to the mission creator.
@@ -292,6 +336,12 @@ When creating missions from within a repository:
292
336
  ovld protocol create --agent <agent-identifier> --objectives-json '[{"objective":"Capture follow-up work from this repository"}]'
293
337
  ```
294
338
 
339
+ ```bash
340
+ # One call: a draft mission whose first objective is already assigned to Codex.
341
+ ovld protocol create --agent <agent-identifier> \
342
+ --objectives-json '[{"objective":"Implement the API","agent":"codex","model":"gpt-5.6-terra"},{"objective":"Add CLI docs","agent":"claude"}]'
343
+ ```
344
+
295
345
  ```bash
296
346
  ovld protocol prompt --agent <agent-identifier> --objectives-json '[{"objective":"Implement feature X"}]'
297
347
  ```
@@ -181,6 +181,7 @@ When creating missions from within a repository:
181
181
  - Add objectives to the same mission when each prompt is a sequential step toward the same feature or goal; use `ovld protocol add-objectives --mission-id <mission_id> --objectives-json '[{"objective":"..."}]'`.
182
182
  - `create` and `prompt` require `--objectives-json` or `--objectives-file` with an ordered array of `{ "objective": "...", "title": "...", "autoAdvance": true }` objects. A single objective is just an array with one item. `--auto-advance` / `--no-auto-advance` map each opted-in item to authoritative Run Queue membership (default off).
183
183
  - `add-objectives` uses the same per-item `autoAdvance` field and `--auto-advance` / `--no-auto-advance` mapping.
184
+ - Every objective item on `create`, `prompt`, and `add-objectives` also takes optional `"agent"` and `"model"` (a model requires an agent), and `--objective-agent <id>` / `--objective-model <id>` set the default for items that name no `agent` of their own. Assign the agent on the objectives you are already creating rather than appending a second objective just to name one. `--objective-agent` is distinct from `--agent`, which records creation provenance (and, on `prompt`, the attaching agent).
184
185
  - Use `ovld protocol run-queue [--project-id <id|slug|name>|--objective-id <id>|--mission-id <id>] [--queue <id|name>]` to inspect live queues. Entry operations use `queue-objective --objective-id <id> [--queue <id|name>] [--after <queued-entry|objective>|--front|--position <rank>]`, `dequeue-objective --objective-id <id>`, and `reorder-run-queue --queue <id|name> --ordered-entries-json <json>`; they require `execution_request:create`. Queue-definition operations use `create-run-queue`, `update-run-queue`, `delete-run-queue`, and `reorder-project-run-queues`; they require `project:update` and therefore a full-scope token.
185
186
  - `record-work` creates exactly one **completed** objective from a single `--objective` (or positional / an `objective` field in `--payload-json`) plus a `--summary` and file-change data — it does not take `--objectives-json`. See [record-work.md](record-work.md).
186
187
 
@@ -188,6 +189,12 @@ When creating missions from within a repository:
188
189
  ovld protocol create --agent <agent-identifier> --objectives-json '[{"objective":"Capture follow-up work from this repository"}]'
189
190
  ```
190
191
 
192
+ ```bash
193
+ # One call: a draft mission whose first objective is already assigned to Codex.
194
+ ovld protocol create --agent <agent-identifier> \
195
+ --objectives-json '[{"objective":"Implement the API","agent":"codex","model":"gpt-5.6-terra"},{"objective":"Add CLI docs","agent":"claude"}]'
196
+ ```
197
+
191
198
  ```bash
192
199
  ovld protocol prompt --agent <agent-identifier> --objectives-json '[{"objective":"Implement feature X"}]'
193
200
  ```
@@ -264,6 +264,12 @@ const tools = [
264
264
  objective: stringProperty('Initial objective text.'),
265
265
  title: stringProperty('Optional mission title.'),
266
266
  resourceKey: stringProperty('Optional logical project resource key for the objective.'),
267
+ agent: stringProperty(
268
+ 'Optional agent identifier to assign to the initial objective, such as codex or claude. Omitted leaves the project launch-preference default; set it here instead of appending a second objective just to name an agent.'
269
+ ),
270
+ model: stringProperty(
271
+ 'Optional model identifier for the assigned agent. Requires agent; rejected without it.'
272
+ ),
267
273
  assignedTo: stringProperty(
268
274
  'Optional workspace member to own the mission (workspace_users.id, profile UUID, orgid:username, bare username, or email). Rejected when the member is not in the workspace; meaningless on the inbox fallback.'
269
275
  ),
@@ -622,7 +628,25 @@ const tools = [
622
628
  humanActions: {
623
629
  type: 'array',
624
630
  description:
625
- 'Concrete actions a human must perform; exclude Git operations and routine review/testing.'
631
+ 'Concrete actions a human must perform; exclude Git operations and routine review/testing. ' +
632
+ 'Each item needs action, reason, and category, plus command (exact command or setting), verify (how to confirm it worked), and link (HTTP(S) URL or repo-relative path) whenever they exist. ' +
633
+ 'Vague: { action: "Set up the env var for Gemini." }. Good: { action: "Add GEMINI_API_KEY to the production backend service on Railway.", reason: "Compose falls back to the raw summary without it.", category: "environment", command: "railway variables set GEMINI_API_KEY=<key> --service backend", verify: "The next delivery card shows a composed presentation.", link: ".env.example" }.',
634
+ items: {
635
+ type: 'object',
636
+ properties: {
637
+ action: { type: 'string', description: 'Required. One imperative sentence: what, where, which value.' },
638
+ reason: { type: 'string', description: 'Expected. Why it is needed and what stays broken until done.' },
639
+ category: {
640
+ type: 'string',
641
+ description: 'Expected. environment, database, deployment, codegen, packaging, external_service, or other.'
642
+ },
643
+ blocking: { type: 'boolean', description: 'True when the delivered work does not function until this is done.' },
644
+ command: { type: 'string', description: 'Exact command, setting, or value to apply, verbatim.' },
645
+ verify: { type: 'string', description: 'How the operator confirms it worked.' },
646
+ link: { type: 'string', description: 'HTTP(S) URL or repository-relative file path.' }
647
+ },
648
+ required: ['action']
649
+ }
626
650
  },
627
651
  tradeoffsMade: {
628
652
  type: 'array',
@@ -830,6 +854,12 @@ async function callOverlordTool(name, args) {
830
854
  ...(optionalString(args, 'resourceKey')
831
855
  ? { resource: requiredString(args, 'resourceKey') }
832
856
  : {}),
857
+ ...(optionalString(args, 'agent')
858
+ ? { 'objective-agent': requiredString(args, 'agent') }
859
+ : {}),
860
+ ...(optionalString(args, 'model')
861
+ ? { 'objective-model': requiredString(args, 'model') }
862
+ : {}),
833
863
  ...(optionalString(args, 'assignedTo')
834
864
  ? { 'assigned-to': requiredString(args, 'assignedTo') }
835
865
  : {}),
@@ -1175,7 +1205,7 @@ process.stdin.on('data', async chunk => {
1175
1205
  result: {
1176
1206
  protocolVersion: PROTOCOL_VERSION,
1177
1207
  capabilities: { tools: { listChanged: false } },
1178
- serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.41' }
1208
+ serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.43' }
1179
1209
  }
1180
1210
  });
1181
1211
  continue;
package/dist/index.js CHANGED
@@ -35542,7 +35542,7 @@ var init_zod = __esm({
35542
35542
  });
35543
35543
 
35544
35544
  // ../packages/core/dist/service/delivery-report.js
35545
- var MAX_ITEMS, MAX_ALTERNATIVES, MAX_ACTION_LENGTH, MAX_DETAIL_LENGTH, humanActionCategorySchema, conciseTextSchema, humanActionSchema, tradeoffSchema, MAX_WARNINGS, normalizedHumanActionSchema, normalizedTradeoffSchema, normalizedAgentReportSchema, deliveryPresentationSchema, persistedDeliveryReportSchema;
35545
+ var MAX_ITEMS, MAX_ALTERNATIVES, MAX_ACTION_LENGTH, MAX_DETAIL_LENGTH, humanActionCategorySchema, MAX_COMMAND_LENGTH2, MAX_LINK_LENGTH, conciseTextSchema, commandTextSchema, LINK_PATTERN, linkSchema, humanActionSchema, tradeoffSchema, MAX_WARNINGS, normalizedHumanActionSchema, normalizedTradeoffSchema, normalizedAgentReportSchema, deliveryPresentationSchema, persistedDeliveryReportSchema;
35546
35546
  var init_delivery_report = __esm({
35547
35547
  "../packages/core/dist/service/delivery-report.js"() {
35548
35548
  "use strict";
@@ -35560,12 +35560,20 @@ var init_delivery_report = __esm({
35560
35560
  "external_service",
35561
35561
  "other"
35562
35562
  ]);
35563
+ MAX_COMMAND_LENGTH2 = 600;
35564
+ MAX_LINK_LENGTH = 400;
35563
35565
  conciseTextSchema = external_exports.string().trim().min(1).max(MAX_DETAIL_LENGTH);
35566
+ commandTextSchema = external_exports.string().trim().min(1).max(MAX_COMMAND_LENGTH2);
35567
+ LINK_PATTERN = /^(?:https?:\/\/\S+|(?![a-z][a-z0-9+.-]*:)[^\s<>"'`]+)$/i;
35568
+ linkSchema = external_exports.string().trim().min(1).max(MAX_LINK_LENGTH).regex(LINK_PATTERN);
35564
35569
  humanActionSchema = external_exports.strictObject({
35565
35570
  action: external_exports.string().trim().min(1).max(MAX_ACTION_LENGTH),
35566
35571
  reason: conciseTextSchema.optional(),
35567
35572
  category: humanActionCategorySchema.optional(),
35568
- blocking: external_exports.boolean().optional()
35573
+ blocking: external_exports.boolean().optional(),
35574
+ command: commandTextSchema.optional(),
35575
+ verify: conciseTextSchema.optional(),
35576
+ link: linkSchema.optional()
35569
35577
  });
35570
35578
  tradeoffSchema = external_exports.strictObject({
35571
35579
  decision: external_exports.string().trim().min(1).max(MAX_ACTION_LENGTH),
@@ -35580,6 +35588,9 @@ var init_delivery_report = __esm({
35580
35588
  reason: conciseTextSchema.optional(),
35581
35589
  category: humanActionCategorySchema,
35582
35590
  blocking: external_exports.boolean().optional(),
35591
+ command: commandTextSchema.optional(),
35592
+ verify: conciseTextSchema.optional(),
35593
+ link: linkSchema.optional(),
35583
35594
  source: external_exports.enum(["agent", "change_rationale", "deterministic_rule"]),
35584
35595
  sourceRef: external_exports.string().trim().min(1).max(200).optional()
35585
35596
  });
@@ -38132,8 +38143,10 @@ list-deliveries:
38132
38143
  Optional:
38133
38144
  --objective-id <id> Supplies mission addressing when it is a display id
38134
38145
  Returns:
38135
- DeliveryDto[] including summary, verification, follow-up notes, and normalized
38136
- delivery report evidence.
38146
+ MissionDeliveriesDto { items, total, limit }. items are newest-first
38147
+ DeliveryDto records including summary, verification, follow-up notes, and
38148
+ normalized delivery report evidence, capped at 200. total is the matching
38149
+ row count before that cap.
38137
38150
 
38138
38151
  launch-objective:
38139
38152
  Purpose:
@@ -38377,10 +38390,13 @@ add-objectives:
38377
38390
  Optional:
38378
38391
  --auto-advance / --no-auto-advance
38379
38392
  Default auto-advance for items that omit "autoAdvance". Defaults to off.
38393
+ --objective-agent <id> / --objective-model <id>
38394
+ Default launch selection for items that name no "agent" of their own.
38395
+ --objective-model requires --objective-agent.
38380
38396
  Notes:
38381
38397
  Each item is { "objective": "...", "title": "...", "agent": "codex",
38382
38398
  "model": "gpt-5.6-terra", "autoAdvance": true|false, "resourceKey": "..." }.
38383
- model requires agent. Per-item autoAdvance wins over the flag.
38399
+ model requires agent. Per-item autoAdvance and agent win over the flags.
38384
38400
 
38385
38401
  update-objective:
38386
38402
  Purpose:
@@ -38439,6 +38455,12 @@ create:
38439
38455
  --auto-advance / --no-auto-advance
38440
38456
  Add matching objectives to the authoritative Run Queue. Defaults to off.
38441
38457
  Per-item override: "autoAdvance": true|false in --objectives-json items.
38458
+ --objective-agent <id> / --objective-model <id>
38459
+ Assign a launch agent (and its model) to the objectives created here, so
38460
+ a mission can be created already assigned instead of appending a second
38461
+ objective just to name an agent. This is not --agent, which records
38462
+ creation provenance. Seeds only items with no "agent" of their own;
38463
+ --objective-model requires --objective-agent.
38442
38464
 
38443
38465
  prompt:
38444
38466
  Purpose:
@@ -38455,6 +38477,9 @@ prompt:
38455
38477
  --auto-advance / --no-auto-advance
38456
38478
  Add matching objectives to the authoritative Run Queue. Defaults to off.
38457
38479
  Per-item override: "autoAdvance": true|false in --objectives-json items.
38480
+ --objective-agent <id> / --objective-model <id>
38481
+ Assign a launch agent (and its model) to the objectives created here.
38482
+ Distinct from --agent, which names the attaching agent for the session.
38458
38483
  Returns:
38459
38484
  New mission/session JSON plus SESSION_KEY on stderr when available.
38460
38485
 
@@ -38542,6 +38567,21 @@ deliver:
38542
38567
  The payload may also include deliveryReport: { schemaVersion: 1, agentReport: {
38543
38568
  humanActions, tradeoffsMade, knownRisks, deferredWork, assumptions } }. Use empty arrays
38544
38569
  when none apply. Human actions exclude Git operations and routine review/testing.
38570
+ Human action shape (each item in agentReport.humanActions):
38571
+ {
38572
+ "action": "Add GEMINI_API_KEY to the production backend service on Railway.", // required. one imperative sentence: what, where, which value.
38573
+ "reason": "Compose falls back to the raw summary without it.", // expected. why, and what stays broken until done.
38574
+ "category": "environment", // expected. environment | database | deployment | codegen | packaging | external_service | other
38575
+ "blocking": false, // optional. true when the delivered work does not function until this is done.
38576
+ "command": "railway variables set GEMINI_API_KEY=<key> --service backend", // when known. exact command/setting, verbatim.
38577
+ "verify": "Next delivery card shows a composed presentation.", // when known. how the operator confirms it worked.
38578
+ "link": ".env.example" // when known. HTTP(S) URL or repo-relative path only.
38579
+ }
38580
+ Vague: { "action": "Set up the env var for Gemini." } forces the operator to rediscover
38581
+ the name, the place, and the check. Actions are read from the Feed rail without the
38582
+ delivery, so each must stand alone. Overlord adds deterministic_rule actions for new
38583
+ migrations, .env.example edits, dependency manifests, and CI workflow files on its own;
38584
+ report those yourself when you can supply the real command and verify step.
38545
38585
  Optional:
38546
38586
  --artifacts-json / --artifacts-file <path|->
38547
38587
  --change-rationales-json / --change-rationales-file <path|->
@@ -39766,6 +39806,14 @@ async function resolveTerminalLaunchSettings({
39766
39806
  function asRecord5(value) {
39767
39807
  return value && typeof value === "object" ? value : {};
39768
39808
  }
39809
+ function missionEvidenceItems(value) {
39810
+ if (Array.isArray(value)) return value;
39811
+ if (value && typeof value === "object" && "items" in value) {
39812
+ const items = value.items;
39813
+ if (Array.isArray(items)) return items;
39814
+ }
39815
+ return null;
39816
+ }
39769
39817
  function parsePreLaunchCommandsValue(value) {
39770
39818
  return Array.isArray(value) ? value.filter((entry) => typeof entry === "string") : [];
39771
39819
  }
@@ -40483,17 +40531,25 @@ async function runManagementCommand({
40483
40531
  name: "--auto-advance",
40484
40532
  negatedName: "--no-auto-advance"
40485
40533
  });
40534
+ const objectiveAgent = flagValue(parsed.flags, "--objective-agent")?.trim() || void 0;
40535
+ const objectiveModel = flagValue(parsed.flags, "--objective-model")?.trim() || void 0;
40536
+ if (objectiveModel && !objectiveAgent) {
40537
+ throw new CliError({ message: "--objective-model requires --objective-agent" });
40538
+ }
40539
+ const withAgentSelection = (item) => objectiveAgent && !item.agent ? { ...item, agent: objectiveAgent, model: item.model ?? objectiveModel ?? null } : item;
40486
40540
  const parsedObjectives = objectivesJson ? JSON.parse(objectivesJson) : null;
40487
- const objectives = parsedObjectives ? parsedObjectives.map((item) => ({
40488
- ...item,
40489
- ...item.autoAdvance === void 0 && autoAdvance !== void 0 ? { autoAdvance } : {}
40490
- })) : objective ? [
40491
- {
40541
+ const objectives = parsedObjectives ? parsedObjectives.map(
40542
+ (item) => withAgentSelection({
40543
+ ...item,
40544
+ ...item.autoAdvance === void 0 && autoAdvance !== void 0 ? { autoAdvance } : {}
40545
+ })
40546
+ ) : objective ? [
40547
+ withAgentSelection({
40492
40548
  objective,
40493
40549
  title: flagValue(parsed.flags, "--title") ?? null,
40494
40550
  ...autoAdvance !== void 0 ? { autoAdvance } : {},
40495
40551
  ...flagValue(parsed.flags, "--resource") ? { resourceKey: flagValue(parsed.flags, "--resource") } : {}
40496
- }
40552
+ })
40497
40553
  ] : [];
40498
40554
  const first = objectives[0];
40499
40555
  if (!first) {
@@ -40857,8 +40913,11 @@ async function runManagementCommand({
40857
40913
  }
40858
40914
  const result = await runtime.backend.get(path37);
40859
40915
  if (json2 || sub === "context") printJson(result);
40860
- else if (Array.isArray(result)) for (const row of result) console.log(JSON.stringify(row));
40861
- else printJson(result);
40916
+ else {
40917
+ const items = missionEvidenceItems(result);
40918
+ if (items) for (const row of items) console.log(JSON.stringify(row));
40919
+ else printJson(result);
40920
+ }
40862
40921
  return;
40863
40922
  }
40864
40923
  case "changes": {
@@ -40873,16 +40932,16 @@ async function runManagementCommand({
40873
40932
  if (sub !== "status" && sub !== "rationales") {
40874
40933
  throw new CliError({ message: "Usage: ovld changes status|rationales --mission-id <id>" });
40875
40934
  }
40876
- const all = await runtime.backend.get(
40935
+ const page = await runtime.backend.get(
40877
40936
  `/api/missions/${encodeURIComponent(missionId)}/file-changes`
40878
40937
  );
40879
- let result = all;
40938
+ let result = missionEvidenceItems(page) ?? [];
40880
40939
  if (objectiveRef) {
40881
40940
  const mission = await runtime.backend.get(
40882
40941
  `/api/missions/${encodeURIComponent(missionId)}`
40883
40942
  );
40884
40943
  const objectiveId = objectiveIdForRef(mission, objectiveRef);
40885
- result = all.filter((row) => asRecord5(row).objectiveId === objectiveId);
40944
+ result = result.filter((row) => asRecord5(row).objectiveId === objectiveId);
40886
40945
  }
40887
40946
  if (json2) printJson({ files: result, rationales: result });
40888
40947
  else for (const row of result) console.log(JSON.stringify(row));
@@ -41483,6 +41542,8 @@ var COMMAND_FLAGS = {
41483
41542
  "--project-id",
41484
41543
  "--title",
41485
41544
  "--resource",
41545
+ "--objective-agent",
41546
+ "--objective-model",
41486
41547
  "--auto-advance",
41487
41548
  "--no-auto-advance"
41488
41549
  ],
@@ -41494,6 +41555,8 @@ var COMMAND_FLAGS = {
41494
41555
  "--title",
41495
41556
  "--resource",
41496
41557
  "--agent",
41558
+ "--objective-agent",
41559
+ "--objective-model",
41497
41560
  "--auto-advance",
41498
41561
  "--no-auto-advance"
41499
41562
  ],