@meistrari/remy-cli 1.25.0 → 1.25.1-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/remy.js +39 -10
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -40,6 +40,8 @@ On first use, Remy opens browser-based device authorization, validates your Codi
|
|
|
40
40
|
|
|
41
41
|
Run `remy update` to install a newer CLI release using the package manager that owns your installation (mise, Bun, pnpm, or npm). No sign-in is required. Use `remy --version` to print the installed version.
|
|
42
42
|
|
|
43
|
+
For mise installations, updates change the existing owning TOML or `.tool-versions` config to the exact new version and keep the previous installation available for running processes. Shared-cache npm installs are supported.
|
|
44
|
+
|
|
43
45
|
Stable versions check npm’s `latest` channel. Release candidates check both `rc` and `latest` and choose the newer version; Remy never downgrades. To switch from stable to RC, use the explicit `@rc` install command above.
|
|
44
46
|
|
|
45
47
|
Each interactive `remy` or `remy dashboard` startup checks for an update before sign-in or the splash. When one is available, type `y` or `yes`, then Enter, to upgrade. Press Enter or type `n` to continue with the current version. Lookup failures or a two-second timeout let startup continue. After a successful upgrade, Remy exits and asks you to run it again. Installation failures exit with an error so you can resolve the package-manager problem and retry.
|
package/dist/remy.js
CHANGED
|
@@ -34592,17 +34592,23 @@ function formatSessionJson({
|
|
|
34592
34592
|
`;
|
|
34593
34593
|
}
|
|
34594
34594
|
// src/version.ts
|
|
34595
|
-
var remyCliVersion = "1.25.0";
|
|
34595
|
+
var remyCliVersion = "1.25.1-rc.0";
|
|
34596
34596
|
|
|
34597
34597
|
// src/self-update.ts
|
|
34598
34598
|
import { spawn } from "child_process";
|
|
34599
34599
|
import { realpath } from "fs/promises";
|
|
34600
|
-
import { join as join3,
|
|
34600
|
+
import { join as join3, isAbsolute } from "path";
|
|
34601
34601
|
import { createInterface } from "readline/promises";
|
|
34602
34602
|
var {semver } = globalThis.Bun;
|
|
34603
34603
|
var packageName = "@meistrari/remy-cli";
|
|
34604
34604
|
var versionSchema = exports_external2.string().regex(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-rc\.(0|[1-9]\d*))?$/);
|
|
34605
34605
|
var tagsSchema = exports_external2.object({ latest: versionSchema, rc: versionSchema.optional() });
|
|
34606
|
+
var miseInstallationsSchema = exports_external2.array(exports_external2.object({
|
|
34607
|
+
install_path: exports_external2.string(),
|
|
34608
|
+
active: exports_external2.boolean(),
|
|
34609
|
+
installed: exports_external2.boolean(),
|
|
34610
|
+
source: exports_external2.object({ type: exports_external2.string(), path: exports_external2.string() }).optional()
|
|
34611
|
+
}));
|
|
34606
34612
|
function createCliUpdates({
|
|
34607
34613
|
currentVersion,
|
|
34608
34614
|
entryPath,
|
|
@@ -34650,11 +34656,26 @@ function createCliUpdates({
|
|
|
34650
34656
|
};
|
|
34651
34657
|
let argv;
|
|
34652
34658
|
let updatedEntry = runningEntry;
|
|
34653
|
-
const miseRoot = await probe(["mise", "where", `npm:${packageName}
|
|
34654
|
-
|
|
34655
|
-
|
|
34659
|
+
const miseRoot = await probe(["mise", "where", `npm:${packageName}`]);
|
|
34660
|
+
let miseRelative = "";
|
|
34661
|
+
if (miseRoot) {
|
|
34662
|
+
for (const layout of ["node_modules", "lib/node_modules"]) {
|
|
34663
|
+
const candidate = join3(layout, packageName, "dist", "remy.js");
|
|
34664
|
+
if (await matchesEntry(join3(miseRoot, candidate))) {
|
|
34665
|
+
miseRelative = candidate;
|
|
34666
|
+
break;
|
|
34667
|
+
}
|
|
34668
|
+
}
|
|
34669
|
+
}
|
|
34670
|
+
const usesMise = miseRelative !== "";
|
|
34656
34671
|
if (usesMise) {
|
|
34657
|
-
|
|
34672
|
+
const lookup = await probe(["mise", "ls", `npm:${packageName}`, "--current", "--json"]);
|
|
34673
|
+
const installations = lookup ? miseInstallationsSchema.parse(JSON.parse(lookup)) : [];
|
|
34674
|
+
const owners = installations.filter((installation) => installation.active && installation.installed && installation.install_path === miseRoot);
|
|
34675
|
+
const source = owners.length === 1 ? owners[0]?.source : undefined;
|
|
34676
|
+
if (!source || !["mise.toml", ".tool-versions"].includes(source.type) || !isAbsolute(source.path))
|
|
34677
|
+
throw new Error("Cannot identify the owning mise config for this Remy installation. Update it with mise directly, then retry remy --version.");
|
|
34678
|
+
argv = ["mise", "use", "--path", source.path, "--pin", `npm:${packageName}@${version5}`];
|
|
34658
34679
|
} else {
|
|
34659
34680
|
const bunBin = await probe(["bun", "pm", "bin", "-g"]);
|
|
34660
34681
|
if (bunBin && await matchesEntry(join3(bunBin, "remy"))) {
|
|
@@ -34679,7 +34700,7 @@ function createCliUpdates({
|
|
|
34679
34700
|
if (result.exitCode !== 0)
|
|
34680
34701
|
throw new Error(`Remy update failed: ${argv[0]} exited with code ${result.exitCode}. Resolve the package manager error and retry remy update.`);
|
|
34681
34702
|
if (usesMise) {
|
|
34682
|
-
const located = await runProcess({ argv: ["mise", "where", `npm:${packageName}
|
|
34703
|
+
const located = await runProcess({ argv: ["mise", "where", `npm:${packageName}`], signal, display: false });
|
|
34683
34704
|
if (located.exitCode !== 0 || !located.stdout.trim())
|
|
34684
34705
|
throw new Error("Update finished but the new mise installation could not be located. Check remy --version before retrying.");
|
|
34685
34706
|
updatedEntry = join3(located.stdout.trim(), miseRelative);
|
|
@@ -37746,7 +37767,7 @@ function createWorkspaceController({ client, sessionId, signal, operations = {},
|
|
|
37746
37767
|
}
|
|
37747
37768
|
return;
|
|
37748
37769
|
}
|
|
37749
|
-
if (selection.kind !== "changes" && selection.repositoryId !== event.repositoryId)
|
|
37770
|
+
if (event.kind !== "turn-ended" && selection.kind !== "changes" && selection.repositoryId !== event.repositoryId)
|
|
37750
37771
|
return;
|
|
37751
37772
|
if (event.kind === "initialized") {
|
|
37752
37773
|
if (initializedRepositories.has(event.repositoryId))
|
|
@@ -41492,7 +41513,7 @@ var SPINNER_INTERVAL_MS = 80;
|
|
|
41492
41513
|
// src/tui/path-completion.ts
|
|
41493
41514
|
import { readdir } from "fs/promises";
|
|
41494
41515
|
import { homedir } from "os";
|
|
41495
|
-
import { basename as basename5, dirname as dirname5, isAbsolute as isAbsolute2, join as join8, relative
|
|
41516
|
+
import { basename as basename5, dirname as dirname5, isAbsolute as isAbsolute2, join as join8, relative, resolve as resolve2, sep } from "path";
|
|
41496
41517
|
var maximumCandidates = 50;
|
|
41497
41518
|
async function completePathToken({ text, cwd, homeDirectory = homedir() }) {
|
|
41498
41519
|
const token = activePathToken(text);
|
|
@@ -41512,7 +41533,7 @@ async function completePathToken({ text, cwd, homeDirectory = homedir() }) {
|
|
|
41512
41533
|
}
|
|
41513
41534
|
return entries.filter((entry2) => entry2.name.toLowerCase().startsWith(prefix.toLowerCase())).sort((left, right) => left.name.localeCompare(right.name)).slice(0, maximumCandidates).map((entry2) => {
|
|
41514
41535
|
const completedPath = join8(directory, entry2.name);
|
|
41515
|
-
const replacementPath = pathUsesTilde ? `~/${
|
|
41536
|
+
const replacementPath = pathUsesTilde ? `~/${relative(homeDirectory, completedPath)}` : isAbsolute2(pathText) ? completedPath : relative(cwd, completedPath) || entry2.name;
|
|
41516
41537
|
const normalized = replacementPath.split(sep).join("/");
|
|
41517
41538
|
const suffix = entry2.isDirectory() ? "/" : "";
|
|
41518
41539
|
const completed = `${normalized}${suffix}`;
|
|
@@ -46660,6 +46681,10 @@ var workspaceInvalidationEventSchema = exports_external2.object({
|
|
|
46660
46681
|
type: exports_external2.enum(["session.workspace.git.initialized", "session.workspace.git.committed", "session.workspace.git.pushed"]),
|
|
46661
46682
|
payload: exports_external2.object({ repository: exports_external2.object({ id: exports_external2.string().min(1) }) })
|
|
46662
46683
|
});
|
|
46684
|
+
var mainAgentTurnEndedEventSchema = exports_external2.object({
|
|
46685
|
+
type: exports_external2.literal("agent.turn.ended"),
|
|
46686
|
+
actor: exports_external2.object({ type: exports_external2.literal("main") })
|
|
46687
|
+
});
|
|
46663
46688
|
async function runAttachedSession({
|
|
46664
46689
|
dependencies,
|
|
46665
46690
|
operations,
|
|
@@ -46852,6 +46877,10 @@ async function runAttachedSession({
|
|
|
46852
46877
|
connection = state.connectionStatus;
|
|
46853
46878
|
if (frame?.kind !== "retained")
|
|
46854
46879
|
return;
|
|
46880
|
+
if (mainAgentTurnEndedEventSchema.safeParse(frame.data.event).success) {
|
|
46881
|
+
invalidateWorkspace({ kind: "turn-ended" });
|
|
46882
|
+
return;
|
|
46883
|
+
}
|
|
46855
46884
|
const event = workspaceInvalidationEventSchema.safeParse(frame.data.event);
|
|
46856
46885
|
if (!event.success)
|
|
46857
46886
|
return;
|