npm package: @jinana/opencode-my-custom-audio
Description: Custom audio notifications for OpenCode using my kids' voice recordings
Author: dominikake
Latest version: 1.1.1

# OpenCode My Custom Audio

Custom audio notifications plugin for OpenCode using my kids' voice recordings.

## Features

- Plays custom voice recordings when OpenCode events occur
- Supports idle, cancelled, error, and tool completion sounds
- Custom sounds directory support for adding your own sounds
- Weighted random selection between default and custom sounds
- Toast notifications with event messages

## Events Handled

- `session.idle` - Work complete
- `session.deleted` - Session cancelled
- `session.error` - Error occurred
- `tool.execute.after` - Tool execution completed

## Installation

### Option 1: npm link (for development)

```bash
# Link the package locally
cd /path/to/opencode-my-custom-audio
npm link

# Or install from GitHub
npm install jinana/opencode-my-custom-audio
```

### Option 2: Build from source

```bash
# Clone and build
git clone https://github.com/jinana/opencode-my-custom-audio.git
cd opencode-my-custom-audio
npm install
npm run build
```

## OpenCode Configuration

Add the plugin to your OpenCode config at `~/.config/opencode/plugin.json`:

```json
{
  "plugins": ["@jinana/opencode-my-custom-audio"],
  "@jinana/opencode-my-custom-audio": {
    "soundsDir": "~/.config/opencode/my-custom-audio/sounds",
    "volume": 1.0,
    "enabled": true,
    "showToast": true,
    "voiceWeights": {
      "default": 50,
      "custom": 50
    }
  }
}
```

Or reference a local build:

```json
{
  "plugins": ["/path/to/opencode-my-custom-audio/dist/index.js"]
}
```

## Configuration Options

| Option                 | Type    | Default                                     | Description                           |
| ---------------------- | ------- | ------------------------------------------- | ------------------------------------- |
| `soundsDir`            | string  | `~/.config/opencode/my-custom-audio/sounds` | Custom sounds directory               |
| `volume`               | number  | 1.0                                         | Volume level (0.0 - 1.0)              |
| `enabled`              | boolean | true                                        | Enable/disable the plugin             |
| `showToast`            | boolean | true                                        | Show toast notifications              |
| `idleSound`            | string  | -                                           | Custom sound file for idle event      |
| `cancelledSound`       | string  | -                                           | Custom sound file for cancelled event |
| `errorSound`           | string  | -                                           | Custom sound file for error event     |
| `toolSound`            | string  | -                                           | Custom sound file for tool event      |
| `voiceWeights.default` | number  | 50                                          | Weight for default sounds (%)         |
| `voiceWeights.custom`  | number  | 50                                          | Weight for custom sounds (%)          |

## Custom Sounds

To add custom sounds, create a directory structure in your sounds directory:

```
~/.config/opencode/my-custom-audio/sounds/
├── idle/
│   └── your_idle_sound.wav
├── cancelled/
│   └── your_cancelled_sound.wav
├── error/
│   └── your_error_sound.wav
└── tool/
    └── your_tool_sound.wav
```

Supported formats: WAV, MP3, OGG

## Default Sounds

The plugin comes bundled with these default sounds:

- **Idle**: Work complete voice
- **Cancelled**: Change my mind sound
- **Error**: Laugh sound
- **Tool**: Tools call / Orc sound

## Requirements

- OpenCode
- Linux with PulseAudio (paplay) for sound playback
- or macOS (afplay)
- or Windows (not yet implemented)

## Development

```bash
# Install dependencies
npm install

# Build
npm run build

# Lint
npm run lint
```

## License

MIT