Merciven for VS Code
Deploy and run Merciven pipelines without leaving the editor. This extension is a thin wrapper around the merciven CLI — it shells out to the same CLI a terminal or CI job would use, so every deploy/run triggered from VS Code shows up in the web dashboard's Jobs/Logs pages immediately, as the same real run history. No separate backend, no separate auth system.
Install from the VS Code Marketplace →
Setup
- Install the CLI:
npm install -g merciven-cli
- Get your API token from the Merciven web app: Settings → API access (the same token this extension and the CLI both use — there's no separate extension-specific key).
- Run Merciven: Log In from the command palette (
Ctrl+Shift+P / Cmd+Shift+P) and paste that token.
- Open a pipeline YAML file inside a workspace folder, run Merciven: Configure This Workspace, and enter the connection id (visible on the Data sources page) and an approved transformation credential id (Pipelines → Deployment → Add credential) it should deploy to. This is saved to
merciven.json at the workspace root — safe to commit, it holds only numeric ids, never a credential secret.
Commands
| Command |
What it does |
| Merciven: Log In |
Prompts for an API token, same as merciven login |
| Merciven: Show Logged-In Account |
merciven whoami |
| Merciven: Configure This Workspace |
Writes merciven.json (connection id + credential id) |
| Merciven: Deploy Current File |
Saves the active file, runs merciven deploy against it |
| Merciven: Run Current File |
Same, via merciven run (defaults to force-run) |
| Merciven: Show Connection Status |
merciven status |
| Merciven: Show Recent Pipeline Runs |
merciven logs |
Output streams into the Merciven output channel; a status-bar item shows the last deploy/run outcome. All seven commands degrade gracefully with a clear message — no active editor, no workspace folder, a cancelled input box, no saved workspace config — none of them throw or hang.
deploy vs run
Both call the exact same backend endpoint (POST /api/analyst/projects/:id/files/deploy) — there's no separate job-execution path on the server, only deploy, which also runs immediately for a manual-schedule pipeline. The one real difference: run defaults --force to true, so re-deploying identical, unchanged content isn't silently skipped by the duplicate-batch-checksum guard. Stated plainly rather than implying a distinct execution engine that doesn't exist.
Settings
merciven.cliPath — path to the merciven executable if it isn't on PATH (default: merciven)
merciven.apiUrl — override the API base URL (default: the CLI's own default, production)
Development
npm install
npm test # runs the real suite below inside an actual VS Code extension host
npm run package
npm run package produces a .vsix for local installs (code --install-extension merciven-vscode-0.1.0.vsix) or for handing out before/instead of a Marketplace release.
Test coverage
npm test launches a real, isolated VS Code instance (via @vscode/test-electron, downloaded separately so it never touches an already-open editor window) and verifies, inside that live extension host:
- the extension is found by its published id and activates without throwing
- all seven contributed commands are actually registered with VS Code (not just declared in
package.json)
merciven.whoami runs the real execFile → parse-JSON path against the actual installed CLI
status, logs, login, deployCurrentFile, runCurrentFile, and configureWorkspace all resolve cleanly under the exact conditions a fresh install hits first — no workspace config yet, no active editor, a cancelled input box — without throwing or hanging
Last verified: 7/7 passing, run to completion inside a real, live VS Code 1.132.0 extension host (not mocked or skipped). Getting a clean run surfaced two real bugs that are now fixed: deployCurrentFile/runCurrentFile/configureWorkspace used to return vscode.window.showErrorMessage(...) on their early-exit paths, which makes executeCommand wait on that promise — and showErrorMessage doesn't resolve until a human dismisses the toast, so anything invoking those commands programmatically (a keybinding, another extension) would hang indefinitely with no active editor or workspace folder open. Fixed by firing the notification without awaiting it. See test/runTest.js and test/suite/extension.test.js for the suite itself.
Links