Skip to content

Releases: eigenpal/cli

@eigenpal/cli@0.4.6

06 May 09:51

Choose a tag to compare

Major Changes

  • fadb59b: CLI command tree reorganized around the data model. Top-level surface is now
    workflow, agent (reserved), and skill; everything that operates on a
    workflow lives under workflow, grouped by sub-entity.

    Renames (clean break — no aliases):

    • eigenpal exec <slug>eigenpal workflow execution run <slug>
    • eigenpal cleareigenpal workflow clear
    • eigenpal install-skilleigenpal skill (same interactive multiselect UX)
    • eigenpal execution {get,list,watch,compare}eigenpal workflow execution {…}
    • eigenpal workflow set-definitioneigenpal workflow push
    • eigenpal workflow get-definitioneigenpal workflow pull
    • eigenpal workflow set-evaluators / get-evaluatorsworkflow evaluators {push,pull}
    • eigenpal workflow set-dataset / get-dataset / list-examplesworkflow dataset {push,pull,list}
    • eigenpal workflow run-experiment / get-experiment-status / get-experiment-results /
      get-eval-results / list-executionsworkflow experiment {run,status,results,eval-results,list}
    • eigenpal workflow list-versions / restore-versionworkflow version {list,restore}
    • eigenpal workflow list-step-types / get-step-typeworkflow step-type {list,get}
    • eigenpal workflow get-executionworkflow execution get
    • eigenpal workflow get-active-tenantworkflow active-tenant

    Removed:

    • eigenpal generate-meta — deleted. The IDs it generated were never read by
      any other CLI command; the server re-mints IDs on every push.

    Added:

    • eigenpal agent — reserved placeholder namespace. Prints a "Coming soon"
      message; agentic-process operations will land here in a future release.

