@eigenpal/cli 0.5.7 → 0.5.8

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/CHANGELOG.md CHANGED
@@ -317,6 +317,12 @@ actual) { ... }` declaration around your statements. Parameter order is
317
317
  - **`init agent` and bare `agent` now exit 2** instead of 0 when invoked. Both subcommands are reserved-but-unimplemented placeholders, and exiting 0 made it possible for a CI script that misrouted into one of them to silently no-op. POSIX exit 2 ("command exists but isn't usable as invoked") makes the misroute fail loudly. The human-readable "coming soon" stderr message is unchanged.
318
318
  - **New `--no-color` global flag.** Disables ANSI colors in all output, matching the convention shared by `gh`, `kubectl`, `npm`, and `terraform`. Equivalent to setting `NO_COLOR=1` in the environment, but takes effect for the current invocation only. Implemented as a lazy picocolors wrapper so the flip propagates to every helper in `lib/ui.ts` (and every downstream caller of `pc`) regardless of when in the command lifecycle the flag is parsed.
319
319
 
320
+ - 809f3d4: `auth list`: the org name is now the primary label (bold, immediately after
321
+ the marker), the profile slug is dimmed beside it (still the value you feed
322
+ to `auth use <name>` or `EIGENPAL_PROFILE=<name>`), and the base URL trails
323
+ on the right. The redundant `(tenantId)` column was dropped — the profile
324
+ slug already disambiguates. `auth use` (interactive picker) now prints the
325
+ non-interactive form on success so you learn the slug you just picked.
320
326
  - 49a8f94: Fixed a stray `undefined` in the `eigenpal auth login` outro. The success message used `dim(...)` (a stderr printer that returns `void`) inside a template literal where `ui.dim(...)` (the inline string formatter) was meant. The dim "Saved profile X — switch with" hint now renders correctly instead of literal `undefined`.
321
327
  - 16c6e83: Updated `@eigenpal/cli` author from `Eigenpal <hello@eigenpal.com>` to `Jedr Blaszyk <jedr@eigenpal.com>`. Surfaces on the npm package page and in `npm view @eigenpal/cli`.
322
328
  - b1d2d77: CLI: default `baseUrl` is now `https://studio.eigenpal.com` instead of `http://localhost:3000`.
@@ -467,6 +473,7 @@ actual) { ... }` declaration around your statements. Parameter order is
467
473
 
468
474
  - 71361fd: `workflow get-experiment-status --watch` now prints a per-example failure summary on stderr when the batch finishes with any failed/cancelled execution: example name, top-level error (truncated), and the exact `eigenpal execution get <exec-id>` command to drill into step-by-step detail. Removes the need for the agent to grep through a 1000-line JSON dump to find which example broke and why. `reference/debugging.md` documents the discovery path.
469
475
  - 71361fd: `eigenpal workflow get-experiment-status --watch` now polls until every execution in the batch reaches a terminal state (`completed` / `failed` / `cancelled`), then exits non-zero if any execution failed or was cancelled. Removes the need for agent-side polling loops that didn't notice all-terminal-already and kept ticking. Renders a one-line `N/M terminal (counts)` progress summary on stderr (in-place rewrite when stderr is a TTY), dumps the full JSON on stdout when done. `--interval <s>` and `--max-wait <s>` are configurable; defaults are 5s/30min.
476
+ - c3bc4e9: Fix Git-backed source release and status edge cases.
470
477
  - 04e4018: Harden hidden Git materialization commands for package-ref installs, frozen lockfile replay, dependency materialization, and source authoring smoke flows.
471
478
  - 71361fd: `install-skill`: multi-tool support via interactive multiselect.
472
479
  - Opens a `@clack/prompts` multiselect picker over supported agent tools
package/dist/cli.js CHANGED
@@ -181601,7 +181601,7 @@ import { fileURLToPath as fileURLToPath6 } from "url";
181601
181601
  // package.json
181602
181602
  var package_default = {
181603
181603
  name: "@eigenpal/cli",
181604
- version: "0.5.7",
181604
+ version: "0.5.8",
181605
181605
  description: "Eigenpal CLI — author and run document workflows from your terminal. Agent-ready.",
181606
181606
  keywords: [
181607
181607
  "eigenpal",
@@ -183847,16 +183847,19 @@ async function authList() {
183847
183847
  dim("No profiles configured. Run `eigenpal auth login` to add one.");
183848
183848
  return;
183849
183849
  }
183850
- const nameWidth = Math.max(16, ...names.map((n) => n.length));
183851
- for (const name of names.sort()) {
183850
+ const rows = names.sort().map((name) => {
183852
183851
  const p2 = profiles[name];
183853
- const marker = name === current ? ui.ok("●") : ui.dim("○");
183854
183852
  const tenant = p2.tenantName ?? p2.tenantId ?? "?";
183855
- const tenantLabel = p2.tenantName && p2.tenantId ? `${tenant} ${ui.dim(`(${p2.tenantId})`)}` : tenant;
183856
- console.log(`${marker} ${ui.bold(name.padEnd(nameWidth))} ${ui.dim(tenantLabel)} ${ui.dim(p2.baseUrl)}`);
183853
+ return { name, baseUrl: p2.baseUrl, tenant };
183854
+ });
183855
+ const tenantWidth = Math.max(16, ...rows.map((r) => r.tenant.length));
183856
+ const nameWidth = Math.max(16, ...rows.map((r) => r.name.length));
183857
+ for (const r of rows) {
183858
+ const marker = r.name === current ? ui.ok("●") : ui.dim("○");
183859
+ console.log(`${marker} ${ui.bold(r.tenant.padEnd(tenantWidth))} ${ui.dim(r.name.padEnd(nameWidth))} ${ui.dim(r.baseUrl)}`);
183857
183860
  }
183858
183861
  console.log("");
183859
- dim(`(● = active. Switch with \`eigenpal auth use <name>\` or \`EIGENPAL_PROFILE=<name>\`.)`);
183862
+ dim(`(● = active. Switch with \`eigenpal auth use <name>\` or \`EIGENPAL_PROFILE=<name>\` for one shell.)`);
183860
183863
  }
