Skip to content
Slipstream agent · Code

Dependency Upgrader

A dependency upgrade agent for Claude Code, Codex and Cursor

Dependency Upgrader upgrades a public GitHub repository within its semver ranges, fixes the project's code when that breaks its tests, and returns the diff and the results. A run costs 8,000 credits, charged only when the run succeeds.

Not offered in ContextStream yet. It needs a sandbox, and ContextStream's Slipstream worker has no sandbox provider yet. Version 1.0.0 · Updated

What does Dependency Upgrader do?

Upgrades a public GitHub repo within its semver ranges and runs its tests; when the upgrade breaks them, fixes the project's code. Returns the diff and the results.

What it declines

A task like one of these is declined with a reason, and a declined run is free:

  • Major-version upgrades, pinning or downgrading, or changes to tests to make them pass.
  • Fixing tests that already failed before the upgrade (CI Fixer does that).
  • Private repositories, or anything that needs credentials.
  • Opening pull requests or pushing changes.

What does a real run of Dependency Upgrader look like?

The input, the result (shortened where it is long), how long it took, what it cost and where it ran. Live runs used public or demo material only; a run marked as from the eval suite is not a live run.

Version 1.0.0 runs on ContextStream's task rail and needs a sandbox, which ContextStream's Slipstream worker does not have yet. The live run below is version 0.1.0, the public version on Slipstream's own API; the second example is version 1.0.0 in its eval suite.

Live run on Slipstream's own API

Upgrading unjs/defu within its ranges (version 0.1.0)

Version
0.1.0
Outcome
succeeded
Ran
2026-10-27 17:18 UTC
Took
7.0 s
Cost
No charge (no model, not billed)

Slipstream's own API on a Depot CI runner, inside the images/base.Dockerfile image as an unprivileged user. No model, no ContextStream, no credits.

Input
{
  "repo_url": "https://github.com/unjs/defu",
  "ref": "82632b66f5914e9946edce300e10633a3d5c0cb7"
}

Result

Upgraded within the declared ranges (2 files changed); tests pass.

Result

pnpm: 2 files changed; pnpm test passed (exit 0).

upgrade.patch

diff --git a/package.json b/package.json
index e255cf5..68d78b9 100644
--- a/package.json
+++ b/package.json
@@ -34,17 +34,17 @@
     "test:types": "tsgo --noEmit"
   },
   "devDependencies": {
-    "@types/node": "^25.8.0",
+    "@types/node": "^25.9.9",
     "@typescript/native-preview": "7.0.0-dev.20260516.1",
-    "@vitest/coverage-v8": "^4.1.6",
+    "@vitest/coverage-v8": "^4.1.12",
     "changelogen": "^0.6.2",
     "eslint-config-unjs": "^0.6.2",
-    "expect-type": "^1.3.0",
+    "expect-type": "^1.4.0",
     "oxfmt": "^0.50.0",
-    "oxlint": "^1.65.0",
+    "oxlint": "^1.90.0",
     "typescript": "^6.0.3",
     "unbuild": "^3.6.1",
-    "vitest": "^4.1.6"
+    "vitest": "^4.1.12"
   },
   "packageManager": "[email protected]"
 }

Test output


> [email protected] test [path]/slipstream/work/repo
> pnpm lint && pnpm test:types && pnpm vitest run


> [email protected] lint [path]/slipstream/work/repo
> oxlint src && oxfmt --check src test

Found 0 warnings and 0 errors.
Finished in 3ms on 3 files with 96 rules using 8 threads.
Checking formatting...

All matched files use the correct format.
Finished in 22ms on 7 files using 8 threads.

> [email protected] test:types [path]/slipstream/work/repo
> tsgo --noEmit


 RUN  v4.1.12 [path]/slipstream/work/repo

TAP version 13
# Subtest: isPlainObject
ok 1 - isPlainObject
  ---
  duration_ms: 0.60468
  type: 'suite'
  ...
 ✓ test/utils.test.ts (2 tests) 2ms
 ✓ test/defu.test.ts (21 tests) 5ms

 Test Files  2 passed (2)
      Tests  23 passed (23)
   Start at  17:18:30
   Duration  106ms (transform 53ms, setup 0ms, import 73ms, tests 7ms, environment 0ms)

Checks: 4 of 4 passed
  • clone: Cloned https://github.com/unjs/defu at 82632b66f5914e9946edce300e10633a3d5c0cb7.
  • lockfile: Found a lockfile for pnpm.
  • upgrade: Upgraded within the declared ranges and installed.
  • tests: `pnpm test` passed.
  • Lockfile changes are left out of the patch shown here.
Run
run_679b0d01502edd2082
Depot run
0zb9r381xr
Image
images/base.Dockerfile@3a1adeda3695 (slipstream origin/main) + scripts/example-runs from branch site-example-runs 5112d5b (local)
Sandbox
the fake provider on loopback, inside that disposable container
From its eval suite, not a live run

An upgrade that renamed an export, and the fix (version 1.0.0, eval case)

Version
1.0.0
Outcome
succeeded
Ran
2026-10-27 17:17 UTC
Took
Not timed (fakes)
Cost
No charge (offline)

The agent's offline eval suite: its real program, against a fake ContextStream, a scripted model and a fixture repository, with no network. Not a live run.

What it ran on

  • evals/dependency-upgrader/cases.jsonl in the Slipstream repository
Input
{
  "repo_url": "https://github.com/eval/greeter"
}

Result

Upgraded within the declared ranges (2 files changed). The upgrade broke the tests; a 2-line fix makes them pass. casekit 1.1.0 renamed its toTitle export to titleCase.

Result

npm: 2 files changed; npm test passed (exit 0).

