wangdl
8ab767ee4a
fix: close_reading_session_v2 takes timestamp, sets closed_at_ms
...
Review finding #3 : close now accepts timestamp_ms and sets closed_at_ms
automatically, removing the need for a separate set_session_closed_at_ms call.
set_session_closed_at_ms retained for override use cases.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 21:33:42 +08:00
wangdl
b02efe18c7
feat: FFI DTO V2 completion - add EventBufferStateV2 (DOC-FULL-007)
...
- 新增 EventBufferStateV2 结构体 (total/pending/exported/failed)
- 新增 get_event_buffer_state_v2() 方法
- FFI 导出 EventBufferStateV2 类型 + 方法
- FFI V2 exports 审计: 6 DTO + 9 方法全部到位
- V1 保留 deprecated,V2 接口显式带 V2 后缀
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 21:13:56 +08:00
wangdl
7d678b4bb3
feat: ReadingSession V2 complete (DOC-FULL-002)
...
- 新增 ReadingSessionStatus::Interrupted / Failed
- ReadingSessionV2 增加 closedAtMs 字段
- 新增 mark_session_interrupted_v2 / mark_session_failed_v2
- 新增 get_active_session_v2 (按 materialId 查 active session)
- 新增 set_session_closed_at_ms (独立设置关闭时间)
- FFI 暴露 6 个新接口
- SessionError 补充 AlreadyInterrupted / AlreadyFailed
- 167 tests passed / 0 failed
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 21:03:19 +08:00
wangdl
d1c6edd57a
feat: ReadingMaterialRef V2 (DOC-FULL-001)
...
- 新增 ReadingMaterialRefV2: materialId/filePath/fileName/fileType
(camelCase) + mimeType/fileSize/contentHash/createdAtMs (可选)
- V1 ReadingMaterialRef 标记 deprecated,保留向后兼容
- session_v2 迁移到 V2 类型
- FFI 层暴露 V2 类型,start_reading_session_v2 接收 V2
- 明确禁止字段: readingTargetType/userId/knowledgeBaseId
- 160 tests passed / 0 failed
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 20:59:43 +08:00
wangdl
c67dbe3e3d
fix: add reload_stale_events_v2 FFI export + update UDL with V2 types + XCFramework rebuild
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-09 19:58:07 +08:00
wangdl
2978fd4de9
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
ff7f681cd4
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
48101e7bad
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
0ad7734d2d
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
794b0f91b3
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
2aeb72f1e3
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
08f5f0559b
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
942ac06230
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
87814802b1
feat: expose parse_text via FFI - returns paragraph blocks from TXT
2026-06-02 19:55:03 +08:00
wangdl
7b827ca01a
feat: expose parse_markdown via FFI - returns [DocumentBlock] with all 8 block types
2026-06-02 19:53:42 +08:00
wangdl
4c8a50daec
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
9481cc20e9
feat: UniFFI setup - UDL interface, build.rs scaffolding, cargo check passes
2026-05-30 22:11:27 +08:00
wangdl
8042a9d92e
feat: core data models - MaterialType, DocumentBlock, ReadingPosition, ReadingEvent, NoteAnchor, SearchResult, DocumentError
2026-05-30 20:22:16 +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