Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions .beads/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# SQLite databases
*.db
*.db?*
*.db-journal
*.db-wal
*.db-shm

# Daemon runtime files
daemon.lock
daemon.log
daemon.pid
bd.sock
sync-state.json
last-touched

# Local version tracking (prevents upgrade notification spam after git ops)
.local_version

# Legacy database files
db.sqlite
bd.db

# Worktree redirect file (contains relative path to main repo's .beads/)
# Must not be committed as paths would be wrong in other clones
redirect

# Merge artifacts (temporary files from 3-way merge)
beads.base.jsonl
beads.base.meta.json
beads.left.jsonl
beads.left.meta.json
beads.right.jsonl
beads.right.meta.json

# Sync state (local-only, per-machine)
# These files are machine-specific and should not be shared across clones
.sync.lock
sync_base.jsonl

# NOTE: Do NOT add negation patterns (e.g., !issues.jsonl) here.
# They would override fork protection in .git/info/exclude, allowing
# contributors to accidentally commit upstream issue databases.
# The JSONL files (issues.jsonl, interactions.jsonl) and config files
# are tracked by git by default since no pattern above ignores them.
81 changes: 81 additions & 0 deletions .beads/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# Beads - AI-Native Issue Tracking

Welcome to Beads! This repository uses **Beads** for issue tracking - a modern, AI-native tool designed to live directly in your codebase alongside your code.

## What is Beads?

Beads is issue tracking that lives in your repo, making it perfect for AI coding agents and developers who want their issues close to their code. No web UI required - everything works through the CLI and integrates seamlessly with git.

