Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions .agents/plans/PLANS.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ Persistent plans for multi-step work on **blxcode**. Individual plans live as Ma
| done | [skills-rules-tabs.md](skills-rules-tabs.md) | Neue RightPanel-Tabs für Skills & Rules: Card-Liste mit Toggle, Skill-Install-Dialog (git/npm/local), agent toolcalls (list/read/write/enable/remove/install), index.json pro Bereich, System-Prompt-Update |
| done | [terminal-agent-context-handoff.md](terminal-agent-context-handoff.md) | BLXCode Agent kann aktuellen Kontext gezielt per Toolcall an Terminal-Agent-Sessions uebergeben; Bilder werden als Metadaten plus lokale Pfade exportiert |
| planned | [plan-manager.md](plan-manager.md) | Plan Manager fuer `.agents/plans`: Manage-Tab wie Memory Files, plan-linked Tasks gruppiert, Agent-Toolcalls, System-Prompt-Update und shared Context fuer BLXCode Agent plus Terminal-Handoff |
| planned | [kanban-board-view.md](kanban-board-view.md) | Kanban-View im Plans-Panel fuer alle Plan-Tasks eines Workspaces: Status-Spalten, Drag-and-Drop fuer Karten und Spalten, Spalten ein-/ausblenden und Markdown-Writeback |
94 changes: 94 additions & 0 deletions .agents/plans/kanban-board-view.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# Kanban Board View fuer Plan-Tasks

## Summary

Ergaenze im bestehenden Plans-Panel eine schnell umschaltbare Kanban-Ansicht fuer alle Plan-Tasks eines Workspaces. Die Datenquelle bleiben die Markdown-Plaene unter `.agents/plans/*.md`; `PLANS.md` ist weiter der geschuetzte Index und wird fuer Kanban-Tasks ignoriert.

Die Kanban-Spalten sind fest an die vorhandenen Task-Statuswerte gebunden: pending, in progress, blocked, completed und cancelled. User koennen Spalten per Drag and Drop umsortieren und leere Spalten ausblenden oder wieder einblenden. Task-Karten koennen per Drag and Drop zwischen Spalten verschoben werden; das aktualisiert den Task-Status und schreibt den passenden Marker zurueck in die jeweilige Plan-Markdown-Datei.

## Decisions

- Es gibt keine frei definierbaren neuen Statuswerte.
- "Boards anlegen/entfernen/bewegen" wird als Spaltenverwaltung interpretiert, nicht als mehrere unabhaengige Boards.
- Kanban zeigt alle Tasks aus Nicht-Index-Plaenen im aktiven Workspace.
- Freie Tasks ohne `planPath` bleiben ausserhalb dieser Kanban-View.

## Implementation Notes

### Backend

- Neues fokussiertes Kanban/Plan-Task-Modul anlegen, statt `plans.rs` weiter wachsen zu lassen.
- Workspace-Konfiguration unter `.blxcode/kanban/index.json` speichern:
- `version`
- `columnOrder: TaskStatus[]`
- `hiddenColumns: TaskStatus[]`
- `cardOrder: { cardKey: string, rank: u32 }[]`
- Neue Tauri-Kommandos ergaenzen:
- `kanban_settings_get(workspaceCwd)`
- `kanban_settings_save(workspaceCwd, settings)`
- `plan_task_list_all(workspaceCwd)`
- `plan_task_create(workspaceCwd, planPath, status, title)`
- `plan_task_update(workspaceCwd, planPath, planTaskId, patch)`
- `plan_task_delete(workspaceCwd, planPath, planTaskId)`
- Plan-Task-Mutationen muessen die vorhandenen Parser/Rewriter aus `plans.rs` nutzen, damit Markdown-Syntax und Statusmarker konsistent bleiben.
- Wenn ein Kanban-Task bereits im `.blxcode/tasks`-Store gespiegelt ist, soll der Store best-effort mit aktualisiert werden.

### Frontend

- `PlansPanel` um einen View-Mode `Editor | Preview | Kanban` erweitern.
- Kanban als eigenen Komponentenordner unter `src/workbench/plans_panel/kanban/` umsetzen, inklusive eigener CSS-Datei.
- Typed IPC-Wrappers und Wire-Typen in `tauri_bridge.rs` ergaenzen.
- Kanban-Toggle in die bestehende Plans-Toolbar setzen.
- Board-Layout:
- horizontale Status-Spalten mit Scroll bei schmalem Right-Panel
- moderne, dichte Workspace-UI im bestehenden dunklen Theme
- Statusfarben: blau aktiv, gelb blocked, gruen completed, rot/gedaempft cancelled
- Karten zeigen Task-Titel, Plan-Badge/Pfad und Status-Akzent
- Spaltenverwaltung:
- Spalten-Drag-and-Drop persistiert `columnOrder`
- Ausblenden ist nur fuer leere Spalten erlaubt
- Wiedereinblenden erfolgt ueber ein kleines Columns-Menue
- Task-Management:
- Quick-add pro Spalte erstellt eine Task im Zielplan
- Zielplan-Auswahl im Kanban-Header
- Default-Zielplan: aktuell gewaehlter Nicht-Index-Plan, sonst `activePlanPath`, sonst erster Nicht-Index-Plan
- Karten-Drop in andere Spalte aktualisiert den Status im Plan-Markdown
- Karten-Drop innerhalb derselben Spalte aktualisiert nur die Kanban-Reihenfolge

