@autohq/cli 0.1.182 → 0.1.184

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.
@@ -26571,7 +26571,7 @@ Object.assign(lookup, {
26571
26571
  // package.json
26572
26572
  var package_default = {
26573
26573
  name: "@autohq/cli",
26574
- version: "0.1.182",
26574
+ version: "0.1.184",
26575
26575
  license: "SEE LICENSE IN README.md",
26576
26576
  publishConfig: {
26577
26577
  access: "public"
package/dist/index.js CHANGED
@@ -343,8 +343,8 @@ async function createOAuthLoopbackCallback(input) {
343
343
  });
344
344
  let resolveResult;
345
345
  let rejectResult;
346
- const result = new Promise((resolve3, reject) => {
347
- resolveResult = resolve3;
346
+ const result = new Promise((resolve4, reject) => {
347
+ resolveResult = resolve4;
348
348
  rejectResult = reject;
349
349
  });
350
350
  const server = createServer((request, response) => {
@@ -606,14 +606,14 @@ async function listenOnPreferredPort(server, port) {
606
606
  }
607
607
  }
608
608
  async function listen(server, port) {
609
- await new Promise((resolve3, reject) => {
609
+ await new Promise((resolve4, reject) => {
610
610
  const onError = (error51) => {
611
611
  server.off("listening", onListening);
612
612
  reject(error51);
613
613
  };
614
614
  const onListening = () => {
615
615
  server.off("error", onError);
616
- resolve3();
616
+ resolve4();
617
617
  };
618
618
  server.once("error", onError);
619
619
  server.once("listening", onListening);
@@ -884,7 +884,7 @@ function persistLogin(config2, input) {
884
884
  }
885
885
  }
886
886
  async function sleep(ms) {
887
- await new Promise((resolve3) => setTimeout(resolve3, ms));
887
+ await new Promise((resolve4) => setTimeout(resolve4, ms));
888
888
  }
889
889
  var init_login = __esm({
890
890
  "src/commands/auth/login.ts"() {
@@ -21681,7 +21681,7 @@ var init_package = __esm({
21681
21681
  "package.json"() {
21682
21682
  package_default = {
21683
21683
  name: "@autohq/cli",
21684
- version: "0.1.182",
21684
+ version: "0.1.184",
21685
21685
  license: "SEE LICENSE IN README.md",
21686
21686
  publishConfig: {
21687
21687
  access: "public"
@@ -24256,7 +24256,7 @@ function resolveEditor(input) {
24256
24256
  return input.env.VISUAL?.trim() || input.env.EDITOR?.trim() || "vi";
24257
24257
  }
24258
24258
  async function runEditor(editor, filePath) {
24259
- await new Promise((resolve3, reject) => {
24259
+ await new Promise((resolve4, reject) => {
24260
24260
  const child = spawn2(editor, [filePath], {
24261
24261
  shell: true,
24262
24262
  stdio: "inherit"
@@ -24268,7 +24268,7 @@ async function runEditor(editor, filePath) {
24268
24268
  });
24269
24269
  child.on("close", (code, signal) => {
24270
24270
  if (code === 0) {
24271
- resolve3();
24271
+ resolve4();
24272
24272
  return;
24273
24273
  }
24274
24274
  if (signal) {
@@ -24326,6 +24326,70 @@ var init_actions2 = __esm({
24326
24326
  }
24327
24327
  });
24328
24328
 
24329
+ // src/lib/branding/auto-logo.ts
24330
+ function autoLogo(style = plainStyle, terminalWidth) {
24331
+ const width = terminalWidth ?? Number.POSITIVE_INFINITY;
24332
+ const logo = AUTO_LOGOS.find(
24333
+ (candidate) => logoWidth(candidate) <= width
24334
+ ) ?? ["auto"];
24335
+ return logo.map((line) => style.id(line));
24336
+ }
24337
+ function largestAutoLogoWidth() {
24338
+ return logoWidth(AUTO_LOGOS[0]);
24339
+ }
24340
+ function logoWidth(logo) {
24341
+ return Math.max(...logo.map((line) => line.length));
24342
+ }
24343
+ var AUTO_LOGOS;
24344
+ var init_auto_logo = __esm({
24345
+ "src/lib/branding/auto-logo.ts"() {
24346
+ "use strict";
24347
+ init_style();
24348
+ AUTO_LOGOS = [
24349
+ [
24350
+ " \u2584\u2584\u2584\u2584",
24351
+ " \u2584\u2584\u2584\u2584",
24352
+ " \u2584\u2584\u2584\u2584",
24353
+ " \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584",
24354
+ " \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584",
24355
+ "\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584",
24356
+ "\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584",
24357
+ " \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584",
24358
+ " \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584",
24359
+ " \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584",
24360
+ " \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584",
24361
+ "\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584",
24362
+ "\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584",
24363
+ "\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584",
24364
+ "\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584",
24365
+ " \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584",
24366
+ " \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584"
24367
+ ],
24368
+ [
24369
+ " \u2584\u2584",
24370
+ " \u2584\u2584",
24371
+ " \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584",
24372
+ " \u2584\u2584\u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584\u2584 \u2584\u2584\u2584",
24373
+ " \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584\u2584 \u2584\u2584\u2584",
24374
+ " \u2584\u2584\u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584\u2584 \u2584\u2584\u2584",
24375
+ " \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584\u2584 \u2584\u2584\u2584",
24376
+ " \u2584\u2584\u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584\u2584 \u2584\u2584\u2584",
24377
+ " \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584\u2584 \u2584\u2584\u2584",
24378
+ " \u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584 \u2584\u2584\u2584",
24379
+ " \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584"
24380
+ ],
24381
+ [
24382
+ " \u2584\u2584",
24383
+ " \u2584\u2584\u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584",
24384
+ " \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584",
24385
+ " \u2584\u2584\u2584\u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584",
24386
+ " \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584",
24387
+ " \u2584\u2584\u2584 \u2584\u2584 \u2584\u2584\u2584 \u2584\u2584 \u2584\u2584\u2584 \u2584\u2584\u2584\u2584"
24388
+ ]
24389
+ ];
24390
+ }
24391
+ });
24392
+
24329
24393
  // src/tui/ApiClientContext.ts
24330
24394
  import { createContext, useContext } from "react";
24331
24395
  function useApiClient() {
@@ -26123,13 +26187,13 @@ function sleep3(ms, signal) {
26123
26187
  if (signal.aborted) {
26124
26188
  return Promise.resolve();
26125
26189
  }
26126
- return new Promise((resolve3) => {
26127
- const timeout = setTimeout(resolve3, ms);
26190
+ return new Promise((resolve4) => {
26191
+ const timeout = setTimeout(resolve4, ms);
26128
26192
  signal.addEventListener(
26129
26193
  "abort",
26130
26194
  () => {
26131
26195
  clearTimeout(timeout);
26132
- resolve3();
26196
+ resolve4();
26133
26197
  },
26134
26198
  { once: true }
26135
26199
  );
@@ -29428,25 +29492,50 @@ import { Spinner as Spinner2 } from "@inkjs/ui";
29428
29492
  import { Box as Box14, Text as Text15, useApp as useApp3, useStdout as useStdout8 } from "ink";
29429
29493
  import { useEffect as useEffect4, useState as useState4 } from "react";
29430
29494
  import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
29431
- function SplashView({ durationMs = 1600 }) {
29495
+ function SplashView({
29496
+ durationMs = 1600,
29497
+ hold = false,
29498
+ version: version2
29499
+ }) {
29432
29500
  const { exit } = useApp3();
29433
29501
  const { stdout } = useStdout8();
29434
29502
  const termWidth = stdout?.columns ?? 120;
29435
29503
  const termHeight = stdout?.rows ?? 24;
29504
+ const logo = autoLogo(void 0, Math.min(termWidth, SPLASH_LOGO_MAX_WIDTH));
29505
+ const logoWidth2 = Math.max(...logo.map((line) => line.length));
29506
+ const logoRows = keyedLogoRows(logo);
29436
29507
  const [step, setStep] = useState4(0);
29508
+ const [frame, setFrame] = useState4(0);
29437
29509
  useEffect4(() => {
29510
+ const frameInterval = setInterval(() => {
29511
+ setFrame((value) => (value + 1) % 240);
29512
+ }, FRAME_MS);
29438
29513
  const interval = setInterval(() => {
29439
- setStep((s) => Math.min(s + 1, STEPS.length - 1));
29514
+ setStep((s) => {
29515
+ const next = Math.min(s + 1, STEPS.length - 1);
29516
+ if (!hold && next === STEPS.length - 1) {
29517
+ clearInterval(interval);
29518
+ }
29519
+ return next;
29520
+ });
29440
29521
  }, STEP_MS);
29522
+ if (hold) {
29523
+ return () => {
29524
+ clearInterval(frameInterval);
29525
+ clearInterval(interval);
29526
+ };
29527
+ }
29441
29528
  const done = setTimeout(() => {
29529
+ clearInterval(frameInterval);
29442
29530
  clearInterval(interval);
29443
29531
  exit();
29444
29532
  }, durationMs);
29445
29533
  return () => {
29534
+ clearInterval(frameInterval);
29446
29535
  clearInterval(interval);
29447
29536
  clearTimeout(done);
29448
29537
  };
29449
- }, [exit, durationMs]);
29538
+ }, [exit, durationMs, hold]);
29450
29539
  const isDone = step === STEPS.length - 1;
29451
29540
  return /* @__PURE__ */ jsxs13(
29452
29541
  Box14,
@@ -29458,32 +29547,82 @@ function SplashView({ durationMs = 1600 }) {
29458
29547
  justifyContent: "center",
29459
29548
  gap: 1,
29460
29549
  children: [
29461
- /* @__PURE__ */ jsx15(Box14, { flexDirection: "column", alignItems: "center", children: LOGO.map((line) => /* @__PURE__ */ jsx15(Text15, { color: "cyan", bold: true, children: line }, line)) }),
29462
- /* @__PURE__ */ jsx15(Text15, { dimColor: true, children: "Agent Orchestration Platform" }),
29550
+ /* @__PURE__ */ jsx15(
29551
+ Box14,
29552
+ {
29553
+ width: logoWidth2,
29554
+ flexDirection: "column",
29555
+ marginBottom: 1,
29556
+ marginRight: SPLASH_LOGO_OPTICAL_OFFSET,
29557
+ children: logoRows.map((row) => /* @__PURE__ */ jsx15(
29558
+ ShimmerLogoLine,
29559
+ {
29560
+ frame,
29561
+ line: row.line,
29562
+ rowIndex: row.rowIndex
29563
+ },
29564
+ row.key
29565
+ ))
29566
+ }
29567
+ ),
29568
+ /* @__PURE__ */ jsx15(Text15, { dimColor: true, children: "Program software factories the same way you program CI/CD." }),
29463
29569
  /* @__PURE__ */ jsx15(Text15, { dimColor: true, children: "\u2500".repeat(32) }),
29464
29570
  /* @__PURE__ */ jsxs13(Text15, { dimColor: true, children: [
29465
29571
  "v",
29466
- cliVersion
29572
+ version2
29467
29573
  ] }),
29468
- /* @__PURE__ */ jsx15(Box14, { marginTop: 1, children: isDone ? /* @__PURE__ */ jsxs13(Text15, { color: "green", children: [
29469
- "\u2713 ",
29470
- /* @__PURE__ */ jsx15(Text15, { dimColor: true, children: "Ready" })
29471
- ] }) : /* @__PURE__ */ jsx15(Spinner2, { label: STEPS[step] ?? "Initializing\u2026" }) })
29574
+ /* @__PURE__ */ jsx15(
29575
+ Box14,
29576
+ {
29577
+ marginTop: 1,
29578
+ marginRight: isDone ? SPLASH_STATUS_OPTICAL_OFFSET : 0,
29579
+ children: isDone ? /* @__PURE__ */ jsxs13(Text15, { color: "green", children: [
29580
+ "\u2713 ",
29581
+ /* @__PURE__ */ jsx15(Text15, { dimColor: true, children: "Ready" })
29582
+ ] }) : /* @__PURE__ */ jsx15(Spinner2, { label: STEPS[step] ?? "Initializing\u2026" })
29583
+ }
29584
+ )
29472
29585
  ]
29473
29586
  }
29474
29587
  );
29475
29588
  }
29476
- var LOGO, STEPS, STEP_MS;
29589
+ function keyedLogoRows(logo) {
29590
+ const seen = /* @__PURE__ */ new Map();
29591
+ return logo.map((line, rowIndex) => {
29592
+ const occurrence = seen.get(line) ?? 0;
29593
+ seen.set(line, occurrence + 1);
29594
+ return { key: `${occurrence}:${line}`, line, rowIndex };
29595
+ });
29596
+ }
29597
+ function ShimmerLogoLine({
29598
+ frame,
29599
+ line,
29600
+ rowIndex
29601
+ }) {
29602
+ const highlight = frame * 2 % (line.length + 8);
29603
+ return /* @__PURE__ */ jsx15(Text15, { children: Array.from(line).map((char, index) => {
29604
+ const distance = Math.abs(index - highlight + rowIndex);
29605
+ const key = `${index}:${char}`;
29606
+ if (char === " ") {
29607
+ return /* @__PURE__ */ jsx15(Text15, { children: char }, key);
29608
+ }
29609
+ return /* @__PURE__ */ jsx15(
29610
+ Text15,
29611
+ {
29612
+ color: distance <= 1 ? "white" : "cyan",
29613
+ bold: distance <= 1,
29614
+ dimColor: distance > 4,
29615
+ children: char
29616
+ },
29617
+ key
29618
+ );
29619
+ }) });
29620
+ }
29621
+ var STEPS, STEP_MS, FRAME_MS, SPLASH_LOGO_MAX_WIDTH, SPLASH_LOGO_OPTICAL_OFFSET, SPLASH_STATUS_OPTICAL_OFFSET;
29477
29622
  var init_SplashView = __esm({
29478
29623
  "src/tui/SplashView.tsx"() {
29479
29624
  "use strict";
29480
- init_version();
29481
- LOGO = [
29482
- " ___ __ __ ______ ___ ",
29483
- " / _ | / / / / /_ __/ / _ \\ ",
29484
- " / __ |/ /_/ / / / / // / ",
29485
- "/_/ |_|\\____/ /_/ /____/ "
29486
- ];
29625
+ init_auto_logo();
29487
29626
  STEPS = [
29488
29627
  "Initializing\u2026",
29489
29628
  "Loading configuration\u2026",
@@ -29491,6 +29630,10 @@ var init_SplashView = __esm({
29491
29630
  "Ready"
29492
29631
  ];
29493
29632
  STEP_MS = 380;
29633
+ FRAME_MS = 90;
29634
+ SPLASH_LOGO_MAX_WIDTH = 36;
29635
+ SPLASH_LOGO_OPTICAL_OFFSET = 4;
29636
+ SPLASH_STATUS_OPTICAL_OFFSET = 2;
29494
29637
  }
29495
29638
  });
29496
29639
 
@@ -29499,6 +29642,10 @@ var launcher_exports = {};
29499
29642
  __export(launcher_exports, {
29500
29643
  launch: () => launch
29501
29644
  });
29645
+ import { spawnSync } from "child_process";
29646
+ import { existsSync as existsSync5 } from "fs";
29647
+ import { dirname as dirname6, resolve as resolve3 } from "path";
29648
+ import { fileURLToPath } from "url";
29502
29649
  import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
29503
29650
  import { render } from "ink";
29504
29651
  import React from "react";
@@ -29533,7 +29680,9 @@ async function launch(opts) {
29533
29680
  apiClient.listConnectionProviders({ apiBaseUrl: apiUrl })
29534
29681
  ]);
29535
29682
  const { waitUntilExit: waitSplash } = render(
29536
- React.createElement(SplashView),
29683
+ React.createElement(SplashView, {
29684
+ version: resolveSplashVersion()
29685
+ }),
29537
29686
  { alternateScreen: true, patchConsole: false }
29538
29687
  );
29539
29688
  const [, prefetchResult] = await Promise.all([waitSplash(), prefetchP]);
@@ -29660,6 +29809,50 @@ function sortByResourceName(resources) {
29660
29809
  (left, right) => left.metadata.name.localeCompare(right.metadata.name)
29661
29810
  );
29662
29811
  }
29812
+ function resolveSplashVersion() {
29813
+ if (cliVersion !== "0.1.0") {
29814
+ return cliVersion;
29815
+ }
29816
+ return resolveLatestReleaseVersionFromCheckout() ?? cliVersion;
29817
+ }
29818
+ function resolveLatestReleaseVersionFromCheckout() {
29819
+ const repoRoot = findRepoRoot(dirname6(fileURLToPath(import.meta.url)));
29820
+ if (!repoRoot) {
29821
+ return null;
29822
+ }
29823
+ const result = spawnSync("git", ["tag", "--list", "auto-cli-v*"], {
29824
+ cwd: repoRoot,
29825
+ encoding: "utf8"
29826
+ });
29827
+ if (result.status !== 0) {
29828
+ return null;
29829
+ }
29830
+ const versions = result.stdout.split(/\r?\n/).map((tag) => tag.match(/^auto-cli-v(\d+\.\d+\.\d+)$/)?.[1]).filter((version2) => version2 !== void 0).sort(compareVersions);
29831
+ return versions.at(-1) ?? null;
29832
+ }
29833
+ function findRepoRoot(startDirectory) {
29834
+ let directory = startDirectory;
29835
+ while (true) {
29836
+ if (existsSync5(resolve3(directory, ".git")) && existsSync5(resolve3(directory, "apps/cli/package.json"))) {
29837
+ return directory;
29838
+ }
29839
+ const parent = dirname6(directory);
29840
+ if (parent === directory) {
29841
+ return null;
29842
+ }
29843
+ directory = parent;
29844
+ }
29845
+ }
29846
+ function compareVersions(a, b) {
29847
+ const left = a.split(".").map(Number);
29848
+ const right = b.split(".").map(Number);
29849
+ for (let i = 0; i < 3; i += 1) {
29850
+ if (left[i] !== right[i]) {
29851
+ return (left[i] ?? 0) - (right[i] ?? 0);
29852
+ }
29853
+ }
29854
+ return 0;
29855
+ }
29663
29856
  function isEditSelection(selection) {
29664
29857
  return "action" in selection && selection.action === "editResource";
29665
29858
  }
@@ -29671,6 +29864,7 @@ var init_launcher = __esm({
29671
29864
  "src/tui/launcher.ts"() {
29672
29865
  "use strict";
29673
29866
  init_src();
29867
+ init_version();
29674
29868
  init_actions2();
29675
29869
  init_base_url();
29676
29870
  init_client();
@@ -29706,7 +29900,7 @@ var init_launcher = __esm({
29706
29900
  });
29707
29901
 
29708
29902
  // src/cli/program.ts
29709
- import { existsSync as existsSync5 } from "fs";
29903
+ import { existsSync as existsSync6 } from "fs";
29710
29904
  import { Command, Option as Option4 } from "commander";
29711
29905
 
29712
29906
  // src/commands/account/commands.ts
@@ -30214,7 +30408,7 @@ async function requireYes(rl, prompt) {
30214
30408
  }
30215
30409
  }
30216
30410
  async function sleep2(ms) {
30217
- await new Promise((resolve3) => setTimeout(resolve3, ms));
30411
+ await new Promise((resolve4) => setTimeout(resolve4, ms));
30218
30412
  }
30219
30413
 
30220
30414
  // src/commands/account/commands.ts
@@ -30323,8 +30517,8 @@ async function startGitCredentialRelay(input) {
30323
30517
  update: (next) => {
30324
30518
  target = { url: next.url, accessToken: next.accessToken };
30325
30519
  },
30326
- close: () => new Promise((resolve3) => {
30327
- server.close(() => resolve3());
30520
+ close: () => new Promise((resolve4) => {
30521
+ server.close(() => resolve4());
30328
30522
  })
30329
30523
  };
30330
30524
  }
@@ -30747,12 +30941,12 @@ async function runAgentBridgeSocket(options) {
30747
30941
  let handler = null;
30748
30942
  const reconnectLoop = createReconnectLoop(socket);
30749
30943
  let hasConnected = false;
30750
- await new Promise((resolve3, reject) => {
30944
+ await new Promise((resolve4, reject) => {
30751
30945
  const shutdown = () => {
30752
30946
  reconnectLoop.stop();
30753
30947
  handler?.shutdown?.();
30754
30948
  socket.disconnect();
30755
- resolve3();
30949
+ resolve4();
30756
30950
  };
30757
30951
  process.once("SIGINT", shutdown);
30758
30952
  process.once("SIGTERM", shutdown);
@@ -30935,7 +31129,7 @@ function createSessiontimeBridgeBootstrapListener(input) {
30935
31129
  };
30936
31130
  }
30937
31131
  function emitOutputWithAck(socket, output) {
30938
- return new Promise((resolve3, reject) => {
31132
+ return new Promise((resolve4, reject) => {
30939
31133
  socket.timeout(5e3).emit(
30940
31134
  RUNTIME_BRIDGE_OUTPUT_EVENT,
30941
31135
  output,
@@ -30955,7 +31149,7 @@ function emitOutputWithAck(socket, output) {
30955
31149
  );
30956
31150
  return;
30957
31151
  }
30958
- resolve3(ack.data);
31152
+ resolve4(ack.data);
30959
31153
  }
30960
31154
  );
30961
31155
  });
@@ -31783,8 +31977,8 @@ var AsyncMessageQueue = class {
31783
31977
  if (this.closed) {
31784
31978
  return Promise.resolve({ done: true, value: void 0 });
31785
31979
  }
31786
- return new Promise((resolve3) => {
31787
- this.waiters.push(resolve3);
31980
+ return new Promise((resolve4) => {
31981
+ this.waiters.push(resolve4);
31788
31982
  });
31789
31983
  }
31790
31984
  };
@@ -32015,13 +32209,13 @@ var ClaudeCodeCommandHandler = class {
32015
32209
  this.input.writeOutput?.(
32016
32210
  `agent_bridge_question_pending tool_use_id=${toolUseId}`
32017
32211
  );
32018
- return new Promise((resolve3) => {
32019
- this.pendingQuestions.set(toolUseId, { input: toolInput, resolve: resolve3 });
32212
+ return new Promise((resolve4) => {
32213
+ this.pendingQuestions.set(toolUseId, { input: toolInput, resolve: resolve4 });
32020
32214
  options.signal.addEventListener(
32021
32215
  "abort",
32022
32216
  () => {
32023
32217
  if (this.pendingQuestions.delete(toolUseId)) {
32024
- resolve3({
32218
+ resolve4({
32025
32219
  behavior: "deny",
32026
32220
  message: "The question was cancelled before the user answered",
32027
32221
  toolUseID: toolUseId
@@ -32362,7 +32556,7 @@ async function connectAgentPresence2(input) {
32362
32556
  );
32363
32557
  return;
32364
32558
  }
32365
- const sleep4 = input.sleep ?? ((ms) => new Promise((resolve3) => setTimeout(resolve3, ms)));
32559
+ const sleep4 = input.sleep ?? ((ms) => new Promise((resolve4) => setTimeout(resolve4, ms)));
32366
32560
  const openBrowser2 = input.openBrowser ?? openBrowser;
32367
32561
  const now3 = input.now ?? Date.now;
32368
32562
  const pollIntervalMs = input.pollIntervalMs ?? POLL_INTERVAL_MS;
@@ -33130,7 +33324,7 @@ async function activeGrantIds(input) {
33130
33324
  );
33131
33325
  }
33132
33326
  async function waitForNewGrant(input, knownGrantIds) {
33133
- const sleep4 = input.sleep ?? ((ms) => new Promise((resolve3) => setTimeout(resolve3, ms)));
33327
+ const sleep4 = input.sleep ?? ((ms) => new Promise((resolve4) => setTimeout(resolve4, ms)));
33134
33328
  const now3 = input.now ?? Date.now;
33135
33329
  const deadline = now3() + (input.pollTimeoutMs ?? POLL_TIMEOUT_MS2);
33136
33330
  while (now3() < deadline) {
@@ -34814,13 +35008,13 @@ function delay(ms, signal) {
34814
35008
  if (signal.aborted) {
34815
35009
  return Promise.resolve();
34816
35010
  }
34817
- return new Promise((resolve3) => {
34818
- const timeout = setTimeout(resolve3, ms);
35011
+ return new Promise((resolve4) => {
35012
+ const timeout = setTimeout(resolve4, ms);
34819
35013
  signal.addEventListener(
34820
35014
  "abort",
34821
35015
  () => {
34822
35016
  clearTimeout(timeout);
34823
- resolve3();
35017
+ resolve4();
34824
35018
  },
34825
35019
  { once: true }
34826
35020
  );
@@ -34845,11 +35039,11 @@ function pollUntilFailed(input) {
34845
35039
  input.abort?.addEventListener("abort", cancel, { once: true });
34846
35040
  const done = (async () => {
34847
35041
  while (!cancelled) {
34848
- await new Promise((resolve3) => {
34849
- sleepResolve = resolve3;
35042
+ await new Promise((resolve4) => {
35043
+ sleepResolve = resolve4;
34850
35044
  activeSleep = setTimeout(() => {
34851
35045
  activeSleep = void 0;
34852
- resolve3();
35046
+ resolve4();
34853
35047
  }, interval);
34854
35048
  });
34855
35049
  if (cancelled) {
@@ -35149,7 +35343,7 @@ function delay2(ms) {
35149
35343
  if (ms <= 0) {
35150
35344
  return Promise.resolve();
35151
35345
  }
35152
- return new Promise((resolve3) => setTimeout(resolve3, ms));
35346
+ return new Promise((resolve4) => setTimeout(resolve4, ms));
35153
35347
  }
35154
35348
  function createDiagnosticCollector(limit) {
35155
35349
  const events = [];
@@ -35717,10 +35911,12 @@ function registerSessionCommands(program, context) {
35717
35911
  }
35718
35912
 
35719
35913
  // src/commands/setup/actions.ts
35914
+ init_auto_logo();
35720
35915
  init_browser();
35721
35916
  init_file();
35722
35917
  init_style();
35723
35918
  init_login();
35919
+ init_auto_logo();
35724
35920
  var SETUP_STATUS_POLL_INTERVAL_MS = 5e3;
35725
35921
  var SETUP_STATUS_HINT_EVERY_POLLS = 12;
35726
35922
  var SETUP_STATUS_MAX_CONSECUTIVE_ERRORS = 12;
@@ -36039,55 +36235,11 @@ function setupPitchText(style = plainStyle, options = {}) {
36039
36235
  ""
36040
36236
  ].join("\n");
36041
36237
  }
36042
- function autoLogo(style = plainStyle, terminalWidth) {
36043
- const width = terminalWidth ?? Number.POSITIVE_INFINITY;
36044
- const logo = SETUP_AUTO_LOGOS.find(
36045
- (candidate) => logoWidth(candidate) <= width
36046
- ) ?? ["auto"];
36047
- return logo.map((line) => style.id(line));
36048
- }
36049
- var SETUP_AUTO_LOGOS = [
36050
- [
36051
- " \u2584\u2584\u2584\u2584",
36052
- " \u2584\u2584\u2584\u2584",
36053
- " \u2584\u2584\u2584\u2584",
36054
- " \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584",
36055
- " \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584",
36056
- "\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584",
36057
- "\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584",
36058
- " \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584",
36059
- " \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584",
36060
- " \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584",
36061
- " \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584",
36062
- "\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584",
36063
- "\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584",
36064
- "\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584",
36065
- "\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584",
36066
- " \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584",
36067
- " \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584"
36068
- ],
36069
- [
36070
- " \u2584\u2584",
36071
- " \u2584\u2584",
36072
- " \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584",
36073
- " \u2584\u2584\u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584\u2584 \u2584\u2584\u2584",
36074
- " \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584\u2584 \u2584\u2584\u2584",
36075
- " \u2584\u2584\u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584\u2584 \u2584\u2584\u2584",
36076
- " \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584\u2584 \u2584\u2584\u2584",
36077
- " \u2584\u2584\u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584\u2584 \u2584\u2584\u2584",
36078
- " \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584 \u2584\u2584\u2584 \u2584\u2584\u2584",
36079
- " \u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584 \u2584\u2584\u2584",
36080
- " \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584"
36081
- ]
36082
- ];
36083
- function logoWidth(logo) {
36084
- return Math.max(...logo.map((line) => line.length));
36085
- }
36086
36238
  function wizardMargin(columns) {
36087
36239
  if (columns === void 0) {
36088
36240
  return 0;
36089
36241
  }
36090
- const largestLogoWidth = logoWidth(SETUP_AUTO_LOGOS[0]);
36242
+ const largestLogoWidth = largestAutoLogoWidth();
36091
36243
  return largestLogoWidth + WIZARD_MARGIN <= columns ? WIZARD_MARGIN : 0;
36092
36244
  }
36093
36245
  function bullet(style, text) {
@@ -36144,8 +36296,8 @@ async function pressEnter(context, prompt) {
36144
36296
  try {
36145
36297
  await Promise.race([
36146
36298
  readline.question(context.io.style.dim(indent(prompt, margin))),
36147
- new Promise((resolve3) => {
36148
- readline.once("close", resolve3);
36299
+ new Promise((resolve4) => {
36300
+ readline.once("close", resolve4);
36149
36301
  })
36150
36302
  ]);
36151
36303
  } finally {
@@ -36347,7 +36499,7 @@ function isDefined(value) {
36347
36499
  return value !== void 0;
36348
36500
  }
36349
36501
  function defaultSleep(delayMs) {
36350
- return new Promise((resolve3) => setTimeout(resolve3, delayMs));
36502
+ return new Promise((resolve4) => setTimeout(resolve4, delayMs));
36351
36503
  }
36352
36504
 
36353
36505
  // src/commands/setup/commands.ts
@@ -36604,7 +36756,7 @@ function createProgram(options = {}) {
36604
36756
  assertValidProfileName(pin);
36605
36757
  const base = options.configPath ?? defaultConfigPath();
36606
36758
  const pinnedPath = profileFilePath(base, pin);
36607
- if (!existsSync5(pinnedPath)) {
36759
+ if (!existsSync6(pinnedPath)) {
36608
36760
  const names = listProfiles(base).map((profile) => profile.name);
36609
36761
  throw new Error(
36610
36762
  `No stored profile "${pin}". Stored profiles: ${names.join(", ") || "(none)"}.`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autohq/cli",
3
- "version": "0.1.182",
3
+ "version": "0.1.184",
4
4
  "license": "SEE LICENSE IN README.md",
5
5
  "publishConfig": {
6
6
  "access": "public"