Hibryda
718133f9f6
test(e2e): split + expand agent-scenarios into Phase A (22 → 47 tests)
...
- phase-a-structure.test.ts (156 lines, 14 tests): structural integrity,
settings panel, sidebar gear, accent colors, project name/icon, grid layout
- phase-a-agent.test.ts (210 lines, 14 tests): agent pane, prompts,
provider badge, cost display, context meter, status transitions
- phase-a-navigation.test.ts (297 lines, 19 tests): terminal tabs,
command palette, focus switching, palette categories, shortcut hints
- Original agent-scenarios.test.ts (429 lines) deleted
- 25 new exhaustive tests added
2026-03-18 03:46:40 +01:00
Hibryda
56971c3f27
test(e2e): add Phase D/E/F specs covering new architecture (54 tests)
...
Phase D — Settings & Error Handling:
- D1: Settings panel 6-category tabs, search, active highlighting
- D2: Appearance settings (themes, fonts, cursor, scrollback)
- D3: Theme Editor (color pickers, groups, save/cancel)
- D4: Toast notifications, notification center bell/dropdown
- D5: Error states (no loadError warnings, status bar)
Phase E — Agents & Health:
- E1: ProjectBox tab bar (7+ tabs, PERSISTED-LAZY switching)
- E2: Agent session UI (prompt input, context meter, cost)
- E3: Provider configuration (panels, capabilities, toggles)
- E4: Status bar fleet state (counts, cost, attention queue)
- E5: Project health indicators (status dot, CWD, pressure, burn rate)
- E6: Metrics tab (fleet aggregates, health cards, Live/History)
- E7: Conflict detection (no false badges on fresh launch)
- E8: Audit log (manager-only tab, toolbar, entries)
Phase F — Search & LLM Quality:
- F1: Search overlay (Ctrl+Shift+F, input, empty state, close)
- F2: Context tab & anchors (visualization, budget scale)
- F3: SSH tab (connection list, add button)
- F4-F7: LLM-judged quality (settings completeness, theme editor,
error messages, overall UI consistency)
2026-03-18 03:20:37 +01:00
Hibryda
6f247da514
refactor(e2e): complete agor.test.ts split (799 lines → 5 files)
...
- smoke.test.ts (47) — stateless smoke checks
- workspace.test.ts (79) — workspace & projects
- settings.test.ts (247) — settings panel + interaction
- features.test.ts (220) — command palette + keyboard shortcuts
- terminal-theme.test.ts (292) — terminal tabs + theme switching
- Reset-to-home-state hooks in all stateful before() blocks
- Original agor.test.ts deleted, wdio.conf.js specs updated
- All 50+ original tests preserved
2026-03-18 03:11:10 +01:00
Hibryda
f08c4b18cf
refactor(e2e): split spec files under 300-line limit
...
- phase-c.test.ts (626 lines) → phase-c-ui.test.ts (279), phase-c-tabs.test.ts
(272), phase-c-llm.test.ts (76) — all 11 scenarios preserved
- agor.test.ts (799 lines) → smoke.test.ts (47), workspace.test.ts (79),
settings.test.ts (247), features.test.ts (488) — split in progress
- Reset-to-home-state hooks added to stateful before() blocks
- wdio.conf.js specs array updated for all new filenames
2026-03-18 03:09:29 +01:00
Hibryda
e76bc341f2
refactor(e2e): extract infrastructure into tests/e2e/infra/ module
...
- Move fixtures.ts, llm-judge.ts, results-db.ts to tests/e2e/infra/
- Deduplicate wdio.conf.js: use createTestFixture() instead of inline copy
- Replace __dirname paths with projectRoot-anchored paths
- Create test-mode-constants.ts (typed env var names, flag registry)
- Create scripts/preflight-check.sh (validates tauri-driver, display, Claude CLI)
- Create scripts/check-test-flags.sh (CI lint for AGOR_TEST flag drift)
- Rewrite tests/e2e/README.md with full documentation
- Update spec imports for moved infra files
2026-03-18 03:06:57 +01:00
Hibryda
538a31f85c
feat(remote): persist SPKI pins and machine configs to SQLite
...
- remote_machines table in sessions.db (id, label, url, token, auto_connect,
spki_pins as JSON array, created_at, updated_at)
- session/machines.rs: save/load/delete/update_pins CRUD operations
- RemoteManager: set_session_db() + load_from_db() for startup restoration
- All mutations persist: add_machine, remove_machine, add_spki_pin,
remove_spki_pin, TOFU auto-store — pins survive restart
- 197 cargo tests passing, 0 warnings
2026-03-18 02:18:17 +01:00
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
c1149561c7
fix: remove unused variable and suppress dead_code warning in agor-pro
2026-03-18 01:37:11 +01:00
Hibryda
f19b69f018
fix(error): migrate session submodules + btmsg/bttask backends to AppError
...
- session/*.rs (sessions, layout, settings, ssh, agents, metrics, anchors)
now return Result<T, AppError> internally, not just at command boundary
- btmsg.rs and bttask.rs backends migrated to AppError::Database
- 116 cargo tests passing
2026-03-18 01:32:07 +01:00
Hibryda
eb04e7e5b5
fix(error): migrate remaining Rust commands to AppError (btmsg, bttask, knowledge, plugins, search)
2026-03-18 01:23:56 +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
1978475766
fix(error): migrate misc.rs to AppError
2026-03-18 01:22:27 +01:00
Hibryda
07f41fe0ea
fix(error): migrate remote.rs to AppError
2026-03-18 01:22:19 +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
8b3b0ab720
feat(error): add Rust AppError enum and migrate command modules
...
- AppError enum with 10 variants (Database, Auth, Filesystem, Ipc, NotFound,
Validation, Sidecar, Config, Network, Internal) + serde tag serialization
- From impls for rusqlite::Error, std::io::Error, serde_json::Error
- Migrated 9 command modules from Result<T, String> to Result<T, AppError>
- Frontend receives structured {kind, detail} objects via IPC
2026-03-18 01:22:04 +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
c7292e9e54
docs: update TODO, CHANGELOG for error handling audit and settings redesign
2026-03-18 01:19:29 +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
bfc01192d2
docs(todo): add urgent error handling audit task
2026-03-17 06:33:41 +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
2cdc8dddb2
chore: remove old root-level docs (content moved to subdirectories)
2026-03-17 04:22:47 +01:00
Hibryda
493b436eef
docs: complete reorganization — move remaining docs into subdirectories
2026-03-17 04:22:38 +01:00
Hibryda
8641f260f7
docs: move orchestration and sidecar docs into subdirectories
2026-03-17 04:19:04 +01:00
Hibryda
b6c1d4b6af
docs: add 11 new documentation files across all categories
...
New reference docs:
- agents/ref-btmsg.md: inter-agent messaging schema and CLI
- agents/ref-bttask.md: kanban task board operations
- providers/ref-providers.md: Claude/Codex/Ollama/Aider comparison
- config/ref-settings.md: (already committed)
New guides:
- contributing/dual-repo-workflow.md: community vs commercial repos
- plugins/guide-developing.md: Web Worker sandbox API and publishing
New pro docs:
- pro/features/knowledge-base.md: persistent memory + symbol graph
- pro/features/git-integration.md: context injection + branch policy
- pro/marketplace/README.md: 13 plugins catalog
Split files:
- architecture/data-model.md: from architecture.md (schemas, layout)
- production/hardening.md: from production.md (supervisor, sandbox, WAL)
- production/features.md: from production.md (FTS5, plugins, secrets, audit)
2026-03-17 04:18:05 +01:00
Hibryda
8251321dac
docs: restructure documentation into multilevel directory layout
...
New structure: docs/ split into 11 subdirectories (getting-started/,
agents/, providers/, sidecar/, multi-machine/, plugins/, config/,
production/, architecture/, contributing/, pro/).
New files:
- docs/README.md: navigation index with audience table
- docs/getting-started/quickstart.md: install, build, first session
- docs/config/ref-settings.md: all env vars, config files, databases
- docs/architecture/overview.md: split from architecture.md (>300 lines)
- docs/pro/README.md: Pro edition overview
- docs/pro/features/analytics.md: analytics dashboard docs
- docs/pro/features/cost-intelligence.md: budget + router docs
Remaining docs being written by background agents — will be committed
in follow-up when complete.
2026-03-17 04:15:15 +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
191b869b43
feat(pro): implement all 3 commercial phases
...
Phase 1 — Cost Intelligence:
- budget.rs: per-project token budgets, soft/hard limits, usage logging
- router.rs: 3 preset profiles (CostSaver/QualityFirst/Balanced)
Phase 2 — Knowledge Base:
- memory.rs: persistent agent memory with FTS5, auto-extraction, TTL
- symbols.rs: regex-based symbol graph (tree-sitter stub)
Phase 3 — Git Integration:
- git_context.rs: branch/commit/modified file context injection
- branch_policy.rs: session-level branch protection
6 modules, 32 cargo tests, 22+ Tauri plugin commands.
2026-03-17 03:27:40 +01:00
Hibryda
3798bedc4d
feat: add pre-dispatch hook for agent task middleware
...
Generic extension point in community codebase: PreDispatchHook type
registered in AppState, checked before every agent_query dispatch.
Enables Pro features like budget enforcement and branch policy.
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