Minor Changes

  • c82a215: eigenpal auth login now shows an interactive server picker when no --base-url flag or EIGENPAL_BASE_URL env is set:

    • Cloud (https://studio.eigenpal.com) is the default highlighted option.
    • Any on-prem URLs already in your credentials file are surfaced as separate options labelled with the profile names that use them — re-login against an existing on-prem deployment without retyping the URL.
    • Custom URL… prompts for a URL with strict validation.

    URL handling is now bulletproof in all three input paths (flag, env, picker):

    • Trims leading/trailing whitespace, strips trailing slashes.
    • Auto-prepends https:// when you paste a bare hostname (e.g. eigenpal.example.comhttps://eigenpal.example.com).
    • Rejects non-http(s) schemes (file://, ws://, etc.) with a clear error.
    • Rejects URLs with paths, query strings, or hash fragments — baseUrl is an origin, not a route.
    • Warns when authenticating over http:// against a non-loopback host (credentials sent unencrypted).

    Behavior with --base-url or EIGENPAL_BASE_URL set is unchanged — explicit overrides skip the picker, and an active profile's stored baseUrl is still inherited by all non-login commands.

  • c330c2a: CLI: bug fixes + new tooling.

    • success() / info() / dim() now write to stderr, not stdout. cmd | jq no longer mixes status lines with JSON output. (error() and warn() already correctly used stderr.)
    • workflow execution watch <bad-id> no longer treats 404 as a transient network blip; the loop exits immediately so the caller sees the structured Execution not found error and a non-zero exit instead of polling for 30 minutes.
    • eigenpal status exits non-zero when authentication fails, so scripts can eigenpal status && deploy.
    • New eigenpal completion <bash|zsh|fish> command — emits a shell-completion script for the live command tree. Install via eigenpal completion bash > /usr/local/etc/bash_completion.d/eigenpal (or your shell's equivalent).
    • New global --quiet / -q flag — suppresses success() / info() / dim() lines while keeping error() and warn() (and JSON output) intact.
    • New addJsonFlagMutation() helper alongside addJsonFlag(). Mutating commands that don't have a curated table view now use it so --verbose no longer appears in --help where it's a no-op. (Wire-up in mutating handlers happens in a follow-up commit on this branch.)
  • b2c4308: CLI: per-example dataset CRUD.

    Three new subcommands under workflow dataset mean you no longer have to re-zip and re-push the whole folder when you only want to flip one row:

    • workflow dataset create-example <wfId> --name <n> [--input-json | --input-file] [--expected-json | --expected-file] [--annotation] — add one example.
    • workflow dataset update-example <wfId> <exampleId> [--name] [--input-*] [--expected-*] [--annotation] [--row-order] — partial PATCH; flags you omit are left alone, --annotation "" clears.
    • workflow dataset delete-example <wfId> <exampleId> [--yes]--yes required for non-TTY shells.

    --input-file / --expected-file accept a path or - for stdin. Inline --*-json and the -file variant are mutually exclusive.

    Server: the POST /api/workflows/:id/eval-examples create schema now accepts the name and annotation fields the dashboard already exposed via the dashboard's PATCH path. No new endpoints — the v1 mirrors at /api/v1/eval-examples/[id] and /api/v1/workflows/[id]/eval-examples were already in place.

    Skill recipes restored: SKILL.md and reference/dataset-format.md document the three flows (capture corrected output as new GT, add one example, delete one bad row).

  • d41ee8b: CLI: drop the --wait flag from workflow execution run. The local-folder runner already waits for every example to reach a terminal state, so the flag was a documented no-op kept "for symmetry with experiment run --wait." That symmetry isn't worth a dead flag in the user-facing help screen — experiment run --wait is meaningful (it polls batch status), execution run --wait never was.

    Behavior is unchanged. Scripts that passed --wait will now see an unknown-option error from Commander; remove the flag.

  • d41ee8b: CLI: drop --jq and --output-path from workflow execution get. Pipe --json through real jq instead.

    Rationale: our --jq was dotted-path only (drillJsonPath), not real jq syntax. Calling it --jq was misleading — gh --jq '.foo[] | select(.bar)' works; ours never could. Real jq is universally installed on dev machines and supports the full filter language.

    Migration:

    Before After
    eigenpal workflow execution get exec_… --jq 'output.data' eigenpal workflow execution get exec_… --json | jq '.output.data'
    eigenpal workflow execution get exec_… --output-path 'stepExecutions.0.error' eigenpal workflow execution get exec_… --json | jq -r '.stepExecutions[0].error'

    Updated SKILL.md and reference docs to use the canonical --json | jq pattern.

  • c330c2a: CLI: small DX bundle + 5 audit follow-up fixes.

    • eigenpal status (and every other CLI call) now detects HTML-on-the-wire and throws a structured HtmlResponseError ("API not reachable at — got HTML response (likely wrong base URL or API not running)") instead of dumping the 100 KB Next.js 404 body.
    • workflow push --bump <patch|minor|major> reads the server's current version and computes the next semver, splicing it into the YAML before sending. Pair with --workflow-id. Conflicts with a top-level version: in the YAML are rejected.
    • workflow push --set-version <X.Y.Z> for explicit overrides. (Named --set-version to avoid the global -v, --version flag.)
    • workflow evaluator-type {list, get} — parallel namespace to step-type for evaluator schemas (exact-diff, llm-judge, custom-script). Returns JSON Schema instead of 404.
    • eigenpal init [name] now works with no name — scaffolds into the current directory using the cwd basename as the workflow slug. Pair with eigenpal workflow execution run <slug> in the same dir; execution run discovers both flat (./workflow.yaml + ./dataset/examples/<name>/) and nested (./eigenpal/workflows/<slug>/...) layouts.
    • format-error now appends Run \eigenpal auth login` or set EIGENPAL_API_KEY.to every 401, and includes the URL we tried +EIGENPAL_BASE_URL/--base-url` hint on connection failures.
    • execution get --jq <jsonpath> is the new canonical name for what was --output-path. --output-path keeps working as a hidden alias; help text shows --jq only (matches gh --jq / kubectl --jsonpath).
    • workflow push without --file in TTY now prompts for the path; non-TTY (CI) still errors with the existing "Missing --file" message.
    • transform.script reference docs include a callout about TDZ on shadowed input names (const located = located || [] triggers ReferenceError).
    • Dropped the half-promise comment in addJsonFlag about future --fields projection — the canonical answer is jq on the raw payload.
  • c330c2a: CLI: execution + auth polish.

    • workflow execution run gains --wait and --json. The local-folder
      runner already polled every example to terminal, so --wait is currently a
      no-op accepted for symmetry with experiment run --wait. --json emits a
      single { workflowSlug, passed, failed, total } summary on stdout (human
      progress lines + the "Results:" footer still go to stderr). Exits 1 when any
      example fails, same as before.
      ...
Read more

@eigenpal/cli@0.4.5

05 May 09:16

Choose a tag to compare

Major Changes

  • fadb59b: CLI command tree reorganized around the data model. Top-level surface is now
    workflow, agent (reserved), and skill; everything that operates on a
    workflow lives under workflow, grouped by sub-entity.

    Renames (clean break — no aliases):

    • eigenpal exec <slug>eigenpal workflow execution run <slug>
    • eigenpal cleareigenpal workflow clear
    • eigenpal install-skilleigenpal skill (same interactive multiselect UX)
    • eigenpal execution {get,list,watch,compare}eigenpal workflow execution {…}
    • eigenpal workflow set-definitioneigenpal workflow push
    • eigenpal workflow get-definitioneigenpal workflow pull
    • eigenpal workflow set-evaluators / get-evaluatorsworkflow evaluators {push,pull}
    • eigenpal workflow set-dataset / get-dataset / list-examplesworkflow dataset {push,pull,list}
    • eigenpal workflow run-experiment / get-experiment-status / get-experiment-results /
      get-eval-results / list-executionsworkflow experiment {run,status,results,eval-results,list}
    • eigenpal workflow list-versions / restore-versionworkflow version {list,restore}
    • eigenpal workflow list-step-types / get-step-typeworkflow step-type {list,get}
    • eigenpal workflow get-executionworkflow execution get
    • eigenpal workflow get-active-tenantworkflow active-tenant

    Removed:

    • eigenpal generate-meta — deleted. The IDs it generated were never read by
      any other CLI command; the server re-mints IDs on every push.

    Added:

    • eigenpal agent — reserved placeholder namespace. Prints a "Coming soon"
      message; agentic-process operations will land here in a future release.

Minor Changes

  • c82a215: eigenpal auth login now shows an interactive server picker when no --base-url flag or EIGENPAL_BASE_URL env is set:

    • Cloud (https://studio.eigenpal.com) is the default highlighted option.
    • Any on-prem URLs already in your credentials file are surfaced as separate options labelled with the profile names that use them — re-login against an existing on-prem deployment without retyping the URL.
    • Custom URL… prompts for a URL with strict validation.

    URL handling is now bulletproof in all three input paths (flag, env, picker):

    • Trims leading/trailing whitespace, strips trailing slashes.
    • Auto-prepends https:// when you paste a bare hostname (e.g. eigenpal.example.comhttps://eigenpal.example.com).
    • Rejects non-http(s) schemes (file://, ws://, etc.) with a clear error.
    • Rejects URLs with paths, query strings, or hash fragments — baseUrl is an origin, not a route.
    • Warns when authenticating over http:// against a non-loopback host (credentials sent unencrypted).

    Behavior with --base-url or EIGENPAL_BASE_URL set is unchanged — explicit overrides skip the picker, and an active profile's stored baseUrl is still inherited by all non-login commands.

  • c330c2a: CLI: bug fixes + new tooling.

    • success() / info() / dim() now write to stderr, not stdout. cmd | jq no longer mixes status lines with JSON output. (error() and warn() already correctly used stderr.)
    • workflow execution watch <bad-id> no longer treats 404 as a transient network blip; the loop exits immediately so the caller sees the structured Execution not found error and a non-zero exit instead of polling for 30 minutes.
    • eigenpal status exits non-zero when authentication fails, so scripts can eigenpal status && deploy.
    • New eigenpal completion <bash|zsh|fish> command — emits a shell-completion script for the live command tree. Install via eigenpal completion bash > /usr/local/etc/bash_completion.d/eigenpal (or your shell's equivalent).
    • New global --quiet / -q flag — suppresses success() / info() / dim() lines while keeping error() and warn() (and JSON output) intact.
    • New addJsonFlagMutation() helper alongside addJsonFlag(). Mutating commands that don't have a curated table view now use it so --verbose no longer appears in --help where it's a no-op. (Wire-up in mutating handlers happens in a follow-up commit on this branch.)
  • b2c4308: CLI: per-example dataset CRUD.

    Three new subcommands under workflow dataset mean you no longer have to re-zip and re-push the whole folder when you only want to flip one row:

    • workflow dataset create-example <wfId> --name <n> [--input-json | --input-file] [--expected-json | --expected-file] [--annotation] — add one example.
    • workflow dataset update-example <wfId> <exampleId> [--name] [--input-*] [--expected-*] [--annotation] [--row-order] — partial PATCH; flags you omit are left alone, --annotation "" clears.
    • workflow dataset delete-example <wfId> <exampleId> [--yes]--yes required for non-TTY shells.

    --input-file / --expected-file accept a path or - for stdin. Inline --*-json and the -file variant are mutually exclusive.

    Server: the POST /api/workflows/:id/eval-examples create schema now accepts the name and annotation fields the dashboard already exposed via the dashboard's PATCH path. No new endpoints — the v1 mirrors at /api/v1/eval-examples/[id] and /api/v1/workflows/[id]/eval-examples were already in place.

    Skill recipes restored: SKILL.md and reference/dataset-format.md document the three flows (capture corrected output as new GT, add one example, delete one bad row).

  • d41ee8b: CLI: drop the --wait flag from workflow execution run. The local-folder runner already waits for every example to reach a terminal state, so the flag was a documented no-op kept "for symmetry with experiment run --wait." That symmetry isn't worth a dead flag in the user-facing help screen — experiment run --wait is meaningful (it polls batch status), execution run --wait never was.

    Behavior is unchanged. Scripts that passed --wait will now see an unknown-option error from Commander; remove the flag.

  • d41ee8b: CLI: drop --jq and --output-path from workflow execution get. Pipe --json through real jq instead.

    Rationale: our --jq was dotted-path only (drillJsonPath), not real jq syntax. Calling it --jq was misleading — gh --jq '.foo[] | select(.bar)' works; ours never could. Real jq is universally installed on dev machines and supports the full filter language.

    Migration:

    Before After
    eigenpal workflow execution get exec_… --jq 'output.data' eigenpal workflow execution get exec_… --json | jq '.output.data'
    eigenpal workflow execution get exec_… --output-path 'stepExecutions.0.error' eigenpal workflow execution get exec_… --json | jq -r '.stepExecutions[0].error'

    Updated SKILL.md and reference docs to use the canonical --json | jq pattern.

  • c330c2a: CLI: small DX bundle + 5 audit follow-up fixes.

    • eigenpal status (and every other CLI call) now detects HTML-on-the-wire and throws a structured HtmlResponseError ("API not reachable at — got HTML response (likely wrong base URL or API not running)") instead of dumping the 100 KB Next.js 404 body.
    • workflow push --bump <patch|minor|major> reads the server's current version and computes the next semver, splicing it into the YAML before sending. Pair with --workflow-id. Conflicts with a top-level version: in the YAML are rejected.
    • workflow push --set-version <X.Y.Z> for explicit overrides. (Named --set-version to avoid the global -v, --version flag.)
    • workflow evaluator-type {list, get} — parallel namespace to step-type for evaluator schemas (exact-diff, llm-judge, custom-script). Returns JSON Schema instead of 404.
    • eigenpal init [name] now works with no name — scaffolds into the current directory using the cwd basename as the workflow slug. Pair with eigenpal workflow execution run <slug> in the same dir; execution run discovers both flat (./workflow.yaml + ./dataset/examples/<name>/) and nested (./eigenpal/workflows/<slug>/...) layouts.
    • format-error now appends Run \eigenpal auth login` or set EIGENPAL_API_KEY.to every 401, and includes the URL we tried +EIGENPAL_BASE_URL/--base-url` hint on connection failures.
    • execution get --jq <jsonpath> is the new canonical name for what was --output-path. --output-path keeps working as a hidden alias; help text shows --jq only (matches gh --jq / kubectl --jsonpath).
    • workflow push without --file in TTY now prompts for the path; non-TTY (CI) still errors with the existing "Missing --file" message.
    • transform.script reference docs include a callout about TDZ on shadowed input names (const located = located || [] triggers ReferenceError).
    • Dropped the half-promise comment in addJsonFlag about future --fields projection — the canonical answer is jq on the raw payload.
  • c330c2a: CLI: execution + auth polish.

    • workflow execution run gains --wait and --json. The local-folder
      runner already polled every example to terminal, so --wait is currently a
      no-op accepted for symmetry with experiment run --wait. --json emits a
      single { workflowSlug, passed, failed, total } summary on stdout (human
      progress lines + the "Results:" footer still go to stderr). Exits 1 when any
      example fails, same as before.
      ...
Read more

@eigenpal/cli@0.4.4

04 May 14:35

Choose a tag to compare

Major Changes

  • fadb59b: CLI command tree reorganized around the data model. Top-level surface is now
    workflow, agent (reserved), and skill; everything that operates on a
    workflow lives under workflow, grouped by sub-entity.

    Renames (clean break — no aliases):

    • eigenpal exec <slug>eigenpal workflow execution run <slug>
    • eigenpal cleareigenpal workflow clear
    • eigenpal install-skilleigenpal skill (same interactive multiselect UX)
    • eigenpal execution {get,list,watch,compare}eigenpal workflow execution {…}
    • eigenpal workflow set-definitioneigenpal workflow push
    • eigenpal workflow get-definitioneigenpal workflow pull
    • eigenpal workflow set-evaluators / get-evaluatorsworkflow evaluators {push,pull}
    • eigenpal workflow set-dataset / get-dataset / list-examplesworkflow dataset {push,pull,list}
    • eigenpal workflow run-experiment / get-experiment-status / get-experiment-results /
      get-eval-results / list-executionsworkflow experiment {run,status,results,eval-results,list}
    • eigenpal workflow list-versions / restore-versionworkflow version {list,restore}
    • eigenpal workflow list-step-types / get-step-typeworkflow step-type {list,get}
    • eigenpal workflow get-executionworkflow execution get
    • eigenpal workflow get-active-tenantworkflow active-tenant

    Removed:

    • eigenpal generate-meta — deleted. The IDs it generated were never read by
      any other CLI command; the server re-mints IDs on every push.

    Added:

    • eigenpal agent — reserved placeholder namespace. Prints a "Coming soon"
      message; agentic-process operations will land here in a future release.

Minor Changes

  • c82a215: eigenpal auth login now shows an interactive server picker when no --base-url flag or EIGENPAL_BASE_URL env is set:

    • Cloud (https://studio.eigenpal.com) is the default highlighted option.
    • Any on-prem URLs already in your credentials file are surfaced as separate options labelled with the profile names that use them — re-login against an existing on-prem deployment without retyping the URL.
    • Custom URL… prompts for a URL with strict validation.

    URL handling is now bulletproof in all three input paths (flag, env, picker):

    • Trims leading/trailing whitespace, strips trailing slashes.
    • Auto-prepends https:// when you paste a bare hostname (e.g. eigenpal.example.comhttps://eigenpal.example.com).
    • Rejects non-http(s) schemes (file://, ws://, etc.) with a clear error.
    • Rejects URLs with paths, query strings, or hash fragments — baseUrl is an origin, not a route.
    • Warns when authenticating over http:// against a non-loopback host (credentials sent unencrypted).

    Behavior with --base-url or EIGENPAL_BASE_URL set is unchanged — explicit overrides skip the picker, and an active profile's stored baseUrl is still inherited by all non-login commands.

  • c330c2a: CLI: bug fixes + new tooling.

    • success() / info() / dim() now write to stderr, not stdout. cmd | jq no longer mixes status lines with JSON output. (error() and warn() already correctly used stderr.)
    • workflow execution watch <bad-id> no longer treats 404 as a transient network blip; the loop exits immediately so the caller sees the structured Execution not found error and a non-zero exit instead of polling for 30 minutes.
    • eigenpal status exits non-zero when authentication fails, so scripts can eigenpal status && deploy.
    • New eigenpal completion <bash|zsh|fish> command — emits a shell-completion script for the live command tree. Install via eigenpal completion bash > /usr/local/etc/bash_completion.d/eigenpal (or your shell's equivalent).
    • New global --quiet / -q flag — suppresses success() / info() / dim() lines while keeping error() and warn() (and JSON output) intact.
    • New addJsonFlagMutation() helper alongside addJsonFlag(). Mutating commands that don't have a curated table view now use it so --verbose no longer appears in --help where it's a no-op. (Wire-up in mutating handlers happens in a follow-up commit on this branch.)
  • b2c4308: CLI: per-example dataset CRUD.

    Three new subcommands under workflow dataset mean you no longer have to re-zip and re-push the whole folder when you only want to flip one row:

    • workflow dataset create-example <wfId> --name <n> [--input-json | --input-file] [--expected-json | --expected-file] [--annotation] — add one example.
    • workflow dataset update-example <wfId> <exampleId> [--name] [--input-*] [--expected-*] [--annotation] [--row-order] — partial PATCH; flags you omit are left alone, --annotation "" clears.
    • workflow dataset delete-example <wfId> <exampleId> [--yes]--yes required for non-TTY shells.

    --input-file / --expected-file accept a path or - for stdin. Inline --*-json and the -file variant are mutually exclusive.

    Server: the POST /api/workflows/:id/eval-examples create schema now accepts the name and annotation fields the dashboard already exposed via the dashboard's PATCH path. No new endpoints — the v1 mirrors at /api/v1/eval-examples/[id] and /api/v1/workflows/[id]/eval-examples were already in place.

    Skill recipes restored: SKILL.md and reference/dataset-format.md document the three flows (capture corrected output as new GT, add one example, delete one bad row).

  • d41ee8b: CLI: drop the --wait flag from workflow execution run. The local-folder runner already waits for every example to reach a terminal state, so the flag was a documented no-op kept "for symmetry with experiment run --wait." That symmetry isn't worth a dead flag in the user-facing help screen — experiment run --wait is meaningful (it polls batch status), execution run --wait never was.

    Behavior is unchanged. Scripts that passed --wait will now see an unknown-option error from Commander; remove the flag.

  • d41ee8b: CLI: drop --jq and --output-path from workflow execution get. Pipe --json through real jq instead.

    Rationale: our --jq was dotted-path only (drillJsonPath), not real jq syntax. Calling it --jq was misleading — gh --jq '.foo[] | select(.bar)' works; ours never could. Real jq is universally installed on dev machines and supports the full filter language.

    Migration:

    Before After
    eigenpal workflow execution get exec_… --jq 'output.data' eigenpal workflow execution get exec_… --json | jq '.output.data'
    eigenpal workflow execution get exec_… --output-path 'stepExecutions.0.error' eigenpal workflow execution get exec_… --json | jq -r '.stepExecutions[0].error'

    Updated SKILL.md and reference docs to use the canonical --json | jq pattern.

  • c330c2a: CLI: small DX bundle + 5 audit follow-up fixes.

    • eigenpal status (and every other CLI call) now detects HTML-on-the-wire and throws a structured HtmlResponseError ("API not reachable at — got HTML response (likely wrong base URL or API not running)") instead of dumping the 100 KB Next.js 404 body.
    • workflow push --bump <patch|minor|major> reads the server's current version and computes the next semver, splicing it into the YAML before sending. Pair with --workflow-id. Conflicts with a top-level version: in the YAML are rejected.
    • workflow push --set-version <X.Y.Z> for explicit overrides. (Named --set-version to avoid the global -v, --version flag.)
    • workflow evaluator-type {list, get} — parallel namespace to step-type for evaluator schemas (exact-diff, llm-judge, custom-script). Returns JSON Schema instead of 404.
    • eigenpal init [name] now works with no name — scaffolds into the current directory using the cwd basename as the workflow slug. Pair with eigenpal workflow execution run <slug> in the same dir; execution run discovers both flat (./workflow.yaml + ./dataset/examples/<name>/) and nested (./eigenpal/workflows/<slug>/...) layouts.
    • format-error now appends Run \eigenpal auth login` or set EIGENPAL_API_KEY.to every 401, and includes the URL we tried +EIGENPAL_BASE_URL/--base-url` hint on connection failures.
    • execution get --jq <jsonpath> is the new canonical name for what was --output-path. --output-path keeps working as a hidden alias; help text shows --jq only (matches gh --jq / kubectl --jsonpath).
    • workflow push without --file in TTY now prompts for the path; non-TTY (CI) still errors with the existing "Missing --file" message.
    • transform.script reference docs include a callout about TDZ on shadowed input names (const located = located || [] triggers ReferenceError).
    • Dropped the half-promise comment in addJsonFlag about future --fields projection — the canonical answer is jq on the raw payload.
  • c330c2a: CLI: execution + auth polish.

    • workflow execution run gains --wait and --json. The local-folder
      runner already polled every example to terminal, so --wait is currently a
      no-op accepted for symmetry with experiment run --wait. --json emits a
      single { workflowSlug, passed, failed, total } summary on stdout (human
      progress lines + the "Results:" footer still go to stderr). Exits 1 when any
      example fails, same as before.
      ...
Read more

@eigenpal/cli@0.4.3

03 May 13:27

Choose a tag to compare

Major Changes

  • fadb59b: CLI command tree reorganized around the data model. Top-level surface is now
    workflow, agent (reserved), and skill; everything that operates on a
    workflow lives under workflow, grouped by sub-entity.

    Renames (clean break — no aliases):

    • eigenpal exec <slug>eigenpal workflow execution run <slug>
    • eigenpal cleareigenpal workflow clear
    • eigenpal install-skilleigenpal skill (same interactive multiselect UX)
    • eigenpal execution {get,list,watch,compare}eigenpal workflow execution {…}
    • eigenpal workflow set-definitioneigenpal workflow push
    • eigenpal workflow get-definitioneigenpal workflow pull
    • eigenpal workflow set-evaluators / get-evaluatorsworkflow evaluators {push,pull}
    • eigenpal workflow set-dataset / get-dataset / list-examplesworkflow dataset {push,pull,list}
    • eigenpal workflow run-experiment / get-experiment-status / get-experiment-results /
      get-eval-results / list-executionsworkflow experiment {run,status,results,eval-results,list}
    • eigenpal workflow list-versions / restore-versionworkflow version {list,restore}
    • eigenpal workflow list-step-types / get-step-typeworkflow step-type {list,get}
    • eigenpal workflow get-executionworkflow execution get
    • eigenpal workflow get-active-tenantworkflow active-tenant

    Removed:

    • eigenpal generate-meta — deleted. The IDs it generated were never read by
      any other CLI command; the server re-mints IDs on every push.

    Added:

    • eigenpal agent — reserved placeholder namespace. Prints a "Coming soon"
      message; agentic-process operations will land here in a future release.

Minor Changes

  • c82a215: eigenpal auth login now shows an interactive server picker when no --base-url flag or EIGENPAL_BASE_URL env is set:

    • Cloud (https://studio.eigenpal.com) is the default highlighted option.
    • Any on-prem URLs already in your credentials file are surfaced as separate options labelled with the profile names that use them — re-login against an existing on-prem deployment without retyping the URL.
    • Custom URL… prompts for a URL with strict validation.

    URL handling is now bulletproof in all three input paths (flag, env, picker):

    • Trims leading/trailing whitespace, strips trailing slashes.
    • Auto-prepends https:// when you paste a bare hostname (e.g. eigenpal.example.comhttps://eigenpal.example.com).
    • Rejects non-http(s) schemes (file://, ws://, etc.) with a clear error.
    • Rejects URLs with paths, query strings, or hash fragments — baseUrl is an origin, not a route.
    • Warns when authenticating over http:// against a non-loopback host (credentials sent unencrypted).

    Behavior with --base-url or EIGENPAL_BASE_URL set is unchanged — explicit overrides skip the picker, and an active profile's stored baseUrl is still inherited by all non-login commands.

  • c330c2a: CLI: bug fixes + new tooling.

    • success() / info() / dim() now write to stderr, not stdout. cmd | jq no longer mixes status lines with JSON output. (error() and warn() already correctly used stderr.)
    • workflow execution watch <bad-id> no longer treats 404 as a transient network blip; the loop exits immediately so the caller sees the structured Execution not found error and a non-zero exit instead of polling for 30 minutes.
    • eigenpal status exits non-zero when authentication fails, so scripts can eigenpal status && deploy.
    • New eigenpal completion <bash|zsh|fish> command — emits a shell-completion script for the live command tree. Install via eigenpal completion bash > /usr/local/etc/bash_completion.d/eigenpal (or your shell's equivalent).
    • New global --quiet / -q flag — suppresses success() / info() / dim() lines while keeping error() and warn() (and JSON output) intact.
    • New addJsonFlagMutation() helper alongside addJsonFlag(). Mutating commands that don't have a curated table view now use it so --verbose no longer appears in --help where it's a no-op. (Wire-up in mutating handlers happens in a follow-up commit on this branch.)
  • b2c4308: CLI: per-example dataset CRUD.

    Three new subcommands under workflow dataset mean you no longer have to re-zip and re-push the whole folder when you only want to flip one row:

    • workflow dataset create-example <wfId> --name <n> [--input-json | --input-file] [--expected-json | --expected-file] [--annotation] — add one example.
    • workflow dataset update-example <wfId> <exampleId> [--name] [--input-*] [--expected-*] [--annotation] [--row-order] — partial PATCH; flags you omit are left alone, --annotation "" clears.
    • workflow dataset delete-example <wfId> <exampleId> [--yes]--yes required for non-TTY shells.

    --input-file / --expected-file accept a path or - for stdin. Inline --*-json and the -file variant are mutually exclusive.

    Server: the POST /api/workflows/:id/eval-examples create schema now accepts the name and annotation fields the dashboard already exposed via the dashboard's PATCH path. No new endpoints — the v1 mirrors at /api/v1/eval-examples/[id] and /api/v1/workflows/[id]/eval-examples were already in place.

    Skill recipes restored: SKILL.md and reference/dataset-format.md document the three flows (capture corrected output as new GT, add one example, delete one bad row).

  • d41ee8b: CLI: drop the --wait flag from workflow execution run. The local-folder runner already waits for every example to reach a terminal state, so the flag was a documented no-op kept "for symmetry with experiment run --wait." That symmetry isn't worth a dead flag in the user-facing help screen — experiment run --wait is meaningful (it polls batch status), execution run --wait never was.

    Behavior is unchanged. Scripts that passed --wait will now see an unknown-option error from Commander; remove the flag.

  • d41ee8b: CLI: drop --jq and --output-path from workflow execution get. Pipe --json through real jq instead.

    Rationale: our --jq was dotted-path only (drillJsonPath), not real jq syntax. Calling it --jq was misleading — gh --jq '.foo[] | select(.bar)' works; ours never could. Real jq is universally installed on dev machines and supports the full filter language.

    Migration:

    Before After
    eigenpal workflow execution get exec_… --jq 'output.data' eigenpal workflow execution get exec_… --json | jq '.output.data'
    eigenpal workflow execution get exec_… --output-path 'stepExecutions.0.error' eigenpal workflow execution get exec_… --json | jq -r '.stepExecutions[0].error'

    Updated SKILL.md and reference docs to use the canonical --json | jq pattern.

  • c330c2a: CLI: small DX bundle + 5 audit follow-up fixes.

    • eigenpal status (and every other CLI call) now detects HTML-on-the-wire and throws a structured HtmlResponseError ("API not reachable at — got HTML response (likely wrong base URL or API not running)") instead of dumping the 100 KB Next.js 404 body.
    • workflow push --bump <patch|minor|major> reads the server's current version and computes the next semver, splicing it into the YAML before sending. Pair with --workflow-id. Conflicts with a top-level version: in the YAML are rejected.
    • workflow push --set-version <X.Y.Z> for explicit overrides. (Named --set-version to avoid the global -v, --version flag.)
    • workflow evaluator-type {list, get} — parallel namespace to step-type for evaluator schemas (exact-diff, llm-judge, custom-script). Returns JSON Schema instead of 404.
    • eigenpal init [name] now works with no name — scaffolds into the current directory using the cwd basename as the workflow slug. Pair with eigenpal workflow execution run <slug> in the same dir; execution run discovers both flat (./workflow.yaml + ./dataset/examples/<name>/) and nested (./eigenpal/workflows/<slug>/...) layouts.
    • format-error now appends Run \eigenpal auth login` or set EIGENPAL_API_KEY.to every 401, and includes the URL we tried +EIGENPAL_BASE_URL/--base-url` hint on connection failures.
    • execution get --jq <jsonpath> is the new canonical name for what was --output-path. --output-path keeps working as a hidden alias; help text shows --jq only (matches gh --jq / kubectl --jsonpath).
    • workflow push without --file in TTY now prompts for the path; non-TTY (CI) still errors with the existing "Missing --file" message.
    • transform.script reference docs include a callout about TDZ on shadowed input names (const located = located || [] triggers ReferenceError).
    • Dropped the half-promise comment in addJsonFlag about future --fields projection — the canonical answer is jq on the raw payload.
  • c330c2a: CLI: execution + auth polish.

    • workflow execution run gains --wait and --json. The local-folder
      runner already polled every example to terminal, so --wait is currently a
      no-op accepted for symmetry with experiment run --wait. --json emits a
      single { workflowSlug, passed, failed, total } summary on stdout (human
      progress lines + the "Results:" footer still go to stderr). Exits 1 when any
      example fails, same as before.
      ...
Read more

@eigenpal/cli@0.4.2

03 May 11:52

Choose a tag to compare

No user-facing CLI changes in this release.

@eigenpal/cli@0.4.1

03 May 10:30

Choose a tag to compare

No user-facing CLI changes in this release.