@openape/apes 1.8.1 → 1.10.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/cli.js
CHANGED
|
@@ -2702,23 +2702,9 @@ chown root:wheel ${shQuote(bridge.plistPath)}
|
|
|
2702
2702
|
chmod 644 ${shQuote(bridge.plistPath)}
|
|
2703
2703
|
`;
|
|
2704
2704
|
}
|
|
2705
|
-
function buildBridgeBootstrapBlock(bridge,
|
|
2705
|
+
function buildBridgeBootstrapBlock(bridge, _name) {
|
|
2706
2706
|
if (!bridge) return "";
|
|
2707
2707
|
return `
|
|
2708
|
-
echo "==> Installing bridge stack as ${name} via bun (one-time)\u2026"
|
|
2709
|
-
su - ${shQuote(name)} -c '
|
|
2710
|
-
set -euo pipefail
|
|
2711
|
-
if ! command -v bun >/dev/null 2>&1 && [ ! -x "$HOME/.bun/bin/bun" ]; then
|
|
2712
|
-
echo "==> bun not found \u2014 installing via official installer"
|
|
2713
|
-
curl -fsSL https://bun.sh/install | bash
|
|
2714
|
-
fi
|
|
2715
|
-
export PATH="$HOME/.bun/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:$HOME/.bun/install/global/bin"
|
|
2716
|
-
bun add -g @openape/chat-bridge @openape/apes
|
|
2717
|
-
'
|
|
2718
|
-
|
|
2719
|
-
# Bootstrap into the system domain. Spawn already runs as root via
|
|
2720
|
-
# \`apes run --as root\`, so we have permission. Stale label is bootouted
|
|
2721
|
-
# first to make re-spawn idempotent.
|
|
2722
2708
|
launchctl bootout "system/${bridge.plistLabel}" 2>/dev/null || true
|
|
2723
2709
|
launchctl bootstrap system ${shQuote(bridge.plistPath)} || \\
|
|
2724
2710
|
echo "warn: bridge bootstrap into system domain failed; check ${bridge.plistPath}"
|
|
@@ -4135,7 +4121,7 @@ async function handleInbound(msg, sessions) {
|
|
|
4135
4121
|
}
|
|
4136
4122
|
|
|
4137
4123
|
// src/commands/agents/spawn.ts
|
|
4138
|
-
import { execFileSync as
|
|
4124
|
+
import { execFileSync as execFileSync8 } from "child_process";
|
|
4139
4125
|
import { mkdtempSync as mkdtempSync2, rmSync as rmSync2, writeFileSync as writeFileSync4 } from "fs";
|
|
4140
4126
|
import { tmpdir as tmpdir2 } from "os";
|
|
4141
4127
|
import { join as join6 } from "path";
|
|
@@ -4152,7 +4138,8 @@ function escape(s) {
|
|
|
4152
4138
|
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
4153
4139
|
}
|
|
4154
4140
|
function buildSyncPlist(input) {
|
|
4155
|
-
const
|
|
4141
|
+
const pathDirs = (input.hostBinDirs && input.hostBinDirs.length > 0 ? input.hostBinDirs : ["/opt/homebrew/bin", "/usr/local/bin"]).join(":");
|
|
4142
|
+
const pathLine = ` <key>PATH</key><string>${escape(pathDirs)}:/usr/bin:/bin</string>
|
|
4156
4143
|
`;
|
|
4157
4144
|
const agentUserLine = ` <key>AGENT_USER</key><string>${escape(input.userName)}</string>
|
|
4158
4145
|
`;
|
|
@@ -4250,9 +4237,10 @@ function generateKeyPairInMemory() {
|
|
|
4250
4237
|
}
|
|
4251
4238
|
|
|
4252
4239
|
// src/lib/llm-bridge.ts
|
|
4240
|
+
import { execFileSync as execFileSync7 } from "child_process";
|
|
4253
4241
|
import { existsSync as existsSync8, readFileSync as readFileSync8 } from "fs";
|
|
4254
4242
|
import { homedir as homedir8 } from "os";
|
|
4255
|
-
import { join as join5 } from "path";
|
|
4243
|
+
import { dirname as dirname3, join as join5 } from "path";
|
|
4256
4244
|
var PLIST_LABEL_PREFIX = "eco.hofmann.apes.bridge";
|
|
4257
4245
|
function readLitellmEnv(envPath = join5(homedir8(), "litellm", ".env")) {
|
|
4258
4246
|
if (!existsSync8(envPath)) return null;
|
|
@@ -4287,6 +4275,25 @@ function resolveBridgeConfig(opts) {
|
|
|
4287
4275
|
}
|
|
4288
4276
|
return { baseUrl, apiKey, model };
|
|
4289
4277
|
}
|
|
4278
|
+
function captureHostBinDirs() {
|
|
4279
|
+
const dirs = [];
|
|
4280
|
+
const seen = /* @__PURE__ */ new Set();
|
|
4281
|
+
for (const bin of ["node", "openape-chat-bridge", "apes"]) {
|
|
4282
|
+
let resolved;
|
|
4283
|
+
try {
|
|
4284
|
+
resolved = execFileSync7("/usr/bin/which", [bin], { encoding: "utf8" }).trim();
|
|
4285
|
+
} catch {
|
|
4286
|
+
const installCmd = bin === "openape-chat-bridge" ? "npm i -g @openape/chat-bridge" : bin === "apes" ? "npm i -g @openape/apes" : "install Node.js (e.g. brew install node)";
|
|
4287
|
+
throw new Error(`'${bin}' not found on host PATH. ${installCmd} before spawning agents \u2014 the bridge runtime resolves these at spawn time and bakes the dir into the agent's launchd plist.`);
|
|
4288
|
+
}
|
|
4289
|
+
const dir = dirname3(resolved);
|
|
4290
|
+
if (!seen.has(dir)) {
|
|
4291
|
+
seen.add(dir);
|
|
4292
|
+
dirs.push(dir);
|
|
4293
|
+
}
|
|
4294
|
+
}
|
|
4295
|
+
return dirs;
|
|
4296
|
+
}
|
|
4290
4297
|
function bridgePlistLabel(agentName) {
|
|
4291
4298
|
return `${PLIST_LABEL_PREFIX}.${agentName}`;
|
|
4292
4299
|
}
|
|
@@ -4302,34 +4309,31 @@ LITELLM_BASE_URL=${cfg.baseUrl}
|
|
|
4302
4309
|
LITELLM_API_KEY=${cfg.apiKey}
|
|
4303
4310
|
${modelLine}`;
|
|
4304
4311
|
}
|
|
4305
|
-
function buildBridgeStartScript() {
|
|
4312
|
+
function buildBridgeStartScript(hostBinDirs) {
|
|
4313
|
+
const pathLine = `export PATH="${hostBinDirs.join(":")}:/usr/bin:/bin"`;
|
|
4306
4314
|
return `#!/usr/bin/env bash
|
|
4307
4315
|
# Auto-generated by 'apes agents spawn --bridge'.
|
|
4308
|
-
# Slim launcher \u2014
|
|
4316
|
+
# Slim launcher \u2014 bridge stack lives on the host, no per-agent install.
|
|
4309
4317
|
set -euo pipefail
|
|
4310
4318
|
|
|
4311
|
-
|
|
4319
|
+
${pathLine}
|
|
4312
4320
|
|
|
4313
4321
|
# Token refresh is in-process via @openape/cli-auth's challenge-response
|
|
4314
4322
|
# path (auth.json.key_path -> ~/.ssh/id_ed25519). No "apes login" needed
|
|
4315
4323
|
# at boot \u2014 keeping start.sh slim avoids the rate-limit dance the old
|
|
4316
4324
|
# refresh hit when KeepAlive crash-restarted the daemon every 1h.
|
|
4317
4325
|
|
|
4318
|
-
# M6 dropped the third-party LLM-runtime install + extension write
|
|
4319
|
-
# that used to live here. The bridge now spawns
|
|
4320
|
-
# \`apes agents serve --rpc\` directly (M8) which calls LiteLLM
|
|
4321
|
-
# itself, so no third-party extension config is needed.
|
|
4322
|
-
|
|
4323
4326
|
set -a
|
|
4324
4327
|
. "$HOME/Library/Application Support/openape/bridge/.env"
|
|
4325
4328
|
set +a
|
|
4326
4329
|
exec openape-chat-bridge
|
|
4327
4330
|
`;
|
|
4328
4331
|
}
|
|
4329
|
-
function buildBridgePlist(agentName, homeDir, ownerEmail) {
|
|
4332
|
+
function buildBridgePlist(agentName, homeDir, ownerEmail, hostBinDirs) {
|
|
4330
4333
|
const startScript = `${homeDir}/Library/Application Support/openape/bridge/start.sh`;
|
|
4331
4334
|
const stdoutLog = `${homeDir}/Library/Logs/openape-chat-bridge.log`;
|
|
4332
4335
|
const stderrLog = `${homeDir}/Library/Logs/openape-chat-bridge.err.log`;
|
|
4336
|
+
const pathValue = `${hostBinDirs.join(":")}:/usr/bin:/bin`;
|
|
4333
4337
|
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
4334
4338
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
4335
4339
|
<plist version="1.0">
|
|
@@ -4360,7 +4364,7 @@ function buildBridgePlist(agentName, homeDir, ownerEmail) {
|
|
|
4360
4364
|
<key>HOME</key>
|
|
4361
4365
|
<string>${homeDir}</string>
|
|
4362
4366
|
<key>PATH</key>
|
|
4363
|
-
<string>${
|
|
4367
|
+
<string>${pathValue}</string>
|
|
4364
4368
|
<key>OPENAPE_OWNER_EMAIL</key>
|
|
4365
4369
|
<string>${ownerEmail}</string>
|
|
4366
4370
|
</dict>
|
|
@@ -4498,20 +4502,22 @@ and try again.`
|
|
|
4498
4502
|
cliBaseUrl: typeof args["bridge-base-url"] === "string" ? args["bridge-base-url"] : void 0,
|
|
4499
4503
|
cliModel: typeof args["bridge-model"] === "string" ? args["bridge-model"] : void 0
|
|
4500
4504
|
});
|
|
4505
|
+
const hostBinDirs = captureHostBinDirs();
|
|
4501
4506
|
return {
|
|
4502
4507
|
plistLabel: bridgePlistLabel(name),
|
|
4503
4508
|
plistPath: bridgePlistPath(name),
|
|
4504
|
-
plistContent: buildBridgePlist(name, homeDir, auth.email),
|
|
4505
|
-
startScript: buildBridgeStartScript(),
|
|
4509
|
+
plistContent: buildBridgePlist(name, homeDir, auth.email, hostBinDirs),
|
|
4510
|
+
startScript: buildBridgeStartScript(hostBinDirs),
|
|
4506
4511
|
envFile: buildBridgeEnvFile(cfg)
|
|
4507
4512
|
};
|
|
4508
4513
|
})() : null;
|
|
4509
4514
|
const troopPlistLabel = `openape.troop.sync.${name}`;
|
|
4510
4515
|
const troopPlistPath = `/Library/LaunchDaemons/${troopPlistLabel}.plist`;
|
|
4516
|
+
const troopBinDirs = bridge ? captureHostBinDirs() : captureHostBinDirs();
|
|
4511
4517
|
const troop = {
|
|
4512
4518
|
plistLabel: troopPlistLabel,
|
|
4513
4519
|
plistPath: troopPlistPath,
|
|
4514
|
-
plistContent: buildSyncPlist({ agentName: name, apesBin: apes, homeDir, userName: name })
|
|
4520
|
+
plistContent: buildSyncPlist({ agentName: name, apesBin: apes, homeDir, userName: name, hostBinDirs: troopBinDirs })
|
|
4515
4521
|
};
|
|
4516
4522
|
const script = buildSpawnSetupScript({
|
|
4517
4523
|
name,
|
|
@@ -4529,7 +4535,7 @@ and try again.`
|
|
|
4529
4535
|
writeFileSync4(scriptPath, script, { mode: 448 });
|
|
4530
4536
|
consola23.start("Running privileged setup as root via `apes run --as root --wait`\u2026");
|
|
4531
4537
|
consola23.info("You will be asked to approve the as=root grant in your DDISA inbox; this command blocks until you do.");
|
|
4532
|
-
|
|
4538
|
+
execFileSync8(apes, ["run", "--as", "root", "--wait", "--", "bash", scriptPath], { stdio: "inherit" });
|
|
4533
4539
|
consola23.success(`Agent ${name} spawned.`);
|
|
4534
4540
|
consola23.info(`\u{1F517} Troop: https://troop.openape.ai/agents/${name}`);
|
|
4535
4541
|
if (args.bridge) {
|
|
@@ -4575,11 +4581,11 @@ import { defineCommand as defineCommand27 } from "citty";
|
|
|
4575
4581
|
import consola24 from "consola";
|
|
4576
4582
|
|
|
4577
4583
|
// src/lib/macos-host.ts
|
|
4578
|
-
import { execFileSync as
|
|
4584
|
+
import { execFileSync as execFileSync9 } from "child_process";
|
|
4579
4585
|
import { hostname as hostname3 } from "os";
|
|
4580
4586
|
function getHostId() {
|
|
4581
4587
|
try {
|
|
4582
|
-
const output =
|
|
4588
|
+
const output = execFileSync9(
|
|
4583
4589
|
"/usr/sbin/ioreg",
|
|
4584
4590
|
["-d2", "-c", "IOPlatformExpertDevice"],
|
|
4585
4591
|
{ encoding: "utf8", timeout: 2e3 }
|
|
@@ -4728,7 +4734,7 @@ var agentsCommand = defineCommand28({
|
|
|
4728
4734
|
import { defineCommand as defineCommand37 } from "citty";
|
|
4729
4735
|
|
|
4730
4736
|
// src/commands/nest/authorize.ts
|
|
4731
|
-
import { execFileSync as
|
|
4737
|
+
import { execFileSync as execFileSync10 } from "child_process";
|
|
4732
4738
|
import { existsSync as existsSync11, readFileSync as readFileSync10 } from "fs";
|
|
4733
4739
|
import { join as join9 } from "path";
|
|
4734
4740
|
import { defineCommand as defineCommand30 } from "citty";
|
|
@@ -4884,7 +4890,7 @@ var authorizeNestCommand = defineCommand30({
|
|
|
4884
4890
|
cmdArgs.push("--expires-in", args["expires-in"]);
|
|
4885
4891
|
}
|
|
4886
4892
|
try {
|
|
4887
|
-
|
|
4893
|
+
execFileSync10("apes", cmdArgs, { stdio: "inherit" });
|
|
4888
4894
|
} catch (err) {
|
|
4889
4895
|
throw new CliError(err instanceof Error ? err.message : String(err));
|
|
4890
4896
|
}
|
|
@@ -5029,10 +5035,10 @@ var destroyNestCommand = defineCommand31({
|
|
|
5029
5035
|
});
|
|
5030
5036
|
|
|
5031
5037
|
// src/commands/nest/install.ts
|
|
5032
|
-
import { execFileSync as
|
|
5038
|
+
import { execFileSync as execFileSync11 } from "child_process";
|
|
5033
5039
|
import { existsSync as existsSync12, mkdirSync as mkdirSync5, readFileSync as readFileSync11, writeFileSync as writeFileSync7 } from "fs";
|
|
5034
5040
|
import { homedir as homedir11, userInfo as userInfo2 } from "os";
|
|
5035
|
-
import { dirname as
|
|
5041
|
+
import { dirname as dirname4, join as join10 } from "path";
|
|
5036
5042
|
import { defineCommand as defineCommand32 } from "citty";
|
|
5037
5043
|
import consola29 from "consola";
|
|
5038
5044
|
|
|
@@ -5129,7 +5135,7 @@ function buildPlist(args) {
|
|
|
5129
5135
|
<key>EnvironmentVariables</key>
|
|
5130
5136
|
<dict>
|
|
5131
5137
|
<key>HOME</key><string>${escape2(args.nestHome)}</string>
|
|
5132
|
-
<key>PATH</key><string
|
|
5138
|
+
<key>PATH</key><string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin</string>
|
|
5133
5139
|
<key>OPENAPE_NEST_PORT</key><string>${args.port}</string>
|
|
5134
5140
|
<key>OPENAPE_APES_BIN</key><string>${escape2(args.apesBin)}</string>
|
|
5135
5141
|
</dict>
|
|
@@ -5143,7 +5149,7 @@ function buildPlist(args) {
|
|
|
5143
5149
|
}
|
|
5144
5150
|
function installAdapter2() {
|
|
5145
5151
|
const target = join10(homedir11(), ".openape", "shapes", "adapters", "apes-agents.toml");
|
|
5146
|
-
mkdirSync5(
|
|
5152
|
+
mkdirSync5(dirname4(target), { recursive: true });
|
|
5147
5153
|
let existing = "";
|
|
5148
5154
|
try {
|
|
5149
5155
|
existing = readFileSync11(target, "utf8");
|
|
@@ -5154,6 +5160,19 @@ function installAdapter2() {
|
|
|
5154
5160
|
consola29.success(`Wrote shapes adapter ${target}`);
|
|
5155
5161
|
return true;
|
|
5156
5162
|
}
|
|
5163
|
+
function writeBridgeModelDefault(model) {
|
|
5164
|
+
const envDir = join10(homedir11(), "litellm");
|
|
5165
|
+
const envFile = join10(envDir, ".env");
|
|
5166
|
+
mkdirSync5(envDir, { recursive: true });
|
|
5167
|
+
let lines = [];
|
|
5168
|
+
if (existsSync12(envFile)) {
|
|
5169
|
+
lines = readFileSync11(envFile, "utf8").split("\n").filter((l) => !l.startsWith("APE_CHAT_BRIDGE_MODEL="));
|
|
5170
|
+
}
|
|
5171
|
+
lines.push(`APE_CHAT_BRIDGE_MODEL=${model}`);
|
|
5172
|
+
while (lines.length > 0 && lines.at(-1).trim() === "") lines.pop();
|
|
5173
|
+
writeFileSync7(envFile, `${lines.join("\n")}
|
|
5174
|
+
`, { mode: 384 });
|
|
5175
|
+
}
|
|
5157
5176
|
function findBinary(name) {
|
|
5158
5177
|
for (const dir of [
|
|
5159
5178
|
join10(homedir11(), ".bun", "bin"),
|
|
@@ -5175,6 +5194,10 @@ var installNestCommand = defineCommand32({
|
|
|
5175
5194
|
port: {
|
|
5176
5195
|
type: "string",
|
|
5177
5196
|
description: "Port for the nest HTTP API (default: 9091)"
|
|
5197
|
+
},
|
|
5198
|
+
"bridge-model": {
|
|
5199
|
+
type: "string",
|
|
5200
|
+
description: "Default model for chat-bridge spawns. Persisted as APE_CHAT_BRIDGE_MODEL in ~/litellm/.env so every `apes [nest|agents] spawn --bridge` picks it up automatically. Common values: `gpt-5.4` (ChatGPT-only LiteLLM proxy), `claude-haiku-4-5` (Anthropic-only). Re-run install with a new value to overwrite."
|
|
5178
5201
|
}
|
|
5179
5202
|
},
|
|
5180
5203
|
async run({ args }) {
|
|
@@ -5189,6 +5212,10 @@ var installNestCommand = defineCommand32({
|
|
|
5189
5212
|
consola29.info(` nest binary: ${nestBin}`);
|
|
5190
5213
|
consola29.info(` apes binary: ${apesBin}`);
|
|
5191
5214
|
consola29.info(` HTTP port: ${port}`);
|
|
5215
|
+
if (typeof args["bridge-model"] === "string" && args["bridge-model"]) {
|
|
5216
|
+
writeBridgeModelDefault(args["bridge-model"]);
|
|
5217
|
+
consola29.success(`Default bridge model set to ${args["bridge-model"]} (in ~/litellm/.env)`);
|
|
5218
|
+
}
|
|
5192
5219
|
installAdapter2();
|
|
5193
5220
|
mkdirSync5(join10(homeDir, "Library", "LaunchAgents"), { recursive: true });
|
|
5194
5221
|
mkdirSync5(NEST_DATA_DIR, { recursive: true });
|
|
@@ -5206,10 +5233,10 @@ var installNestCommand = defineCommand32({
|
|
|
5206
5233
|
}
|
|
5207
5234
|
const uid = userInfo2().uid;
|
|
5208
5235
|
try {
|
|
5209
|
-
|
|
5236
|
+
execFileSync11("/bin/launchctl", ["bootout", `gui/${uid}/${PLIST_LABEL}`], { stdio: "ignore" });
|
|
5210
5237
|
} catch {
|
|
5211
5238
|
}
|
|
5212
|
-
|
|
5239
|
+
execFileSync11("/bin/launchctl", ["bootstrap", `gui/${uid}`, plistPath()], { stdio: "inherit" });
|
|
5213
5240
|
consola29.success(`Nest daemon bootstrapped \u2014 http://127.0.0.1:${port}`);
|
|
5214
5241
|
consola29.info("");
|
|
5215
5242
|
consola29.info("Next steps for zero-prompt spawn \u2014 both one-time:");
|
|
@@ -5372,7 +5399,7 @@ var statusNestCommand = defineCommand35({
|
|
|
5372
5399
|
});
|
|
5373
5400
|
|
|
5374
5401
|
// src/commands/nest/uninstall.ts
|
|
5375
|
-
import { execFileSync as
|
|
5402
|
+
import { execFileSync as execFileSync12 } from "child_process";
|
|
5376
5403
|
import { existsSync as existsSync13, unlinkSync } from "fs";
|
|
5377
5404
|
import { homedir as homedir12, userInfo as userInfo3 } from "os";
|
|
5378
5405
|
import { join as join11 } from "path";
|
|
@@ -5388,7 +5415,7 @@ var uninstallNestCommand = defineCommand36({
|
|
|
5388
5415
|
const uid = userInfo3().uid;
|
|
5389
5416
|
const path2 = join11(homedir12(), "Library", "LaunchAgents", `${PLIST_LABEL2}.plist`);
|
|
5390
5417
|
try {
|
|
5391
|
-
|
|
5418
|
+
execFileSync12("/bin/launchctl", ["bootout", `gui/${uid}/${PLIST_LABEL2}`], { stdio: "ignore" });
|
|
5392
5419
|
consola33.success("Nest daemon stopped");
|
|
5393
5420
|
} catch {
|
|
5394
5421
|
consola33.info("Nest daemon was not loaded");
|
|
@@ -5943,7 +5970,7 @@ var adapterCommand = defineCommand42({
|
|
|
5943
5970
|
});
|
|
5944
5971
|
|
|
5945
5972
|
// src/commands/run.ts
|
|
5946
|
-
import { execFileSync as
|
|
5973
|
+
import { execFileSync as execFileSync13 } from "child_process";
|
|
5947
5974
|
import { hostname as hostname6 } from "os";
|
|
5948
5975
|
import { basename } from "path";
|
|
5949
5976
|
import { defineCommand as defineCommand43 } from "citty";
|
|
@@ -6221,7 +6248,7 @@ function execShellCommand(command) {
|
|
|
6221
6248
|
throw new CliError("No command to execute");
|
|
6222
6249
|
try {
|
|
6223
6250
|
const { APES_SHELL_WRAPPER: _wrapperMarker, ...inheritedEnv } = process.env;
|
|
6224
|
-
|
|
6251
|
+
execFileSync13(command[0], command.slice(1), {
|
|
6225
6252
|
stdio: "inherit",
|
|
6226
6253
|
env: inheritedEnv
|
|
6227
6254
|
});
|
|
@@ -6373,7 +6400,7 @@ async function runAudienceMode(audience, action, args) {
|
|
|
6373
6400
|
consola38.info(`Executing: ${command.join(" ")}`);
|
|
6374
6401
|
try {
|
|
6375
6402
|
const { APES_SHELL_WRAPPER: _wrapperMarker, ...inheritedEnv } = process.env;
|
|
6376
|
-
|
|
6403
|
+
execFileSync13(args["escapes-path"] || "escapes", ["--grant", authz_jwt, "--", ...command], {
|
|
6377
6404
|
stdio: "inherit",
|
|
6378
6405
|
env: inheritedEnv
|
|
6379
6406
|
});
|
|
@@ -6426,7 +6453,7 @@ import { spawn } from "child_process";
|
|
|
6426
6453
|
import { mkdtempSync as mkdtempSync3, rmSync as rmSync3, writeFileSync as writeFileSync8 } from "fs";
|
|
6427
6454
|
import { createRequire } from "module";
|
|
6428
6455
|
import { tmpdir as tmpdir3 } from "os";
|
|
6429
|
-
import { dirname as
|
|
6456
|
+
import { dirname as dirname5, join as join12, resolve as resolve4 } from "path";
|
|
6430
6457
|
var require2 = createRequire(import.meta.url);
|
|
6431
6458
|
function findProxyBin() {
|
|
6432
6459
|
const pkgPath = require2.resolve("@openape/proxy/package.json");
|
|
@@ -6435,7 +6462,7 @@ function findProxyBin() {
|
|
|
6435
6462
|
if (!binRel) {
|
|
6436
6463
|
throw new Error("@openape/proxy is missing the openape-proxy bin entry");
|
|
6437
6464
|
}
|
|
6438
|
-
return resolve4(
|
|
6465
|
+
return resolve4(dirname5(pkgPath), binRel);
|
|
6439
6466
|
}
|
|
6440
6467
|
async function startEphemeralProxy(configToml) {
|
|
6441
6468
|
const tmpDir = mkdtempSync3(join12(tmpdir3(), "openape-proxy-"));
|
|
@@ -6875,7 +6902,7 @@ var mcpCommand = defineCommand49({
|
|
|
6875
6902
|
if (transport !== "stdio" && transport !== "sse") {
|
|
6876
6903
|
throw new Error('Transport must be "stdio" or "sse"');
|
|
6877
6904
|
}
|
|
6878
|
-
const { startMcpServer } = await import("./server-
|
|
6905
|
+
const { startMcpServer } = await import("./server-AZOEKT55.js");
|
|
6879
6906
|
await startMcpServer(transport, port);
|
|
6880
6907
|
}
|
|
6881
6908
|
});
|
|
@@ -6883,7 +6910,7 @@ var mcpCommand = defineCommand49({
|
|
|
6883
6910
|
// src/commands/init/index.ts
|
|
6884
6911
|
import { existsSync as existsSync14, copyFileSync, writeFileSync as writeFileSync9 } from "fs";
|
|
6885
6912
|
import { randomBytes } from "crypto";
|
|
6886
|
-
import { execFileSync as
|
|
6913
|
+
import { execFileSync as execFileSync14 } from "child_process";
|
|
6887
6914
|
import { join as join13 } from "path";
|
|
6888
6915
|
import { defineCommand as defineCommand50 } from "citty";
|
|
6889
6916
|
import consola42 from "consola";
|
|
@@ -6895,11 +6922,11 @@ async function downloadTemplate(repo, targetDir) {
|
|
|
6895
6922
|
function installDeps(dir) {
|
|
6896
6923
|
const hasLockFile = (name) => existsSync14(join13(dir, name));
|
|
6897
6924
|
if (hasLockFile("pnpm-lock.yaml")) {
|
|
6898
|
-
|
|
6925
|
+
execFileSync14("pnpm", ["install"], { cwd: dir, stdio: "inherit" });
|
|
6899
6926
|
} else if (hasLockFile("bun.lockb")) {
|
|
6900
|
-
|
|
6927
|
+
execFileSync14("bun", ["install"], { cwd: dir, stdio: "inherit" });
|
|
6901
6928
|
} else {
|
|
6902
|
-
|
|
6929
|
+
execFileSync14("npm", ["install"], { cwd: dir, stdio: "inherit" });
|
|
6903
6930
|
}
|
|
6904
6931
|
}
|
|
6905
6932
|
async function promptChoice(message, choices) {
|
|
@@ -7513,7 +7540,7 @@ async function bestEffortGrantCount(idp) {
|
|
|
7513
7540
|
}
|
|
7514
7541
|
}
|
|
7515
7542
|
async function runHealth(args) {
|
|
7516
|
-
const version = true ? "1.
|
|
7543
|
+
const version = true ? "1.10.0" : "0.0.0";
|
|
7517
7544
|
const auth = loadAuth();
|
|
7518
7545
|
if (!auth) {
|
|
7519
7546
|
throw new CliError("Not logged in. Run `apes login` first.", 1);
|
|
@@ -7786,10 +7813,10 @@ if (shellRewrite) {
|
|
|
7786
7813
|
if (shellRewrite.action === "rewrite") {
|
|
7787
7814
|
process.argv = shellRewrite.argv;
|
|
7788
7815
|
} else if (shellRewrite.action === "version") {
|
|
7789
|
-
console.log(`ape-shell ${"1.
|
|
7816
|
+
console.log(`ape-shell ${"1.10.0"} (OpenApe DDISA shell wrapper)`);
|
|
7790
7817
|
process.exit(0);
|
|
7791
7818
|
} else if (shellRewrite.action === "help") {
|
|
7792
|
-
console.log(`ape-shell ${"1.
|
|
7819
|
+
console.log(`ape-shell ${"1.10.0"} \u2014 OpenApe DDISA shell wrapper`);
|
|
7793
7820
|
console.log("");
|
|
7794
7821
|
console.log("Usage:");
|
|
7795
7822
|
console.log(" ape-shell Start interactive grant-mediated REPL");
|
|
@@ -7847,7 +7874,7 @@ var configCommand = defineCommand61({
|
|
|
7847
7874
|
var main = defineCommand61({
|
|
7848
7875
|
meta: {
|
|
7849
7876
|
name: "apes",
|
|
7850
|
-
version: "1.
|
|
7877
|
+
version: "1.10.0",
|
|
7851
7878
|
description: "Unified CLI for OpenApe"
|
|
7852
7879
|
},
|
|
7853
7880
|
subCommands: {
|
|
@@ -7904,7 +7931,7 @@ async function maybeRefreshAuth() {
|
|
|
7904
7931
|
}
|
|
7905
7932
|
}
|
|
7906
7933
|
await maybeRefreshAuth();
|
|
7907
|
-
await maybeWarnStaleVersion("1.
|
|
7934
|
+
await maybeWarnStaleVersion("1.10.0").catch(() => {
|
|
7908
7935
|
});
|
|
7909
7936
|
runMain(main).catch((err) => {
|
|
7910
7937
|
if (err instanceof CliExit) {
|