The upgrade broke the tests, and the fix

casekit 1.1.0 renamed its toTitle export to titleCase.

upgrade.patch

diff --git a/src/greet.js b/src/greet.js
index f2d839b..9ed89d4 100644
--- a/src/greet.js
+++ b/src/greet.js
@@ -1,4 +1,4 @@
-import { toTitle } from 'casekit';
+import { titleCase as toTitle } from 'casekit';
 
 export function greet(name) {
   return `Hello, ${toTitle(name)}!`;

fix.patch

diff --git a/src/greet.js b/src/greet.js
index f2d839b..9ed89d4 100644
--- a/src/greet.js
+++ b/src/greet.js
@@ -1,4 +1,4 @@
-import { toTitle } from 'casekit';
+import { titleCase as toTitle } from 'casekit';
 
 export function greet(name) {
   return `Hello, ${toTitle(name)}!`;

Test output


> [email protected] test
> node --test

TAP version 13
# Subtest: greets by name, in title case
ok 1 - greets by name, in title case
  ---
  duration_ms: 0.4108
  type: 'test'
  ...
1..1
# tests 1
# suites 0
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 36.03147
Checks: 6 of 7 passed
  • clone: Cloned the repository.
  • lockfile: Found a lockfile for npm.
  • upgrade: Upgraded within the declared ranges and installed.
  • tests_after_upgrade: `npm test` exited 1.
  • baseline: `npm test` passes before the upgrade, so the upgrade broke it.
  • tests: `npm test` passes after a 2-line fix to 1 file.
  • workspace_context: 0 context items from ContextStream for this job, about 0 tokens.
  • Lockfile changes are left out of the patch shown here.
Eval case
evals/dependency-upgrader/cases.jsonl, renamed-export
Depot run
0zb9r381xr

What does Dependency Upgrader cost?

Dependency Upgrader costs 8,000 ContextStream credits a run, charged only when the run succeeds; a declined, failed, cancelled or timed-out run costs nothing. Credits come with every plan: Starter is free with 10,000 a month (1 run of Dependency Upgrader, if spent on nothing else), and Pro is $19 a month with 25,000.

Which tools does Dependency Upgrader work with?

Claude Code, Codex, Cursor and other MCP clients, once ContextStream offers it: through the slipstream tool of ContextStream's MCP, ss run dependency-upgrader in a terminal, or the web app. It needs a sandbox, and ContextStream's Slipstream worker has no sandbox provider yet.

  • Claude Code, Codex, Cursor and other MCP clients: connect ContextStream's MCP once (setup for each editor), then ask your agent to hand the job to Dependency Upgrader.
  • A terminal or an agent's shell: ss run dependency-upgrader, installed with ContextStream's command line.
  • The web app: the workspace's specialist library, where each run shows its price before it starts.

What access does Dependency Upgrader need?

Dependency Upgrader gets a short-lived token for one workspace, limited to 2 scopes: Models via ContextStream and Reads context. It works in one project, and only for that run.

Model agent with a sandbox. A program on ContextStream's model proxy that also drives its own sandbox. The sandbox holds no credentials. Network: github.com, codeload.github.com, objects.githubusercontent.com, release-assets.githubusercontent.com, registry.npmjs.org, pypi.org, files.pythonhosted.org. It is stopped after 30 min.

ScopeWhat it lets a run do
model.invokeCall models through ContextStream’s model proxy, under the run’s credit cap.
context.readRead the run’s context pack from the workspace.

How do I turn Dependency Upgrader on?

You cannot turn Dependency Upgrader on yet: it needs a sandbox, and ContextStream's Slipstream worker has no sandbox provider yet. It is built and tested, and its page shows how it will be called.

How do I call Dependency Upgrader from Claude Code or Codex?

Once it is offered: ss run dependency-upgrader in a terminal, or slipstream(action="run", agent="dependency-upgrader", input={...}) over MCP, with the input below.

Connect ContextStream's MCP (it also writes each editor's connection):

curl -fsSL https://contextstream.io/scripts/mcp.sh | bash

Upgrades defu within its ranges, runs its tests, and fixes its code if the upgrade breaks them. Over MCP:

slipstream(action="run", agent="dependency-upgrader", input={"repo_url":"https://github.com/unjs/defu","ref":"82632b66f5914e9946edce300e10633a3d5c0cb7"}, accepted_price_credits=8000)

In a terminal (curl -fsSL https://contextstream.io/cs/install.sh | sh installs ss):

ss run dependency-upgrader repo_url=https://github.com/unjs/defu ref=82632b66f5914e9946edce300e10633a3d5c0cb7

Over MCP, a call without accepted_price_credits returns the quote first; ss asks on a terminal, and scripts pass --yes.

Input

FieldTypeWhat it is
repo_urlstring, required
refstring
subdirstring
test_commandstringOverrides the default test command for the detected installer.

Other versions of Dependency Upgrader

  • dependency-upgrader@0.1.0: sandbox agent, on Slipstream's own API. Upgrades a public GitHub repo within its existing semver ranges, runs its tests, and returns the diff and results.
Code

CI Fixer

failing test fix agent

CI Fixer reproduces a failing test command in a public repository and returns the smallest change to the project's code that makes it pass, with the passing output.

5,000 credits a runEvals 13/13v0.1.0
Code

Code Oracle

code search agent

Code Oracle answers one question about where code is, what calls it, how it flows or where to change it, from the workspace's code index.

FreeEvals 202/212v0.2.0
Code

Docs Drift

documentation drift agent

Docs Drift finds statements in a repository's docs that its code no longer matches and proposes the edits as a diff.

800 credits a runEvals 7/7v0.1.0

Every Slipstream agent