@meistrari/remy-cli 1.0.0-rc.1 → 1.0.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.
Files changed (2) hide show
  1. package/dist/remy.js +35 -16
  2. package/package.json +1 -1
package/dist/remy.js CHANGED
@@ -34553,7 +34553,10 @@ function renderComposerDivider({ width, tag, leadLabel }) {
34553
34553
  // src/tui/renderer.ts
34554
34554
  import { createCliRenderer } from "@opentui/core";
34555
34555
  var rendererDestroyed = new WeakMap;
34556
- var clearMainScreen = "\x1B[2J\x1B[H";
34556
+ var enterAlternateScreen = "\x1B[?1049h";
34557
+ var clearScreen = "\x1B[2J\x1B[H";
34558
+ var exitAlternateScreen = "\x1B[?1049l";
34559
+ var transitionScreenWriter;
34557
34560
  async function createRemyRenderer({
34558
34561
  createRenderer = createCliRenderer
34559
34562
  } = {}) {
@@ -34566,23 +34569,28 @@ async function createRemyRenderer({
34566
34569
  const renderer = await createRenderer({
34567
34570
  exitOnCtrlC: false,
34568
34571
  exitSignals: [],
34569
- screenMode: "main-screen",
34570
- useMouse: false,
34572
+ screenMode: "alternate-screen",
34573
+ useMouse: true,
34571
34574
  onDestroy: resolveDestroyed
34572
34575
  });
34576
+ transitionScreenWriter = undefined;
34573
34577
  rendererDestroyed.set(renderer, destroyed);
34574
34578
  return renderer;
34575
34579
  }
34576
34580
  async function waitForRemyRendererDestroy(renderer) {
34577
34581
  await (rendererDestroyed.get(renderer) ?? Promise.resolve());
34578
34582
  }
34579
- function clearRemyScreen({
34583
+ function showRemyTransitionScreen({
34580
34584
  write = (chunk) => process.stdout.write(chunk)
34581
34585
  } = {}) {
34582
- write(clearMainScreen);
34586
+ transitionScreenWriter = write;
34587
+ write(`${enterAlternateScreen}${clearScreen}`);
34588
+ }
34589
+ function restoreRemyTransitionScreen() {
34590
+ transitionScreenWriter?.(exitAlternateScreen);
34591
+ transitionScreenWriter = undefined;
34583
34592
  }
34584
34593
  async function renderRemyView({
34585
- clearScreen = clearRemyScreen,
34586
34594
  open: open4,
34587
34595
  waitForAction
34588
34596
  }) {
@@ -34592,7 +34600,6 @@ async function renderRemyView({
34592
34600
  } finally {
34593
34601
  view.destroy();
34594
34602
  await view.waitForDestroy?.();
34595
- clearScreen();
34596
34603
  }
34597
34604
  }
34598
34605
 
@@ -36994,7 +37001,7 @@ var compactMarkRows = 9;
36994
37001
  var compactMinWidth = 48;
36995
37002
  var compactMinHeight = 20;
36996
37003
  var markBrightnessGain = 4.2;
36997
- var remyCliVersion = "1.0.0-rc.1";
37004
+ var remyCliVersion = "1.0.0";
36998
37005
  async function showRemySplash({
36999
37006
  createRenderer = createRemyRenderer,
37000
37007
  durationMs = splashDurationMs,
@@ -37311,6 +37318,7 @@ async function dispatchCliCommand(dependencies) {
37311
37318
  interrupt: shutdown.interrupt
37312
37319
  });
37313
37320
  } catch (error93) {
37321
+ restoreRemyTransitionScreen();
37314
37322
  if (error93 instanceof CliInterruptedError) {
37315
37323
  dependencies.output.writeStderr(`Interrupted.
37316
37324
  `);
@@ -37337,6 +37345,7 @@ async function dispatchCliCommand(dependencies) {
37337
37345
  `);
37338
37346
  return 1;
37339
37347
  } finally {
37348
+ restoreRemyTransitionScreen();
37340
37349
  shutdown.dispose();
37341
37350
  }
37342
37351
  }
@@ -37752,6 +37761,9 @@ async function dashboard({
37752
37761
  const pages = [initialSessions];
37753
37762
  let pageIndex = 0;
37754
37763
  let loadingPage;
37764
+ function holdTransitionScreen() {
37765
+ showRemyTransitionScreen({ write: (chunk) => dependencies.output.writeStdout(chunk) });
37766
+ }
37755
37767
  async function loadDashboardPage({ direction }) {
37756
37768
  if (loadingPage)
37757
37769
  return await loadingPage;
@@ -37776,6 +37788,7 @@ async function dashboard({
37776
37788
  }
37777
37789
  }
37778
37790
  let firstOpen = true;
37791
+ holdTransitionScreen();
37779
37792
  while (true) {
37780
37793
  if (!firstOpen) {
37781
37794
  pages.splice(0, pages.length, toDashboardPage(await operations.listSessions({ client: operations.client, limit: 20 })));
@@ -37793,6 +37806,7 @@ async function dashboard({
37793
37806
  return 0;
37794
37807
  if (action.kind === "interrupt")
37795
37808
  throw new CliInterruptedError("SIGINT");
37809
+ holdTransitionScreen();
37796
37810
  if (action.kind === "session")
37797
37811
  return await attachSession({ dependencies, sessionId: action.sessionId, noTui: false, json: false });
37798
37812
  const draft = await openTuiNewSessionWizard({
@@ -37801,10 +37815,13 @@ async function dashboard({
37801
37815
  repositories,
37802
37816
  reloadRepositories: async () => await collectAllRepositories({ listRepositories: operations.listRepositories })
37803
37817
  });
37804
- if (!draft)
37818
+ if (!draft) {
37819
+ holdTransitionScreen();
37805
37820
  continue;
37821
+ }
37806
37822
  if ("kind" in draft)
37807
37823
  throw new CliInterruptedError("SIGINT");
37824
+ holdTransitionScreen();
37808
37825
  const created = await createFromTuiDraft({ dependencies, operations, draft });
37809
37826
  return await attachCreatedSession({ dependencies, operations, created, repositories: draft.repositories, noTui: false, json: false });
37810
37827
  }
@@ -37863,7 +37880,6 @@ function createSplashPresentation({
37863
37880
  const controller = new AbortController;
37864
37881
  let splash;
37865
37882
  let ready;
37866
- let mounted = false;
37867
37883
  let closed = false;
37868
37884
  const onCommandAbort = () => controller.abort();
37869
37885
  dependencies.abortSignal?.addEventListener("abort", onCommandAbort, { once: true });
@@ -37886,10 +37902,7 @@ function createSplashPresentation({
37886
37902
  mode: "startup",
37887
37903
  signal: controller.signal,
37888
37904
  onInterrupt: interrupt,
37889
- onReady: (splashController) => {
37890
- mounted = splashController !== undefined;
37891
- resolveReady(splashController);
37892
- }
37905
+ onReady: resolveReady
37893
37906
  });
37894
37907
  splash.catch((error93) => rejectReady(error93));
37895
37908
  }
@@ -37902,8 +37915,6 @@ function createSplashPresentation({
37902
37915
  dependencies.abortSignal?.removeEventListener("abort", onCommandAbort);
37903
37916
  controller.abort();
37904
37917
  await splash;
37905
- if (mounted)
37906
- clearRemyScreen();
37907
37918
  }
37908
37919
  };
37909
37920
  }
@@ -38246,6 +38257,8 @@ async function runAttachedSession({
38246
38257
  if (interactive) {
38247
38258
  const openSessionTui = dependencies.openSessionTui ?? createSessionTui;
38248
38259
  let composerSnapshot;
38260
+ const holdTransitionScreen = () => showRemyTransitionScreen({ write: (chunk) => dependencies.output.writeStdout(chunk) });
38261
+ holdTransitionScreen();
38249
38262
  while (true) {
38250
38263
  const action = await renderRemyView({
38251
38264
  open: async () => await openSessionTui({
@@ -38290,6 +38303,7 @@ async function runAttachedSession({
38290
38303
  return 0;
38291
38304
  }
38292
38305
  if (action.kind === "sessions") {
38306
+ holdTransitionScreen();
38293
38307
  stop();
38294
38308
  await startPromise;
38295
38309
  if (dependencies.abortSignal?.aborted)
@@ -38299,14 +38313,17 @@ async function runAttachedSession({
38299
38313
  bootstrap: await prepareDashboardBootstrap({ dependencies, operations })
38300
38314
  });
38301
38315
  }
38316
+ holdTransitionScreen();
38302
38317
  const availableRepositories = await collectAllRepositories({ listRepositories: operations.listRepositories });
38303
38318
  let draft = await openTuiNewSessionWizard({ dependencies, operations, repositories: availableRepositories });
38304
38319
  if (!draft) {
38320
+ holdTransitionScreen();
38305
38321
  composerSnapshot = action.composer;
38306
38322
  continue;
38307
38323
  }
38308
38324
  if ("kind" in draft)
38309
38325
  throw new CliInterruptedError("SIGINT");
38326
+ holdTransitionScreen();
38310
38327
  while (true) {
38311
38328
  try {
38312
38329
  const created = await createFromTuiDraft({ dependencies, operations, draft });
@@ -38321,6 +38338,7 @@ async function runAttachedSession({
38321
38338
  json: false
38322
38339
  });
38323
38340
  } catch (error93) {
38341
+ holdTransitionScreen();
38324
38342
  draft = await openTuiNewSessionWizard({
38325
38343
  dependencies,
38326
38344
  operations,
@@ -38329,6 +38347,7 @@ async function runAttachedSession({
38329
38347
  initialError: error93 instanceof Error ? error93.message : String(error93)
38330
38348
  });
38331
38349
  if (!draft) {
38350
+ holdTransitionScreen();
38332
38351
  composerSnapshot = action.composer;
38333
38352
  break;
38334
38353
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meistrari/remy-cli",
3
- "version": "1.0.0-rc.1",
3
+ "version": "1.0.0",
4
4
  "description": "Remy, the Coding Agent terminal client.",
5
5
  "type": "module",
6
6
  "bin": {