open-index/open-npm huggingface dataset:
npm package: @residue/cli
Description: CLI that captures AI agent conversations and links them to git commits.
Latest version: 0.0.12

# @residue/cli

CLI that captures AI agent conversations and links them to git commits.

Part of [residue](https://residue.dev). See the [main README](../../README.md) for full setup instructions.

## Install

```bash
bun add -g @residue/cli
```

## Quick Start

```bash
# Save your worker URL and auth token
residue login --url https://your-worker.workers.dev --token YOUR_TOKEN

# Install git hooks in your repo
residue init

# Set up an agent adapter
residue setup claude-code    # for Claude Code
residue setup pi             # for pi coding agent
residue setup opencode       # for OpenCode
```

After setup, conversations are captured automatically. Commit and push as usual.

## Commands

Run `residue --help` for the full command list, or `residue <command> --help` for details on any command.

**User-facing:** `login`, `init`, `setup`, `push`, `status`, `clear`, `search`, `read`, `context`, `query sessions`, `query commits`, `query session <id>`, `query commit <sha>`.

**Hook-invoked (internal):** `capture`, `sync`, `session start`, `session end`, `hook claude-code`.

## Supported Agents

- **Claude Code**. Uses Claude Code's native hook system.
- **Pi**. Uses pi's extension system.
- **OpenCode**. Uses OpenCode's plugin system.

Run `residue setup <agent>` to configure any of them.

## License

MIT
npm package: @resin-js/render
Description: Optional rendering utilities for Resin.js. Build reactive components without the framework complexity.
Latest version: 0.1.2

# @resin-js/render

Optional rendering utilities for Resin.js. Build reactive components without the framework complexity.

## Features

- 🎨 Component-style rendering
- 📝 Template syntax
- 🔄 List rendering
- ⚡ Conditional rendering
- 🎯 Event handling

## Installation

```bash
npm install @resin-js/core @resin-js/render
```

## Usage

### Basic Rendering
```javascript
import { resin } from '@resin-js/core';

const greeting = resin('Hello World')
    .build()
    .classList('greeting')
    .render(ctx => `<h1>${ctx.value}</h1>`);

greeting.appendTo(document.body);
```

### List Rendering
```javascript
const todos = resin([
    { id: 1, text: 'Learn Resin', done: false },
    { id: 2, text: 'Write docs', done: false }
])
    .build()
    .filter(todo => !todo.done)
    .for((todo, ctx) => 
        todo
            .classList('todo-item')
            .render(ctx => `
                <li>${ctx.value.text}</li>
            `)
    )
    .render({
        element: 'ul',
        classList: ['todo-list']
    });
```

### Components
```javascript
import { component } from '@resin-js/render';

const TodoItem = component<{ text: string, done: boolean }>(props => {
    return resin(props)
        .build()
        .classList('todo-item', () => props.done && 'completed')
        .render(ctx => `
            <li>
                <span>${ctx.value.text}</span>
                <span>${ctx.value.done ? '✓' : '◯'}</span>
            </li>
        `);
});
```

## API Reference

### `build<T>(resin: Resin<T>): Renderable<T>`
Creates a renderable from a resin value.

### `Renderable<T>`
- `if(condition: Resin<boolean>)`: Conditional rendering
- `classList(...classes)`: Add CSS classes
- `render(template)`: Render content
- `appendTo(element)`: Mount to DOM

### `component<Props>(render: (props: Props) => Renderable<any>)`
Create reusable components.

## License

MIT