overlord-cli 0.2609150845.0 → 0.2609181229.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.
package/README.md CHANGED
@@ -257,9 +257,9 @@ colocation convention):
257
257
  The packaged CLI lives in this module as a self-contained Yarn sub-project:
258
258
 
259
259
  ```bash
260
- yarn build:cli:prod # tsc emit + esbuild bundle to cli/dist/index.js
260
+ yarn cli:build:prod # tsc emit + esbuild bundle to cli/dist/index.js
261
261
  yarn test:cli # unit + subprocess smoke tests
262
- yarn pack:cli:prod # produce an installable tarball
262
+ yarn cli:pack:prod # produce an installable tarball
263
263
  node cli/bin/ovld.mjs version
264
264
  ```
265
265
 
@@ -276,7 +276,7 @@ cli/
276
276
  ```
277
277
 
278
278
  The CLI ships command parsing, config/auth onboarding, connector setup, backend
279
- client calls, and local runner/agent launch logic. Run `yarn build:cli:prod` before using
279
+ client calls, and local runner/agent launch logic. Run `yarn cli:build:prod` before using
280
280
  the compiled CLI (`node cli/bin/ovld.mjs …`).
281
281
 
282
282
  ### In-repo build vs installed CLI
@@ -1 +1 @@
1
- 0.3.46
1
+ 0.3.47
@@ -1,4 +1,4 @@
1
- contractVersion: "142"
1
+ contractVersion: "143"
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.46",
4
+ "version": "0.3.47",
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.46",
3
+ "version": "0.3.47",
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,4 +1,4 @@
1
- contractVersion: "142"
1
+ contractVersion: "143"
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.46",
3
+ "version": "0.3.47",
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: "142"
1
+ contractVersion: "143"
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.46",
3
+ "version": "0.3.47",
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",
@@ -1,4 +1,4 @@
1
- contractVersion: "142"
1
+ contractVersion: "143"
2
2
  componentType: connector
3
3
  componentKey: cursor
4
4
  label: "Cursor Connector"
@@ -1,4 +1,4 @@
1
- contractVersion: "142"
1
+ contractVersion: "143"
2
2
  componentType: connector
3
3
  componentKey: opencode
4
4
  label: "OpenCode Connector"
@@ -1,4 +1,4 @@
1
- contractVersion: "142"
1
+ contractVersion: "143"
2
2
  componentType: connector
3
3
  componentKey: pi
4
4
  label: "PI Connector"
@@ -501,7 +501,7 @@ const tools = [
501
501
  name: 'overlord_queue_objective',
502
502
  title: 'Queue objective',
503
503
  description:
504
- '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.',
504
+ '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. Adding an objective also queues every not-yet-started objective after it in the mission; a removed objective moves to the end of its mission.',
505
505
  inputSchema: objectSchema(
506
506
  {
507
507
  objectiveId: stringProperty('Objective UUID or display id such as coo:756.k7xm.'),
@@ -1228,7 +1228,7 @@ process.stdin.on('data', async chunk => {
1228
1228
  result: {
1229
1229
  protocolVersion: PROTOCOL_VERSION,
1230
1230
  capabilities: { tools: { listChanged: false } },
1231
- serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.46' }
1231
+ serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.47' }
1232
1232
  }
1233
1233
  });
1234
1234
  continue;
@@ -127,9 +127,7 @@ Setup should work without the desktop app and should not fail hard when the Clau
127
127
 
128
128
  ## Cursor Connector
129
129
 
130
- Can be implemented after Codex and Claude.
131
-
132
- Requirements:
130
+ Shipped. Requirements:
133
131
 
134
132
  - Install local Cursor plugin/rules/commands.
135
133
  - Add `beforeSubmitPrompt` hook to record follow-ups.
@@ -156,9 +154,8 @@ Requirements:
156
154
 
157
155
  ## Antigravity Connector
158
156
 
159
- Can be implemented after local MVP.
160
-
161
- Requirements:
157
+ Shipped, currently fixture-proven only at tier 0 — see
158
+ `connectors/adapters/antigravity/CAPABILITIES.md`. Requirements:
162
159
 
163
160
  - Install Antigravity plugin.
164
161
  - Provide protocol skill and commands.
package/dist/index.js CHANGED
@@ -18478,7 +18478,10 @@ function launchSessionSnapshotFromMetadata(metadata) {
18478
18478
  openOnLaunch: viewer?.openOnLaunch !== false,
18479
18479
  // A snapshot frozen before `openAs` existed carries none; `window` is what
18480
18480
  // those runs actually did, so the absent case must not become `tab`.
18481
- openAs: parseViewerOpenAs(viewer?.openAs)
18481
+ openAs: parseViewerOpenAs(viewer?.openAs),
18482
+ // A snapshot frozen before `background` existed carries none; those runs
18483
+ // opened in the foreground, so absent must not become background.
18484
+ background: viewer?.background === true
18482
18485
  },
18483
18486
  executionProviderSource: source(cast.executionProviderSource),
18484
18487
  viewerOpenSource: source(cast.viewerOpenSource),
@@ -19072,11 +19075,20 @@ function latchSupportsOpenAs(productVersion) {
19072
19075
  return false;
19073
19076
  return compareLatchProductVersions(version2, LATCH_OPEN_AS_MIN_PRODUCT_VERSION) >= 0;
19074
19077
  }
19075
- function buildLatchOpenArgs({ providerSessionId, viewer, openAs, productVersion }) {
19078
+ function latchSupportsOpenBackground(productVersion) {
19079
+ const version2 = trimmed5(productVersion);
19080
+ if (!version2)
19081
+ return false;
19082
+ return compareLatchProductVersions(version2, LATCH_OPEN_BACKGROUND_MIN_PRODUCT_VERSION) >= 0;
19083
+ }
19084
+ function buildLatchOpenArgs({ providerSessionId, viewer, openAs, background, productVersion }) {
19076
19085
  const args = ["open", providerSessionId, "--with", viewer];
19077
19086
  if (openAs && latchSupportsOpenAs(productVersion)) {
19078
19087
  args.push("--as", parseViewerOpenAs(openAs));
19079
19088
  }
19089
+ if (typeof background === "boolean" && latchSupportsOpenBackground(productVersion)) {
19090
+ args.push(background ? "--background" : "--foreground");
19091
+ }
19080
19092
  args.push("--json");
19081
19093
  return args;
19082
19094
  }
@@ -19086,7 +19098,7 @@ function latchAttachCommand({ executable = "latch", providerSessionId }) {
19086
19098
  function shouldUseLatchProvider({ providerKind, latchSelectable }) {
19087
19099
  return trimmed5(providerKind)?.toLowerCase() === "latch" && latchSelectable === true;
19088
19100
  }
19089
- var LATCH_MANIFEST_FORMAT_VERSION, DEFAULT_LATCH_TERMINAL_SIZE, LATCH_OPEN_AS_MIN_PRODUCT_VERSION;
19101
+ var LATCH_MANIFEST_FORMAT_VERSION, DEFAULT_LATCH_TERMINAL_SIZE, LATCH_OPEN_AS_MIN_PRODUCT_VERSION, LATCH_OPEN_BACKGROUND_MIN_PRODUCT_VERSION;
19090
19102
  var init_latch_launch = __esm({
19091
19103
  "../packages/core/dist/service/latch-launch.js"() {
19092
19104
  "use strict";
@@ -19094,6 +19106,7 @@ var init_latch_launch = __esm({
19094
19106
  LATCH_MANIFEST_FORMAT_VERSION = 1;
19095
19107
  DEFAULT_LATCH_TERMINAL_SIZE = { cols: 120, rows: 36 };
19096
19108
  LATCH_OPEN_AS_MIN_PRODUCT_VERSION = "0.2608140931.0";
19109
+ LATCH_OPEN_BACKGROUND_MIN_PRODUCT_VERSION = "0.2609181007.0";
19097
19110
  }
19098
19111
  });
19099
19112
 
@@ -36788,6 +36801,7 @@ function openLatchViewer({
36788
36801
  providerSessionId,
36789
36802
  viewerKind,
36790
36803
  openAs,
36804
+ background,
36791
36805
  productVersion
36792
36806
  }) {
36793
36807
  const viewer = latchViewerFlagForKind(viewerKind);
@@ -36802,7 +36816,7 @@ function openLatchViewer({
36802
36816
  const sendsOpenAs = Boolean(openAs) && latchSupportsOpenAs(productVersion);
36803
36817
  const result = spawnLatchJson({
36804
36818
  executable,
36805
- args: buildLatchOpenArgs({ providerSessionId, viewer, openAs, productVersion })
36819
+ args: buildLatchOpenArgs({ providerSessionId, viewer, openAs, background, productVersion })
36806
36820
  });
36807
36821
  if (result.status !== 0) {
36808
36822
  const detail = (result.stderr || result.stdout || `exit ${result.status ?? "null"}`).trim();
@@ -36812,7 +36826,13 @@ function openLatchViewer({
36812
36826
  attachCommand
36813
36827
  };
36814
36828
  }
36815
- return { ok: true, viewer, openAs: sendsOpenAs ? parseViewerOpenAs(openAs) : null };
36829
+ const sendsBackground = typeof background === "boolean" && latchSupportsOpenBackground(productVersion);
36830
+ return {
36831
+ ok: true,
36832
+ viewer,
36833
+ openAs: sendsOpenAs ? parseViewerOpenAs(openAs) : null,
36834
+ background: sendsBackground ? background : null
36835
+ };
36816
36836
  }
36817
36837
  var init_latch_launch2 = __esm({
36818
36838
  "src/latch-launch.ts"() {
@@ -37688,6 +37708,9 @@ async function launchAgent({
37688
37708
  providerSessionId: created.providerSession.providerSessionId,
37689
37709
  viewerKind: snapshot?.viewer.kind ?? "iterm",
37690
37710
  openAs: snapshot?.viewer.openAs ?? null,
37711
+ // Falls back to the resolved profile for a request claimed before the
37712
+ // snapshot carried `background`.
37713
+ background: snapshot?.viewer.background ?? options.terminalLaunchBackground ?? false,
37691
37714
  productVersion: latchProductVersion
37692
37715
  });
37693
37716
  }
@@ -38231,6 +38254,8 @@ create-run-queue:
38231
38254
  Returns:
38232
38255
  The created RunQueueDto, unpaused and positioned after the existing queues.
38233
38256
  Rules:
38257
+ A new queue stays until it is used. Once it has held an entry and its last
38258
+ entry completes, is removed, or moves away, the queue deletes itself.
38234
38259
  Queue definitions are project configuration and require the project:update
38235
38260
  permission, so a mission_lifecycle-scoped agent token cannot run this. Entry
38236
38261
  operations (queue-objective, dequeue-objective, reorder-run-queue) are
@@ -38306,6 +38331,9 @@ queue-objective:
38306
38331
  Choose at most one of --after, --front, and --position. Without --queue,
38307
38332
  --after selects its queue; otherwise the default queue is used. Re-running
38308
38333
  without placement is idempotent.
38334
+ Queueing an objective also queues every not-yet-started objective after it
38335
+ in the mission, directly behind it. Queue order and mission objective order
38336
+ are one sequence: reordering either reorders the other.
38309
38337
 
38310
38338
  dequeue-objective:
38311
38339
  Purpose:
@@ -38316,6 +38344,9 @@ dequeue-objective:
38316
38344
  --project-id <id|slug|name> Confirms the objective's project
38317
38345
  Returns:
38318
38346
  { removed, objectiveId }. Already-unqueued objectives return removed: false.
38347
+ Rules:
38348
+ A removed objective that has not started moves to the end of its mission's
38349
+ objectives, and stays last when queued again unless it is moved.
38319
38350
 
38320
38351
  retry-queue-entry:
38321
38352
  Purpose: