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
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
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
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