## Public Interfaces

- Neue IPC-Typen:
- `KanbanSettings`
- `KanbanColumnStatus`
- `PlanTaskCard`
- `PlanTaskCreateInput`
- `PlanTaskUpdatePatch`
- Bestehende `TaskStatus`-Werte bleiben unveraendert.
- Bestehende `plan_load`, `plan_sync_from_tasks` und `tasks_update` bleiben kompatibel.
- I18n-Keys fuer Kanban-Toggle, Columns-Menue, Empty-State, Zielplan-Auswahl, Add/Delete und Drag-Fehler in allen Locale-Tabellen ergaenzen.

## Tests

- Backend:
- Kanban-Settings werden initial mit Default-Spalten erzeugt und persistiert.
- `plan_task_list_all` liest Tasks aus mehreren Nicht-Index-Plaenen und ignoriert `PLANS.md`.
- Status-Update schreibt korrekte Marker: `[ ]`, `[>]`, `[!]`, `[x]`, `[-]`.
- Task-Erstellung erzeugt stabile eindeutige `planTaskId`s und haengt an `## Tasks` an.
- Task-Loeschung entfernt nur die passende Task-Zeile und erhaelt andere Markdown-Abschnitte.
- Pfad-Sandboxing verhindert absolute Pfade, `..` und Nicht-Markdown-Ziele.
- Frontend:
- `cargo check -p blxcode-ui --target wasm32-unknown-unknown`
- `cargo check -p blxcode`
- Manuelle UI-Pruefung in Tauri/Trunk: Toggle Editor/Kanban, Karten-DnD, Spalten-DnD, Spalten aus-/einblenden, Quick-add.

## Tasks

- [ ] `backend-kanban-store` - Workspace Kanban settings store unter `.blxcode/kanban/index.json` implementieren.
- [ ] `backend-plan-task-api` - Plan-Task IPC fuer Listen, Erstellen, Aktualisieren und Loeschen ergaenzen.
- [ ] `backend-sync-tests` - Parser/Rewriter-, Sandbox- und Markdown-Writeback-Tests fuer Kanban-Mutationen abdecken.
- [ ] `frontend-kanban-module` - Kanban-Komponentenordner, typed IPC-Wrappers und View-Mode im Plans-Panel ergaenzen.
- [ ] `frontend-dnd-columns` - Spaltenreihenfolge, Ausblenden und Wiedereinblenden mit Drag and Drop und persistierter Config bauen.
- [ ] `frontend-dnd-cards` - Karten zwischen Status-Spalten und innerhalb von Spalten verschiebbar machen.
- [ ] `frontend-task-actions` - Quick-add, Zielplan-Auswahl und Delete/Edit-Aktionen fuer Kanban-Karten anbinden.
- [ ] `i18n-docs` - I18n-Keys und User/Developer-Dokumentation zur Kanban-View ergaenzen.
- [ ] `verification` - Cargo-Checks und manuelle UI-Pruefung durchfuehren.
88 changes: 88 additions & 0 deletions .agents/plans/leptos-0.8-upgrade.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# Plan: Leptos 0.7 → 0.8 + leptos_icons/icondata 0.5 → 0.7

## Status: IN PROGRESS — Cargo.toml already bumped, code not yet fixed

## Context

Upgrading the three coupled frontend deps:
- `leptos` 0.7.8 → 0.8.19
- `leptos_icons` 0.5 → 0.7.1 (requires leptos 0.8)
- `icondata` 0.5 → 0.7 (paired with leptos_icons)

Research confirmed **most leptos API is unchanged** between 0.7 and 0.8. The only true breaking change is in **leptos_icons**: the `icon` prop changed from a bare `icondata_core::Icon` value to `Signal<icondata_core::Icon>`.

---

## Breaking Changes

