|
|
4a87c552cc
|
新增: F-260619-01 任务可关联灵感(tasks.idea_id 1对1 单向)
- df-storage V20 迁移:tasks 加 idea_id TEXT REFERENCES ideas(id)(填预留空位,
幂等 column_exists 探测)+ V9_SQL 同步 + TaskRecord.idea_id + task_repo SQL/SELECT + 白名单
- AI 工具 create_task 加 idea_id 参数;update_task 经白名单自动支持
- IPC commands/task.rs CreateTaskInput 加 idea_id
- 前端 types TaskRecord/CreateTaskInput idea_id + TaskDetail.vue 关联灵感展示
(router-link 友好 title 非裸 id)+ i18n
- 补 idea_id 字段:df-mcp tools / df-nodes 测试 helper
- 单向 1对1,Option 可空,复用 projects.idea_id 模式,老任务 None 兼容
自验: df-storage 47 passed(含 V20 2)+ workspace EXIT 0 + vue-tsc EXIT 0
|
2026-06-19 21:03:18 +08:00 |
|
|
|
2f8b13ff7c
|
增强: 任务查询支持按状态过滤(list_tasks status)
- AI 工具 list_tasks: schema 加 status 参数 + handler 内存过滤
(todo/in_progress/in_review/testing/blocked/done/cancelled)
- df-mcp list_tasks: handler 加 status 过滤(MCP 对外一致)
(spec 声明待补:中文 Edit 编码匹配限制,后续补)
自验: workspace EXIT 0 + df-mcp cargo check EXIT 0
|
2026-06-19 19:54:16 +08:00 |
|
|
|
d3e7640b8d
|
新增: 消息级溯源 P1 + 修复流式失败重试(UX-260619-06)
消息级溯源 P1(溯源字段升级):
- ContextManager 加 last_assistant/last_user_message_id 取消息 id
- audit 6 处 message_id 接真值(替换 P0 None 占位)
- 知识提炼 source_ref 升级 conv_msg:{id}(知识生命线 extracted/referenced 双事件)
- 4 处 build_knowledge_context 调用方传 user message id
- 老数据 id=None 降级 conv:{id} 兼容
流式失败重试修复(UX-260619-06):
- 症状1(回答一半消失):AiError 收尾前 flushCurrentText 保留部分回复到占位气泡
(原仅 AiAgentRound/AiCompleted 回填,AiError 清 currentText 致部分回复丢失)
- 症状2(重试报"没有可重新生成的回复"):ai_regenerate pop_last_assistant_round 返 false 时
末尾是 user(流式中途失败这轮 assistant 未持久化)直接从该 user 重跑(等价重发)
1214 连续 user 已由 merge_consecutive_users(7c98134)修,本批补失败重试链路
自验: workspace EXIT 0 + cargo test 全绿 + vue-tsc EXIT 0
|
2026-06-19 19:54:16 +08:00 |
|
|
|
cea0c71546
|
修复: df-mcp evaluate_idea 写回失败感知 + list_trash DB 错误感知(CR-11 ⚪2)
CR-260619-11 审查 ⚪2 可选改进(MCP 对外场景,非阻塞):
- evaluate_idea: 写回 scores 失败返 err(原 let _ 丢弃)+ 响应用写回后 rec(原 idea 旧版本)
- list_trash: DB 错误返 err(原 unwrap_or_default 吞错误返空列表对外误导)
df-mcp 8 passed 无回归
|
2026-06-19 19:33:40 +08:00 |
|
|
|
f217e39bfe
|
新增: MCP Server(df-mcp crate + stdio 协议 + CLI 子命令)
依据 F-260619-02 设计,对外暴露数据层接入 Claude Code/Cursor:
- 新建 df-mcp crate:JSON-RPC 2.0 over stdio(initialize/tools/list/tools/call)
- 暴露 19 数据层工具(项目/任务/灵感/工作流/回收站),复用 df-storage Repo 零重复 CRUD
- 三层安全降级:High 风险(delete/purge/run_workflow)tools/list 不暴露+dispatch 拒+handler 二次拒;Medium 允许+审计日志;--read-only 仅 Low
- 不暴露文件系统工具(防绕过应用内路径校验)
- Tauri CLI 子命令 devflow mcp-server [--db/--read-only/--print-config]
- SQLite WAL 已启用(复用 Database::open),应用与 MCP server 并发写安全
自验: df-mcp 8 passed + workspace EXIT 0
|
2026-06-19 19:24:02 +08:00 |
|
|
|
e981c1492a
|
新增: 消息级溯源 P0 地基(ChatMessage.id + ai_messages 拆表 + 迁移 + Repo)
依据消息拆分存储设计 + 消息级溯源设计 P0(地基,P1 溯源/P2 切读待后续):
- df-ai-core ChatMessage 加 id 字段(Option<String> serde 向前兼容)+ new_message_id(AtomicU64+ts 并发安全)
- 6 构造器生成 id,老 JSON 无 id → None 兼容
- df-storage V21 一次原子迁移:建 ai_messages 表 + ai_tool_executions.message_id 列 + 全量数据迁移(分批+坏数据容错+COUNT 幂等)
- AiMessageRecord + AiMessageRepo(insert_batch/list_by_conversation/delete_range/update_status/update_content_by_tool_call_id)
- audit message_id 列补建(conversation_repo/settings 白名单)
- src-tauri title.rs/finalize.rs 字面量占位(P1 接真值)
自验: df-storage 45 passed + df-ai-core 28 passed + workspace EXIT 0
|
2026-06-19 19:24:02 +08:00 |
|
|
|
db129fd78f
|
修复: AI 消息卡片友好展示
- update_task 卡片后端补返 title + 前端 title 优先 + i18n 文案对齐(UX-260619-04,防裸 UUID id 辨识度低)
- anthropic_compat 合并连续 user 块,修 GLM 1214 协议交替违规(B-260619-03)
|
2026-06-19 18:58:49 +08:00 |
|
|
|
8da6bdcec2
|
新增: AI 工具意图识别层 + 文件访问权限模型 Phase B+C
会话意图识别层(intent.rs / df-ai crate):
- Intent 枚举 11 态 + recognize 规则识别(关键词+权重+优先级)+ tool_subset_for 工具子集映射
- 模态接口预留 None,独立模块待接入 loop,36 单测
文件访问权限模型 Phase B+C(F-260619-03):
- Phase B 会话临时白名单 + 循环挂起 + DirAuthDialog 弹窗(仅本次/未来都允许/拒绝)
- Phase C 系统目录黑名单(Win System32/Program Files;Unix /etc /usr...)分段匹配 + 写操作约束
- 已审 CR-260619-09 ✅ PASS
|
2026-06-19 18:58:48 +08:00 |
|
|
|
998a2f243d
|
文档: 架构方案文档(意图识别论证+多主题愿景/论证+文档物理分类+边界清晰化)
squash合并:
- 意图识别层论证(8维度+10业界佐证)
- 多主题上下文管理愿景+并存论证+补充论证(多轮agentic)
- 架构设计文档物理分类(四子目录+INDEX+命名规范+引用同步+边界清晰化)
- 前端架构技术债清单归档
|
2026-06-19 15:04:04 +08:00 |
|
|
|
a2330de2a8
|
重构: 拆human_node人工节点(strategy核心库)
- 新建 df-nodes/human_node_helpers.rs(32行): REJECT_KEYWORDS + is_reject_decision + contains_reject(B-260615-05拒绝语义保留)
- human_node.rs 850→831: HumanNode struct+impl+tests保留 + use helpers(impl块约束主体内联)
- lib.rs: mod human_node_helpers
主代兜底(独立 -p df-nodes): cargo 0 + test 82(B-260615-05 reject全绿)
strategy: 核心库, 纯函数+常量抽离, impl保留; human_node主体内联execute大(impl约束, 可拆有限)
git add指定(df-nodes/*)
|
2026-06-19 11:47:40 +08:00 |
|
|
|
356c8f27f8
|
重构: 拆adversarial对抗评估(strategy核心库)
- 新建 df-ideas/adversarial_helpers.rs(366行): 6类型(EvaluatedBy/AdversarialEval/Argument/AnalystAnalysis/AssessmentLevel/Recommendation) + SYSTEM_PROMPT + 8纯fn(build_adversarial_prompt/parse_llm_eval/extract_json/parse_assessment_level/parse_recommendation/priority_label/assessment_desc/action_hint) + LlmEvalRaw中间结构
- adversarial.rs 930→596: AdversarialEngine impl保留 + pub use helpers(外部idea.rs路径零变更)
- lib.rs: mod adversarial_helpers(私有)
- ARC-260618-01-e(evaluate_with_llm一致性)逻辑保留(待决策, doc标注)
主代兜底(独立 -p df-ideas 避 df-ai): cargo 0 + test 20
strategy: 核心库, 纯函数/类型抽离, evaluate主入口+ARC-e保留
git add指定(df-ideas/*)
|
2026-06-19 11:45:26 +08:00 |
|
|
|
35c976793b
|
重构: 拆ai_node AI节点(strategy核心库)
- 新建 df-nodes/ai_node_helpers.rs(298行): AiNodeParams/ResolvedProvider + resolve_and_parse/provider_from_params/resolve_provider/resolve_from_record/parse_params/parse_review_json/truncate_for_summary/gate_should_block + REVIEW_SYSTEM_PROMPT
- ai_node.rs 1107→835: AiNode/AiSelfReviewNode struct+impl+tests保留 + use helpers
- lib.rs: mod ai_node_helpers
主代兜底(独立 -p df-nodes 避 df-ai/前端): cargo 0 + test 82(1 ignored GLM真调)
strategy: 核心库自底向上, 纯函数/类型抽离, impl保留, SW-09 helper随之搬; 私有mod零外部可见性变化
git add指定(df-nodes/*)
|
2026-06-19 11:39:26 +08:00 |
|
|
|
2d6eff66a7
|
重构: 拆provider.rs df-ai-core核心类型(strategy核心库)
- 新建 df-ai-core/types.rs(221行): 13类型(CompletionRequest/ContentPart/ChatMessage/MessageRole/ToolDefinition/ToolCall/TokenUsage/StreamChunk/ToolCallDelta等) + now_millis_i64
- provider.rs 572→369: pub use crate::types::* re-export透明 + impl/LlmProvider trait保留
- lib.rs: pub mod types
主代兜底(独立 -p df-ai-core 避 df-ai anthropic_compat 其他会话E0599): cargo check 0 + test 24
strategy: 核心库自底向上, 纯类型抽离, re-export稳定(df_ai::provider::* 与 df_ai_core::provider::限定路径双通, df-ideas印证)
git add指定(df-ai-core/*)
核心库拆分完整: context/anthropic/openai/scan/model_fetch/migrations/executor/model_probe/provider 八大文件
|
2026-06-19 04:57:13 +08:00 |
|
|
|
c908a570e5
|
重构: 拆model_probe模型探测(strategy核心库)
- 新建 df-ai/model_probe_helpers.rs(137行): PRESETS_JSON/presets(OnceLock) + heuristic_infer + has_vision_token
- model_probe.rs 388→251: probe主入口 + use helpers
- lib.rs: mod model_probe_helpers
主代grep核验(不cargo避audit-split-5中间态): model_probe.rs use+probe + lib.rs mod印证; agent df-ai独立自验cargo 0+test 119
strategy: 核心库自底向上, 纯函数抽离, pub(super)可见性, helper私有mod零API表面扩大
git add指定(df-ai/*)
|
2026-06-19 04:50:25 +08:00 |
|
|
|
a81cab074a
|
重构: 拆executor工作流执行器(strategy核心库·抽测试)
- 新建 df-workflow/executor_helpers.rs(314行): 5测试节点mock + 5测试用例(含3 SW-01 TOCTOU)
- executor.rs 513→210: 删内联tests + #[path] mod tests; run主体49-205保留(SW-01 TOCTOU :130-186零改动)
- agent偏离合理: run无可抽纯helper(全内联+self耦合), 改抽测试降阅读噪音(305行tests→helper)
主代兜底: cargo check --workspace 0 + test df-workflow 23(含TOCTOU) + grep #[path] mod tests印证
strategy: 核心库, 测试代码抽离(cfg(test)零库影响), SW-01 TOCTOU保留
git add指定(df-workflow/*)
|
2026-06-19 04:47:33 +08:00 |
|
|
|
a0987bad7d
|
重构: 拆migrations SQL迁移(strategy核心库)
- 新建 df-storage/migrations_helpers.rs(103行): column_exists纯查询fn + 4测试
- migrations.rs 659→541: use column_exists + 删原fn+测试, run/migrate_v1-v19主入口保留
- lib.rs: pub mod migrations_helpers
主代grep核验(不cargo避executor-split df-workflow中间态): migrations.rs use+column_exists 16处调用 + lib.rs pub mod印证; agent df-storage独立自验cargo 0+test 35+11
strategy: 核心库自底向上, 纯查询函数抽离(PRAGMA无副作用, SQL行为不变), pub(crate)零外部暴露扩大
git add指定(df-storage/*)
|
2026-06-19 04:46:25 +08:00 |
|
|
|
f5f2358799
|
重构: 拆model_fetch模型获取(strategy核心库)
- 新建 df-ai/model_fetch_helpers.rs(400行): build_models_url/is_non_chat_model/filter_chat_models + ModelsList/ModelEntry + 27测试
- model_fetch.rs 21KB→6KB(176行): fetch_model_names/fetch_and_probe入口 + IO fn + use helpers
- lib.rs: mod model_fetch_helpers
防污染核验: extract_error_diag不存在(以源码为准非背景声明), probe在model_probe
主代兜底: cargo check --workspace 0 + test df-ai 119
strategy: 核心库自底向上, 纯函数抽离, ModelsList pub(crate)
git add指定(df-ai/*)
|
2026-06-19 04:44:30 +08:00 |
|
|
|
d6e45f7bc6
|
重构: 拆scan.rs项目扫描(strategy核心库)
- 新建 df-project/scan_helpers.rs(324行): ImageRef+BADGE常量+is_badge_image/collect_images/strip_readme_noise/is_pure_badge_line/is_toc_line + 8测试
- scan.rs 1015→741: #[path]mod scan_helpers + pub use ImageRef + use collect_images/strip_readme_noise(规避scan.rs→scan/mod.rs目录化大改)
- re-export ImageRef路径稳定(project.rs/tool_registry.rs零改动)
主代兜底: cargo check --workspace 0 + test df-project 29 + grep #[path]/pub use印证
strategy: 核心库自底向上, 纯函数抽离(无IO文本规则), #[path]规避目录化大改
git add指定(df-project/*)
|
2026-06-19 04:41:28 +08:00 |
|
|
|
a3835e2acb
|
重构: 拆openai_compat协议适配(strategy核心库·对齐anthropic)
- 新建 df-ai/openai_helpers.rs(231行): apply_openai_sse纯函数 + 13 struct(OpenAi*字段pub(crate))
- openai_compat.rs 809→597: 删抽离+use引入, Provider impl保留(impl块约束: new/convert_request/parse_tool_calls/LlmProvider trait)
- lib.rs: pub mod openai_helpers
主代兜底: cargo check --workspace 0 + test df-ai 119
strategy: 核心库自底向上, impl块约束(Provider方法保留只抽纯函数/类型), 对齐anthropic_helpers模式
git add指定(df-ai/*)
协议适配双拆完整: anthropic_compat + openai_compat 均helpers抽离
|
2026-06-19 04:36:42 +08:00 |
|
|
|
55bc1e1b23
|
重构: audit第三批cache + anthropic_compat拆分(strategy并行)
- audit 第三批: 新建 audit/cache.rs(151行 find_cached_high_risk_result/canonical_args_key/sort_object_keys/PENDING_APPROVAL_PLACEHOLDER), audit/mod.rs 586→451(-135); pub(crate) re-export, F-09 per_conv保留
- anthropic_compat 拆分: 新建 df-ai/anthropic_helpers.rs(223行 apply_anthropic_event + 5 struct + 2常量), anthropic_compat.rs 1036→842; Provider impl保留(impl块约束), 字段pub(crate)
主代兜底: cargo check --workspace 0 + test df-ai 119 + test devflow 98
strategy: 核心库自底向上, 单批1-2文件原子, impl块约束(Provider方法保留只抽纯函数/类型)
git add指定(audit/* + df-ai/*, 不含其他会话)
|
2026-06-19 04:31:19 +08:00 |
|
|
|
e0ffd98223
|
重构: 拆audit.rs第一批reason helper(strategy)
- audit.rs → audit/mod.rs(959→812行) + 新建 audit/reason.rs(167行)
- 抽离 reason helper: resolve_project_label/resolve_task_label/build_approval_reason(3 fn自成闭包, pub(super))
- re-export 调用方零变更(commands::ai::audit::* 路径透明, 4处调用方+mod re-export核验)
- F-09 batch2 per_conv 保留(本批只搬 reason helper, conv_id路由不动)
主代兜底: cargo check --workspace 0 + test 98 + grep mod reason/use印证
strategy: 单批1-2文件原子; audit/mod.rs余812行(后续批restore/audit_finalize/find_cached)
|
2026-06-19 04:11:47 +08:00 |
|
|
|
f026880fa7
|
重构: 拆AiChat God第二批ChatInput(strategy)
- 新建 ai/ChatInput.vue(641行): 输入框+图片粘贴/拖拽+技能/联想+@mention+发送/停止(4块独立逻辑)
- AiChat.vue 3663→3128行(-535): ChatInput template+script迁移, store共享(useAiStore/useProjectStore单例)
- props editingMsgId + emit sent/error/cancel-edit + expose focus/startEditFocus/clearInput/hasUnsentInput/sendExamplePrompt
边界: scrollToBottom/showToast/editingMsgId留父(emit回调); ChatInput 641>500(4块逻辑, 后续可拆useImageInput/useSkillMention composable)
主代兜底: vue-tsc 0 + grep ChatInput抽离/AiChat emit绑定印证
strategy: 单批1-2文件原子; AiChat余3128行(后续MessageList核心/TopBar/QueueList)
|
2026-06-19 04:04:35 +08:00 |
|
|
|
63fe0a6375
|
重构: 拆context.rs核心库(strategy自底向上·纯函数抽离)
- 新建 df-ai/context_helpers.rs(195行): 纯函数/类型/常量(TokenEstimator/ContextConfig/MessageGroup/TrackedMessage/classify_group/EvictionUnit/PROTECT_COUNT/TOOL_MISSING_PREFIX)
- context.rs 1332→1178行: 保留ContextManager struct+impl, pub use重导出(外部agentic.rs/mod.rs路径不变)
- lib.rs: pub mod context_helpers
Rust impl块约束: ContextManager方法未动一个字符, 纯函数搬迁零行为变更
主代兜底: cargo check --workspace 0 + test df-ai 119 + grep抽离项/pub use印证
strategy: 自底向上核心库优先, 单批1-2文件原子操作
|
2026-06-19 03:31:50 +08:00 |
|
|
|
e6dbb14c5d
|
重构: commands.rs拆分chat域(strategy单批1-2文件)
- commands.rs → commands/mod.rs(1829→725行) + 新建 commands/chat.rs(1147行, 13 chat IPC + finalize_pending_placeholders + PendingToolCallInfo)
- re-export三级透传: chat::* → commands::* → ai::*(lib.rs invoke_handler 9处零改动 + 前端零改动)
- 签名/行为原样搬迁(F-09 batch4 conv_id 决策e保留);零调用方预留保留
strategy: 单批1-2文件防上下文溢出 + 原子(新文件→旧改→编译验证)
主代兜底: cargo check --workspace 0 + test 98 + grep 13IPC/re-export三级印证
杂项销账: B-260617-11 tauri.conf.json ["nsis"]已入库关闭(WATCH跨平台) + CR-07 batch4待审登记
|
2026-06-19 03:15:03 +08:00 |
|
|
|
2c8764abee
|
重构: crud.rs按表拆分(SMELL-P1-9) + F-09批1 PerConvState数据结构
- SMELL-P1-9: crud.rs 2212行→crud/6文件(mod/settings/project_repo/task_repo/conversation_repo/idea_repo)
re-export pub use *_repo::* 零调用方改动,宏 pub(crate) use + 子模块 use super::impl_repo
基线测试锁12表白名单+13Repo构造
- F-09 批1: PerConvState struct(9字段对齐AiSession::new)+AiSession.per_conv HashMap+conv()/conv_read()访问器+3单测
纯新增无行为变化,b-1主代自主裁决采纳,批2迁移承接
主代统一兜底: cargo check --workspace 0 + df-storage 35+11 + devflow 96 passed
|
2026-06-19 01:34:59 +08:00 |
|
|
|
60b01d03ee
|
重构: tool_registry拆分及多批改进
|
2026-06-19 00:10:14 +08:00 |
|
|
|
a2871a66e0
|
优化: AI Chat全栈多批审查修复与架构清理(risk_level清理/路由解耦/工具渲染/测试补测/死代码)
|
2026-06-18 22:57:19 +08:00 |
|
|
|
f6e4e824fa
|
修复: 补提 adversarial+project CompletionRequest reasoning_content 字段(74003bc 遗漏)
|
2026-06-17 18:44:28 +08:00 |
|
|
|
74003bc04f
|
修复: DeepSeek reasoning_content 全链路透传(跨6 crate补字段+映射+agentic loop累积回传)
|
2026-06-17 18:08:04 +08:00 |
|
|
|
a622bdca61
|
修复: 队列发送失败回填不丢消息+池权重revert+lang解析DRY+注释变量名修正
|
2026-06-17 03:55:30 +08:00 |
|
|
|
bac3c76fa2
|
修复: B-03b-R10③工作流事件补execution_id治本并发串扰(emit填+消费exec_id守卫)
|
2026-06-17 03:36:38 +08:00 |
|
|
|
e3cd44802a
|
新增: F-05多模态Phase2a后端(ContentPart+parts字段+provider图片块+truncate防撑爆)
|
2026-06-17 03:09:10 +08:00 |
|
|
|
4be15912cd
|
重构: df-core改名df-types(类型库语义准+全workspace机械改名54处)
|
2026-06-17 02:44:34 +08:00 |
|
|
|
e16d038bb2
|
新增: AiNode自审闸门阶段3(gate_should_block+verdict=fail阻断下游)
|
2026-06-17 02:36:54 +08:00 |
|
|
|
79b6a43095
|
新增: F-04多Provider负载均衡池(数据层+选择器+并发原语)+CR-52白项
|
2026-06-17 02:04:58 +08:00 |
|
|
|
63bff8bf96
|
新增: F-15上下文压缩基础(compress_prompt四段式+compress_via_llm+context辅助方法)
|
2026-06-17 00:50:47 +08:00 |
|
|
|
2ddfea67c7
|
新增: F-01阶段5模型路由调用点接入
|
2026-06-17 00:33:44 +08:00 |
|
|
|
8a142c212c
|
优化: F-15上下文基础(is_active正面白名单+push token仅active计入 零行为变化)
|
2026-06-17 00:14:38 +08:00 |
|
|
|
8dad15ecc1
|
新增: F-01模型能力阶段4路由器(ModelRouter+select 7步过滤链)
|
2026-06-16 23:59:09 +08:00 |
|
|
|
107b8486ae
|
新增: F-01模型能力阶段3厂商模型列表拉取(model_fetch+协议分派+噪音过滤)
|
2026-06-16 23:47:56 +08:00 |
|
|
|
b3e78e6061
|
新增: F-01模型能力阶段1+2(ModelConfig数据模型+model_probe探测器+df-storage兼容V18)
|
2026-06-16 23:33:45 +08:00 |
|
|
|
84a6fc41d1
|
新增: AiNode provider_id注入链(resolve_provider三路径+FR-S1 api_key不进config)
|
2026-06-16 23:07:39 +08:00 |
|
|
|
766f235ab7
|
重构: secret纯密钥逻辑下沉df-storage(方案B避循环依赖,12调用点零改)
|
2026-06-16 22:57:43 +08:00 |
|
|
|
c10adaf0b0
|
新增: AiNode自审ai侧(AiNode持db写产出+ai_self_review节点+DAG透传)
|
2026-06-16 22:40:55 +08:00 |
|
|
|
539b5ed63e
|
新增: TaskRecord加output_json产出字段+V17迁移(决策a AiNode自审闭环)
|
2026-06-16 22:29:21 +08:00 |
|
|
|
129f0f0156
|
优化: 对抗评估clamp去冗余+JSON提取正则兜底+update_task注释对齐status收口
|
2026-06-16 22:20:14 +08:00 |
|
|
|
4bdaac5983
|
修复: df-nodes测试回归(status收口fixture改advance_status_atomic)
|
2026-06-16 21:30:56 +08:00 |
|
|
|
b94e74a96d
|
新增: 推进链阶段3收口(advance_task/run_workflow工具+status状态机收口)
|
2026-06-16 21:20:41 +08:00 |
|
|
|
dfe0096498
|
新增: F-03对抗评估接LLM+F-02纯技能调用标题+i18n@转义
|
2026-06-16 21:07:42 +08:00 |
|
|
|
2069f79198
|
重构: df-ai-core trait下沉拆crate+导入历史项目批量扫描
|
2026-06-16 20:19:55 +08:00 |
|