183861
183864
  async function authUse(profileName) {
183862
183865
  const { current, profiles } = listProfiles();
@@ -183901,7 +183904,8 @@ async function authUse(profileName) {
183901
183904
  if (profileName) {
183902
183905
  success2(`Switched to ${ui.bold(target)}${tenantSuffix}`);
183903
183906
  } else {
183904
- ye(`${ui.ok("✓")} Switched to ${ui.bold(target)}${tenantSuffix}`);
183907
+ ye(`${ui.ok("✓")} Switched to ${ui.bold(target)}${tenantSuffix}
183908
+ ${ui.dim(`In scripts: \`eigenpal auth use ${target}\` or \`EIGENPAL_PROFILE=${target}\``)}`);
183905
183909
  }
183906
183910
  }
183907
183911
 
@@ -184616,6 +184620,9 @@ function checkRepoVersion(gitRoot, mutation) {
184616
184620
  function resolvePackagePath(target) {
184617
184621
  return target.includes("/") ? SourcePackagePathSchema.parse(target) : dottedPackageNameToPath(DottedPackageNameSchema.parse(target));
184618
184622
  }
184623
+ function isAutomationPackagePath(packagePath) {
184624
+ return packagePath.startsWith("agents/") || packagePath.startsWith("workflows/");
184625
+ }
184619
184626
  function semverParts(version2) {
184620
184627
  const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(version2);
184621
184628
  if (!match)
@@ -184876,14 +184883,15 @@ function packageStatus(opts) {
184876
184883
  const context = resolveGitSourceContext(opts);
184877
184884
  if (context.gitRoot)
184878
184885
  checkRepoVersion(context.gitRoot, false);
184879
- const validation = context.packageRoot ? validatePackage(context.packageRoot) : null;
184886
+ const isRepoRootStatus = context.gitRoot && context.packageRoot && context.gitRoot === context.packageRoot;
184887
+ const validation = context.packageRoot && !isRepoRootStatus ? validatePackage(context.packageRoot) : null;
184880
184888
  const gitStatus = context.gitRoot ? gitOutput(["status", "--short"], context.gitRoot) ?? "" : "";
184881
184889
  const payload = {
184882
184890
  gitRoot: context.gitRoot,
184883
184891
  packageRoot: context.packageRoot,
184884
184892
  packagePath: context.packagePath,
184885
184893
  clean: gitStatus.length === 0,
184886
- valid: validation?.valid ?? false,
184894
+ valid: validation?.valid ?? null,
184887
184895
  errors: validation?.errors ?? []
184888
184896
  };
184889
184897
  if (opts.json)
@@ -185061,7 +185069,9 @@ async function release(versionOrBump, dir, opts) {
185061
185069
  throw err;
185062
185070
  }
185063
185071
  success2(`Released ${tag}.`);
185064
- await syncLatestAutomation(client, context.packagePath);
185072
+ if (isAutomationPackagePath(context.packagePath)) {
185073
+ await syncLatestAutomation(client, context.packagePath);
185074
+ }
185065
185075
  }
185066
185076
  async function sync(target, opts) {
185067
185077
  const context = resolveGitSourceContext({ dir: opts.dir });
@@ -185072,6 +185082,9 @@ async function sync(target, opts) {
185072
185082
  if (!packagePath) {
185073
185083
  throw new Error("Pass an automation target or run sync inside a source package.");
185074
185084
  }
185085
+ if (!isAutomationPackagePath(packagePath)) {
185086
+ throw new Error("Sync only supports agent and workflow packages.");
185087
+ }
185075
185088
  await syncLatestAutomation(new ApiClient(resolveConfig(opts)), packagePath);
185076
185089
  }
185077
185090
  async function install(packageRef, opts) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eigenpal/cli",
3
- "version": "0.5.7",
3
+ "version": "0.5.8",
4
4
  "description": "Eigenpal CLI — author and run document workflows from your terminal. Agent-ready.",
5
5
  "keywords": [
6
6
  "eigenpal",