| Change | Scope | Fix |
|---|---|---|
| `leptos_icons::Icon` prop `icon:` changed from `icondata_core::Icon` to `Signal<icondata_core::Icon>` | 20 files | Wrap every `icon={icondata::LuX}` → `icon=Signal::derive(\|\| icondata::LuX)` |
| leptos prelude now also exports `write::*` (additive) | Possible name shadowing | Fix any name conflicts from compile errors |
| reactive_graph 0.1 → 0.2, tachys 0.1 → 0.2 | Internal | No code changes expected |

---

## Fix Pattern

```rust
// Before (leptos_icons 0.5):
<LxIcon icon={icondata::LuTerminal} width="16" height="16" />

// After (leptos_icons 0.7):
<LxIcon icon=Signal::derive(|| icondata::LuTerminal) width="16" height="16" />
```

`Signal` is already in scope via `leptos::prelude::*` — no extra import needed.

---

## Files to Update (20 files — all `<LxIcon icon={...}>` call sites)

All in `src/workbench/`:
1. `agent_context_handoff.rs`
2. `agent_panel/context_list.rs`
3. `agent_panel/mod.rs`
4. `agent_panel/timeline.rs` ← also has `fn -> icondata::Icon` return type — leave that alone
5. `agent_panel/voice_orb/mod.rs`
6. `create_workspace_wizard.rs`
7. `git_graph/mod.rs`
8. `harness_image_pane/mod.rs`
9. `harness_ui.rs`
10. `harness_voice_pane/mod.rs`
11. `memory_graph/mod.rs`
12. `memory_panel.rs`
13. `model_picker/mod.rs`
14. `plans_panel/mod.rs`
15. `project_explorer/mod.rs`
16. `right_panel.rs`
17. `skills_rules_panel/rules_tab.rs`
18. `skills_rules_panel/skills_tab.rs`
19. `terminal_cell.rs`
20. `workspace_panel.rs`

---

## Execution Steps

1. ~~Bump `leptos = "0.8"`, `leptos_icons = "0.7"`, `icondata = "0.7"` in `Cargo.toml`~~ ✅ Done
2. Run `cargo check -p blxcode-ui --target wasm32-unknown-unknown` — collect all errors
3. For each error: wrap `icondata::Lu*` in `Signal::derive(|| ...)`
4. Re-run `cargo check` — fix any residual errors
5. Final: `cargo check -p blxcode` + `cargo check -p blxcode-ui --target wasm32-unknown-unknown`

---

## APIs Confirmed Unchanged (no edits needed)

- `window_event_listener_untyped` — same (11 files safe)
- `mount_to_body()` — same
- `Effect::new()` — same (19 files safe)
- `spawn_local` at `leptos::task::spawn_local` — same (27 files safe)
- `on_cleanup` — same (14 files safe)
- `Callback<In, Out>` / `Callable` — same (8 files safe)
- `signal()`, `RwSignal::new()`, `.get()`, `.set()` — same
- `Signal::derive()`, `Memo::new()` — same
- `provide_context` / `expect_context` — same
- `NodeRef::<html::Div>`, `NodeRef::<html::Audio>` — same
- `Show`, `For` in `view!` macro — same
10 changes: 9 additions & 1 deletion .agents/skills/index.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@
"installedAt": "2026-05-20T11:32:10Z",
"updatedAt": "2026-05-20T11:32:10Z"
},
"manage-plans": {
"enabled": true,
"source": {
"kind": "local"
},
"installedAt": "2026-05-21T00:00:00Z",
"updatedAt": "2026-05-21T00:00:00Z"
},
"rust-async-patterns": {
"enabled": true,
"source": {
Expand All @@ -58,4 +66,4 @@
"updatedAt": "2026-05-20T11:32:10Z"
}
}
}
}
106 changes: 106 additions & 0 deletions .agents/skills/manage-plans/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
---
name: manage-plans
description: Create, update, and maintain BLXCode workspace plans under `.agents/plans/`. Use when Codex needs to add a new implementation plan, refine an existing plan, update plan task status, keep `PLANS.md` indexed, or explain the repository's Markdown plan format and task syntax to agents.
---

# Manage BLXCode Plans

## Core Rules

- Store durable plans in `.agents/plans/` as Markdown files.
- Keep `.agents/plans/PLANS.md` as the protected index. Do not delete or rename it.
- Use one focused plan file per feature, refactor, investigation, or multi-step implementation.
- Prefer lowercase hyphenated filenames ending in `.md`, for example `kanban-board-view.md`.
- Keep plans agent-actionable: concrete enough to implement, but not bloated with unrelated analysis.
- Update the plan as work changes. A stale plan is worse than no plan.

## Plan File Structure

Use this default structure for new plans:

