npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

kvakk-code

v0.1.1

Published

Browser-compatible coding agent library — LLM + virtual FS = Open Code-style agent

Readme

cog-code

Browser-compatible coding agent library — LLM + virtual FS + pluggable bash execution.

Install

npm install kvakk-code   # or your package manager of choice

Quickstart

Node.js agent with real filesystem and bash

import { Agent, NodeJSFS, NodeJSBashProvider, createBashTool } from 'kvakk-code'
import { OpenAILLM } from 'kvakk-code'

const agent = new Agent({
  llm: new OpenAILLM({ apiKey: process.env.OPENAI_API_KEY }),
  fileSystem: new NodeJSFS(),
  cwd: process.cwd(),
  bashProviders: [new NodeJSBashProvider()],
})

for await (const event of agent.chat('List all TypeScript files')) {
  if (event.type === 'text_delta') process.stdout.write(event.delta)
}

Browser agent with in-process bash (no server required)

import { Agent, createJustBashSetup } from 'kvakk-code'

const { fileSystem, bashProvider } = createJustBashSetup({
  files: {
    '/src/index.ts': 'export const hello = "world"',
    '/package.json': '{"name": "my-app"}',
  },
})

const agent = new Agent({
  llm: myLLM,
  fileSystem,
  bashProviders: [bashProvider],
})

createJustBashSetup() uses the just-bash package — pure TypeScript, in-process, 70+ built-in commands (ls, grep, sed, awk, jq, etc.). Works in browser and Node.js. No containers, no HTTP calls.

No bash (read/write/edit tools only)

const agent = new Agent({
  llm: myLLM,
  fileSystem: new InMemoryFS({ '/hello.txt': 'world' }),
  // omit bashProviders — no Bash tool is registered
})

Filesystem backends

| Class | Description | Browser | Node.js | |---|---|---|---| | InMemoryFS | Map-backed in-memory FS. Use for tests, demos, and browser playgrounds. | ✓ | ✓ | | NodeJSFS | Wraps node:fs/promises. Use for CLI and server environments. | ✗ | ✓ | | JustBashFileSystem | Backed by the same just-bash Bash instance as JustBashProvider. Use createJustBashSetup() — never construct directly. | ✓ | ✓ |

Bash backends

| Class | Description | Browser | Node.js | |---|---|---|---| | NodeJSBashProvider | child_process.spawn — real system shell. | ✗ | ✓ | | JustBashProvider | just-bash in-process bash — 70+ built-in commands. Use createJustBashSetup(). | ✓ | ✓ |

Pluggable command registry

Multiple providers can coexist. Specific-command providers always beat catch-alls:

import { createBashTool } from 'kvakk-code'

// Hypothetical: pyodide handles python/pip, justbash handles everything else
const bashTool = createBashTool([
  new PyodideProvider(['python', 'python3', 'pip']),
  new JustBashProvider(bash),  // catchall
])

Built-in tools

The agent always has Read, Write, Edit, Glob, Grep, Agent, and TodoWrite.
Bash is opt-in via bashProviders.

Streaming events

for await (const event of agent.chat('Refactor src/utils.ts')) {
  switch (event.type) {
    case 'text_delta':    process.stdout.write(event.delta); break
    case 'tool_start':    console.log(`[${event.name}] ${event.activityDesc}`); break
    case 'tool_end':      console.log(`→ done`); break
    case 'agent_progress': /* sub-agent activity */ break
    case 'turn_end':      console.log(`stop: ${event.stopReason}`); break
  }
}

Development

npm test           # run all tests (vitest)
npm run test:watch # watch mode
npm run typecheck  # tsc --noEmit
npm run build      # build library + CLI

CLI

npm run build
node dist/cli.js --help
node dist/cli.js "list all TypeScript files in src/"