Hibryda
d1463d4d1e
feat(pro): wire all 7 Pro components into app
...
- ProjectBox: 5 Pro tabs (Analytics, Budget, Export, Symbols, Agent Mem)
with PERSISTED-LAZY mount, proStatus() feature gate, peach accent color
- SettingsPanel: Pro tab (Accounts + Marketplace) conditionally shown
- ProSettings.svelte: wrapper with sub-tabs for AccountSwitcher + PluginMarketplace
- Feature detection via dynamic import of pro-bridge + proStatus() call
- All tabs hidden when agor-pro plugin not loaded (community edition)
2026-03-18 02:01:18 +01:00
Hibryda
0953395423
feat(theme): add Theme Editor with live preview, import/export
...
- ThemeEditor.svelte: 26 color pickers (14 accents + 12 neutrals) with
native <input type="color"> and hex text input, live CSS preview
- custom-themes.ts: persistence layer (SQLite JSON blob), validation,
import/export as JSON files, clone from any built-in theme
- theme.svelte.ts: previewPalette/clearPreview for live editing,
setCustomTheme for persistence, initTheme loads custom themes on startup
- themes.ts: applyPaletteDirect + buildXtermThemeFromPalette + PALETTE_KEYS
- AppearanceSettings.svelte: custom themes list with edit/delete, "New
Custom Theme" button, ThemeEditor toggle
- All files under 300 lines (296 + 227 + 98)
2026-03-18 01:43:22 +01:00
Hibryda
4fccc3f3e0
fix(error): replace console.warn with handleInfraError in session-persistence
2026-03-18 01:23:51 +01:00
Hibryda
d582a1d26c
fix(error): migrate notifications.rs + message-adapters error handling
2026-03-18 01:22:30 +01:00
Hibryda
93b3db8b1f
fix(error): add global error handler, fix stores and dispatcher
...
- Global unhandledrejection handler with IPC+network filtering
- Agent dispatcher heartbeat uses handleInfraError (was fire-and-forget)
- All stores: layout, workspace, anchors, theme, plugins, machines,
wake-scheduler — silent failures replaced with handleInfraError
- initGlobalErrorHandler() called in App.svelte onMount
2026-03-18 01:22:12 +01:00
Hibryda
365c420901
fix(settings): replace console.error with handleError + Promise.allSettled
...
- All 6 settings components: save handlers use handleError with user intent
- onMount loaders migrated from Promise.all to Promise.allSettled (partial recovery)
- loadError $state + inline warning banner on full load failure
- JSON parse catches use handleInfraError with explicit fallback comments
- Secret operations (reveal/store/delete) use handleError for user feedback
2026-03-18 01:21:48 +01:00
Hibryda
dcdb741403
feat(error): add error handling foundation (Day 0)
...
- extractErrorMessage(err: unknown) normalizes any error shape to string
- handleError/handleInfraError dual utilities (user-facing vs infra-only)
- error-classifier extended with ipc/database/filesystem types (9 total)
- Toast rate-limiting (max 3 per type per 30s) in notifications store
- Infrastructure bridges use documented console.warn (recursion prevention)
- 13 new tests for extractErrorMessage
2026-03-18 01:19:23 +01:00
Hibryda
1ac6b69311
fix(settings): copy monolith's working theme dropdown pattern exactly
2026-03-17 06:30:09 +01:00
Hibryda
c094983814
fix: missing closing > on appearance div tag
2026-03-17 06:22:13 +01:00
Hibryda
b2f0c446b1
fix(settings): use monolith's working dropdown pattern (onclick on container div)
2026-03-17 06:20:44 +01:00
Hibryda
1f2dd91f82
fix(settings): use document pointerdown for dropdown close (no backdrop)
2026-03-17 06:18:42 +01:00
Hibryda
f8032debac
fix(settings): replace window click handler with backdrop for dropdown close
2026-03-17 06:16:18 +01:00
Hibryda
201f168621
fix(settings): fix theme/font dropdown toggle (stopPropagation on buttons)
2026-03-17 06:11:41 +01:00
Hibryda
614ae79f8e
fix(settings): switch to horizontal tab bar layout (single column, full width content)
2026-03-17 06:09:00 +01:00
Hibryda
1670ea4482
feat(settings): wire new SettingsPanel into App.svelte (replaces monolith)
2026-03-17 06:06:22 +01:00
Hibryda
886a2f723a
feat(settings): Sprint 4 — wire all 6 category components into SettingsPanel
...
SettingsPanel now renders actual components instead of placeholders:
AppearanceSettings, AgentSettings, SecuritySettings, ProjectSettings,
OrchestrationSettings, AdvancedSettings. Category switching via sidebar
with keyboard navigation and search deep-linking.
Settings redesign complete: 2959-line monolith replaced by 7 modular
components totaling ~1,700 lines. Monolith retained for backward
compatibility — will be removed once all edge cases are verified.
2026-03-17 05:50:34 +01:00
Hibryda
c622202f5f
refactor(settings): trim SecuritySettings to 276 lines (was 420)
2026-03-17 05:45:20 +01:00
Hibryda
734d5fff89
feat(settings): Sprint 2 — extract SecuritySettings (420 lines, needs trim)
2026-03-17 05:43:58 +01:00
Hibryda
9769e7f29a
feat(settings): Sprint 2-3 — extract Orchestration (238) + Advanced (321) settings
2026-03-17 05:42:57 +01:00
Hibryda
438f986a08
feat(settings): Sprint 2 — extract ProjectSettings (groups + project CRUD, 195 lines)
2026-03-17 05:42:43 +01:00
Hibryda
b25d22e686
feat(settings): Sprint 1 — extract AppearanceSettings from monolith (222 lines)
2026-03-17 05:29:47 +01:00
Hibryda
48dd35000a
feat(settings): Sprint 1 — extract AgentSettings from monolith (285 lines)
2026-03-17 05:05:15 +01:00
Hibryda
244d5e3938
feat: Sprint 0 — settings panel infrastructure
...
SettingsPanel.svelte: VS Code-style shell with sidebar categories,
search bar (fuzzy on registry metadata), keyboard navigation (arrows,
Escape), deep-link to setting anchors.
settings-registry.ts: static metadata for 35+ settings with key, label,
description, category, anchorId, keywords, scopeable, pro flags.
Supports fuzzy search and category filtering.
settings-scope.svelte.ts: centralized scope resolution store.
scopedGet/scopedSet resolve Global→Project cascade. Override chain
for ScopeCascade display. Cache invalidation on project switch.
settings/categories/ directory ready for Sprint 1 extraction.
2026-03-17 04:58:57 +01:00
Hibryda
6ca168e336
fix(a11y): resolve all 15 pre-existing Svelte compiler warnings
...
- GroupAgentsPanel: add keyboard handler on clickable div, remove unused CSS
- CommsTab: add aria-label on icon button
- CommandPalette: add aria-label on close button
- SettingsTab: add aria-labels on icon buttons, remove unused CSS rules
- AgentPane: fix state_referenced_locally for initialPrompt
- NotificationCenter: add keyboard handler on clickable notification
- ProjectHeader: replace nested <button> with <span> (invalid DOM nesting)
- CodeEditor: fix state_referenced_locally for content and lang
- PdfViewer: fix state_referenced_locally for filePath
2026-03-17 04:53:49 +01:00
Hibryda
738574b9f0
fix(security): resolve all HIGH/MEDIUM/LOW audit findings
...
Rust fixes (HIGH):
- symbols.rs: path validation (reject near-root, 50K file limit, symlink filter)
- memory.rs: FTS5 query quoting (prevent operator injection), 1000 fragment cap, content length limit, transaction wrapping
- budget.rs: atomic check-and-reserve via transaction, input validation, index on budget_log
- export.rs: safe UTF-8 truncation via chars().take()
- git_context.rs: reject paths starting with '-' (flag injection)
- branch_policy.rs: action validation (block|warn only), path validation
Rust fixes (MEDIUM):
- export.rs: named column access (positional→named)
- budget.rs: named column access, negative value guards
Svelte fixes:
- AccountSwitcher: 2-step confirmation before account switch
- ProjectMemory: expand/collapse content, 2-step delete confirm, tags split fix
- CodeIntelligence: min 2-char symbol query, CodeSymbol rename, aria-labels
- BudgetManager: 10M upper bound, aria-label on input, named constants
- SessionExporter: timeout cleanup on destroy, aria-live feedback
- AnalyticsDashboard: SVG aria-label, removed unused import, named constant
2026-03-17 03:56:44 +01:00
Hibryda
0324f813e2
fix(security): resolve critical audit findings in marketplace and frontend
...
CRITICAL fixes:
- marketplace.rs: Replace fake SHA-256 (SipHash) with real sha2 crate
- marketplace.rs: Reject empty checksums (refuse unsigned plugins)
- marketplace.rs: Add install path traversal protection (reject ../|/|\)
- marketplace.rs: Add HTTPS-only URL validation on download_url
- marketplace.rs: Add curl --proto =https to block file:/gopher: SSRF
- marketplace.rs: Add --max-filesize 50MB download cap
- marketplace.rs: Add --no-same-owner --no-same-permissions to tar extraction
- marketplace.rs: Post-extraction path validation (canonicalize check)
Frontend fixes:
- pro-bridge.ts: Rename Symbol→CodeSymbol (avoid global collision)
- pro-bridge.ts: Tighten trust type to union 'human'|'agent'|'auto'
- PluginMarketplace.svelte: URL sanitization (reject non-https hrefs)
Remaining audit fixes (HIGH/MEDIUM/LOW) being applied by background
agents — will be committed separately when complete.
2026-03-17 03:50:10 +01:00
Hibryda
285f2404aa
refactor(pro): simplify ProjectMemory and CodeIntelligence components
2026-03-17 03:29:14 +01:00
Hibryda
be084c8f17
feat(pro): add Svelte components for commercial phases
...
BudgetManager (budget+router), ProjectMemory (persistent memory),
CodeIntelligence (symbols+git+branch policy). Updated pro-bridge.ts
with all new IPC functions.
2026-03-17 03:27:40 +01:00
Hibryda
19771237c9
refactor(pro): simplify PluginMarketplace component (503→310 lines)
2026-03-17 02:22:20 +01:00
Hibryda
5300c09157
feat(pro): add plugin marketplace with catalog, install, and update support
...
Marketplace backend (agor-pro/src/marketplace.rs): fetch catalog from
GitHub, download+verify+extract plugins, install/uninstall/update with
SHA-256 checksum verification and path traversal protection. 6 Tauri
plugin commands.
PluginMarketplace.svelte: Browse/Installed tabs, search, plugin cards
with permission badges, one-click install/uninstall/update.
Plugin catalog repo: agents-orchestrator/agor-plugins (3 seed plugins).
Plugin scaffolding: scripts/plugin-init.sh.
7 marketplace vitest tests, 3 Rust tests.
2026-03-17 02:20:10 +01:00
Hibryda
a98d061b04
feat(pro): add commercial Svelte components
...
AnalyticsDashboard (period selector, summary cards, SVG bar chart, model table),
SessionExporter (session/project report generation, clipboard copy),
AccountSwitcher (account list, active indicator, hot-switch).
All use Svelte 5 runes, --ctp-* theme vars, plugin:agor-pro IPC.
2026-03-17 01:53:22 +01:00
Hibryda
03fe2e2237
feat(pro): add analytics, export, and multi-account commercial features
...
3 new agor-pro modules: analytics.rs (usage dashboard queries),
export.rs (session/project Markdown report generation),
profiles.rs (multi-account switching via accounts.json).
9 Tauri plugin commands. Frontend IPC bridge (pro-bridge.ts).
168 cargo tests, 14 commercial vitest tests.
2026-03-17 01:52:46 +01:00
Hibryda
5fadd1c022
feat: add agor-pro commercial plugin crate and dual-repo infrastructure
...
agor-pro Tauri 2.x plugin (feature-gated via --features pro),
commercial Tauri config overlay, asymmetric test setup,
CI workflows (leak-check, commercial-build, PAT health),
pre-push hook, Makefile, CONTRIBUTING/MAINTENANCE/LICENSE-COMMERCIAL.
2026-03-17 01:12:25 +01:00
Hibryda
a63e6711ac
refactor!: rebrand bterminal to agor (agents-orchestrator)
...
Rename Cargo crates (bterminal-core→agor-core, bterminal-relay→agor-relay),
env vars (BTERMINAL_*→AGOR_*), config paths (~/.config/agor), CSS custom
properties, plugin API object, package names, and all documentation.
BREAKING CHANGE: config/data paths changed from bterminal to agor.
2026-03-17 01:12:25 +01:00
DexterFromLab
37b2b82ae5
feat: add Clear All button to CommsTab — purge all messages from DB
...
Adds trash icon button in Messages header that clears all communications
for the active group: DMs, channel messages, activity feed, seen tracking,
and dead letters. Shows Tauri warning dialog with confirmation before delete.
- Rust: clear_all_communications() in btmsg.rs (4 DELETE queries)
- Tauri command: btmsg_clear_all_comms
- Bridge: clearAllComms(groupId)
- UI: trash button with hover-red styling, resets all local state after clear
2026-03-15 17:24:40 +01:00
DexterFromLab
a3595f0277
fix: agent status indicators persist after stop — sync btmsg + optimistic UI
...
Green borders in GroupAgentsPanel and health dots stayed active after
stopping agents because btmsg DB status was never set to 'stopped'.
- Add terminal state guard in agent store (done/error cannot revert to active)
- Optimistic updateAgentStatus('done') on all stop paths (AgentPane, StatusBar Stop All, AgentSession onAgentStop)
- Sync btmsg agent status to 'stopped' in agent-dispatcher on every terminal transition (agent_stopped, agent_error, cost done/error, sidecar crash)
- Sync btmsg optimistically in UI stop handlers for immediate card border update
- Add Stop All button to StatusBar with wake scheduler kill
2026-03-15 16:59:20 +01:00
DexterFromLab
3672e92b7e
feat: Agent Orchestrator — multi-project agent dashboard
...
Tauri + Svelte 5 + Rust application for orchestrating multiple AI coding agents.
Includes Claude, Aider, Codex, and Ollama provider support, multi-agent
communication (btmsg/bttask), session anchors, plugin sandbox, FTS5 search,
Landlock sandboxing, and 507 vitest + 110 cargo tests.
2026-03-15 15:45:27 +01:00