@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 +7 -0
- package/dist/cli.js +24 -11
- package/package.json +1 -1
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.
|
|
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
|
|
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
|
-
|
|
183856
|
-
|
|
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
|
|
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 ??
|
|
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
|
-
|
|
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) {
|