Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
19 check-ins
|
2026-06-22
| ||
| 11:27 | feat: 媒体查看改用 mpv 无边框窗口,左右键切换图片/视频 leaf check-in: 31dd025560 user: pluto tags: trunk | |
|
2026-06-21
| ||
| 16:33 | 新增标签功能: web 表单 #标签+回车 多标签录入, TUI 详情页显示, DB schema v3 (tags 表加密存储 + 盲索引) check-in: d1ddf7cc7f user: pluto tags: trunk | |
| 14:06 | fix: 评分/备注/媒体模态打开时 DetailView 不再响应 e/m/r/c 等快捷键 (传 active prop 仅在 DETAIL 状态响应) check-in: 181387f66a user: pluto tags: trunk | |
| 13:35 | web 表单省/市/区县支持拼音首字母搜索 (pinyin-pro 预处理 LOC_DATA) check-in: 91b1d4f795 user: pluto tags: trunk | |
| 13:06 | fix ENOTDIR: 二进制名为 mailuo 时数据目录改用 mailuo-data/ 避免与可执行程序重名 check-in: f27fe59c7b user: pluto tags: trunk | |
| 13:01 | rebuild darwin-arm64 binary: 数据目录与可执行程序同目录 check-in: 9c5c4fd86d user: pluto tags: trunk | |
| 13:00 | 数据目录改为与可执行程序同目录 (编译二进制旁 / dev 模式 cwd 旁) check-in: 2d77327f03 user: pluto tags: trunk | |
| 12:32 | fix layout error check-in: 5e59d8c66d user: pluto tags: trunk | |
| 10:29 | fix error check-in: 26f9afcb40 user: pluto tags: trunk | |
| 10:01 | Remove toast on web form exit — Esc just shuts down silently check-in: c2df68bcc5 user: pluto tags: trunk | |
| 09:49 |
Fix cursor, web form exit, location searchable combobox, contact layout
1. Cursor fix: onSubmitCommand no longer sets commandMode=false. Just clears cmdValue. Input stays focused — no mouse click needed. 2. Web form active state: shows in status bar (amber dot + Esc exit hint). Esc key shuts down web form server and clears state. 3. Location searchable combobox: replaced separate search+select with inline combobox (input + dropdown). Type pinyin or Chinese to filter results directly in the province/city/district input fields. Arrow keys navigate, Enter selects, Esc closes dropdown. Cascading: province -> city -> district. All 34 provinces with major cities included. 4. Contact layout: select width fixed to 120px max (was full width). Account input flex-fills remaining space. No more overflow. 5. Server-side: handleSubmit assembles structured form fields (contact type/account/custom, loc prov/city/dist/detail, price tags) into text format for parseWireForm. LOC_JSON typed constant for name resolution. check-in: bdad730a23 user: pluto tags: trunk | |
| 09:35 |
Major form rewrite: contacts multi-type, location pinyin search, file upload, cursor fix
1. Cursor focus fix: after any command executes, re-enable commandMode via setTimeout(30ms) so the input stays focused without mouse clicks. 2. Web form active state: added webFormActive state to App, passed to useWebForm.onStateChange callback. Toast shows when form opens. 3. Form server complete rewrite: - Contacts: dynamic multi-entry rows with type dropdown (TG/QQ/微信/ 与你/Potato/手机/其他) + account input + custom type field for OTHER. 3 rows shown by default, + button adds more. - Channels: textarea, one URL per line. - Location: dynamic multi-entry with cascading selects. Country fixed to China. Province select with pinyin search input (type 'js' to find 江苏, 'wx' for 无锡). City select with pinyin search. District select auto-populated from city choice. Detail address text input. Embedded 130+ major Chinese cities with pinyin keys. - Prices: dedicated number inputs for each tag (P/PP/BS/BT/BY). - File upload: drag-drop style zones for images and videos. Images encrypted to mailuo/t/ with .mai extension, videos to mailuo/s/ with .luo extension. AES-256-GCM encryption (IV+tag+ciphertext). Image previews shown via FileReader. Video file count displayed. - Notes: moved to bottom of form. - Dark theme matching MAILUO aesthetic (clay accent #D97706). 4. main.tsx: creates mailuo/t and mailuo/s directories on startup. 5. useWebForm hook: new options for masterKey, imageDir, videoDir, onSubmit now receives (input, imageFiles, videoFiles), onStateChange callback for active state tracking. 6. formServer: multipart form handling with Blob detection, file encryption via AES-256-GCM, proper type-safe file processing. check-in: 4024a141f6 user: pluto tags: trunk | |
| 08:52 |
Replace in-terminal WireForm with browser-based web form
Removed WireForm.tsx (in-terminal structured form). Added: - src/core/web/formServer.ts: Local HTTP server (Bun.serve on 127.0.0.1) that serves an HTML form page on GET / and processes form submission on POST /submit. Form has dark theme matching MAILUO aesthetic (clay accent #D97706, dark backgrounds). Validates via parseWireForm, shows error on failure, success page on success. Server auto-shuts down after submission. Opens system browser via open/xdg-open/start. - src/tui/hooks/useWebForm.ts: React hook managing server lifecycle. Starts server on openForm(), cleans up on unmount. Callback-based: onSubmit for data, onError for errors, onSuccess for confirmation toast. Changes to existing code: - stateMachine.ts: Removed WIRE_FORM state and OPEN_WIRE/CLOSE_WIRE actions and wireEditMode field. Web form runs outside the state machine. - commands/registry.ts: /wire (alias /update, /add) now returns OPEN_WEB_FORM action. /edit returns OPEN_WEB_FORM with editMode=true. - App.tsx: Removed WireForm. Added useWebForm hook. OPEN_WEB_FORM handled inline: starts server, opens browser. Edit mode passes technician data. Detail view E key opens browser form. check-in: af4dc963f4 user: pluto tags: trunk | |
|
2026-06-20
| ||
| 18:56 | 重构TUI界面和媒体存储规则 check-in: 230b55b871 user: pluto tags: trunk | |
| 16:52 |
Visual redesign: Claude Code aesthetic
Theme overhaul: - Single accent color: clay/amber #D97706 (was purple #7c5cff) - Near-black backgrounds with no tint (was purple-tinted) - Barely visible borders #262626 (was #2a2a3c) - Clean gray hierarchy: fg #d4d4d4, dim #808080, muted #555555 - All section colors removed (contact/video/info now neutral gray) - Stars rendered in accent amber Layout flattening: - Header: removed border box, clean text + thin divider line - Footer: added persistent status bar (mode label + key hints + version) - DetailView: section headers use dim gray with prefix, no per-section colors - Modal: thin single-line border (was rounded), subtle title in accent - ListView: no borders, clean select with subtle amber selection - All forms: thin borders, accent on focus, dim when unfocused Micro-interactions: - Added Spinner component with braille animation for loading states - Toast: removed border, accent text only All UI remains fully Chinese. Smoke test + pty test passing. check-in: 9ba2b1e18a user: pluto tags: trunk | |
| 16:36 |
Major redesign: remove password, simplify UI, add command dropdown, Chinese text
KeyManager: now uses a local random 32-byte key file (master.key, mode 0600) instead of password-derived scrypt key. No unlock prompt. KeyManager ensure() auto-creates or loads on startup. BootScreen component removed. Main.tsx simplified: ensure key -> create services -> render App directly. Header: replaced giant ASCII art with clean single-line MAILUO title, record count, and search filter status — all in Chinese. Footer: now includes an inline command dropdown that appears when typing /. Shows filtered list of all commands with Chinese descriptions. Arrow keys navigate, Enter selects/fills, Esc cancels. Commands with no args (like /wire, /help, /quit) execute immediately on Enter. All UI text converted to Chinese: help text, section headers, form labels, placeholder hints, error messages, key hints, rating/media viewer text. Smoke test updated for new KeyManager API (no passphrase). All passing. TUI pty test verified: boots without password, shows Chinese UI, / dropdown renders correctly. check-in: 83ebfc39fb user: pluto tags: trunk | |
| 16:17 |
Fix crash after passphrase entry: use span instead of nested text elements
OpenTUI text renderable only accepts strings, TextNodeRenderable instances, or StyledText as children — nesting a text element inside another text element throws 'TextNodeRenderable only accepts strings'. The correct inline modifier is span (per opentui/react README). Fixed in Header, ListView, and DetailView — the three places that composed colored runs inside a text element. check-in: 5be4ac7c5c user: pluto tags: trunk | |
| 16:11 |
Implement MAILUO TUI: crypto vault, SQLite schema, OpenTUI app, services, docs
- core/crypto: KeyManager (scrypt master key + verifier), FieldCipher (AES-256-GCM fields + HMAC-SHA256 blind indexes), MediaVault (chunked AES-256-GCM video encryption with secure temp-file release lifecycle) - core/db: bun:sqlite with WAL + tuned PRAGMAs, schema.sql (technicians, contacts, channels, locations, prices, media, ratings + indexes + CHECKs), three repositories with encrypt/decrypt at the boundary - domain: enums, models, validation, wireForm (de)serialization - services: TechnicianService, SearchService (/shi /price /find), MediaService - tui: OpenTUI React app with state-machine router, persistent MAILUO header, fixed footer command bar (/ to focus), list/detail views, /wire structured modal, rating form, C-key rating-note popup, M-key media viewer with secure external-player playback - scripts: init-db, reset-db, headless smoke-test (all passing) - ARCHITECTURE.md (4 PRD deliverables) + README.md check-in: ed71b21d1f user: pluto tags: trunk | |
| 11:52 | initial empty check-in check-in: 638509928c user: pluto tags: trunk | |