```markdown
# Short Plan Title

## Summary

Briefly state the goal, current direction, and important constraints.

## Decisions

- Record product or technical decisions that should not be rediscovered.
- Include assumptions when the user has not explicitly decided something.

## Implementation Notes

- Describe the intended approach by subsystem or behavior.
- Mention important files only when needed to avoid ambiguity.
- Include public APIs, storage formats, commands, or UI contracts when they change.

## Tests

- List backend, frontend, integration, and manual checks expected for the work.

## Tasks

- [ ] `stable-task-id` - Concrete task title
```

Small plans may omit `Decisions` or `Implementation Notes` if they would be empty. Keep `Summary`, `Tests`, and `Tasks` whenever the plan is meant to guide implementation.

## Task Syntax

BLXCode parses plan tasks from a `## Tasks` section. `## Todos` is accepted, but prefer `## Tasks`.

Use exactly one task per line:

```markdown
- [ ] `task-id` - Pending task
- [>] `active-task` - In-progress task
- [!] `blocked-task` - Blocked task
- [x] `done-task` - Completed task
- [-] `cancelled-task` - Cancelled task
```

Status markers:

- `[ ]` pending
- `[>]` in progress
- `[!]` blocked
- `[x]` completed
- `[-]` cancelled

Task IDs must be stable, unique within the plan, lowercase where practical, and wrapped in backticks. Do not rename a task ID casually because BLXCode uses it to sync plan-linked tasks.

## Creating A New Plan

1. Check `.agents/plans/PLANS.md` and existing plan filenames to avoid duplicates.
2. Create a focused `.md` file under `.agents/plans/`.
3. Add a clear H1 title and the standard sections above.
4. Add concrete `## Tasks` entries using stable task IDs.
5. Add a row to `.agents/plans/PLANS.md` with status, link, and concise description.

Index row format:

```markdown
| planned | [new-plan.md](new-plan.md) | One-sentence description of the intended work |
```

Use `planned`, `active`, `blocked`, `done`, or `cancelled` in the index status column. Match the style already used in `PLANS.md`.

## Updating Existing Plans

- Update task status markers when work progresses.
- Add tasks when the implementation discovers real new work.
- Remove tasks only when they are invalid or superseded; prefer `[-]` for cancelled work with useful history.
- Keep the index row status aligned with the plan's actual state.
- Preserve unrelated sections and user-authored content.
- Avoid reformatting the whole file unless explicitly asked.

## Quality Bar

- Make each task independently actionable.
- Avoid vague tasks like "fix stuff" or "improve UI".
- Include edge cases and acceptance checks in `Tests`, not as hidden assumptions.
- For UI work, include expected user-visible behavior.
- For storage/API work, include compatibility and migration expectations.
- Do not include implementation details that are merely guesses if the repo can answer them; inspect first.
4 changes: 4 additions & 0 deletions .agents/skills/manage-plans/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Manage Plans"
short_description: "Create and maintain BLXCode Markdown plans."
default_prompt: "Create or update a BLXCode plan under .agents/plans using the repository plan format."
45 changes: 45 additions & 0 deletions .github/workflows/pr-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: PR Check

on:
pull_request:

jobs:
cargo-check:
name: cargo check
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown

- name: Cache cargo registry + build
uses: actions/cache@v4
with:
path: |
~/.cargo/registry/index
~/.cargo/registry/cache
~/.cargo/git/db
target
key: ${{ runner.os }}-cargo-check-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-cargo-check-

- name: Install Linux system deps (for cpal / Tauri)
run: |
sudo apt-get update -qq
sudo apt-get install -y --no-install-recommends \
libasound2-dev \
libgtk-3-dev \
libwebkit2gtk-4.1-dev \
libappindicator3-dev \
librsvg2-dev \
patchelf

- name: Check backend (blxcode)
run: cargo check -p blxcode

- name: Check frontend (blxcode-ui, WASM)
run: cargo check -p blxcode-ui --target wasm32-unknown-unknown
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Added

- **Interactive setup scripts**: platform-specific post-clone setup helpers under `scripts/setup/` for Linux, macOS and Windows. They install/check Rust, `wasm32-unknown-unknown`, Trunk, Tauri CLI, Node/npm frontend assets, OS-native Tauri dependencies, and optional verification/bundle builds.
- **Native release script counterparts**: PowerShell and Command Prompt release entrypoints (`scripts/release.ps1`, `scripts/release.cmd`, `scripts/release-windows.*`) plus a macOS launcher (`scripts/release-macos.sh`). The PowerShell modules under `scripts/release/*.ps1` mirror the Bash release pipeline for version bumps, CHANGELOG finalization, Tauri builds, artifact discovery, and GitHub uploads.

### Changed

- **Docs**: README, developer setup, build guide, and `.env.release.example` now document the setup and cross-platform release automation paths.

### Fixed

### Removed
Expand Down
Loading
Loading