overlord-cli 0.2608191554.0 → 0.2608200954.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.29
1
+ 0.3.31
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://antigravity.google/schemas/v1/plugin.json",
3
3
  "name": "overlord",
4
- "version": "0.3.29",
4
+ "version": "0.3.31",
5
5
  "description": "Chat-driven access to Overlord mission protocol workflows through skills and MCP.",
6
6
  "author": {
7
7
  "name": "Cooperativ",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.29",
3
+ "version": "0.3.31",
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",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.29",
3
+ "version": "0.3.31",
4
4
  "description": "Chat-driven access to Overlord mission protocol workflows with hook-driven activity capture.",
5
5
  "author": {
6
6
  "name": "Cooperativ",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.29",
3
+ "version": "0.3.31",
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",
@@ -179,9 +179,10 @@ When creating missions from within a repository:
179
179
  - Follow-up `create` calls under an active session inherit the current mission's project by default, but `--project-id` can override that when the follow-up belongs in a different project.
180
180
  - Create multiple missions when each prompt represents a different feature or goal.
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
- - `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).
183
- - `add-objectives` uses the same per-item `autoAdvance` field and `--auto-advance` / `--no-auto-advance` default.
184
- - To change auto-advance on an existing objective: `ovld protocol update-objective --objective-id <id> --auto-advance` or `--no-auto-advance`.
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
+ - `add-objectives` uses the same per-item `autoAdvance` field and `--auto-advance` / `--no-auto-advance` mapping.
184
+ - Use `ovld protocol queue-objective --objective-id <id> [--queue <id|name>] [--after <queued-entry|objective>|--front|--position <rank>]` to explicitly enqueue or move work, `dequeue-objective --objective-id <id>` to remove it, and `run-queue --project-id <id|slug|name>` to inspect every queue.
185
+ - `ovld protocol update-objective --objective-id <id> --auto-advance` / `--no-auto-advance` is retained as an enqueue/dequeue compatibility mapping. `autoAdvance` is deprecated and derived from `queueEntry`; legacy writes retire next release and column removal requires a later contract bump.
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
 
187
188
  ```bash
@@ -10,6 +10,6 @@
10
10
  - `overlord_record_work` (hosted MCP) and `ovld protocol record-work` (CLI) record already-completed chat work as a single review-column mission with a completed objective, file-change rationales, and the standard Gemini delivery summary — no `attach`/`deliver`. Hosted MCP requires `projectId` (it never chooses a project implicitly); the CLI resolves the project from the working directory or `--project-id`. The submission format is in [record-work.md](record-work.md). The route is `POST /api/protocol/record-work`.
11
11
  - `overlord_add_artifact` (hosted MCP) and `ovld protocol add-artifact` (CLI) create a mission artifact during a turn without delivering. Required: `type` / `--type`, `label` / `--label`, mission scope (`missionId` / `--mission-id`, or an objective display id as `objectiveId` / `--objective-id`), plus at least one of `contentText` / `--content-text`/`--content-text-file` or `externalUrl` / `--external-url`. Optional `sessionKey` / `--session-key` stamps session/objective provenance; `objectiveId` / `--objective-id` does the same when there is no live session, and the session key wins if both are given. Same service as REST `POST /api/missions/:id/artifacts`. The route is `POST /api/protocol/add-artifact`.
12
12
  - `overlord_update_artifact` (hosted MCP) and `ovld protocol update-artifact` (CLI) revise an existing mission artifact's label, Markdown content, and/or HTTP(S) URL in place. Required: `artifactId` / `--artifact-id`, `expectedRevision` / `--expected-revision`, and mission scope (`missionId` / `--mission-id`, or an objective display id as `objectiveId` / `--objective-id`). Provide at least one editable field. No session key is required. Same service as REST `PATCH /api/missions/:id/artifacts/:artifactId`. The route is `POST /api/protocol/update-artifact`.
13
- - `overlord_create_mission` / `overlord_add_objectives` accept optional `autoAdvance` (boolean; default false). `overlord_update_objective` (`objectiveId` plus optional `autoAdvance` and/or `instructionText`) and `ovld protocol update-objective --objective-id <id>` with `--auto-advance|--no-auto-advance` and/or `--instruction-text|--instruction-text-file` update an existing objective. Instruction text is editable only in `draft` or `future` state. The route is `POST /api/protocol/update-objective`.
13
+ - `overlord_queue_objective` accepts `objectiveId`, optional `queue` / `after`, and `remove`; it forwards through Protocol to authoritative Run Queue membership and never directly launches work. `overlord_create_mission` / `overlord_add_objectives` optional `autoAdvance`, `overlord_update_objective.autoAdvance`, and `ovld protocol update-objective --auto-advance|--no-auto-advance` map to that same membership. `autoAdvance` is deprecated and derived from `queueEntry`; legacy storage writes retire next release and column removal requires a later contract bump. Instruction text remains editable only in `draft` or `future` state. The routes are `POST /api/protocol/queue-objective`, `dequeue-objective`, and `update-objective`.
14
14
  - Objective attachment tools follow the `<verb>_<noun>` MCP naming: `list_attachments`, `prepare_attachment_upload`, `finalize_attachment_upload`, `get_attachment_download_url`, `upload_attachment_file`. CLI commands use `attachment-*`. `mission_id` / `missionId` is optional for attachment calls when the objective or attachment id lets the server derive mission scope.
15
15
  - "Artifacts" may be published mid-turn with `add-artifact` / `overlord_add_artifact`, revised with `update-artifact` / `overlord_update_artifact`, or attached at `deliver` time (next_steps, test_results, migration, decision, note, url) — not user-uploaded files. Files attached by users live on objectives via the attachment tools above.
@@ -80,6 +80,34 @@ function booleanProperty(description) {
80
80
  return { type: 'boolean', description };
81
81
  }
82
82
 
83
+ function compactSearchResponse(response) {
84
+ const value = response?.structuredContent;
85
+ if (!value || value.version !== 3 || !Array.isArray(value.results)) return response;
86
+ const compact = {
87
+ ...value,
88
+ results: value.results.map(result => ({
89
+ ...result,
90
+ matches: Array.isArray(result.matches)
91
+ ? result.matches
92
+ .slice(0, 2)
93
+ .map(match => {
94
+ const compactMatch = { ...match };
95
+ delete compactMatch.snippet;
96
+ delete compactMatch.matchedTerms;
97
+ delete compactMatch.createdAt;
98
+ delete compactMatch.updatedAt;
99
+ return compactMatch;
100
+ })
101
+ : result.matches
102
+ }))
103
+ };
104
+ return {
105
+ ...response,
106
+ content: [{ type: 'text', text: JSON.stringify(compact, null, 2) }],
107
+ structuredContent: compact
108
+ };
109
+ }
110
+
83
111
  const tools = [
84
112
  {
85
113
  name: 'overlord_resolve_project',
@@ -134,7 +162,7 @@ const tools = [
134
162
  name: 'overlord_search_missions',
135
163
  title: 'Search Overlord missions',
136
164
  description:
137
- "Search missions across the caller's authorized workspaces in one organization. Returns applied filters and truncation metadata; complete and cancelled missions remain eligible by default.",
165
+ "Search mission anchors with their matching objectives and deliveries across authorized workspaces. An objective displayId can be passed directly to overlord_load_mission_context; matches are matched-only, not the full objective list. Artifacts are not indexed. Use absolute ISO from/to bounds (no relative dates or implicit window), inspect workspaceCounts, entityCounts, and truncatedCandidates before claiming completeness, and treat appliedFilters.mode 'fallback' as a recency listing. Compact detail is default; request full for child snippets and metadata.",
138
166
  inputSchema: objectSchema({
139
167
  query: stringProperty('Search query text.'),
140
168
  status: stringProperty(
@@ -157,6 +185,23 @@ const tools = [
157
185
  limit: {
158
186
  type: 'number',
159
187
  description: 'Maximum result count. Defaults to 25.'
188
+ },
189
+ entityTypes: stringProperty(
190
+ 'Optional comma-separated v3 entity types: mission, objective, delivery.'
191
+ ),
192
+ objectiveStates: stringProperty(
193
+ 'Optional comma-separated v3 objective states for matching objectives.'
194
+ ),
195
+ matchesPerResult: {
196
+ type: 'number',
197
+ description:
198
+ 'Optional v3 child-match cap per mission (default 3, max 10; compact returns at most 2).'
199
+ },
200
+ detail: {
201
+ type: 'string',
202
+ enum: ['compact', 'full'],
203
+ description:
204
+ 'Result detail: compact (default) keeps child navigation fields and removes child snippets/metadata; full returns complete v3 child matches.'
160
205
  }
161
206
  })
162
207
  },
@@ -213,6 +258,58 @@ const tools = [
213
258
  []
214
259
  )
215
260
  },
261
+ {
262
+ name: 'overlord_list_deliveries',
263
+ title: 'List mission deliveries',
264
+ description:
265
+ 'Use this to read a mission\'s delivered work after locating it. Returns newest-first normalized delivery records including summary, verification, follow-up notes, and authoritative delivery evidence; it never exposes raw delivery payloads.',
266
+ inputSchema: objectSchema({
267
+ missionId: stringProperty(
268
+ 'Mission UUID or workspace display id. Optional when objectiveId is a display id such as coo:756.k7xm, which already names its mission.'
269
+ ),
270
+ objectiveId: stringProperty(
271
+ 'Objective UUID or display id such as coo:756.k7xm. Use a display id when that is the only identifier available.'
272
+ )
273
+ })
274
+ },
275
+ {
276
+ name: 'overlord_launch_objective',
277
+ title: 'Launch objective execution',
278
+ description:
279
+ 'Use this only when the user explicitly asks to start a particular objective. It queues the normal Overlord execution request; it does not attach this MCP agent to perform the work. An existing active request is returned instead of duplicated.',
280
+ inputSchema: objectSchema(
281
+ {
282
+ objectiveId: stringProperty('Objective UUID or display id such as coo:756.k7xm.'),
283
+ agent: stringProperty('Agent identifier to launch, such as codex or claude.'),
284
+ model: stringProperty('Optional model identifier to snapshot onto the execution request.'),
285
+ reasoningEffort: stringProperty(
286
+ 'Optional reasoning-effort setting to snapshot onto the execution request.'
287
+ ),
288
+ executionTargetId: stringProperty(
289
+ 'Optional eligible execution target id. Omit to use the project\'s normal target selection.'
290
+ )
291
+ },
292
+ ['objectiveId', 'agent']
293
+ )
294
+ },
295
+ {
296
+ name: 'overlord_reorder_future_objectives',
297
+ title: 'Reorder future objectives',
298
+ description:
299
+ 'Use this only when the user explicitly asks to change future-objective order in one mission. Supply every future objective UUID in its complete desired top-to-bottom order; draft, active, and completed objectives cannot be moved by this tool.',
300
+ inputSchema: objectSchema(
301
+ {
302
+ missionId: stringProperty('Mission UUID.'),
303
+ orderedObjectiveIds: {
304
+ type: 'array',
305
+ description:
306
+ 'Complete desired top-to-bottom UUID order of every objective currently in the future state.',
307
+ items: stringProperty('Future objective UUID.')
308
+ }
309
+ },
310
+ ['missionId', 'orderedObjectiveIds']
311
+ )
312
+ },
216
313
  {
217
314
  name: 'overlord_add_objectives',
218
315
  title: 'Add objectives',
@@ -260,6 +357,25 @@ const tools = [
260
357
  ['objectiveId']
261
358
  )
262
359
  },
360
+ {
361
+ name: 'overlord_queue_objective',
362
+ title: 'Queue objective',
363
+ description:
364
+ 'Use this only when the user explicitly asks to add, move, or remove an objective in the project Run Queue. Queue membership is target-neutral and sequences delivery-driven launches; it does not directly launch the objective.',
365
+ inputSchema: objectSchema(
366
+ {
367
+ objectiveId: stringProperty('Objective UUID or display id such as coo:756.k7xm.'),
368
+ queue: stringProperty('Optional Run Queue UUID or unambiguous queue name.'),
369
+ after: stringProperty(
370
+ 'Optional queued predecessor entry id, objective UUID, or objective display id. Its queue is used when queue is omitted.'
371
+ ),
372
+ remove: booleanProperty(
373
+ 'When true, remove this objective from the Run Queue instead of adding or moving it.'
374
+ )
375
+ },
376
+ ['objectiveId']
377
+ )
378
+ },
263
379
  {
264
380
  name: 'overlord_attach_session',
265
381
  title: 'Attach to mission',
@@ -455,7 +571,7 @@ function missionScopeFlags(args) {
455
571
  };
456
572
  }
457
573
 
458
- function callOverlordTool(name, args) {
574
+ async function callOverlordTool(name, args) {
459
575
  if (name === 'overlord_resolve_project') {
460
576
  return runProtocol('discover-project', {
461
577
  ...(optionalString(args, 'projectId')
@@ -488,8 +604,12 @@ function callOverlordTool(name, args) {
488
604
  });
489
605
  }
490
606
  if (name === 'overlord_search_missions') {
491
- return runProtocol('search-missions', {
492
- 'response-version': '2',
607
+ const detail = optionalString(args, 'detail') || 'compact';
608
+ if (detail !== 'compact' && detail !== 'full') {
609
+ throw new Error("detail must be 'compact' or 'full'");
610
+ }
611
+ const response = await runProtocol('search', {
612
+ 'response-version': '3',
493
613
  ...(optionalString(args, 'query') ? { query: requiredString(args, 'query') } : {}),
494
614
  ...(optionalString(args, 'status') ? { status: requiredString(args, 'status') } : {}),
495
615
  ...(optionalString(args, 'projectId')
@@ -508,8 +628,18 @@ function callOverlordTool(name, args) {
508
628
  ...(optionalString(args, 'to') ? { to: requiredString(args, 'to') } : {}),
509
629
  ...(typeof args.limit === 'number' && Number.isFinite(args.limit)
510
630
  ? { limit: String(Math.trunc(args.limit)) }
631
+ : {}),
632
+ ...(optionalString(args, 'entityTypes')
633
+ ? { 'entity-types': requiredString(args, 'entityTypes') }
634
+ : {}),
635
+ ...(optionalString(args, 'objectiveStates')
636
+ ? { 'objective-states': requiredString(args, 'objectiveStates') }
637
+ : {}),
638
+ ...(typeof args.matchesPerResult === 'number' && Number.isFinite(args.matchesPerResult)
639
+ ? { 'matches-per-result': String(Math.trunc(args.matchesPerResult)) }
511
640
  : {})
512
641
  });
642
+ return detail === 'compact' ? compactSearchResponse(response) : response;
513
643
  }
514
644
  if (name === 'overlord_create_mission') {
515
645
  return runProtocol('create', {
@@ -543,6 +673,31 @@ function callOverlordTool(name, args) {
543
673
  : {})
544
674
  });
545
675
  }
676
+ if (name === 'overlord_list_deliveries') {
677
+ return runProtocol('list-deliveries', missionScopeFlags(args));
678
+ }
679
+ if (name === 'overlord_launch_objective') {
680
+ return runProtocol('launch-objective', {
681
+ 'objective-id': requiredString(args, 'objectiveId'),
682
+ agent: requiredString(args, 'agent'),
683
+ ...(optionalString(args, 'model') ? { model: requiredString(args, 'model') } : {}),
684
+ ...(optionalString(args, 'reasoningEffort')
685
+ ? { 'reasoning-effort': requiredString(args, 'reasoningEffort') }
686
+ : {}),
687
+ ...(optionalString(args, 'executionTargetId')
688
+ ? { 'execution-target-id': requiredString(args, 'executionTargetId') }
689
+ : {})
690
+ });
691
+ }
692
+ if (name === 'overlord_reorder_future_objectives') {
693
+ if (!Array.isArray(args.orderedObjectiveIds)) {
694
+ throw new Error('orderedObjectiveIds must be an array');
695
+ }
696
+ return runProtocol('reorder-future-objectives', {
697
+ 'mission-id': requiredString(args, 'missionId'),
698
+ 'ordered-objective-ids-json': args.orderedObjectiveIds
699
+ });
700
+ }
546
701
  if (name === 'overlord_add_objectives') {
547
702
  if (!Array.isArray(args.objectives)) throw new Error('objectives must be an array');
548
703
  return runProtocol('add-objectives', {
@@ -566,6 +721,17 @@ function callOverlordTool(name, args) {
566
721
  ...(hasInstructionText ? { 'instruction-text': requiredString(args, 'instructionText') } : {})
567
722
  });
568
723
  }
724
+ if (name === 'overlord_queue_objective') {
725
+ return runProtocol(args.remove === true ? 'dequeue-objective' : 'queue-objective', {
726
+ 'objective-id': requiredString(args, 'objectiveId'),
727
+ ...(args.remove === true
728
+ ? {}
729
+ : {
730
+ ...(optionalString(args, 'queue') ? { queue: requiredString(args, 'queue') } : {}),
731
+ ...(optionalString(args, 'after') ? { after: requiredString(args, 'after') } : {})
732
+ })
733
+ });
734
+ }
569
735
  if (name === 'overlord_attach_session') {
570
736
  return runProtocol('attach', {
571
737
  ...missionScopeFlags(args),
@@ -703,7 +869,7 @@ process.stdin.on('data', async chunk => {
703
869
  result: {
704
870
  protocolVersion: PROTOCOL_VERSION,
705
871
  capabilities: { tools: { listChanged: false } },
706
- serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.29' }
872
+ serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.31' }
707
873
  }
708
874
  });
709
875
  continue;
package/dist/index.js CHANGED
@@ -6675,6 +6675,13 @@ var init_resource_paths = __esm({
6675
6675
  }
6676
6676
  });
6677
6677
 
6678
+ // ../packages/contract/dist/search.js
6679
+ var init_search = __esm({
6680
+ "../packages/contract/dist/search.js"() {
6681
+ "use strict";
6682
+ }
6683
+ });
6684
+
6678
6685
  // ../packages/contract/dist/index.js
6679
6686
  var MY_MISSIONS_COLUMNS, MY_MISSIONS_COLUMN_TYPES;
6680
6687
  var init_dist2 = __esm({
@@ -6684,6 +6691,7 @@ var init_dist2 = __esm({
6684
6691
  init_launch_variables();
6685
6692
  init_objective_ref();
6686
6693
  init_resource_paths();
6694
+ init_search();
6687
6695
  MY_MISSIONS_COLUMNS = [
6688
6696
  { type: "next", label: "Next" },
6689
6697
  { type: "execute", label: "Executing" },
@@ -20909,7 +20917,8 @@ Subcommands:
20909
20917
  attach Start a mission session and return full working context
20910
20918
  connect Start a lightweight session without full context assembly
20911
20919
  load-context Read mission context without creating a session
20912
- search-missions Find missions by keyword, status, or project
20920
+ search Find grouped mission/objective/delivery matches (canonical)
20921
+ search-missions Compatibility alias for search
20913
20922
  discuss-objective Mark a draft objective as submitted (does not start execution)
20914
20923
  add-objectives Append ordered objectives to an existing mission
20915
20924
  update-objective Set auto-advance and/or instruction text on an objective
@@ -21018,9 +21027,83 @@ load-context:
21018
21027
  rediscovering the mission's active objective. Required
21019
21028
  on a mission running objectives in parallel.
21020
21029
 
21021
- search-missions:
21030
+ list-deliveries:
21031
+ Purpose:
21032
+ Read one mission's newest-first normalized delivery records without exposing
21033
+ arbitrary stored payload JSON.
21034
+ Required:
21035
+ --mission-id <id> Or --objective-id with a display id
21036
+ Optional:
21037
+ --objective-id <id> Supplies mission addressing when it is a display id
21038
+ Returns:
21039
+ DeliveryDto[] including summary, verification, follow-up notes, and normalized
21040
+ delivery report evidence.
21041
+
21042
+ launch-objective:
21043
+ Purpose:
21044
+ Queue the normal execution request for one objective. This does not attach the
21045
+ calling agent; a runner or eligible execution target performs the requested launch.
21046
+ Required:
21047
+ --objective-id <id> Objective UUID or display id
21048
+ --agent <identifier>
21049
+ Optional:
21050
+ --model <identifier>
21051
+ --reasoning-effort <value>
21052
+ --execution-target-id <id>
21053
+ Returns:
21054
+ The queued or already-active ExecutionRequestDto. Existing launchability,
21055
+ authorization, target resolution, sibling, and idempotency rules apply.
21056
+
21057
+ reorder-future-objectives:
21058
+ Purpose:
21059
+ Change the order of one mission's future objectives without moving draft,
21060
+ active, or complete objectives.
21061
+ Required:
21062
+ --mission-id <uuid>
21063
+ --ordered-objective-ids-json <json>
21064
+ Returns:
21065
+ The mission's full ObjectiveDto[] list in its new order.
21066
+ Rules:
21067
+ Supply every future objective UUID in the complete desired top-to-bottom order.
21068
+ Duplicate, missing, and non-future objective ids are rejected.
21069
+
21070
+ run-queue:
21071
+ Purpose:
21072
+ Read every live Run Queue in one project, including queued, held, and running entries.
21073
+ Required:
21074
+ --project-id <id|slug|name>
21075
+ Returns:
21076
+ ProjectRunQueuesDto JSON. This reads sequencing state; it does not launch work.
21077
+
21078
+ queue-objective:
21079
+ Purpose:
21080
+ Add or move one objective in the authoritative Run Queue without choosing a target.
21081
+ Required:
21082
+ --objective-id <id> Objective UUID or display id
21083
+ Optional:
21084
+ --project-id <id|slug|name> Confirms the objective's project
21085
+ --queue <id|name> Queue UUID or unambiguous queue name
21086
+ --after <entry|objective> Queue after this queued entry/objective
21087
+ --front Place first in the selected/default queue
21088
+ --position <n> One-based insertion rank
21089
+ Rules:
21090
+ Choose at most one of --after, --front, and --position. Without --queue,
21091
+ --after selects its queue; otherwise the default queue is used. Re-running
21092
+ without placement is idempotent.
21093
+
21094
+ dequeue-objective:
21095
+ Purpose:
21096
+ Remove one objective from the authoritative Run Queue.
21097
+ Required:
21098
+ --objective-id <id> Objective UUID or display id
21099
+ Optional:
21100
+ --project-id <id|slug|name> Confirms the objective's project
21101
+ Returns:
21102
+ { removed, objectiveId }. Already-unqueued objectives return removed: false.
21103
+
21104
+ search:
21022
21105
  Purpose:
21023
- Find missions by keyword, status type, or project.
21106
+ Find grouped mission, objective, and delivery matches by keyword, status type, or project.
21024
21107
  Optional:
21025
21108
  --query <text> Free-text search
21026
21109
  --status <csv> Comma-separated status TYPES (e.g. execute,review).
@@ -21042,11 +21125,16 @@ search-missions:
21042
21125
  --from <ISO-8601> Inclusive date/time lower bound
21043
21126
  --to <ISO-8601> Exclusive date/time upper bound
21044
21127
  --limit <n> Max results (default: 25)
21045
- --response-version <1|2> 1 (default) returns the legacy array; 2 returns
21128
+ --response-version <1|2|3> 1 (default) returns the legacy array; 2 returns
21046
21129
  SearchMissionsResponseV2 with snippets, match
21047
- evidence, appliedFilters, and truncation counts
21130
+ evidence, appliedFilters, and truncation counts;
21131
+ 3 returns SearchResponseV3 with grouped objective
21132
+ and delivery matches
21133
+ --entity-types <csv> V3 only: mission,objective,delivery (default all)
21134
+ --objective-states <csv> V3 only: restrict matching objective states
21135
+ --matches-per-result <n> V3 only: child matches per mission (default 3, max 10)
21048
21136
  Returns:
21049
- JSON with matching missions (v1) or the versioned search envelope (v2).
21137
+ JSON with matching missions (v1) or the versioned search envelope (v2/v3).
21050
21138
 
21051
21139
  statuses:
21052
21140
  Purpose:
@@ -21085,7 +21173,7 @@ add-objectives:
21085
21173
 
21086
21174
  update-objective:
21087
21175
  Purpose:
21088
- Turn auto-advance on or off and/or edit instruction text on an existing objective.
21176
+ Queue or dequeue compatibility auto-advance and/or edit instruction text on an existing objective.
21089
21177
  Required:
21090
21178
  --objective-id <id>
21091
21179
  At least one of:
@@ -21095,7 +21183,7 @@ update-objective:
21095
21183
  Instruction text may be edited only when the objective is in draft or future state.
21096
21184
  Blank instruction text is allowed in those states.
21097
21185
  Returns:
21098
- The updated objective JSON, including autoAdvance and instructionText.
21186
+ The updated objective JSON. autoAdvance is deprecated and derived from live queueEntry membership.
21099
21187
 
21100
21188
  create:
21101
21189
  Purpose:
@@ -21110,7 +21198,7 @@ create:
21110
21198
  --inbox Force an account-owned inbox item instead of a project mission
21111
21199
  --assigned-to <id> Workspace member to own the mission (meaningless on the inbox fallback)
21112
21200
  --auto-advance / --no-auto-advance
21113
- Queue the next objective after this one is delivered. Defaults to off.
21201
+ Add matching objectives to the authoritative Run Queue. Defaults to off.
21114
21202
  Per-item override: "autoAdvance": true|false in --objectives-json items.
21115
21203
 
21116
21204
  prompt:
@@ -21126,7 +21214,7 @@ prompt:
21126
21214
  --external-session-id <id>
21127
21215
  --assigned-to <id> Workspace member to own the mission
21128
21216
  --auto-advance / --no-auto-advance
21129
- Queue the next objective after this one is delivered. Defaults to off.
21217
+ Add matching objectives to the authoritative Run Queue. Defaults to off.
21130
21218
  Per-item override: "autoAdvance": true|false in --objectives-json items.
21131
21219
  Returns:
21132
21220
  New mission/session JSON plus SESSION_KEY on stderr when available.
@@ -21390,18 +21478,25 @@ var init_protocol_help = __esm({
21390
21478
  "changes",
21391
21479
  "connect",
21392
21480
  "create",
21481
+ "dequeue-objective",
21393
21482
  "deliver",
21394
21483
  "discover-project",
21395
21484
  "discuss-objective",
21396
21485
  "heartbeat",
21397
21486
  "hook-event",
21487
+ "launch-objective",
21488
+ "list-deliveries",
21398
21489
  "list-organizations",
21399
21490
  "load-context",
21400
21491
  "prompt",
21401
21492
  "read-context",
21402
21493
  "record-touched",
21403
21494
  "record-work",
21495
+ "reorder-future-objectives",
21496
+ "run-queue",
21497
+ "queue-objective",
21404
21498
  "resume-follow-up",
21499
+ "search",
21405
21500
  "search-missions",
21406
21501
  "update",
21407
21502
  "update-artifact",
@@ -25023,7 +25118,8 @@ Agents:
25023
25118
  ${primaryCommand} launch <agent> --mission-id <missionId>
25024
25119
  Use ${primaryCommand} protocol help for the full mission lifecycle reference.
25025
25120
  Key protocol commands: auth-status, discover-project, create, prompt, attach,
25026
- connect, load-context, update, heartbeat, ask, deliver.
25121
+ connect, load-context, list-deliveries, launch-objective, reorder-future-objectives,
25122
+ update, heartbeat, ask, deliver.
25027
25123
 
25028
25124
  Protocol (JSON output by default):
25029
25125
  ${primaryCommand} protocol attach --mission-id <id> | --objective-id <display-id>
@@ -25031,9 +25127,12 @@ Protocol (JSON output by default):
25031
25127
  ${primaryCommand} protocol heartbeat --mission-id <id> --session-key <key>
25032
25128
  ${primaryCommand} protocol ask --mission-id <id> --session-key <key> --question "..."
25033
25129
  ${primaryCommand} protocol deliver --mission-id <id> --session-key <key> --summary "..."
25034
- ${primaryCommand} protocol search-missions --query "<text>" --status execute,review
25130
+ ${primaryCommand} protocol search --query "<text>" --status execute,review
25035
25131
  ${primaryCommand} protocol statuses --project-id <id|slug|name>
25036
25132
  ${primaryCommand} protocol load-context --mission-id <id>
25133
+ ${primaryCommand} protocol list-deliveries --mission-id <id>
25134
+ ${primaryCommand} protocol launch-objective --objective-id <id> --agent <agent>
25135
+ ${primaryCommand} protocol reorder-future-objectives --mission-id <id> --ordered-objective-ids-json '["<id>"]'
25037
25136
  ${primaryCommand} protocol help
25038
25137
 
25039
25138
  After installation, run \`${primaryCommand} auth login\` to choose your backend.