overlord-cli 0.2608061552.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.
- package/dist/connectors/VERSION +1 -1
- package/dist/connectors/adapters/antigravity/plugin.json +1 -1
- package/dist/connectors/adapters/claude/.claude-plugin/plugin.json +1 -1
- package/dist/connectors/adapters/claude/CAPABILITIES.md +2 -2
- package/dist/connectors/adapters/claude/conformance-manifest.yaml +1 -1
- package/dist/connectors/adapters/claude/harness-capabilities.yaml +2 -2
- package/dist/connectors/adapters/claude/scripts/stop-hook.sh +1 -6
- package/dist/connectors/adapters/codex/.codex-plugin/plugin.json +1 -1
- package/dist/connectors/adapters/cursor/.cursor-plugin/plugin.json +1 -1
- package/dist/connectors/adapters/cursor/hooks/overlord-stop.sh +1 -8
- package/dist/connectors/core/scripts/overlord-mcp.mjs +1 -1
- package/dist/index.js +19 -160
- package/dist/index.js.map +4 -4
- package/package.json +1 -1
package/dist/connectors/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.3.
|
|
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.
|
|
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",
|
|
@@ -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** `
|
|
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.
|
|
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: "
|
|
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.
|
|
187
|
-
|
|
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
|
|
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
|
|
@@ -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
|
|
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.
|
|
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": "
|
|
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.
|
|
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 = "
|
|
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:
|
|
6228
|
-
const binding =
|
|
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 {
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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();
|