wangdl
b22df85891
feat: DOC-FULL Batch 1 FFI + Compat
...
#56 FFI DTO V2 exports (done in A1)
#83 V1 deprecated annotations
#84 V2→API protocol mapping doc
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 20:26:05 +08:00
wangdl
01a64320cc
fix: DOC-FULL A1-A8 审查修复
...
A1: FFI 导出 V2 函数 (start/pause/resume/close/push/export/ack/mark)
A2: ActiveTimeTracker 集成到 session_v2
A3: push_event 调用 position.normalized()
A4: remove_session 检查 Closed 状态
A5: Buffer 溢出驱逐 if-let 链修正
A8: reload_stale_events_v2() 启动恢复
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 20:16:39 +08:00
wangdl
366ed88317
feat: DOC-FULL-006 EventBuffer ack/failed/state
...
BufferedReadingEventV2{event, state: Pending|Exported|Failed, retry_count}
export_pending_events_v2(limit, ts) - marks as Exported
ack_events_v2(eventIds) - removes by eventId
mark_events_failed_v2(eventIds) - for retry
Overflow: Failed→Exported→oldest eviction
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 19:54:34 +08:00
wangdl
661d21de8f
fix: DOC-FULL-005 ReadingPosition camelCase + clamp
...
Manual Serialize for camelCase JSON output
Clamp progress 0~1 (NaN→0, <0→0, >1→1)
normalized() + progress_value() methods
Backward-compatible Deserialize with #[serde(rename)]
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 19:49:49 +08:00
wangdl
66649bb815
feat: DOC-FULL-004 ActiveTimeTracker
...
iOS控制tick节奏,Rust计算delta。start/pause/resume/tick/close。
毫秒余数累计。时间倒退不产生负数。8单元测试。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 19:41:09 +08:00
wangdl
82e8cdfc1f
feat: DOC-FULL-003 ReadingEventV2
...
5 types: MaterialOpened/Closed/PositionChanged/Heartbeat/MarkedAsRead
active_seconds_delta (增量)
集成 ReadingSessionV2 (clientSessionId/sequence/materialId)
10 单元测试
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 19:37:19 +08:00
wangdl
938ebf890c
feat: DOC-FULL-002 ReadingSessionV2
...
- clientSessionId UUID 生成
- start/pause/resume/close lifecycle
- sequence 递增
- record_session_event_v2 更新时长和位置
- 7 个单元测试
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 19:34:12 +08:00
wangdl
855c7b15c2
feat: DOC-FULL-001 ReadingMaterialRef
...
Rust 只保存 materialId,不区分 KnowledgeSource/TemporaryFile。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 19:26:48 +08:00
wangdl
22276bd44e
feat: DOC-FULL-000 完整架构文档 v2
...
7 设计决策、V2 核心模型、V1→V2 迁移、API 协议映射、项目结构、验收链路
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 19:23:56 +08:00
wangdl
dd360c88e2
fix: RagChatModule 导入 AiModule,修复 AiGatewayService 未注入
...
AiGatewayService 使用了 @Optional() 导致不报错但始终为 null,
sendMessage 永远走 fallbackReply。现在导入 AiModule 正确注入。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 13:38:57 +08:00
wangdl
2f816510a9
fix : #44 events.rs Mutex poison 时恢复而非静默丢事件
...
push_reading_event 改用 match 替代 if let,poison 时通过 into_inner 恢复缓冲区。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 13:00:37 +08:00
wangdl
e2c9d3063f
fix : #41 detect_material_type 只读前 8KB 做魔数检测
...
std::fs::read 整个文件 → File::open + read 前 8192 字节,节省大文件内存。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 12:59:19 +08:00
wangdl
0bca088933
fix : #48 markdown.rs 处理 FrontMatter 和 FootnoteDefinition 节点
...
FrontMatter → CodeBlock(language=yaml)
FootnoteDefinition → Paragraph
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 12:56:45 +08:00
wangdl
fb67b1c13d
fix : #39 from_bytes_separate 检查 RustCallStatus 返回值
...
分配失败时将 out 参数置零并 return,避免返回未初始化栈垃圾。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 12:55:37 +08:00
wangdl
fc9e4eec81
fix : #38 EVENT_BUFFER 增加 MAX_BUFFER_SIZE=1000 上限
...
push_reading_event 时超出上限自动丢弃最旧事件,防止未导出事件堆积导致 OOM。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 12:55:00 +08:00
wangdl
1a246445fe
feat: #37 Batch2+3 — 全部函数迁移到 out-pointer FFI
...
新增 8 个 _separate 函数:
- push_reading_event_separate
- update_reading_position_separate
- export_pending_events_separate
- create_note_anchor_separate
- search_markdown_blocks_separate
- search_text_content_separate
新增 lift_from_raw! 宏用于从原始 buffer 参数反序列化复杂类型。
原 #[uniffi::export] 函数保留(macOS/Android 路径可用)。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 12:51:50 +08:00
wangdl
c09caab0e6
feat: #37 Batch1 — detect_material_type/read_image_meta/read_text_stats/parse_text out-pointer FFI
...
新增 4 个 _separate 函数绕过 RustBuffer struct-passing:
- ffi_zx_document_ffi_detect_material_type_separate
- ffi_zx_document_ffi_read_image_meta_separate
- ffi_zx_document_ffi_read_text_stats_separate
- ffi_zx_document_ffi_parse_text_separate
提取 write_result_to_out! 宏和 read_str_input helper 减少样板代码。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 12:45:56 +08:00
wangdl
65c9ab8a50
fix : #47 移除所有调试 eprintln! 日志
...
清理 FFI 调试期间在 lib.rs 和 markdown.rs 中添加的 16 行 eprintln!
调试日志,spam iOS 控制台。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 12:40:48 +08:00
wangdl
bae6ef5726
feat: M3 completion — event buffer, FFI search/anchor, PDF strategy, quality fixes
...
Rust Core:
- events: global Mutex-buffered event queue (push/export/clear/update_position)
- image_meta: use ImageReader::format() for real decoded format instead of extension
- search: change match_start/match_end usize→u64 for FFI compatibility
- epub/pdf: module-level placeholder comments
FFI (UDL exposed, 12 total functions):
- Added: search_markdown_blocks, search_text_content, create_note_anchor
- Added: push_reading_event, update_reading_position, export_pending_events,
clear_exported_events
Docs:
- README: synced DocumentBlock model (Table.headers + HorizontalRule),
simplified dependency recommendations, removed nonexistent doc references
- docs/pdf-strategy.md: PDFKit vs PDFium vs MuPDF evaluation, 5 decisions,
platform strategy matrix, roadmap
Build:
- .cargo/config.toml: cargo xtask alias
- xtask: CLI implementation (test/build-ios/fixtures commands)
- fixtures: markdown/sample.md (9 block types), text/sample.txt
- XCFramework rebuilt, Swift bindings regenerated (1977 lines)
58 tests pass, zero warnings.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-02 21:23:26 +08:00
wangdl
25ad7490a3
feat: expose parse_text via FFI - returns paragraph blocks from TXT
2026-06-02 19:55:03 +08:00
wangdl
f8c0864b61
feat: expose parse_markdown via FFI - returns [DocumentBlock] with all 8 block types
2026-06-02 19:53:42 +08:00
wangdl
cfbee9ea53
feat: expose 3 FFI functions via UDL - detect_material_type, read_image_meta, read_text_stats
2026-06-02 19:45:54 +08:00
wangdl
917c7a4d2f
feat: iOS integration docs + demo app skeleton
2026-06-02 19:33:45 +08:00
wangdl
6a0ac9c15c
feat: iOS XCFramework build - device + simulator static libs
2026-06-01 20:09:29 +08:00
wangdl
ddcc5b392c
feat: generated Swift bindings from UDL (48KB)
2026-05-30 22:13:22 +08:00
wangdl
9481cc20e9
feat: UniFFI setup - UDL interface, build.rs scaffolding, cargo check passes
2026-05-30 22:11:27 +08:00
wangdl
65bc52bfd7
feat: case-insensitive search for Markdown blocks and TXT text
2026-05-30 21:58:59 +08:00
wangdl
b5f8e273a9
feat: ReadingEvent serde tests + NoteAnchor with from_position constructor and tests
2026-05-30 21:18:30 +08:00
wangdl
b3a7fe0414
test: ReadingPosition serde round-trip tests for all 6 variants
2026-05-30 21:05:34 +08:00
wangdl
8166878bf8
feat: image metadata reading - width, height, format, file_size with fixture test
2026-05-30 20:59:50 +08:00
wangdl
af58a35b0a
feat: TXT text reading - paragraph parsing, line/word stats
2026-05-30 20:55:30 +08:00
wangdl
c390718c15
feat: Markdown parsing with comrak - GFM tables, strikethrough, tasklist, all 11 block types
2026-05-30 20:50:54 +08:00
wangdl
43010221ff
feat: detect_material_type - file type identification via magic bytes + MIME + extension
2026-05-30 20:34:30 +08:00
wangdl
a0aaf9b713
docs: app-rust-bridge - complete FFI call protocol
2026-05-30 20:27:52 +08:00
wangdl
8042a9d92e
feat: core data models - MaterialType, DocumentBlock, ReadingPosition, ReadingEvent, NoteAnchor, SearchResult, DocumentError
2026-05-30 20:22:16 +08:00
wangdl
5f34b871ba
docs: architecture, supported-formats, event-protocol, reading-position, ios-integration
2026-05-30 20:16:51 +08:00
wangdl
086006a252
chore: add .gitignore, remove target/ from tracking
2026-05-30 18:35:29 +08:00
wangdl
c8f9d64fd8
fix: add minimal lib.rs declarations to pass cargo check
2026-05-30 18:35:20 +08:00
wangdl
e76f253260
chore: init Rust workspace skeleton with crate structure
2026-05-30 18:33:50 +08:00
wangdl
785715c13a
Initial commit: README with technical boundary and architecture
2026-05-30 18:14:08 +08:00