overlord-cli 0.2608071121.0 → 0.2608090916.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.18
1
+ 0.3.19
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://antigravity.google/schemas/v1/plugin.json",
3
3
  "name": "overlord",
4
- "version": "0.3.18",
4
+ "version": "0.3.19",
5
5
  "description": "Chat-driven access to Overlord mission protocol workflows with hook-driven activity capture.",
6
6
  "author": {
7
7
  "name": "Cooperativ",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.18",
3
+ "version": "0.3.19",
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",
@@ -6,7 +6,7 @@
6
6
 
7
7
  **Harness version verified** `2.1.221` · **range** `>=2.1.0` · **scheme** `semver`
8
8
 
9
- **Descriptor digest** `a90745bb59252df29006cf632a030108e68fde84f956910e02cc842833e6f8d6`
9
+ **Descriptor digest** `bdeb8c46cb12d692aced13597c6c2120312c303f3aaeb597b891d83e054db365`
10
10
 
11
11
  > The tier is derived from passing fixtures, never authored. `unsupported` means the harness
12
12
  > cannot do it — do not attempt it. `not-implemented` means it is buildable and unbuilt: that is
@@ -88,7 +88,7 @@ Per-command `timeout` in seconds with no documented ceiling. Omitting `decision`
88
88
 
89
89
  **`shipped-permission-hook-inert`** — The installed PermissionRequest hook calls a `ovld protocol permission-request` subcommand that does not exist, backgrounds the call with `) & disown`, and is gated on a MISSION_ID environment variable launched sessions do not always set. It records nothing and, being backgrounded with stdout discarded, is structurally incapable of returning a decision. The shipped conformance `permissionHook` flag therefore overstates what happens today.
90
90
 
91
- **`shipped-stop-hook-inert`** — The installed Stop hook calls `ovld protocol hook-event --hook-type Stop`, which the CLI rejects, and then parses a `deliveryStatus` field nothing produces. Its mission-link footer still works. Confirmed again at 2.1.221 from a live agent-pod session: every entry in ~/.ovld/logs/stop-hook.log takes the `no launch mission id` branch and returns before the delivery check, because the hook gates on a `MISSION_ID` environment variable the pod does not set. The PostToolUse hook works in the same session because it resolves the mission from the per-cwd active-session manifest instead; the Stop hook should resolve it the same way.
91
+ **`shipped-stop-hook-inert`** — The installed Stop hook calls `ovld protocol hook-event --hook-type Stop`, which the CLI rejects, and then parses a `deliveryStatus` field nothing produces. Confirmed again at 2.1.221 from a live agent-pod session: every entry in ~/.ovld/logs/stop-hook.log takes the `no launch mission id` branch and returns before the delivery check, because the hook gates on a `MISSION_ID` environment variable the pod does not set. The PostToolUse hook works in the same session because it resolves the mission from the per-cwd active-session manifest instead; the Stop hook should resolve it the same way.
92
92
 
93
93
  **`unbound-session-side-effects`** — NARROWED, NOT CLOSED. The new agent-session registrations gate in bash on OVERLORD_SESSION_CHANNEL_ID before spawning anything, so they are completely silent in an unbound session (proved by fixtures/agent-session-hook-unbound.json). The LEGACY PostToolUse hook still spawns `ovld protocol record-touched` and appends to ~/.ovld/logs in every session on the machine, because its scope gate lives inside the CLI rather than before the spawn (proved by fixtures/unbound-session.json). It stays installed on purpose: it is what feeds touched-file change attribution at deliver time, and removing it before the normalized path has demonstrated equivalent attribution would trade a privacy nit for a data-loss bug. Closing this means retiring the legacy hook, which is a migration, not a patch.
94
94
 
@@ -15,7 +15,7 @@ connector:
15
15
  harnessCapabilities:
16
16
  path: connectors/adapters/claude/harness-capabilities.yaml
17
17
  schemaVersion: 1
18
- digest: "a90745bb59252df29006cf632a030108e68fde84f956910e02cc842833e6f8d6"
18
+ digest: "bdeb8c46cb12d692aced13597c6c2120312c303f3aaeb597b891d83e054db365"
19
19
  capabilities:
20
20
  - followUpHook
21
21
  - permissionHook
@@ -183,8 +183,8 @@ hazards:
183
183
  severity: medium
184
184
  summary: >-
185
185
  The installed Stop hook calls `ovld protocol hook-event --hook-type Stop`, which the CLI
186
- rejects, and then parses a `deliveryStatus` field nothing produces. Its mission-link
187
- footer still works. Confirmed again at 2.1.221 from a live agent-pod session: every entry
186
+ rejects, and then parses a `deliveryStatus` field nothing produces. Confirmed again at
187
+ 2.1.221 from a live agent-pod session: every entry
188
188
  in ~/.ovld/logs/stop-hook.log takes the `no launch mission id` branch and returns before
189
189
  the delivery check, because the hook gates on a `MISSION_ID` environment variable the pod
190
190
  does not set. The PostToolUse hook works in the same session because it resolves the
@@ -18,8 +18,7 @@ if ! command -v ovld >/dev/null 2>&1; then
18
18
  fi
19
19
 
20
20
  if [ -z "${MISSION_ID:-}" ]; then
21
- log_hook "no launch mission id; printing any cwd mission-link pointer"
22
- ovld protocol mission-link 2>/dev/null || true
21
+ log_hook "no launch mission id, skipping delivery check"
23
22
  exit 0
24
23
  fi
25
24
 
@@ -78,9 +77,5 @@ else
78
77
  log_hook "hook-event failed exit=$OVLD_EXIT"
79
78
  fi
80
79
 
81
- # Keep the current mission reachable at the bottom of every completed turn.
82
- # This is local-only and deliberately does not affect Stop-hook delivery state.
83
- ovld protocol mission-link 2>/dev/null || true
84
-
85
80
  rm -f "$RESPONSE_FILE"
86
81
  exit 0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.18",
3
+ "version": "0.3.19",
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.18",
3
+ "version": "0.3.19",
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",
@@ -27,15 +27,13 @@ if [ -n "${OVERLORD_SESSION_CHANNEL_ID:-}" ]; then
27
27
  if [ "$INBOX_EXIT" -eq 0 ] && [ -n "$INBOX_OUT" ]; then
28
28
  # followup_message JSON from inbox — Queued(turn-boundary), never Delivered.
29
29
  printf '%s' "$INBOX_OUT"
30
- ovld protocol mission-link >&2 2>/dev/null || true
31
30
  exit 0
32
31
  fi
33
32
  fi
34
33
 
35
34
  if [ -z "${MISSION_ID:-}" ]; then
36
- log_hook "no launch mission id; printing any cwd mission-link pointer"
35
+ log_hook "no launch mission id, skipping delivery check"
37
36
  printf '{}'
38
- ovld protocol mission-link >&2 2>/dev/null || true
39
37
  exit 0
40
38
  fi
41
39
 
@@ -90,10 +88,5 @@ else
90
88
  printf '{}'
91
89
  fi
92
90
 
93
- # Preserve Cursor's machine-readable stdout response; the human-facing footer
94
- # belongs on stderr after Cursor has consumed that JSON. mission-link does not
95
- # call the backend or alter the hook response above.
96
- ovld protocol mission-link >&2 2>/dev/null || true
97
-
98
91
  rm -f "$RESPONSE_FILE"
99
92
  exit 0
@@ -513,7 +513,7 @@ process.stdin.on('data', async chunk => {
513
513
  result: {
514
514
  protocolVersion: PROTOCOL_VERSION,
515
515
  capabilities: { tools: { listChanged: false } },
516
- serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.18' }
516
+ serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.19' }
517
517
  }
518
518
  });
519
519
  continue;
package/dist/index.js CHANGED
@@ -4378,7 +4378,7 @@ var init_catalog_generated = __esm({
4378
4378
  "codec": "claude",
4379
4379
  "integrationShape": "callback",
4380
4380
  "capabilityTier": 3,
4381
- "descriptorDigest": "a90745bb59252df29006cf632a030108e68fde84f956910e02cc842833e6f8d6",
4381
+ "descriptorDigest": "bdeb8c46cb12d692aced13597c6c2120312c303f3aaeb597b891d83e054db365",
4382
4382
  "descriptorSchemaVersion": 1,
4383
4383
  "harness": {
4384
4384
  "name": "Claude Code",
@@ -4532,7 +4532,7 @@ var init_catalog_generated = __esm({
4532
4532
  {
4533
4533
  "id": "shipped-stop-hook-inert",
4534
4534
  "severity": "medium",
4535
- "summary": "The installed Stop hook calls `ovld protocol hook-event --hook-type Stop`, which the CLI rejects, and then parses a `deliveryStatus` field nothing produces. Its mission-link footer still works. Confirmed again at 2.1.221 from a live agent-pod session: every entry in ~/.ovld/logs/stop-hook.log takes the `no launch mission id` branch and returns before the delivery check, because the hook gates on a `MISSION_ID` environment variable the pod does not set. The PostToolUse hook works in the same session because it resolves the mission from the per-cwd active-session manifest instead; the Stop hook should resolve it the same way.",
4535
+ "summary": "The installed Stop hook calls `ovld protocol hook-event --hook-type Stop`, which the CLI rejects, and then parses a `deliveryStatus` field nothing produces. Confirmed again at 2.1.221 from a live agent-pod session: every entry in ~/.ovld/logs/stop-hook.log takes the `no launch mission id` branch and returns before the delivery check, because the hook gates on a `MISSION_ID` environment variable the pod does not set. The PostToolUse hook works in the same session because it resolves the mission from the per-cwd active-session manifest instead; the Stop hook should resolve it the same way.",
4536
4536
  "verification": "verified",
4537
4537
  "mitigation": "required",
4538
4538
  "trackedAs": "agent-session-phase-3"
@@ -5343,7 +5343,7 @@ var init_catalog_generated = __esm({
5343
5343
  }
5344
5344
  }
5345
5345
  ];
5346
- HARNESS_CATALOG_DIGEST = "6f047304e488db018479b5b3349d2153e37b4398903ac65d8e47ac9e3be3783d";
5346
+ HARNESS_CATALOG_DIGEST = "9bf0a21f8df7f6bf417dc00c474980432a8b3167e56b56579f4bf5e51d81bbf4";
5347
5347
  }
5348
5348
  });
5349
5349
 
@@ -6224,8 +6224,8 @@ async function runLocalCommand({
6224
6224
  });
6225
6225
  }
6226
6226
  {
6227
- const { readActiveMissionPointer: readActiveMissionPointer3 } = await Promise.resolve().then(() => (init_binding(), binding_exports));
6228
- const binding = readActiveMissionPointer3({ workingDirectory: process.cwd() });
6227
+ const { readActiveMissionPointer: readActiveMissionPointer4 } = await Promise.resolve().then(() => (init_binding(), binding_exports));
6228
+ const binding = readActiveMissionPointer4({ workingDirectory: process.cwd() });
6229
6229
  checks.push({
6230
6230
  name: "agent-session-binding",
6231
6231
  ok: true,
@@ -16565,7 +16565,7 @@ var init_util2 = __esm({
16565
16565
 
16566
16566
  // ../packages/core/dist/service/local-target/project-metadata.js
16567
16567
  import { execFileSync } from "node:child_process";
16568
- import { chmodSync as chmodSync4, existsSync as existsSync15, mkdirSync as mkdirSync8, readFileSync as readFileSync14, writeFileSync as writeFileSync7 } from "node:fs";
16568
+ import { existsSync as existsSync15, mkdirSync as mkdirSync8, readFileSync as readFileSync14, writeFileSync as writeFileSync7 } from "node:fs";
16569
16569
  import path15 from "node:path";
16570
16570
  function writeIfChanged(filePath, content) {
16571
16571
  if (!existsSync15(filePath) || readFileSync14(filePath, "utf8") !== content) {
@@ -16606,59 +16606,11 @@ function resolveGitRoot(directoryPath) {
16606
16606
  return null;
16607
16607
  }
16608
16608
  }
16609
- function resolveGitHooksDirectory(gitRoot) {
16610
- try {
16611
- const gitPath2 = execFileSync("git", ["-C", gitRoot, "rev-parse", "--git-path", "hooks"], {
16612
- encoding: "utf8",
16613
- stdio: ["ignore", "pipe", "ignore"]
16614
- }).trim();
16615
- return path15.isAbsolute(gitPath2) ? gitPath2 : path15.resolve(gitRoot, gitPath2);
16616
- } catch {
16617
- return null;
16618
- }
16619
- }
16620
- function ensurePreCommitGuard(gitRoot) {
16621
- const hooksDirectory = resolveGitHooksDirectory(gitRoot);
16622
- if (!hooksDirectory)
16623
- return;
16624
- mkdirSync8(hooksDirectory, { recursive: true });
16625
- const guardPath = path15.join(hooksDirectory, HOOK_GUARD_FILENAME);
16626
- writeIfChanged(guardPath, `#!/bin/sh
16627
- # Managed by Overlord: reject any staged project-link metadata change.
16628
- if git diff --cached --quiet -- .overlord/project.json; then
16629
- exit 0
16630
- fi
16631
- echo "Overlord blocked this commit: .overlord/project.json is managed metadata and must not be changed." >&2
16632
- exit 1
16633
- `);
16634
- chmodSync4(guardPath, 493);
16635
- const preCommitPath = path15.join(hooksDirectory, "pre-commit");
16636
- const hookBlock = `${HOOK_BLOCK_START}
16637
- "$(dirname "$0")/${HOOK_GUARD_FILENAME}" || exit $?
16638
- ${HOOK_BLOCK_END}`;
16639
- if (!existsSync15(preCommitPath)) {
16640
- writeFileSync7(preCommitPath, `#!/bin/sh
16641
- ${hookBlock}
16642
- `);
16643
- chmodSync4(preCommitPath, 493);
16644
- return;
16645
- }
16646
- const existing = readFileSync14(preCommitPath, "utf8");
16647
- const blockPattern = new RegExp(`${HOOK_BLOCK_START}[\\s\\S]*?${HOOK_BLOCK_END}\\n?`, "g");
16648
- const updated = `${existing.replace(blockPattern, "").trimEnd()}
16649
-
16650
- ${hookBlock}
16651
- `;
16652
- writeIfChanged(preCommitPath, updated);
16653
- chmodSync4(preCommitPath, 493);
16654
- }
16655
16609
  function protectProjectMetadata(directoryPath) {
16656
16610
  const gitRoot = resolveGitRoot(directoryPath);
16657
16611
  const checkoutPath = gitRoot ?? directoryPath;
16658
16612
  ensureAgentInstructions(checkoutPath);
16659
16613
  ensureGitignore(checkoutPath);
16660
- if (gitRoot)
16661
- ensurePreCommitGuard(gitRoot);
16662
16614
  }
16663
16615
  function parseProjectJson(projectJsonPath) {
16664
16616
  if (!existsSync15(projectJsonPath))
@@ -16720,7 +16672,7 @@ function writeProjectJson({ directoryPath, projectId, resourceId, resourceKey, e
16720
16672
  `);
16721
16673
  return projectJsonPath;
16722
16674
  }
16723
- var PROJECT_JSON_VERSION, PROJECT_JSON_WARNING, INSTRUCTION_BLOCK_START, INSTRUCTION_BLOCK_END, PROJECT_METADATA_INSTRUCTION, HOOK_GUARD_FILENAME, HOOK_BLOCK_START, HOOK_BLOCK_END;
16675
+ var PROJECT_JSON_VERSION, PROJECT_JSON_WARNING, INSTRUCTION_BLOCK_START, INSTRUCTION_BLOCK_END, PROJECT_METADATA_INSTRUCTION;
16724
16676
  var init_project_metadata = __esm({
16725
16677
  "../packages/core/dist/service/local-target/project-metadata.js"() {
16726
16678
  "use strict";
@@ -16736,9 +16688,6 @@ var init_project_metadata = __esm({
16736
16688
  replace, stage, commit, delete, or revert it. If its link metadata needs to
16737
16689
  change, use Overlord's resource-linking command instead.
16738
16690
  ${INSTRUCTION_BLOCK_END}`;
16739
- HOOK_GUARD_FILENAME = "overlord-project-json-guard";
16740
- HOOK_BLOCK_START = "# >>> Overlord project metadata guard >>>";
16741
- HOOK_BLOCK_END = "# <<< Overlord project metadata guard <<<";
16742
16691
  }
16743
16692
  });
16744
16693
 
@@ -18166,66 +18115,6 @@ var init_pre_launch = __esm({
18166
18115
  }
18167
18116
  });
18168
18117
 
18169
- // src/mission-link.ts
18170
- function missionDeepLink(displayId) {
18171
- return `overlord://missions/${displayId.trim()}`;
18172
- }
18173
- function sanitizeTerminalText(value) {
18174
- return value.replace(/[\u0000-\u001f\u007f]/g, " ").replace(/\s+/g, " ").trim();
18175
- }
18176
- function missionTerminalTitle({
18177
- displayId,
18178
- title
18179
- }) {
18180
- const id = sanitizeTerminalText(displayId);
18181
- const trimmedTitle = title ? sanitizeTerminalText(title) : "";
18182
- return trimmedTitle ? `${id} \u2014 ${trimmedTitle}` : id;
18183
- }
18184
- function shouldUseTerminalHyperlinks({
18185
- env = process.env,
18186
- isTty = Boolean(process.stderr.isTTY)
18187
- } = {}) {
18188
- if (!isTty) return false;
18189
- if (env.OVERLORD_NO_TERMINAL_LINKS === "1") return false;
18190
- if (env.NO_COLOR !== void 0 && env.NO_COLOR !== "") return false;
18191
- if ((env.TERM ?? "").toLowerCase() === "dumb") return false;
18192
- return true;
18193
- }
18194
- function missionLinkLine({ displayId, title, hyperlink }) {
18195
- const id = sanitizeTerminalText(displayId);
18196
- if (!id) return "";
18197
- const link = missionDeepLink(id);
18198
- const label = missionTerminalTitle({ displayId: id, title });
18199
- const useHyperlink = hyperlink ?? shouldUseTerminalHyperlinks({ env: process.env, isTty: Boolean(process.stderr.isTTY) });
18200
- if (useHyperlink) {
18201
- return `\x1B]8;;${link}\x1B\\${label}\x1B]8;;\x1B\\`;
18202
- }
18203
- const trimmedTitle = title ? sanitizeTerminalText(title) : "";
18204
- return trimmedTitle ? `${id} \xB7 ${link} \u2014 ${trimmedTitle}` : `${id} \xB7 ${link}`;
18205
- }
18206
- function missionBannerShellCommands({
18207
- displayId,
18208
- title
18209
- }) {
18210
- const id = sanitizeTerminalText(displayId);
18211
- if (!id) return "";
18212
- const plain = missionLinkLine({ displayId: id, title, hyperlink: false });
18213
- const label = missionTerminalTitle({ displayId: id, title });
18214
- const oscTitle = `\\033]0;${label}\\007`;
18215
- return [
18216
- `printf '%s\\n' ${shellSingleQuote(plain)}`,
18217
- `printf '%b' ${shellSingleQuote(oscTitle)}`
18218
- ].join("; ");
18219
- }
18220
- function shellSingleQuote(value) {
18221
- return `'${value.replace(/'/g, `'\\''`)}'`;
18222
- }
18223
- var init_mission_link = __esm({
18224
- "src/mission-link.ts"() {
18225
- "use strict";
18226
- }
18227
- });
18228
-
18229
18118
  // src/terminal-launcher.ts
18230
18119
  function shellQuote2(value) {
18231
18120
  return `'${value.replace(/'/g, `'\\''`)}'`;
@@ -18279,17 +18168,11 @@ function terminalInnerCommand({
18279
18168
  workingDirectory,
18280
18169
  agentCommand,
18281
18170
  extraEnv = {},
18282
- preLaunchCommands,
18283
- missionLink
18171
+ preLaunchCommands
18284
18172
  }) {
18285
18173
  const exports = Object.entries({ ...tmpEnvFor(workingDirectory), ...extraEnv }).map(([key, value]) => `export ${key}=${shellQuote2(value)}`).join("; ");
18286
- const banner = missionLink?.displayId?.trim() ? missionBannerShellCommands({
18287
- displayId: missionLink.displayId,
18288
- title: missionLink.title
18289
- }) : "";
18290
18174
  const invocation = withPreLaunchCommands(agentCommand, preLaunchCommands);
18291
- const afterExports = [banner, invocation].filter(Boolean).join("; ");
18292
- return `cd ${shellQuote2(workingDirectory)} && ${exports}; ${afterExports}`;
18175
+ return `cd ${shellQuote2(workingDirectory)} && ${exports}; ${invocation}`;
18293
18176
  }
18294
18177
  function terminalLaunchScriptContent({
18295
18178
  command,
@@ -18297,12 +18180,11 @@ function terminalLaunchScriptContent({
18297
18180
  workingDirectory,
18298
18181
  preCommand,
18299
18182
  extraEnv = {},
18300
- preLaunchCommands,
18301
- missionLink
18183
+ preLaunchCommands
18302
18184
  }) {
18303
18185
  const agentCommand = agentShellCommand({ command, args, preCommand });
18304
18186
  return `#!/usr/bin/env bash
18305
- ${terminalInnerCommand({ workingDirectory, agentCommand, extraEnv, preLaunchCommands, missionLink })}
18187
+ ${terminalInnerCommand({ workingDirectory, agentCommand, extraEnv, preLaunchCommands })}
18306
18188
  `;
18307
18189
  }
18308
18190
  function terminalScriptCommand(scriptPath) {
@@ -18464,8 +18346,7 @@ function resolveLaunchExecution({
18464
18346
  terminalScriptPath,
18465
18347
  terminalLaunchBackground = false,
18466
18348
  extraEnv = {},
18467
- preLaunchCommands,
18468
- missionLink
18349
+ preLaunchCommands
18469
18350
  }) {
18470
18351
  const agentCommand = agentShellCommand({ command, args, preCommand });
18471
18352
  const genericAgentCommand = agentShellCommand({
@@ -18490,8 +18371,7 @@ function resolveLaunchExecution({
18490
18371
  workingDirectory,
18491
18372
  agentCommand,
18492
18373
  extraEnv,
18493
- preLaunchCommands,
18494
- missionLink
18374
+ preLaunchCommands
18495
18375
  });
18496
18376
  const terminalInner = terminalScriptPath?.trim() ? terminalScriptCommand(terminalScriptPath.trim()) : inner;
18497
18377
  const builtin = resolveBuiltinTerminal(launcher);
@@ -18539,7 +18419,6 @@ function resolveLaunchExecution({
18539
18419
  var init_terminal_launcher = __esm({
18540
18420
  "src/terminal-launcher.ts"() {
18541
18421
  "use strict";
18542
- init_mission_link();
18543
18422
  init_project_tmp();
18544
18423
  init_terminal_launch_chord();
18545
18424
  }
@@ -18547,7 +18426,7 @@ var init_terminal_launcher = __esm({
18547
18426
 
18548
18427
  // src/launch.ts
18549
18428
  import { spawnSync as spawnSync2 } from "node:child_process";
18550
- import { chmodSync as chmodSync5, writeFileSync as writeFileSync8 } from "node:fs";
18429
+ import { chmodSync as chmodSync4, writeFileSync as writeFileSync8 } from "node:fs";
18551
18430
  import path22 from "node:path";
18552
18431
  function overlordLaunchEnv({
18553
18432
  backendUrl,
@@ -18782,11 +18661,10 @@ Execution request: ${options.executionRequestId}` : context.launchContext;
18782
18661
  workingDirectory: options.workingDirectory,
18783
18662
  preCommand: options.preCommand,
18784
18663
  extraEnv: exportedEnv,
18785
- preLaunchCommands,
18786
- missionLink: { displayId: context.displayId, title: context.title }
18664
+ preLaunchCommands
18787
18665
  })
18788
18666
  );
18789
- chmodSync5(terminalScriptPath, 448);
18667
+ chmodSync4(terminalScriptPath, 448);
18790
18668
  }
18791
18669
  const execution = resolveLaunchExecution({
18792
18670
  command: command.command,
@@ -18799,8 +18677,7 @@ Execution request: ${options.executionRequestId}` : context.launchContext;
18799
18677
  terminalLaunchBackground: options.terminalLaunchBackground,
18800
18678
  terminalScriptPath,
18801
18679
  extraEnv: exportedEnv,
18802
- preLaunchCommands,
18803
- missionLink: { displayId: context.displayId, title: context.title }
18680
+ preLaunchCommands
18804
18681
  });
18805
18682
  return {
18806
18683
  ...command,
@@ -19096,7 +18973,6 @@ Subcommands:
19096
18973
  deliver Finish work, send artifacts, and move the mission to review
19097
18974
  resume-follow-up Reopen a completed objective for post-delivery follow-up work
19098
18975
  hook-event Record a connector lifecycle hook (e.g. UserPromptSubmit)
19099
- mission-link Local-only: print this cwd's Desktop mission deep link
19100
18976
  record-touched Local-only: append an edit hook's touched files to the session log
19101
18977
  changes Local-only: preflight \u2014 print classified mine/claimed/unclaimed
19102
18978
  paths and drafted rationales before delivering; run this instead
@@ -19480,7 +19356,6 @@ var init_protocol_help = __esm({
19480
19356
  "hook-event",
19481
19357
  "list-organizations",
19482
19358
  "load-context",
19483
- "mission-link",
19484
19359
  "prompt",
19485
19360
  "read-context",
19486
19361
  "record-work",
@@ -20487,13 +20362,13 @@ var init_runner_identity = __esm({
20487
20362
 
20488
20363
  // src/runner-service.ts
20489
20364
  import { execFile } from "node:child_process";
20490
- import { chmodSync as chmodSync6, existsSync as existsSync25, mkdirSync as mkdirSync13, readFileSync as readFileSync21, rmSync as rmSync6, writeFileSync as writeFileSync12 } from "node:fs";
20365
+ import { chmodSync as chmodSync5, existsSync as existsSync25, mkdirSync as mkdirSync13, readFileSync as readFileSync21, rmSync as rmSync6, writeFileSync as writeFileSync12 } from "node:fs";
20491
20366
  import os4 from "node:os";
20492
20367
  import path29 from "node:path";
20493
20368
  import { promisify } from "node:util";
20494
20369
  function writeServiceFile(filePath, contents) {
20495
20370
  writeFileSync12(filePath, contents, { mode: 384 });
20496
- chmodSync6(filePath, 384);
20371
+ chmodSync5(filePath, 384);
20497
20372
  }
20498
20373
  function emptyRunnerServiceState() {
20499
20374
  return {
@@ -21449,18 +21324,6 @@ async function runProtocolCommand({
21449
21324
  printJson(result2);
21450
21325
  return;
21451
21326
  }
21452
- if (subcommand === "mission-link") {
21453
- const pointer = readActiveMissionPointer(workingDirectory);
21454
- const requestedMissionId = flagValue(parsed.flags, "--mission-id");
21455
- const environmentMissionId = process.env.MISSION_ID ?? process.env.OVERLORD_MISSION_ID;
21456
- const displayId = requestedMissionId?.trim() || pointer?.displayId || environmentMissionId?.trim();
21457
- if (!displayId) return;
21458
- const title = pointer && (!requestedMissionId || requestedMissionId === pointer.missionId || requestedMissionId === pointer.displayId) ? pointer.title : void 0;
21459
- const line = missionLinkLine({ displayId, title });
21460
- if (line) process.stdout.write(`${line}
21461
- `);
21462
- return;
21463
- }
21464
21327
  if (subcommand === "changes") {
21465
21328
  if (!missionId) {
21466
21329
  throw new CliError({ message: "Usage: ovld protocol changes --mission-id <id>" });
@@ -21571,9 +21434,6 @@ async function runProtocolCommand({
21571
21434
  const title = typeof missionRecord.title === "string" ? missionRecord.title : void 0;
21572
21435
  const pointerMissionId = typeof missionRecord.id === "string" && missionRecord.id.trim() || typeof resultRecord.missionId === "string" && resultRecord.missionId.trim() || displayId;
21573
21436
  if (displayId) {
21574
- const banner = missionLinkLine({ displayId, title });
21575
- if (banner) process.stderr.write(`${banner}
21576
- `);
21577
21437
  writeActiveMissionPointer({
21578
21438
  workingDirectory,
21579
21439
  missionId: pointerMissionId,
@@ -22454,7 +22314,6 @@ var init_commands = __esm({
22454
22314
  init_errors();
22455
22315
  init_launch();
22456
22316
  init_launch_bootstrap();
22457
- init_mission_link();
22458
22317
  init_native_session();
22459
22318
  init_org_setup();
22460
22319
  init_output();