**Learn more:** [github.com/steveyegge/beads](https://github.com/steveyegge/beads)

## Quick Start

### Essential Commands

```bash
# Create new issues
bd create "Add user authentication"

# View all issues
bd list

# View issue details
bd show <issue-id>

# Update issue status
bd update <issue-id> --status in_progress
bd update <issue-id> --status done

# Sync with git remote
bd sync
```

### Working with Issues

Issues in Beads are:
- **Git-native**: Stored in `.beads/issues.jsonl` and synced like code
- **AI-friendly**: CLI-first design works perfectly with AI coding agents
- **Branch-aware**: Issues can follow your branch workflow
- **Always in sync**: Auto-syncs with your commits

## Why Beads?

**AI-Native Design**
- Built specifically for AI-assisted development workflows
- CLI-first interface works seamlessly with AI coding agents
- No context switching to web UIs

🚀 **Developer Focused**
- Issues live in your repo, right next to your code
- Works offline, syncs when you push
- Fast, lightweight, and stays out of your way

🔧 **Git Integration**
- Automatic sync with git commits
- Branch-aware issue tracking
- Intelligent JSONL merge resolution

## Get Started with Beads

Try Beads in your own projects:

```bash
# Install Beads
curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash

# Initialize in your repo
bd init

# Create your first issue
bd create "Try out Beads"
```

## Learn More

- **Documentation**: [github.com/steveyegge/beads/docs](https://github.com/steveyegge/beads/tree/main/docs)
- **Quick Start Guide**: Run `bd quickstart`
- **Examples**: [github.com/steveyegge/beads/examples](https://github.com/steveyegge/beads/tree/main/examples)

---

*Beads: Issue tracking that moves at the speed of thought*
62 changes: 62 additions & 0 deletions .beads/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Beads Configuration File
# This file configures default behavior for all bd commands in this repository
# All settings can also be set via environment variables (BD_* prefix)
# or overridden with command-line flags

# Issue prefix for this repository (used by bd init)
# If not set, bd init will auto-detect from directory name
# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
# issue-prefix: ""

# Use no-db mode: load from JSONL, no SQLite, write back after each command
# When true, bd will use .beads/issues.jsonl as the source of truth
# instead of SQLite database
# no-db: false

# Disable daemon for RPC communication (forces direct database access)
# no-daemon: false

# Disable auto-flush of database to JSONL after mutations
# no-auto-flush: false

# Disable auto-import from JSONL when it's newer than database
# no-auto-import: false

# Enable JSON output by default
# json: false

# Default actor for audit trails (overridden by BD_ACTOR or --actor)
# actor: ""

# Path to database (overridden by BEADS_DB or --db)
# db: ""

# Auto-start daemon if not running (can also use BEADS_AUTO_START_DAEMON)
# auto-start-daemon: true

# Debounce interval for auto-flush (can also use BEADS_FLUSH_DEBOUNCE)
# flush-debounce: "5s"

# Git branch for beads commits (bd sync will commit to this branch)
# IMPORTANT: Set this for team projects so all clones use the same sync branch.
# This setting persists across clones (unlike database config which is gitignored).
# Can also use BEADS_SYNC_BRANCH env var for local override.
# If not set, bd sync will require you to run 'bd config set sync.branch <branch>'.
# sync-branch: "beads-sync"

# Multi-repo configuration (experimental - bd-307)
# Allows hydrating from multiple repositories and routing writes to the correct JSONL
# repos:
# primary: "." # Primary repo (where this database lives)
# additional: # Additional repos to hydrate from (read-only)
# - ~/beads-planning # Personal planning repo
# - ~/work-planning # Work planning repo

# Integration settings (access with 'bd config get/set')
# These are stored in the database, not in this file:
# - jira.url
# - jira.project
# - linear.url
# - linear.api-key
# - github.org
# - github.repo
Empty file added .beads/interactions.jsonl
Empty file.
8 changes: 8 additions & 0 deletions .beads/issues.jsonl
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{"id":"vimput-21l","title":"Fix: Navegação com J em linhas vazias não funciona","description":"Não é possível navegar para linhas vazias usando J (ou k). Quando há linhas em branco, o cursor não consegue descer/subir para elas.","status":"closed","priority":2,"issue_type":"bug","owner":"mvacoimbra.dev@gmail.com","created_at":"2026-01-26T17:40:51.630718-03:00","created_by":"mvacoimbra","updated_at":"2026-01-26T18:03:54.757076-03:00","closed_at":"2026-01-26T18:03:54.757076-03:00","close_reason":"Fixed cursor rendering on empty lines"}
{"id":"vimput-2jf","title":"Fix: Enter no insert mode cria linha no lugar errado","description":"No insert mode, quando o cursor está no meio de uma linha e o usuário pressiona Enter, a quebra de linha deveria ser inserida exatamente onde o cursor está, mas está criando a linha embaixo da última linha.","status":"closed","priority":2,"issue_type":"bug","owner":"mvacoimbra.dev@gmail.com","created_at":"2026-01-26T17:40:51.376161-03:00","created_by":"mvacoimbra","updated_at":"2026-01-26T18:03:54.431016-03:00","closed_at":"2026-01-26T18:03:54.431016-03:00","close_reason":"Fixed cursor rendering on empty lines"}
{"id":"vimput-bzx","title":"Setting para controlar indentação (tab/espaços)","description":"Adicionar configuração para controlar indentação: escolher entre tab ou espaços, e quantos caracteres usar.","status":"open","priority":2,"issue_type":"feature","owner":"mvacoimbra.dev@gmail.com","created_at":"2026-01-27T09:07:25.005439-03:00","created_by":"mvacoimbra","updated_at":"2026-01-27T09:07:25.005439-03:00"}
{"id":"vimput-d8x","title":"Cursor só pisca em idle","description":"O cursor deve parar de piscar quando o usuário está movimentando ou digitando. Ele só deve piscar quando está em idle (sem atividade).","status":"closed","priority":2,"issue_type":"feature","owner":"mvacoimbra.dev@gmail.com","created_at":"2026-01-26T17:40:52.309519-03:00","created_by":"mvacoimbra","updated_at":"2026-01-26T18:08:53.543475-03:00","closed_at":"2026-01-26T18:08:53.543475-03:00","close_reason":"Cursor now only blinks when idle and uses element-based rendering"}
{"id":"vimput-l50","title":"Add code formatter (Prettier + sql-formatter)","description":"Add code formatting support to the editor.\n\n## Libraries\n- **Prettier** (standalone): JS, TS, JSX, TSX, CSS, HTML, JSON, Markdown, YAML, GraphQL\n- **sql-formatter**: SQL\n\n## Features\n- Command `:fmt` or `:format` to format current buffer\n- Shortcut `\u003cSpace\u003ecf` in normal mode (leader + code + format)\n- Respect user's indentation settings (indentType: tabs/spaces, indentSize: 2/4/8)\n- Opt-in setting with privacy disclaimer\n\n## UX for unsupported languages\n- Show alert/message in status bar when user tries to format unsupported language\n- Add icon or tooltip in language selector indicating formatter support\n\n## Implementation Progress\n\n### Done\n- [x] Added `formatterEnabled` setting (opt-in, disabled by default)\n- [x] Added UI in Settings \u003e Editor with privacy disclaimer\n- [x] Added `:fmt` and `:format` commands in vimEngine\n- [x] Added `\u003cSpace\u003ecf` shortcut in normal mode\n- [x] Added `pendingAction` to VimState for component communication\n- [x] Added status bar messages for formatting feedback\n- [x] Added sparkle icon in language selector (shows when formatter enabled)\n- [x] Created formatter.ts with Prettier + sql-formatter integration\n\n### Blocked\n- **Chrome UTF-8 encoding error**: When bundling Prettier (~2MB), Chrome fails to load content script with \"Could not load file 'content-scripts/content.js' for content script. It isn't UTF-8 encoded.\"\n- CDN approach (esm.sh) blocked by page CSP policies\n- File validates as ASCII/UTF-8 with `file` command and Node.js syntax check passes\n\n## Next Steps to Try\n1. **Web Worker approach**: Move Prettier to a separate web accessible resource loaded via Web Worker\n2. **Investigate Prettier plugins**: Some plugins (especially TypeScript at 874KB) may contain problematic characters\n3. **Try alternative bundler settings**: Different minification or encoding options\n4. **Consider lighter alternatives**: Use only sql-formatter (works) and simpler JS formatter\n\n## Technical Notes\n- sql-formatter works fine when bundled (~300KB)\n- Prettier standalone + all plugins = ~2MB\n- TypeScript plugin alone is 874KB\n- Dynamic imports from CDN blocked by strict CSP on many sites","status":"closed","priority":2,"issue_type":"feature","owner":"mvacoimbra.dev@gmail.com","created_at":"2026-01-28T00:59:32.155309-03:00","created_by":"mvacoimbra","updated_at":"2026-01-28T02:01:21.120647-03:00","closed_at":"2026-01-28T02:01:21.120647-03:00","close_reason":"Implemented local Python formatter worker approach to bypass Chrome UTF-8 bundling issues"}
{"id":"vimput-rej","title":"Add indentation settings","description":"Add user-configurable indentation settings to the extension.\n\n## Requirements\n- Allow users to configure:\n - Indentation type (tabs vs spaces)\n - Indentation size (2, 4, 8 spaces)\n- Settings should be persisted in browser.storage.sync\n- Settings should be accessible from the popup settings panel\n\n## Implementation\n- Add new fields to configStore.ts\n- Update SettingsPanel.tsx with new UI controls\n- Apply indentation settings in VimputEditor.tsx","status":"closed","priority":2,"issue_type":"feature","owner":"mvacoimbra.dev@gmail.com","created_at":"2026-01-27T22:27:07.179345-03:00","created_by":"mvacoimbra","updated_at":"2026-01-28T00:14:59.834224-03:00","closed_at":"2026-01-28T00:14:59.834224-03:00","close_reason":"Implemented indentation settings: added indentType (tabs/spaces) and indentSize (2/4/8) to configStore, SettingsPanel UI, and VimputEditor Tab handling"}
{"id":"vimput-sp2","title":"Debug: Compatibilidade com TypeScript Playground","description":"O editor não funciona corretamente com o TypeScript Playground (typescriptlang.org/play). Investigar a integração com editores baseados em Monaco/VS Code.","status":"closed","priority":2,"issue_type":"bug","owner":"mvacoimbra.dev@gmail.com","created_at":"2026-01-26T17:40:51.859149-03:00","created_by":"mvacoimbra","updated_at":"2026-01-27T11:50:52.440637-03:00","closed_at":"2026-01-27T11:50:52.440637-03:00","close_reason":"Closed"}
{"id":"vimput-ztw","title":"Debug: Compatibilidade com editor da Udemy","description":"O editor não funciona corretamente com o editor de código da Udemy. Investigar a integração com esse editor específico.","status":"closed","priority":2,"issue_type":"bug","owner":"mvacoimbra.dev@gmail.com","created_at":"2026-01-26T17:40:52.081289-03:00","created_by":"mvacoimbra","updated_at":"2026-01-27T09:07:23.975834-03:00","closed_at":"2026-01-27T09:07:23.975834-03:00","close_reason":"Added Ace Editor support"}
4 changes: 4 additions & 0 deletions .beads/metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"database": "beads.db",
"jsonl_export": "issues.jsonl"
}
27 changes: 27 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# GitHub Actions Secrets for Store Deployment
# Copy these to your repository secrets in GitHub Settings > Secrets and variables > Actions

# ============================================
# Chrome Web Store (Service Account)
# ============================================
# 1. Create a service account in Google Cloud Console
# 2. Enable Chrome Web Store API
# 3. Add the service account email to your Chrome Web Store publisher account
# (Settings > Group publishers > Add member)
# 4. Copy the entire JSON key file content as the secret value

CHROME_SERVICE_ACCOUNT_KEY={"type":"service_account","project_id":"...","private_key":"..."}

# Set as repository variable (Settings > Secrets and variables > Variables):
# CHROME_EXTENSION_ID=your-extension-id-from-chrome-web-store

# ============================================
# Firefox Add-ons (AMO)
# ============================================
# Get API credentials: https://addons.mozilla.org/developers/addon/api/key/

AMO_JWT_ISSUER=user:12345678:123
AMO_JWT_SECRET=your-api-secret

# Set as repository variable (not secret):
# AMO_EXTENSION_ID=vimput@extension
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@

# Use bd merge for beads JSONL files
.beads/issues.jsonl merge=beads
Loading