open-index/open-npm huggingface dataset:
npm package: @siddheshnan/react-spreadsheet2
Description: Simple, customizable yet performant spreadsheet for React
Author: Iddan Aaronsohn
Latest version: 0.10.2

<div align="center">
  <img src="https://raw.githubusercontent.com/iddan/react-spreadsheet/master/assets/logo.svg?sanitize=true" height="120">
</div>

# React Spreadsheet

Simple, customizable yet performant spreadsheet for React.

![Screenshot](https://github.com/iddan/react-spreadsheet/blob/master/assets/screenshot.png?raw=true)
[![CI](https://github.com/iddan/react-spreadsheet/workflows/CI/badge.svg?branch=master)](https://github.com/iddan/react-spreadsheet/actions/workflows/ci.yaml?query=branch%3Amaster)

```bash
npm install react react-dom scheduler react-spreadsheet
```

_or_

```bash
yarn add react react-dom scheduler react-spreadsheet
```

### Features

- Simple straightforward API focusing on common use cases while keeping flexibility
- Performant (yet not virtualized)
- Implements Just Components™

### [Demo](https://iddan.github.io/react-spreadsheet)

### [Docs](https://iddan.github.io/react-spreadsheet/docs)

### [Storybook](https://iddan.github.io/react-spreadsheet/storybook)
npm package: @siddiqus/expressive
Description: Fast, opinionated, minimalist, and conventional REST API framework for NodeJS, built on ExpressJs.
Author: Sabbir Siddiqui
Latest version: 4.0.17

[![Expressive Logo](https://raw.githubusercontent.com/siddiqus/expressive/master/logo.png)](https://github.com/siddiqus/expressive/)

[![Coverage Status](https://coveralls.io/repos/github/siddiqus/expressive/badge.svg?branch=master)](https://coveralls.io/github/siddiqus/expressive?branch=master)
[![Maintainability](https://api.codeclimate.com/v1/badges/533736ee85578f98a732/maintainability)](https://codeclimate.com/github/siddiqus/expressive/maintainability)
[![codebeat badge](https://codebeat.co/badges/6e3ba61c-d5cf-4a05-9aa7-ee7dd1591fe2)](https://codebeat.co/projects/github-com-siddiqus-expressive-master)
[![tested with jest](https://img.shields.io/badge/tested_with-jest-99424f.svg)](https://github.com/facebook/jest)
[![Google Style](https://badgen.net/badge/eslint/google/4a88ef)](https://github.com/google/eslint-config-google)

# Expressive

Fast, opinionated, minimalist, and conventional REST API framework for [node](http://nodejs.org).
(With Typescript Support :star:)

# Introduction

**Expressive** is a NodeJS REST API framework built on ExpressJs and best practices for smooth development.

Please visit the [wiki page](https://github.com/siddiqus/expressive/wiki) for the full documentation.
npm package: @siddiqus/expressive-cli
Description: A CLI to bootstrap @siddiqus/expressive projects
Author: Sabbir Siddiqui
Latest version: 1.0.8

# `@siddiqus/expressive-cli`

🏗 CLI for [@siddiqus/expressive](https://www.npmjs.com/package/@siddiqus/expressive) to bootstrap new projects.

## Installation

```bash
npm install -g @siddiqus/expressive-cli
```

## Usage
```bash
expressive-cli new appName

cd appName
yarn install
yarn start
```

## License
MIT

## Credits
Thanks to Dominik Kundel <hi@dominik.dev> for the base repository [dkundel/create-project](https://github.com/dkundel/create-project) which this is forked from.
npm package: @siddjain/react-file-input
Description: Bare-bones file picker for react with no dependencies that allows for ordering and deleting the files selected
Author: Siddharth Jain
Latest version: 0.1.2

# README

Bare-bones file picker for react with no dependencies (other than `react >= 16.8`) or bells and whistles.
What it does - it allows you to select multiple files and order and / or delete them. That's it.
You can also set a limit on the number of files user can select and the file types.
This package will not install `react` for you. It assumes you will add react dependency
in your `package.json` along-side `react-file-input`. Example screenshot:

![Screenshot](react-file-picker-screenshot.PNG)

# How to use it

Assuming you know how to write a React app:

```
import FileInput from "@siddjain/react-file-input";

export default function App() {
  return (
    <div className="App">
      <FileInput maxFileCount={3} accept=".png,.jpg,.jpeg" />
    </div>
  );
}
```

[Demo](https://codesandbox.io/s/react-file-input-7nbyq0)

# API

`FileInput` takes following optional inputs:

- `onChange`: an event handler that is called whenever the file list changes (addition, deletion or change in order of items in the list)
- `maxFileSize`: a number. units: bytes. If user selects a file whose size is greater than `maxFileSize` a warning symbol is displayed. The file is still selected and added to list of files.
- `accept`: same as [accept](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept). a string that defines the file types the file input should accept.
- `value`: this is useful if you will be using `FileInput` in a multi-step (multi-page) form where user can go back and forth. An array of `File` objects to initialize `FileInput`'s list of files.

# License

[MIT](LICENSE.txt)
npm package: @siddjain/react-formik-multi-step-form
Description: a package that provides helper methods to create multi-step forms. depends on react, bootstrap, draft-js and formik. 
Author: Siddharth Jain
Latest version: 0.1.0

# README

This package provides some helper methods and classes to create multi-steps forms in React using Formik library.
The main class in the package is `FormikStepper`. Here is a [demo](https://codesandbox.io/s/multi-step-form-demo-9x135b)
using this package to create a multi-step form.

When you use this package in your app, you have to install all the dependencies declared under `peerDependencies`
in `package.json`. Note: please set `GENERATE_SOURCEMAP=false` as follows in your `package.json`:

```
"scripts": {
    "start": "GENERATE_SOURCEMAP=false react-scripts start",
    "build": "GENERATE_SOURCEMAP=false react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  }
```

otherwise you will get some [warnings](https://stackoverflow.com/questions/70599784/failed-to-parse-source-map) saying `Unable to parse source map`.

Rest of the document is for me - developer of the project

## Init 

Below are commands I used to init the project. These commands don't need to be run if you are cloning the repo.

```
$ npm init
```

```
$ npm i typescript ts-node nodemon --save-dev
```

```
$ npx tsc --init
```

## Build 

```
npm i
```

will both install all dependencies and build the project. `dist` directory will contain the built project.
To just build the project (e.g., once you have installed the dependencies) run:

```
npm run build
```

## Test

Next we need to test it locally before publishing to NPM. For this pack the project first:

```
npm pack
```

This will pack all the files declared under `files` in `package.json` and generate a tarball `siddjain-react-formik-multi-step-form-0.1.0.tgz`.
Copy over this tarball to the test project which will use this package.

Then install the tar by running:

```
$ npm i siddjain-react-formik-multi-step-form-0.1.0.tgz
```

Now you can use this package in the test project.

## Publish

Once you have tested, publish the package to NPM by running:

```
$ npm publish --access public
```

See [this](https://docs.npmjs.com/creating-and-publishing-scoped-public-packages)

## Notes

I tried to use rollup to build the project without success. Ran into many issues and finally gave up after [this](https://github.com/wojtekmaj/react-datetimerange-picker/issues/54).

## LICENSE

[MIT](LICENSE.txt)
npm package: @siddr/pi-cmux-status
Description: cmux sidebar status extension for pi
Latest version: 0.1.2

# cmux-status extension

Sets cmux sidebar status entries for pi when running inside cmux (`CMUX_WORKSPACE_ID` is set).

Keys:

- all sessions: `pi-cmux-status:<owner>`

`<owner>` is derived from the current cmux surface and panel ids, so each pi instance manages its own deterministic sidebar entry. If cmux does not expose an owner id for the current process, the extension does nothing.

The status text is:

- `π <name>: <status>` for named sessions
- `π - <status>` for unnamed sessions

Status values:

- `Ready`
- `Working`
- `Waiting`
- `Error`

Behavior:

- `Ready` when idle
- `Working` while the agent is running, with an animated textual spinner prefix
- `Waiting` while another extension emits `pi:waiting-for-user-input` with `{ waiting: true }`, with a dedicated icon and a one-shot waiting notification
- `Error` after a tool finishes with an error, until the next session or new agent run, with a dedicated icon
- named and unnamed sessions both show `Ready` again once the session returns to idle

Multiple pi instances in the same cmux workspace do not share a sidebar key anymore: each instance writes to its own surface/panel-specific key and clears only that key on disable/shutdown.

This extension does not render any TUI widget or footer content, and it does not use the cmux progress bar.

## Install

```bash
pi install npm:@siddr/pi-cmux-status
```

Or symlink it locally into `~/.pi/agent/extensions/cmux-status` and run `/reload`.

## Usage

The extension manages the session-specific cmux sidebar status entry through the cmux socket API by default.

- Sidebar status updates use the socket first and fall back to the `cmux` CLI if the socket is unavailable or rejects the request.
- Waiting notifications also use the socket first, with the same CLI fallback behavior.
- The socket address defaults to `/tmp/cmux.sock` and can be overridden with `CMUX_SOCKET_PATH`. Remote `cmux ssh` sessions may expose this as a relay address like `127.0.0.1:<port>`.
- cmux socket access is also affected by cmux's access mode settings, including `CMUX_SOCKET_MODE`.

Notes:

- `Ready` uses a `checkmark` icon.
- `Waiting` uses an `hourglass` icon.
- `Error` uses an `exclamationmark.triangle.fill` icon.
- `Working` does not use a cmux icon; it animates with the same braille-style textual spinner frames pi uses, such as `⠋`.

For `Waiting`, cooperating extensions can emit the shared inter-extension event:

```ts
pi.events.emit("pi:waiting-for-user-input", {
	source: "my-extension",
	id: "some-stable-id",
	waiting: true,
});

pi.events.emit("pi:waiting-for-user-input", {
	source: "my-extension",
	id: "some-stable-id",
	waiting: false,
});
```

Toggle the behavior with `/custom-cmux-status`.

## Tests

```bash
bun test cmux-status/tests/utils.test.ts
bun test cmux-status/tests/cmux.test.ts
bun test cmux-status/tests/index.test.ts
```
npm package: @siddr/pi-fetch-url
Description: Readable content fetch tool extension for pi
Latest version: 0.1.4

# Fetch URL Extension

Adds a `fetch_url` tool that fetches a URL and returns the main readable content. By default, it extracts the primary content and converts it to Markdown. You can request raw HTML or extracted HTML if needed. Metadata (title, author/byline, site name, published time when available) is included in the output header.

## Install

```bash
pi install npm:@siddr/pi-fetch-url
```

## Tool

### `fetch_url`

Parameters:
- `url` (string, required) — URL to fetch.
- `raw` (boolean, optional) — return raw response body (no extraction).
- `format` (`"markdown" | "html"`, optional) — format for extracted content (default: `markdown`).

Behavior:
- If `raw=true`, returns raw response body.
- If the response is HTML and `raw` is false, uses Mozilla Readability + fallback heuristics to extract the main content.
- If the response is not HTML, returns raw text/JSON as-is.
- Tool output stays collapsed in the UI by default; use `Ctrl+O` to expand and inspect the fetched text.
- Context uses pi-style truncation heuristics: output is truncated to 2000 lines or 50KB, and full output is saved to a temp file when truncated.

### Example prompts

```
Fetch https://example.com/article and summarize it.
Fetch https://example.com/article with format="html".
Fetch https://example.com/article with raw=true.
```
npm package: @siddr/pi-openai-params
Description: Combined OpenAI fast mode and verbosity settings for pi
Latest version: 0.1.2

# openai-params

Combined OpenAI fast-mode and verbosity settings for pi.

## What it does

This extension adds `/openai-params`, which opens a small settings screen for:

- `Ctrl+S` saves
- `Esc` cancels

Use the list to:

- toggling fast mode
- setting verbosity to `low`, `medium`, `high`, or the default unset state

When enabled, it patches provider requests right before send:

- fast mode → `service_tier=priority`
- verbosity → `text.verbosity=<level>`

## Behavior

- Fast mode is only applied to configured supported models.
- Default supported models are:
  - `openai/gpt-5.4`
  - `openai-codex/gpt-5.4`
- Verbosity is applied only to OpenAI Responses-family APIs:
  - `openai-responses`
  - `openai-codex-responses`
  - `azure-openai-responses`
- The default verbosity setting is unset, so the extension does not send any `text.verbosity` field unless you choose one.

## Config

Config uses the same project-over-global pattern as the fast-mode package:

- project: `.pi/extensions/openai-params.json`
- global: `~/.pi/agent/openai-params.json`

If neither file exists, the extension creates the global file on first run.

Default config:

```json
{
  "fast": false,
  "verbosity": null,
  "supportedModels": [
    "openai/gpt-5.4",
    "openai-codex/gpt-5.4"
  ]
}
```

## Integration

This extension emits its current state on pi's extension event bus over `pi:openai-params` with:

- `source`
- `cwd`
- `fast`
- `verbosity`

That lets other extensions, including `status`, show the active non-default fast/verbosity settings for the current workspace.

## Notes

This extension combines the behavior of:

- `@benvargas/pi-openai-fast` for `service_tier=priority`
- `pi-verbosity-control` for `text.verbosity`

based on OpenAI GPT-5 / Responses API parameter docs.
npm package: @siddr/pi-prompt-thinking
Description: Per-prompt thinking level override extension for pi
Latest version: 0.1.5

# Prompt Thinking extension

Type `^level` in the editor to pick a thinking level for a single prompt. The control token is removed before the prompt is sent.

## Install

```bash
pi install npm:@siddr/pi-prompt-thinking
```

## Usage

1. Type `^` anywhere in the prompt where whitespace-delimited tokens are allowed.
2. Pick a level from autocomplete.
3. Send the prompt normally.
4. pi temporarily applies that thinking level for the prompt, then restores the previous session level after the response finishes.

### Examples

Typing:

```text
^high summarize the tradeoffs
```

submits as:

```text
summarize the tradeoffs
```

Typing:

```text
Please ^minimal answer briefly
```

submits as:

```text
Please answer briefly
```

## Autocomplete behavior

- Typing `^` opens a thinking-level picker in the interactive TUI.
- The current thinking level is read when the picker opens and preselected when it is available for the active model.
- Up/down arrows move through lower/higher thinking levels because suggestions stay in natural order.
- Available levels depend on the current model:
  - non-reasoning models: `^off`
  - reasoning models: `^off`, `^minimal`, `^low`, `^medium`, `^high`
  - xhigh-capable models: also `^xhigh`

## Token rules

- `^level` can appear anywhere in the prompt as a standalone whitespace-delimited token.
- Matching is case-insensitive (`^HIGH` works).
- Unknown tokens are left unchanged.
- If multiple recognized tokens appear, the first recognized level wins and all recognized `^level` tokens are removed before submission.

## Notes

- The one-prompt behavior is implemented by temporarily changing pi's session thinking level before the prompt runs and restoring the previous level afterward.
- Because pi does not currently expose a true per-turn thinking override API to extensions, this may still append thinking-level-change entries to the session history and briefly update the default thinking setting before it is restored.
- Submit-time stripping works even when custom editor UI is unavailable; autocomplete itself is interactive-TUI only.
npm package: @siddr/pi-review
Description: Interactive review mode extension for pi
Latest version: 0.1.5

# Review extension

Interactive code-review mode for pi.

## Install

```bash
pi install npm:@siddr/pi-review
```

## What it does

- `/review` toggles review mode:
  - when inactive, it starts review mode
  - when active, it ends review mode
- Supports review targets:
  - uncommitted changes
  - base branch diff
  - specific commit
  - pull request (with `gh pr view` + `gh pr checkout`)
  - folder/file snapshot review
  - custom review instructions
- Loads project-specific `REVIEW_GUIDELINES.md` from the directory containing `.pi` (if present) and applies it as hidden review instructions while review mode is active.
- Shows a banner above the editor while active:
  - `Review mode active; /review to exit.`

## Commands

- `/review` (interactive target selection)
- `/review uncommitted`
- `/review branch <name>`
- `/review commit <sha> [title...]`
- `/review folder <paths...>`
- `/review custom [instructions...]`
- `/review pr <number-or-url>`

## Start and end flow

When review mode starts, the extension asks where to start (`Empty branch` or `Current branch`) only when the session has branchable history. It then resolves the target, enables review mode, and prefills the editor with the selected review focus before you send the first review prompt.

When review mode ends, the extension opens triage for recorded comments (keep/discard, priority, optional note). If triage is confirmed, it exits review mode, restores model/thinking values captured at start, and posts a summary containing kept comments only. If no comments are kept, it exits cleanly without posting a summary.

## Review-mode tool

While review mode is active, the extension enables one tool:

- `add_review_comment`

When review mode exits, the tool is removed from active tools.

### `add_review_comment` schema

```json
{
  "priority": "P0 | P1 | P2 | P3",
  "comment": "string",
  "references": [
    {
      "filePath": "string",
      "startLine": 1,
      "endLine": 2
    }
  ]
}
```

Validation:
- `comment` must be non-empty after trim.
- `startLine >= 1`.
- `endLine >= startLine` when provided.
- `filePath` is trimmed + normalized.

## Acknowledgements

This extension is based on the original implementation from [mitsuhiko/agent-stuff](https://github.com/mitsuhiko/agent-stuff).
npm package: @siddr/pi-shared-qna
Description: Shared TUI helpers for siddr pi extensions
Latest version: 0.1.3

# @siddr/pi-shared-qna

Shared helpers used by siddr pi extensions.

## Exports

- `@siddr/pi-shared-qna`: Q&A TUI helpers used by `pi-answer` and `pi-plan-md`.
- `@siddr/pi-shared-qna/session-editor-component`: session-scoped editor component helpers shared by UI extensions.
npm package: @siddr/pi-status
Description: Status widget extension for pi
Latest version: 0.1.5

# Status extension

Shows a status widget below the input editor with session context (plus an optional PR line):

- Current provider/model
- Current thinking level
- Current OpenAI fast/verbosity indicators from `openai-params` when non-default, shown inside the thinking parentheses (`/fast`, `🗣️low`, `🗣️medium`, `🗣️high`)
- Current working directory
- Current Git branch
- Context usage percent plus used token count
- Current/last agent time plus cumulative turn total and session time (`<agent> agent · <turn total> turn total · <session> session`)
- Current GitHub PR URL for the active branch (includes `(merged)` / `(closed)` when not open)

Time values use a compact `d/h/m` format (`XdYhZm`, `YhZm`, or `Zm`) and are separated with a center dot (`·`). Agent time reflects the current or last completed prompt run. Turn total accumulates time spent across turns in the current session. All timers reset when a new session starts. The default footer widget is hidden while this extension is active.

## Install

```bash
pi install npm:@siddr/pi-status
```

## Usage

The status widget updates automatically during session events.

If `openai-params` is installed, the widget also listens for its event-bus updates and shows the current non-default fast/verbosity settings inside the thinking-level parentheses for the active workspace.

PR detection requires GitHub CLI (`gh`) and valid auth (`gh auth status`). By default, the PR line is resolved only for `github.com`. You can allow additional GitHub Enterprise hosts with `PI_STATUS_ALLOWED_GITHUB_HOSTS` (comma-separated exact hostnames).

Toggle the behavior with `/custom-status`.

## Tests

```bash
bun test status/tests/*.test.ts
```
npm package: @siddr/pi-web-search
Description: Brave web search tool extension for pi
Latest version: 0.1.3

# Web Search (Brave) Extension

Adds a `web_search` tool backed by the Brave Search API. Results include titles, URLs, snippets, and age when available. This extension does not fetch page content.

## Setup (recommended)

1. Get an API key from https://api-dashboard.search.brave.com.
2. In pi, run:

```
/web-search-setup
```

Paste your primary API key when prompted. You can optionally add a fallback key (used when the primary key hits rate limits).

### Setup commands

- `/web-search-setup` — prompts for primary key, then optional fallback
- `/web-search-setup primary` — set/replace primary only
- `/web-search-setup fallback` — set/replace fallback only

## Advanced setup (manual secrets)

You can also set keys directly in `~/.pi/agent/auth.json`:

```json
{
  "brave-search": { "type": "api_key", "key": "PRIMARY_KEY" },
  "brave-search-fallback": { "type": "api_key", "key": "FALLBACK_KEY" }
}
```

If `auth.json` already has entries, merge these keys instead of overwriting the file.

## Install

```bash
pi install npm:@siddr/pi-web-search
```

## Tool

### `web_search`

Parameters:
- `query` (string) — single search query
- `queries` (string[]) — multiple search queries
- `count` (number, optional) — results **per query** (max 20)

Defaults:
- Single query: `count = 10`
- Multiple queries: `count = 5` unless overridden

Behavior:
- Multiple queries return grouped results per query.
- Use `Ctrl+O` to expand tool output and show snippets.
- Output is truncated to 2000 lines or 50KB. When truncated, the full output is saved to a temp file and its path is included in the tool output.

### Example prompts

```
Search for "brave search api" and summarize the top results.
Search for the following: queries=["pi coding agent extensions", "brave search api pricing"].
Search for "rust async runtime" with count=8.
```
npm package: @side-quest/biome-runner
Description: Biome linter & formatter MCP server — structured diagnostics for Claude Code
Author: Nathan Vale
Latest version: 1.0.4

# @side-quest/biome-runner

Biome linter & formatter MCP server for Claude Code. Structured diagnostics with auto-fix support.

## Tools

- `biome_lintCheck` — Check for lint issues (read-only)
- `biome_lintFix` — Auto-fix lint and formatting issues
- `biome_formatCheck` — Check formatting (read-only)

## Usage

```bash
bunx --bun @side-quest/biome-runner
```

Or in `.mcp.json`:

```json
{
  "mcpServers": {
    "biome-runner": {
      "command": "bunx",
      "args": ["--bun", "@side-quest/biome-runner"]
    }
  }
}
```

## Response Format

All tools accept a `response_format` parameter (`"markdown"` or `"json"`). Use `"json"` for token-efficient structured output in agent pipelines.

## License

MIT
npm package: @side-quest/bun-runner
Description: Bun test runner MCP server — structured, token-efficient test output for Claude Code
Author: Nathan Vale
Latest version: 1.0.5

# @side-quest/bun-runner

Bun test runner MCP server for Claude Code. Runs tests with structured, token-efficient output.

## Tools

- `bun_runTests` — Run tests with optional pattern filter
- `bun_testFile` — Run specific test file
- `bun_testCoverage` — Run tests with coverage report

## Usage

```bash
bunx --bun @side-quest/bun-runner
```

Or in `.mcp.json`:

```json
{
  "mcpServers": {
    "bun-runner": {
      "command": "bunx",
      "args": ["--bun", "@side-quest/bun-runner"]
    }
  }
}
```

## Response Format

All tools accept a `response_format` parameter (`"markdown"` or `"json"`). Use `"json"` for token-efficient structured output in agent pipelines.

## License

MIT
npm package: @side-quest/claude-hooks
Description: Claude Code hook dedup adapter for side-quest runners
Author: Nathan Vale
Latest version: 0.1.0

# @side-quest/claude-hooks

Claude Code hook adapter for deduplicating runner diagnostics with MCP output.

## Usage

```bash
sq-claude-hook pretool
sq-claude-hook posttool
sq-claude-hook posttool-failure
```

## Environment

- `SQ_HOOK_DEDUP_ENABLED`: `1` enables dedup behavior (`0` by default)
- `SQ_HOOK_EVENT_TTL_MS`: dedup TTL in milliseconds (default `60000`)
- `HOOK_STDIN_MAX_BYTES`: maximum stdin payload size (default `4194304`)

## License

MIT
npm package: @side-quest/kit
Description: Kit CLI integration for intelligent code search - MCP server with 7 tools for token-efficient codebase navigation
Author: Nathan Vale
Latest version: 0.2.0

# @side-quest/kit

MCP server with 7 tools for token-efficient codebase navigation using the [Kit CLI](https://github.com/cased/kit) (cased-kit).

Uses PROJECT_INDEX.json for up to 50x token savings compared to reading full source files.

## Prerequisites

Install the Kit CLI:

```bash
# Basic installation
uv tool install cased-kit

# With ML dependencies (required for semantic search)
uv tool install 'cased-kit[ml]'
```

## Installation

```bash
npm install @side-quest/kit
```

## MCP Server Configuration

Add to your Claude Code MCP config:

```json
{
  "mcpServers": {
    "kit": {
      "command": "bunx",
      "args": ["--bun", "@side-quest/kit"]
    }
  }
}
```

## MCP Tools

### kit_prime

Generate or refresh the PROJECT_INDEX.json file for a repository. Run this first to enable token-efficient symbol lookup.

### kit_find

Look up symbol definitions or get an overview of all symbols in a file from the PROJECT_INDEX.json index. Supports exact and fuzzy matching.

### kit_references

Find all references to a symbol - callers, usages, or both. Supports three modes: `all`, `callers_only`, and `definitions_only`.

### kit_semantic

Semantic code search using vector embeddings. Falls back to grep-based search if the ML index is not available. Supports `chunk_by` parameter for different chunking strategies.

### kit_ast_search

Structural code search using Tree-sitter AST parsing. Search for patterns like "async functions that call fetch" or specific code structures using `simple` or `pattern` mode.

### kit_context

Extract the full enclosing definition (function, class, method) around a specific file and line number. Useful for getting complete context without reading entire files.

### kit_chunk

Split a source file into LLM-friendly chunks. Supports two strategies:
- `symbols` - chunk at function/class boundaries (default)
- `lines` - chunk by line count with configurable `max_lines`

## CLI

The package also includes a CLI for direct terminal usage:

```bash
# Generate index
side-quest-kit prime [path]

# Find symbols
side-quest-kit find <symbol> [--format json|markdown]

# Search semantically
side-quest-kit search <query> [--top-k 10]

# Find callers
side-quest-kit callers <symbol> [--format json|markdown]
```

## Development

```bash
bun install
bun test
bun run build
bun run validate    # Full quality check (lint + types + build + test)
```

## License

MIT
npm package: @side-quest/tsc-runner
Description: TypeScript type checker MCP server — structured diagnostics for Claude Code
Author: Nathan Vale
Latest version: 1.0.4

# @side-quest/tsc-runner

TypeScript type checker MCP server for Claude Code. Structured diagnostics with tsconfig auto-detection.

## Tools

- `tsc_check` — Run TypeScript type checking using nearest tsconfig/jsconfig

## Usage

```bash
bunx --bun @side-quest/tsc-runner
```

Or in `.mcp.json`:

```json
{
  "mcpServers": {
    "tsc-runner": {
      "command": "bunx",
      "args": ["--bun", "@side-quest/tsc-runner"]
    }
  }
}
```

## Response Format

All tools accept a `response_format` parameter (`"markdown"` or `"json"`). Use `"json"` for token-efficient structured output in agent pipelines.

## License

MIT
npm package: @side-quest/x-api
Description: Read-only Twitter/X API v2 — tweets, threads, timelines, user profiles
Author: Nathan Vale
Latest version: 0.2.0

# @side-quest/x-api

Read-only Twitter/X API v2 — tweets, threads, timelines, user profiles. Published as both an npm library and an MCP server for Claude Code.

## Quick Start (Claude Code)

```bash
claude mcp add -e X_BEARER_TOKEN=your-token-here x-api -- bunx --bun @side-quest/x-api
```

That's it. The MCP tools are now available in Claude Code.

### Get a Bearer Token

1. Go to the [Twitter Developer Portal](https://developer.x.com/en/portal/dashboard)
2. Create a project and app
3. Generate a **Bearer Token** (read-only access is sufficient)

## MCP Tools

| Tool | Description |
|------|-------------|
| `x_get_tweet` | Get a single tweet by ID with author info and engagement metrics |
| `x_get_thread` | Get a full conversation thread from a tweet ID |
| `x_get_timeline` | Get a user's recent tweets by username |
| `x_get_user` | Get a user profile — bio, follower counts, tweet count |
| `x_get_replies` | Get replies to a specific tweet |
| `x_search` | Search recent tweets (7-day window) |

## Claude Desktop

### One-Click Install (Desktop Extension)

Download the latest `x-api.mcpb` from [GitHub Releases](https://github.com/nathanvale/side-quest-x-api/releases) and double-click to install. Claude Desktop will prompt you for your Bearer Token.

### Manual Setup

Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS):

```json
{
  "mcpServers": {
    "x-api": {
      "command": "bunx",
      "args": ["--bun", "@side-quest/x-api"],
      "env": {
        "X_BEARER_TOKEN": "your-token-here"
      }
    }
  }
}
```

### Environment Variable

Instead of hardcoding the token, set it in your shell:

```bash
export X_BEARER_TOKEN="your-token-here"
```

Then use `${X_BEARER_TOKEN}` in the config:

```bash
claude mcp add -e X_BEARER_TOKEN='${X_BEARER_TOKEN}' x-api -- bunx --bun @side-quest/x-api
```

## Library Usage

```typescript
import { createXApiClient } from '@side-quest/x-api';

const client = createXApiClient({ bearerToken: process.env.X_BEARER_TOKEN });

const user = await client.getUser('elonmusk');
const tweets = await client.getTimeline('elonmusk', { maxResults: 10 });
const tweet = await client.getTweet('1234567890');
```

## License

MIT
npm package: @side/jest-runtime
Description: Custom runtime for Jest which addresses memory leak issue
Author: Side Engineering
Latest version: 1.1.0

<div align="center">
   <h1>@side/jest-runtime</h1>
   <div>Custom runtime for Jest which addresses memory leak when using Typescript</div>
   </br>
</div>

<div align="center">

   <!-- TODO: Uncomment public package specific badges below -->
   <!-- [![NPM version][npm-image]][npm-url]
   [![License][license-image]][license-url] -->

[![Build Status][build-status-image]][build-status-url]
[![Coverage][coverage-image]][coverage-url]
[![semantic-release][semantic-release-icon]][semantic-release-url]
[![Code Style][code-style-image]][code-style-url]

</div>

**NOTE** This package was intentionally left as JS instead of being converted to TS because it is only a slight modification of existing Jest code based [on this PR](https://github.com/facebook/jest/pull/12205/files#diff-c0d5b59e96fdc7ffc98405e8afb46d525505bc7b1c24916b5c8482de5a186c00R9)

1. Install SWC if you haven't already `@swc/core @swc/jest`
1. Make sure to configure SWC if you haven't already:

   ```
   {
      "jsc": {
         "parser": {
            "syntax": "typescript",
            "decorators": true
         },
         "transform": {
            "legacyDecorator": true,
            "decoratorMetadata": true
         }
      }
   }
   ```

1. Install custom runtime: `yarn add @side/jest-runtime`
1. Use within `jest.config.js`:
   ```js
   module.exports = {
     transform: {
       '^.+\\.ts$': '@swc/jest',
     },
     runtime: '@side/jest-runtime',
   };
   ```

### Why?

We were seeing memory leaks using ts-jest with node >16.10. When investigating solutions [this PR fixing the issue was noticed](https://github.com/facebook/jest/pull/12205/files#diff-c0d5b59e96fdc7ffc98405e8afb46d525505bc7b1c24916b5c8482de5a186c00R9). Since it hasn't been merged, and we still wanted to share this logic, we created this lib.

[npm-image]: https://img.shields.io/npm/v/@side/jest-runtime.svg?style=flat-square
[npm-url]: https://npmjs.org/package/@side/jest-runtime
[build-status-image]: https://github.com/reside-eng/jest-runtime/actions/workflows/release.yml/badge.svg
[build-status-url]: https://github.com/reside-eng/jest-runtime/actions
[license-image]: https://img.shields.io/npm/l/@side/jest-runtime.svg?style=flat-square
[license-url]: https://github.com/reside-eng/jest-runtime/blob/main/LICENSE
[code-style-image]: https://img.shields.io/badge/code%20style-airbnb-blue.svg?style=flat-square
[code-style-url]: https://github.com/airbnb/javascript
[semantic-release-icon]: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square
[semantic-release-url]: https://github.com/semantic-release/semantic-release
[coverage-image]: https://coveralls.io/repos/github/reside-eng/jest-runtime/badge.svg?branch=main&t=w0cgzF
[coverage-url]: https://coveralls.io/github/reside-eng/jest-runtime?branch=main
npm package: @side/prettier-config
Description: Standard Prettier configuration for Side projects
Latest version: 1.1.0

# `@side/prettier-config`

This is a [shared configuration][shared] for [Prettier][prettier] that is used within JavaScript, Node.js, and TypeScript projects across `reside-eng`.

## Setup

### Install Prettier with Shared Configuration

Install Prettier and this shared configuration package.

```bash
yarn add -D prettier @side/prettier-config
```

Then, update package.json to instruct Prettier to use the shared configuration.

```jsonc
// package.json
{
  "prettier": "@side/prettier-config",
}
```

### Configure ESLint

If using ESLint, install Prettier's ESLint config.

```bash
yarn add -D eslint-config-prettier
```

Then, include it in your ESLint configuration file.

```jsonc
// .eslintrc.json (or .eslintrc, .eslintrc.js, etc.)
{
  "extends": [
    "foo",
    "bar",
    "prettier", // `prettier` should always be last in `extends`
  ],
}
```

### Configure lint-staged

If using lint-staged, update its configuration to run Prettier **_after_** ESLint.

```jsonc
// package.json
{
  "lint-staged": {
    "*.{js,ts}": ["eslint --fix"],
    "*.{js,jsx,ts,tsx,yaml,yml,json,html,css}": ["prettier --write"],
  },
}
```

### Add Helper Scripts

It can be helpful to have scripts that apply and validate formatting with Prettier. Here are two examples that can be added to package.json:

```jsonc
// package.json
{
  "scripts": {
    "format": "prettier --write .",
    "format:check": "prettier --check .",
  },
}
```

The `format:check` script can be used within a CI workflow to validate formatting. If a file does not have the correct formatting, the script will return a failing exit code.

[prettier]: https://prettier.io 'Prettier'
[shared]: https://prettier.io/docs/en/configuration.html#sharing-configurations 'Sharing Configurations'