asepharyana
9b6e51dc67
fix: correct jitter range to ±25% and fix abort.rs doc — review findings
2026-07-18 03:18:27 +07:00
asepharyana
40524f930f
refactor: use mark_dirty() helper di input.rs, DRY 22 lokasi
2026-07-18 03:18:27 +07:00
asepharyana
086cb86f0d
refactor: extract is_aborted helpers, DRY 16 call sites
2026-07-18 03:18:27 +07:00
asepharyana
ff47bffe0c
refactor: reuse is_auth_error from provider.rs, DRY backend retry logic
2026-07-18 03:18:27 +07:00
asepharyana
431c8d3b89
refactor: unify 3 backoff implementations into shared helper
2026-07-18 03:18:27 +07:00
asepharyana and Claude Opus 4.8
e32501ee59
refactor: extract session_id extraction helper, DRY auth.rs
...
Extract duplicated session ID extraction + validation logic from
SessionAuthMiddleware::call() and require_session() into two shared
helper functions: extract_session_id and validate_and_build_identity.
Removes ~60 lines of duplicated code while preserving behavior:
- Both call sites now rely on the same extraction/validation path
- User-Agent default remains empty string (existing behavior unchanged)
- Error response format (401 with header/validation messages) unchanged
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-18 03:18:27 +07:00
asepharyana and Claude Opus 4.8
7d8487cefb
refactor: consolidate #![allow(clippy::cast_*)] to crate roots
...
Add the cast-allow block to zesdex-entities/src/lib.rs and
zesdex-utils/src/lib.rs (which lacked it), then remove from
65 sub-files across all 8 crates. Build and all 223 tests
continue to pass.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-18 03:18:27 +07:00
asepharyana and Claude Opus 4.8
4cd38c9291
refactor: extract write_json_atomic helper, DRY 8 call sites
...
Move the crash-safe write-then-rename pattern into
zesdex-utils::write_json_atomic and apply it across:
- zesdex-cms: app_config_repo, conversation_repo, settings_repo
- zesdex-iam: oauth_repo, session_repo
- zesdex-entities: Conversation::save_conversation, Session::save
Excluded (non-JSON format):
- rewind_blob_repo (binary blob)
- memory_repo (markdown + frontmatter, not JSON)
- session_lock (PID string, not JSON)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-18 03:18:27 +07:00
asepharyana and Claude Opus 4.8
9a6ab62562
refactor: DRY cleanup — extract shared helpers, remove duplication across tools, LSP, overlays, and runtime
...
Eliminate ~500 lines of duplicate code across 31 files by extracting
shared functions, helpers, and consolidating repeated patterns.
Highlights:
- Toast helpers (toast_info/success/warning/error) on AppStateRest
- push_event() helper for turn-event queue (19 callers consolidated)
- log_write_edit_tool() shared fn (turn.rs + engine.rs ~50 lines saved)
- resolve_api_key() shared fn (spawn.rs + provider.rs)
- LSP call_positional() helper on LspClient
- lsp_cursor_params() shared schema for 4 tool files
-overlay_block() helper for consistent overlay title/border styling
- cycle_selected_index(), path_not_found/a_directory() helpers
- mark_dirty(), save_settings() on AppStateRest
- Remove redundant Err(e) => Err(e) arms in LSP tools
- Consolidate generate_workspace_tree (turn.rs → workspace.rs)
- Simplify background-review wrapper args in auto/mod.rs
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-18 03:18:27 +07:00
asepharyana
b02754acd2
refactor: implement retry logic with exponential backoff and jitter for subagent and provider calls
2026-07-18 03:18:27 +07:00
asepharyana
796bb09c5b
refactor: enhance message shaping with progressive summarization and improved handling of dropped messages
2026-07-17 10:29:52 +07:00
asepharyana
5aad7e1eb1
refactor: streamline token counting and message shaping logic
2026-07-17 10:29:52 +07:00
asepharyana
9a67137954
refactor: massive codebase restructuring — naming, splitting, DRY
...
Crate renames:
- zesdex-entities::seaorm → domain (misleading name, no SeaORM used)
- zesdex-dto → merged into zesdex-entities (100% re-exports)
- zesdex-libs → zesdex-infra (vague name)
Module renames:
- app/harness → guard (misleading: safety gatekeeper, not test harness)
- runtime/commands → action_dispatch (name clashed with controller/command)
- resources → prompts (embedded prompt text, not general resources)
- tool/seqthink → sequential_think (unreadable abbreviation)
- msglog/query → insert (module only inserts, never queries)
Dead code removal:
- app/mode/help.rs (orphaned — not declared in mod.rs)
- app/mode/loading.rs (orphaned — not declared in mod.rs)
File splitting (71 new files, avg ~115 lines/file):
- app/runtime/actions/: 1→8 files (was 2030 lines)
- view/overlays/: 1→16 files (was 1167 lines)
- tool/lsp/: 1→8 per-tool files (was 909 lines)
- main.rs: 1→5 files (session, daemon, attach, event_loop)
- workflow/engine + hive_mind: 2→10 files
- subagent/engine + auto: 2→9 files
- lsp/provisioner: 1→5 files
- review/: 1→6 files
- guard/: 1→2 files (extracted patterns)
- state/misc: 1→3 files (input, scroll)
- mcp/: 1→3 files (transport, adapter)
- stream/json_repair extracted from turn.rs
DRY:
- Pattern constants (STUB_PATTERNS etc) in guard/patterns shared with subagent
- 3 near-identical background spawners → 1 generic + thin wrappers
- Shared spawn_subagent_with_drain() extracted
- Shared create_session() in main
- write_osc52 deduplicated
Bug fixes:
- archive_message(): sess.db → db (wrong variable name)
- execute_one_tool(): wrong parameter name
- check_credential_read() function was missing (restored from test expectations)
2026-07-17 09:08:41 +07:00
asepharyana
1f0ae9f551
Refactor and clean up code across multiple modules
...
- Simplified token type assignment in OAuth service.
- Removed unused session_lock module and re-exported Session from zesdex_entities.
- Cleaned up session entity by removing unnecessary comments and code.
- Consolidated session handling in HTTP handlers for better readability.
- Improved formatting and readability in OAuth repository tests.
- Enhanced session lock repository with clearer match statements.
- Streamlined session repository error handling.
- Refined RNG tests for better clarity.
- Adjusted module visibility and organization in lib.rs.
- Updated IPC client and connection code for better error handling and clarity.
- Improved frame handling in IPC for better readability.
- Organized module imports and added test utilities for IPC.
- Enhanced database connection error handling.
- Simplified JWT token creation error handling.
- Improved password verification error handling.
- Cleaned up state management code for better readability.
- Refactored middleware for session authentication and rate limiting.
- Simplified clipboard utility for better error handling.
- Enhanced logging initialization for better error reporting.
- Improved pagination utility with clearer method annotations.
- Cleaned up sanitization functions for filenames and paths.
- Enhanced slug generation functions for better clarity and usability.
2026-07-17 09:08:41 +07:00
asepharyana
22dd6fdda7
feat(cms): implement RewindBlobRepository for managing binary blobs
2026-07-17 09:08:41 +07:00
asepharyana and Claude Sonnet 5
b272858edb
fix(cms): satukan ChatMessage/Role Conversation dengan tipe kanonik zesdex-entities
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-17 09:08:41 +07:00
asepharyana and Claude Sonnet 5
3f79b283e2
chore: hapus entitas settings/app_config/memory/edit_log lama di zesdex-entities yang sudah digantikan zesdex-cms
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-17 09:08:41 +07:00
asepharyana and Claude Sonnet 5
9618ef413b
refactor(backend): alihkan EditLog ke zesdex-cms JsonlEditLogRepository
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-17 09:08:41 +07:00
asepharyana and Claude Sonnet 5
0ad3b0e539
refactor(backend): alihkan Memory ke zesdex-cms MarkdownMemoryRepository
...
Ganti semua pemanggilan Memory::read/write/remove/list di zesdex-backend
dengan MarkdownMemoryRepository dari zesdex-cms. Hapus re-export
model::memory yang sudah tidak dipakai.
Method mapping: read -> load, write -> save, remove -> delete, list -> list.
Import trait MemoryRepository untuk method resolution.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-17 09:08:41 +07:00
asepharyana and Claude Sonnet 5
dc9fd4dbd1
refactor(backend): alihkan AppConfig ke zesdex-cms JsonAppConfigRepository
...
Semua pemanggilan AppConfig::load() diganti dengan
JsonAppConfigRepository + AppConfigRepository trait.
Re-export model::app_config dihapus dari model/mod.rs.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-17 09:08:41 +07:00
asepharyana and Claude Sonnet 5
8e6acc30d5
refactor(backend): alihkan Settings ke zesdex-cms JsonSettingsRepository
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-17 09:08:41 +07:00
asepharyana and Claude Sonnet 5
6d41ffc587
fix(cms): perbaiki serde default hive_mind_node_timeout_ms & toleransi parse gagal di Settings
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-17 09:08:41 +07:00
asepharyana and Claude Sonnet 5
f51a32569f
chore: hapus implementasi OAuth/session lama yang sudah digantikan zesdex-iam
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-17 09:08:41 +07:00
asepharyana and Claude Sonnet 5
add6845edf
refactor(backend): alihkan manajemen session ke zesdex-iam (SessionRepository/SessionLockRepository)
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-17 09:08:41 +07:00
asepharyana and Claude Sonnet 5
4ab812d93b
refactor(backend): alihkan run_oauth_flow ke zesdex-iam OAuthServiceImpl
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-17 09:08:41 +07:00
asepharyana and Claude Sonnet 5
ff6a749c11
feat(iam): implementasikan FileSystemSessionLockRepository (sebelumnya belum ada implementasi)
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-17 09:08:41 +07:00
asepharyana and Claude Sonnet 5
f2d97fb17d
fix(iam): set permission 0600 pada file token OAuth
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-17 09:08:41 +07:00
asepharyana and Claude Sonnet 5
be278f8b1c
fix(iam): redirect_uri dinamis + validasi CSRF state di OAuthServiceImpl
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-17 09:08:41 +07:00
asepharyana and Claude Sonnet 5
910aa5e071
feat(iam): port LoopbackServer OAuth callback listener dari zesdex-backend
...
Duplikasi verbatim dari crates/zesdex-backend/src/service/oauth/loopback.rs
ke zesdex-iam untuk sentralisasi primitif OAuth.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-17 09:08:41 +07:00
asepharyana
5ede65f454
feat(iam): tambahkan CSPRNG (OsRng) untuk token state/PKCE
2026-07-17 09:08:41 +07:00
asepharyana and Claude Sonnet 5
4dc4f80fa3
fix(middleware): jangan percaya header X-Forwarded-For/X-Real-IP secara default di rate limiter
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-17 09:08:41 +07:00
asepharyana
3401d63063
docs(shell): perbaiki doc comment shell_filter yang menyesatkan soal credential-read
2026-07-17 09:08:41 +07:00
asepharyana
be0a9582bb
refactor: migrate monolithic crate to Cargo Workspace with Clean Architecture
...
Transform the single binary crate into a 9-crate workspace monorepo:
- Root Cargo.toml as [workspace] manager with resolver = "2"
- zesdex-entities: Domain entity types (session, settings, store, message, etc.)
- zesdex-utils: Pure utility functions (error, logger, pagination, slug, clipboard)
- zesdex-dto: Data Transfer Objects for LLM provider API communication
- zesdex-ipc: Unix-socket IPC layer (client/server/framing/protocol)
- zesdex-iam: Identity & Access Management (Clean Architecture: domain/application/infrastructure)
- zesdex-cms: Content Management (Clean Architecture: domain/application/infrastructure)
- zesdex-middleware: HTTP middleware (Auth, CORS, Rate Limiting)
- zesdex-libs: Composition root (AppContext, DB init, JWT, Argon2)
- zesdex-backend: Main binary entry point + seed/migrate binaries
- DevOps: Dockerfile, docker-compose, Nix (flake/shell/default), CI/CD updates
- Remove dead root src/ and src-misc/ directories
All crate re-exports maintain backward compatibility with original
crate::model::*, crate::dto::*, crate::ipc::* module paths.
Feature crates enforce strict layer separation: domain -> application
-> infrastructure with generic trait-based dependency injection.
2026-07-17 09:08:41 +07:00