Commit graph

32 commits

Author SHA1 Message Date
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
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