@everme/cli 0.33.13 → 0.33.15
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/package.json +2 -2
- package/scripts/upgrade-plugins.js +265 -1
- package/sha256sums.txt +6 -6
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@everme/cli",
|
|
3
|
-
"version": "0.33.
|
|
3
|
+
"version": "0.33.15",
|
|
4
4
|
"description": "EverMe CLI — npm wrapper that downloads and runs the platform-native evercli binary on first use.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"bin": {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
10
|
"postinstall": "node scripts/install.js",
|
|
11
|
-
"test": "node --test tests/install.test.js tests/upgrade-plugins.test.js"
|
|
11
|
+
"test": "node --test --import ../scripts/no-device-route.mjs tests/install.test.js tests/upgrade-plugins.test.js"
|
|
12
12
|
},
|
|
13
13
|
"os": [
|
|
14
14
|
"darwin",
|
|
@@ -23,7 +23,7 @@ const MCP_SPEC_PAIRS = [
|
|
|
23
23
|
["'@everme/memory-mcp'", "'@everme/memory-mcp@latest'"],
|
|
24
24
|
];
|
|
25
25
|
|
|
26
|
-
const NPX_PLATFORMS = new Set(["cursor", "claude-desktop", "codex", "opencode"]);
|
|
26
|
+
const NPX_PLATFORMS = new Set(["cursor", "claude-desktop", "codex", "opencode", "kilocode"]);
|
|
27
27
|
|
|
28
28
|
const LIST_TIMEOUT_MS = 15000;
|
|
29
29
|
const REFRESH_TIMEOUT_MS = 60000;
|
|
@@ -131,6 +131,17 @@ function refreshOpenClaw(runner) {
|
|
|
131
131
|
});
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
+
// AstrBot's plugin is embedded in evercli like Hermes's provider; a re-install
|
|
135
|
+
// rewrites data/plugins/astrbot_plugin_everme/ under the detected AstrBot root.
|
|
136
|
+
function refreshAstrBot(binPath, runner) {
|
|
137
|
+
const run = runner || defaultRunner;
|
|
138
|
+
run(binPath, ["plugin", "install", "astrbot"], {
|
|
139
|
+
encoding: "utf8",
|
|
140
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
141
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
134
145
|
function refreshHermes(binPath, runner) {
|
|
135
146
|
const run = runner || defaultRunner;
|
|
136
147
|
run(binPath, ["plugin", "install", "hermes"], {
|
|
@@ -225,6 +236,158 @@ function refreshQwenWork(binPath, runner) {
|
|
|
225
236
|
});
|
|
226
237
|
}
|
|
227
238
|
|
|
239
|
+
// Qoder CLI runs a staged copy under ~/.qoder/everme (or ~/.qoder-cn/everme),
|
|
240
|
+
// same shape as QwenWork.
|
|
241
|
+
function refreshQoder(binPath, runner) {
|
|
242
|
+
const run = runner || defaultRunner;
|
|
243
|
+
run(npmCommand(), ["install", "-g", "@everme/qoder@latest"], {
|
|
244
|
+
encoding: "utf8",
|
|
245
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
246
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
247
|
+
});
|
|
248
|
+
run(binPath, ["plugin", "install", "qoder"], {
|
|
249
|
+
encoding: "utf8",
|
|
250
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
251
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Copilot CLI runs a staged copy under ~/.copilot/everme, same shape as
|
|
256
|
+
// QwenWork.
|
|
257
|
+
function refreshCopilotCLI(binPath, runner) {
|
|
258
|
+
const run = runner || defaultRunner;
|
|
259
|
+
run(npmCommand(), ["install", "-g", "@everme/copilot@latest"], {
|
|
260
|
+
encoding: "utf8",
|
|
261
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
262
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
263
|
+
});
|
|
264
|
+
run(binPath, ["plugin", "install", "copilot-cli"], {
|
|
265
|
+
encoding: "utf8",
|
|
266
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
267
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// OpenCode and Kilo Code run a staged copy of @everme/opencode under their
|
|
272
|
+
// config dir, same shape as QwenWork: bump the global package first so the
|
|
273
|
+
// re-stage copies the new code, then let evercli re-point the plugin entry.
|
|
274
|
+
function refreshOpenCodeFamily(platform, binPath, runner) {
|
|
275
|
+
const run = runner || defaultRunner;
|
|
276
|
+
run(npmCommand(), ["install", "-g", "@everme/opencode@latest"], {
|
|
277
|
+
encoding: "utf8",
|
|
278
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
279
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
280
|
+
});
|
|
281
|
+
run(binPath, ["plugin", "install", platform], {
|
|
282
|
+
encoding: "utf8",
|
|
283
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
284
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Qwen Code runs a staged copy under ~/.qwen/everme (or $QWEN_HOME/everme),
|
|
289
|
+
// same shape as QwenWork.
|
|
290
|
+
function refreshQwenCode(binPath, runner) {
|
|
291
|
+
const run = runner || defaultRunner;
|
|
292
|
+
run(npmCommand(), ["install", "-g", "@everme/qwencode@latest"], {
|
|
293
|
+
encoding: "utf8",
|
|
294
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
295
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
296
|
+
});
|
|
297
|
+
run(binPath, ["plugin", "install", "qwencode"], {
|
|
298
|
+
encoding: "utf8",
|
|
299
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
300
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// Cline CLI loads a staged copy from ~/.cline/plugins/everme: bump the global
|
|
305
|
+
// package first so the re-stage copies the new code.
|
|
306
|
+
function refreshCline(binPath, runner) {
|
|
307
|
+
const run = runner || defaultRunner;
|
|
308
|
+
run(npmCommand(), ["install", "-g", "@everme/cline@latest"], {
|
|
309
|
+
encoding: "utf8",
|
|
310
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
311
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
312
|
+
});
|
|
313
|
+
run(binPath, ["plugin", "install", "cline"], {
|
|
314
|
+
encoding: "utf8",
|
|
315
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
316
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Grok Build runs a staged copy under <grok-home>/everme, same shape as
|
|
321
|
+
// QwenWork: bump the global package first so the re-stage copies the new code,
|
|
322
|
+
// then let evercli replace the stage and rewrite hooks/everme.json.
|
|
323
|
+
function refreshGrokBuild(binPath, runner) {
|
|
324
|
+
const run = runner || defaultRunner;
|
|
325
|
+
run(npmCommand(), ["install", "-g", "@everme/grok-build@latest"], {
|
|
326
|
+
encoding: "utf8",
|
|
327
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
328
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
329
|
+
});
|
|
330
|
+
run(binPath, ["plugin", "install", "grok-build"], {
|
|
331
|
+
encoding: "utf8",
|
|
332
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
333
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// PicoClaw runs staged copies of two bundles under ~/.picoclaw (the process
|
|
338
|
+
// hook and memory-mcp). Bump both global packages, then re-stage them with
|
|
339
|
+
// `plugin upgrade`, which writes no credential: a re-install would rotate the
|
|
340
|
+
// token for no reason.
|
|
341
|
+
function refreshPicoClaw(binPath, runner) {
|
|
342
|
+
const run = runner || defaultRunner;
|
|
343
|
+
run(npmCommand(), ["install", "-g", "@everme/picoclaw@latest", "@everme/memory-mcp@latest"], {
|
|
344
|
+
encoding: "utf8",
|
|
345
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
346
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
347
|
+
});
|
|
348
|
+
run(binPath, ["plugin", "upgrade", "--platform", "picoclaw", "--no-prompt"], {
|
|
349
|
+
encoding: "utf8",
|
|
350
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
351
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// NanoClaw copies the bundle into every agent group's state volume. `plugin
|
|
356
|
+
// upgrade` re-copies it into the groups that are already wired without
|
|
357
|
+
// touching their credentials (a reinstall would rotate the token), so bump
|
|
358
|
+
// the global package first and then let evercli re-copy it.
|
|
359
|
+
function refreshNanoClaw(binPath, runner) {
|
|
360
|
+
const run = runner || defaultRunner;
|
|
361
|
+
run(npmCommand(), ["install", "-g", "@everme/nanoclaw@latest"], {
|
|
362
|
+
encoding: "utf8",
|
|
363
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
364
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
365
|
+
});
|
|
366
|
+
run(binPath, ["plugin", "upgrade", "--platform", "nanoclaw"], {
|
|
367
|
+
encoding: "utf8",
|
|
368
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
369
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// ZeroClaw runs a staged copy under ~/.zeroclaw/everme, plus a Lucid wrapper
|
|
374
|
+
// and skill evercli generates from it. Bump the global package, then let
|
|
375
|
+
// `plugin upgrade` re-stage it: that path never mints a token or rewrites
|
|
376
|
+
// everme.env, unlike a re-install.
|
|
377
|
+
function refreshZeroclaw(binPath, runner) {
|
|
378
|
+
const run = runner || defaultRunner;
|
|
379
|
+
run(npmCommand(), ["install", "-g", "@everme/zeroclaw@latest"], {
|
|
380
|
+
encoding: "utf8",
|
|
381
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
382
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
383
|
+
});
|
|
384
|
+
run(binPath, ["plugin", "upgrade", "--platform", "zeroclaw"], {
|
|
385
|
+
encoding: "utf8",
|
|
386
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
387
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
|
|
228
391
|
// Pi records an unpinned npm source, but installing it again is not its update
|
|
229
392
|
// contract. Use Pi's package-specific update command so the registered package
|
|
230
393
|
// moves to the latest npm version without rewriting EverMe credentials.
|
|
@@ -237,9 +400,43 @@ function refreshPi(runner) {
|
|
|
237
400
|
});
|
|
238
401
|
}
|
|
239
402
|
|
|
403
|
+
// oh-my-pi installs npm plugins with bun into ~/.omp/plugins; installing the
|
|
404
|
+
// same unpinned name again moves it to the latest version.
|
|
405
|
+
function refreshOmp(runner) {
|
|
406
|
+
const run = runner || defaultRunner;
|
|
407
|
+
run("omp", ["plugin", "install", "@everme/pi"], {
|
|
408
|
+
encoding: "utf8",
|
|
409
|
+
timeout: PI_REFRESH_TIMEOUT_MS,
|
|
410
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
// LobsterAI's plugin dir is written by evercli with the app's bundled
|
|
415
|
+
// OpenClaw; `plugin upgrade` reinstalls the latest published bundle there and
|
|
416
|
+
// leaves the credentials in LobsterAI's openclaw.json alone.
|
|
417
|
+
function refreshLobsterAI(binPath, runner) {
|
|
418
|
+
const run = runner || defaultRunner;
|
|
419
|
+
run(binPath, ["plugin", "upgrade", "--platform", "lobsterai"], {
|
|
420
|
+
encoding: "utf8",
|
|
421
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
422
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
|
|
240
426
|
// Raven's Python backend is embedded in the evercli binary, so the freshly
|
|
241
427
|
// downloaded binary is the new payload — re-running install is what
|
|
242
428
|
// rewrites ~/.raven/plugins/everme-memory/. Nothing to bump on npm.
|
|
429
|
+
// CowAgent's plugin is embedded in evercli. `plugin upgrade` rewrites the
|
|
430
|
+
// code files only, so the owner's everme.env and config.json stay as they are.
|
|
431
|
+
function refreshCowAgent(binPath, runner) {
|
|
432
|
+
const run = runner || defaultRunner;
|
|
433
|
+
run(binPath, ["plugin", "upgrade", "--platform", "cowagent"], {
|
|
434
|
+
encoding: "utf8",
|
|
435
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
436
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
|
|
243
440
|
function refreshRaven(binPath, runner) {
|
|
244
441
|
const run = runner || defaultRunner;
|
|
245
442
|
run(binPath, ["plugin", "install", "raven"], {
|
|
@@ -249,6 +446,18 @@ function refreshRaven(binPath, runner) {
|
|
|
249
446
|
});
|
|
250
447
|
}
|
|
251
448
|
|
|
449
|
+
// nanobot's package ships inside the evercli binary, like raven's, but it
|
|
450
|
+
// has a payload-only refresh: `plugin upgrade --platform nanobot` rewrites the
|
|
451
|
+
// package in the site-packages recorded at install and keeps the token.
|
|
452
|
+
function refreshNanobot(binPath, runner) {
|
|
453
|
+
const run = runner || defaultRunner;
|
|
454
|
+
run(binPath, ["plugin", "upgrade", "--platform", "nanobot", "--no-prompt"], {
|
|
455
|
+
encoding: "utf8",
|
|
456
|
+
timeout: REFRESH_TIMEOUT_MS,
|
|
457
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
|
|
252
461
|
function refreshDSH(binPath, runner) {
|
|
253
462
|
const run = runner || defaultRunner;
|
|
254
463
|
run(binPath, ["plugin", "install", "dsh"], {
|
|
@@ -314,8 +523,14 @@ function refreshPlugins(opts) {
|
|
|
314
523
|
refreshOpenClaw(runner);
|
|
315
524
|
} else if (h.platform === "hermes") {
|
|
316
525
|
refreshHermes(binPath, runner);
|
|
526
|
+
} else if (h.platform === "astrbot") {
|
|
527
|
+
refreshAstrBot(binPath, runner);
|
|
528
|
+
log("[@everme/cli] astrbot: plugin re-staged — restart AstrBot or reload astrbot_plugin_everme in the WebUI");
|
|
317
529
|
} else if (h.platform === "raven") {
|
|
318
530
|
refreshRaven(binPath, runner);
|
|
531
|
+
} else if (h.platform === "nanobot") {
|
|
532
|
+
refreshNanobot(binPath, runner);
|
|
533
|
+
log("[@everme/cli] nanobot: package refreshed — restart nanobot to load it");
|
|
319
534
|
} else if (h.platform === "dsh") {
|
|
320
535
|
if (shouldRefreshDSH(h)) {
|
|
321
536
|
refreshDSH(binPath, runner);
|
|
@@ -329,9 +544,44 @@ function refreshPlugins(opts) {
|
|
|
329
544
|
refreshMinimaxCode(binPath, runner);
|
|
330
545
|
} else if (h.platform === "pi") {
|
|
331
546
|
refreshPi(runner);
|
|
547
|
+
} else if (h.platform === "omp") {
|
|
548
|
+
refreshOmp(runner);
|
|
549
|
+
} else if (h.platform === "lobsterai") {
|
|
550
|
+
refreshLobsterAI(binPath, runner);
|
|
551
|
+
log("[@everme/cli] lobsterai: plugin reinstalled — restart LobsterAI so its gateway loads it");
|
|
552
|
+
} else if (h.platform === "picoclaw") {
|
|
553
|
+
refreshPicoClaw(binPath, runner);
|
|
554
|
+
log("[@everme/cli] picoclaw: hook re-staged — restart the PicoClaw gateway so it starts the new hook process");
|
|
332
555
|
} else if (h.platform === "qwenwork") {
|
|
333
556
|
refreshQwenWork(binPath, runner);
|
|
334
557
|
log("[@everme/cli] qwenwork: hooks re-staged — restart QwenWork so it re-reads settings.json");
|
|
558
|
+
} else if (h.platform === "qoder") {
|
|
559
|
+
refreshQoder(binPath, runner);
|
|
560
|
+
log("[@everme/cli] qoder: hooks re-staged — start a new Qoder CLI session to load them");
|
|
561
|
+
} else if (h.platform === "copilot-cli") {
|
|
562
|
+
refreshCopilotCLI(binPath, runner);
|
|
563
|
+
log("[@everme/cli] copilot-cli: hooks re-staged — start a new Copilot CLI session to load them");
|
|
564
|
+
} else if (h.platform === "opencode" || h.platform === "kilocode") {
|
|
565
|
+
refreshOpenCodeFamily(h.platform, binPath, runner);
|
|
566
|
+
log(`[@everme/cli] ${h.platform}: plugin re-staged — restart the host to load it`);
|
|
567
|
+
} else if (h.platform === "qwencode") {
|
|
568
|
+
refreshQwenCode(binPath, runner);
|
|
569
|
+
log("[@everme/cli] qwencode: hooks re-staged — start a new Qwen Code session to load them");
|
|
570
|
+
} else if (h.platform === "cline") {
|
|
571
|
+
refreshCline(binPath, runner);
|
|
572
|
+
log("[@everme/cli] cline: plugin re-staged — start a new Cline CLI session to load it");
|
|
573
|
+
} else if (h.platform === "grok-build") {
|
|
574
|
+
refreshGrokBuild(binPath, runner);
|
|
575
|
+
log("[@everme/cli] grok-build: hook re-staged — start a new grok session to load it");
|
|
576
|
+
} else if (h.platform === "cowagent") {
|
|
577
|
+
refreshCowAgent(binPath, runner);
|
|
578
|
+
log("[@everme/cli] cowagent: plugin code refreshed — restart CowAgent to load it");
|
|
579
|
+
} else if (h.platform === "nanoclaw") {
|
|
580
|
+
refreshNanoClaw(binPath, runner);
|
|
581
|
+
log("[@everme/cli] nanoclaw: bundle re-copied — restart the agent groups (`ncl groups restart --id <id>`) so their containers load it");
|
|
582
|
+
} else if (h.platform === "zeroclaw") {
|
|
583
|
+
refreshZeroclaw(binPath, runner);
|
|
584
|
+
log("[@everme/cli] zeroclaw: bridge re-staged — start a new ZeroClaw session or run `zeroclaw service restart`");
|
|
335
585
|
} else if (h.platform === "workbuddy") {
|
|
336
586
|
refreshWorkBuddy(binPath, runner);
|
|
337
587
|
log("[@everme/cli] workbuddy: hooks re-staged — quit WorkBuddy completely (Cmd+Q) and reopen it so the engine re-reads settings.json");
|
|
@@ -358,7 +608,15 @@ function logUnconnectedHosts(hosts, log) {
|
|
|
358
608
|
module.exports = {
|
|
359
609
|
NPX_PLATFORMS,
|
|
360
610
|
refreshQwenWork,
|
|
611
|
+
refreshQoder,
|
|
612
|
+
refreshCopilotCLI,
|
|
613
|
+
refreshOpenCodeFamily,
|
|
614
|
+
refreshQwenCode,
|
|
615
|
+
refreshCline,
|
|
616
|
+
refreshNanoClaw,
|
|
361
617
|
refreshWorkBuddy,
|
|
618
|
+
refreshGrokBuild,
|
|
619
|
+
refreshZeroclaw,
|
|
362
620
|
LIST_TIMEOUT_MS,
|
|
363
621
|
REFRESH_TIMEOUT_MS,
|
|
364
622
|
DSH_REFRESH_TIMEOUT_MS,
|
|
@@ -370,10 +628,16 @@ module.exports = {
|
|
|
370
628
|
refreshCodex,
|
|
371
629
|
refreshOpenClaw,
|
|
372
630
|
refreshHermes,
|
|
631
|
+
refreshAstrBot,
|
|
373
632
|
refreshKimicode,
|
|
374
633
|
refreshMinimaxCode,
|
|
375
634
|
refreshPi,
|
|
635
|
+
refreshOmp,
|
|
636
|
+
refreshLobsterAI,
|
|
637
|
+
refreshPicoClaw,
|
|
376
638
|
refreshRaven,
|
|
639
|
+
refreshNanobot,
|
|
640
|
+
refreshCowAgent,
|
|
377
641
|
refreshDSH,
|
|
378
642
|
shouldRefreshDSH,
|
|
379
643
|
skipReason,
|
package/sha256sums.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
59c822171a18b29f6ba42c709ebbb7fea1279019d8f679e03aef8e6b1c694c38 evercli_darwin_amd64.tar.gz
|
|
2
|
+
2385a31458353f739111d50d85d98fb2b15cc94367cd4f1934e52d2acb2b1307 evercli_darwin_arm64.tar.gz
|
|
3
|
+
d51717967757aa80396b4e39ef242b7b7659bf1b1387294b258534c3b6e22d5b evercli_linux_amd64.tar.gz
|
|
4
|
+
3f8966707d96490e259e3abed2fb9e519a43a4256b67b211839e4d74779d6037 evercli_linux_arm64.tar.gz
|
|
5
|
+
685d4bb301fd5b3238f4fa5bcf29954edb3b0d222c7f5c7d9e8901f5a33c528d evercli_windows_amd64.zip
|
|
6
|
+
e9197eccfb22098bdc6936e7ba0c3aeca2a0d625382ca1b19d45a42eb396dea8 evercli_windows_arm64.zip
|