caoxiaozhu
|
140efd1a2a
|
fix(agent-assets): allow admin access to platform rules
|
2026-07-20 10:30:22 +08:00 |
|
caoxiaozhu
|
74fafc86d3
|
fix(runtime): provision local document and vector services
|
2026-07-20 10:30:08 +08:00 |
|
caoxiaozhu
|
15da295963
|
fix(settings): reconcile secret status and model drafts
|
2026-07-20 10:29:49 +08:00 |
|
caoxiaozhu
|
044a5669fe
|
fix(employees): preserve age across birthday boundaries
|
2026-07-20 10:29:42 +08:00 |
|
caoxiaozhu
|
c59990dc35
|
fix(auth): bind admins to enterprise tenant context
|
2026-07-20 10:29:30 +08:00 |
|
caoxiaozhu
|
372e35d62a
|
fix(migrations): repair tenant identity lookup indexes
|
2026-07-20 10:28:31 +08:00 |
|
caoxiaozhu
|
07241b4648
|
fix(docker): manage local postgres in default compose
|
2026-07-17 22:50:02 +08:00 |
|
caoxiaozhu
|
787bc3a481
|
feat(platform): close AI expense value loop
Add tenant-safe value, telemetry, connector, commercial, and production-readiness foundations.
|
2026-07-17 14:14:08 +08:00 |
|
caoxiaozhu
|
242d68c36f
|
feat(approval): add task workflow and waiver decisions
|
2026-07-16 16:52:12 +08:00 |
|
caoxiaozhu
|
28b834edd3
|
fix(approval): replay immutable action responses
|
2026-07-16 15:49:43 +08:00 |
|
caoxiaozhu
|
4940ebc419
|
feat(approval): add safe risk disposition workflow
|
2026-07-16 15:34:58 +08:00 |
|
caoxiaozhu
|
ee88a36baf
|
feat(ai): add tenant-safe hierarchical expense learning
|
2026-07-16 14:30:41 +08:00 |
|
caoxiaozhu
|
6bdf65bc24
|
feat(expenses): add authoritative pre-review workflow
|
2026-07-16 11:42:08 +08:00 |
|
caoxiaozhu
|
ae3f02c35a
|
feat(expense): add persistent zero-entry receipt association
|
2026-07-16 10:23:23 +08:00 |
|
caoxiaozhu
|
54754b5502
|
feat(ai): add personal expense application memory
|
2026-07-14 17:16:23 +08:00 |
|
caoxiaozhu
|
211f85d981
|
feat(ai): unify verified expense application workflow
|
2026-07-14 16:03:05 +08:00 |
|
caoxiaozhu
|
5b24630710
|
feat(ai): issue verified application preview decisions
|
2026-07-14 14:37:53 +08:00 |
|
caoxiaozhu
|
a662cfe6c3
|
feat(ai): add expense application feedback ledger
|
2026-07-14 11:10:55 +08:00 |
|
caoxiaozhu
|
5ed34c2b8f
|
feat(expenses): backfill historical claims into expense cases
|
2026-07-14 10:09:09 +08:00 |
|
caoxiaozhu
|
11275e4ba6
|
fix(migrations): enforce schema ownership safety
|
2026-07-14 09:23:34 +08:00 |
|
caoxiaozhu
|
1347366b95
|
feat(expenses): secure timeline and draft events
|
2026-07-14 00:07:07 +08:00 |
|
caoxiaozhu
|
22669a9071
|
feat(expenses): show unified expense event timeline
|
2026-07-13 16:58:51 +08:00 |
|
caoxiaozhu
|
a616b30cb2
|
fix(expenses): unify AI application submission transaction
|
2026-07-13 15:35:08 +08:00 |
|
caoxiaozhu
|
653eda0596
|
feat(auth): add opaque bearer sessions
|
2026-07-13 14:45:36 +08:00 |
|
caoxiaozhu
|
661990b27b
|
feat(expenses): add transactional expense case events
|
2026-07-13 11:58:48 +08:00 |
|
caoxiaozhu
|
9a84e125d0
|
merge: 飞轮 2 golden set 回归门禁
# Conflicts:
# server/src/app/models/__init__.py
|
2026-07-03 14:41:40 +08:00 |
|
caoxiaozhu
|
3a5fc3c09f
|
merge: 飞轮 1 few-shot 在线检索注入
|
2026-07-03 14:40:09 +08:00 |
|
caoxiaozhu
|
c7ba7bb453
|
feat(flywheel): golden case 管理 API 与评测单测
- 新增 GoldenCaseCreate/Read、GoldenEvalRequest/Read schema
- 新增 3 个端点:创建 golden case、按规则列表、手动触发 golden 评测
(不入门禁,供运营试跑)
- 单测 15 passed:单条 hit/severity 比对、集合 accuracy/precision/recall
聚合、空集降级、100% 通过/失败拦截、feature flag、异常降级
- 回归 test_agent_asset_service 27 passed(1 个预存失败与本改动无关)
|
2026-07-03 14:38:43 +08:00 |
|
caoxiaozhu
|
67c3f30eb2
|
feat(flywheel): golden set 回归门禁拦截风险规则发布
- 新增 RiskRuleGoldenEvaluator:在 GoldenCase 集上跑规则 manifest,复用
RiskRuleTemplateExecutor + _build_synthetic_claim,输出
accuracy/precision/recall,按 100% 通过硬阈值判定
- require_pass 门禁入口:未通过抛 PermissionError 并写
AgentAssetTestRun(test_type=golden) 记录;空集/异常/feature flag 关闭
一律降级放行,不阻塞发布主链路
- _publish_reviewed_working_version 在 test_passed 校验后接入门禁
(修订版 _publish_revision 留待下一轮)
|
2026-07-03 14:38:26 +08:00 |
|
caoxiaozhu
|
73aee622c7
|
feat(flywheel): 新增 GoldenCase 模型用于规则回归门禁
- 新增 golden_cases 表,承载版本化的风险规则黄金用例
(case_key/rule_code/values_json/expected_hit/expected_severity/status)
- 注册到 db/base.py 和 models/__init__.py,进入 Base.metadata
|
2026-07-03 14:38:14 +08:00 |
|
caoxiaozhu
|
52d57c3be7
|
test(flywheel): 补 few-shot 飞轮单测并沉淀开发文档
- embedding_provider:GLM/Ollama 分支、维度缓存、HTTP 错误降级
- few_shot_ingestion:confirmed/false_positive 入库、ignored 跳过、幂等去重、
create_feedback hook 触发、feature flag、吞异常
- few_shot_retrieval:去重、token 预算、超长截断;prompt 注入合并 examples + 向后兼容
- 容器内新增测试 20 passed;回归测试 35 passed(RAG/risk_observations/rule_generation)
- 沉淀 document/development/2026-07-03/feature/ai-data-flywheel 概念文档与 TODO,
飞轮 1 已勾选证据,飞轮 2-6 待后续迭代
|
2026-07-03 13:56:21 +08:00 |
|
caoxiaozhu
|
3a9d154783
|
feat(flywheel): few-shot 在线检索注入打通风险规则编译链路
- 新增 FewShotStore:独立 Qdrant collection few_shot_samples,向量 upsert/search/delete,
全程失败降级不阻塞主链路
- 新增 FewShotIngestionService:RiskObservation confirmed/false_positive → FewShotSample +
向量,带 sample_key 幂等去重
- 新增 FewShotRetriever:按 case 特征检索相似历史样本,去重 + token 预算 + 单条字符上限裁剪
- risk_observations.create_feedback commit 后挂 hook 自动入库,带 feature flag 和 try/except 兜底
- risk_rule_generation_prompt 新增 few_shot_samples 可选参数,合并进 examples 并标
source=historical_confirmed;risk_rule_generation 构造 prompt 前调 retriever,失败降级为空
|
2026-07-03 13:55:52 +08:00 |
|
caoxiaozhu
|
765cfb40f3
|
feat(flywheel): 抽公共 EmbeddingProvider 并新增 FewShotSample 模型
- 从 knowledge_rag_runtime 抽出 embedding 调用逻辑为独立 EmbeddingProvider,
复用现有 HTTP 纯函数,RAG 路径零回归
- 新增 FewShotSample 表模型(样本池),注册到 db/base.py 和 models/__init__.py
供 few-shot 飞轮沉淀已确认风险观测
|
2026-07-03 13:55:39 +08:00 |
|
caoxiaozhu
|
08f023243e
|
fix(web): 多 task 草稿自动保存后继续推进下一 task
useWorkbenchAiApplicationPreviewFlow 在自动保存草稿分支透传 onApplicationActionCompleted,
确保草稿/提交完成后仍能按 remaining tasks 推进,修复多 task 报销场景后续步骤不启动。
更新 application-context-submit/intent-planner-model 测试,补充 bug 日志与开发日志。
|
2026-06-29 20:17:36 +08:00 |
|
caoxiaozhu
|
6bdaeed6d4
|
chore: 忽略 .zcode 本地目录并更新规则表与开发日志
- .gitignore 新增 .zcode/(ZCode 工具本地配置,不入库)
- 更新交通/通信/差旅等财务规则表
- 补充 2026-06-25/26 开发日志(chat UI SaaS 化、主题企业 AI 风格、bug 日志)
|
2026-06-26 22:42:46 +08:00 |
|
caoxiaozhu
|
d5a8f84703
|
refactor(web): 应用外壳/差旅详情/报销创建视图适配主题与多 task
- AppShellRouteView/useAppShell 适配主题皮肤与会话入口
- TravelRequestDetailView/travelRequestDetailSetup 差旅详情适配,travel-request-detail-view.css 调整
- TravelReimbursementCreateView/useTravelReimbursementCreateViewLifecycle 创建视图适配
- 更新 app-shell-financial-assistant-entry/travel-request-detail-risk-advice 测试
|
2026-06-26 22:42:29 +08:00 |
|
caoxiaozhu
|
c4b5fcc067
|
feat(web): AI 工作台多 task 串行推进与会话适配
- useWorkbenchAiApplicationPreviewFlow/useWorkbenchAiActionRouter/useWorkbenchAiCommandIntents 支持 task1 完成后自动推进 task2,确认按钮直接拉起申请预览,草稿/提交成功后继续推进下一 task
- workbenchAiIntentPlannerModel/workbenchAiMessageModel/workbenchAiCommandIntentModel 适配多 task 意图规划与消息结构
- aiApplicationPreviewActions/aiApplicationPrecheckModel/aiExpenseDraftModel/aiWorkbenchConversationStore 草稿与会话存储适配
- PersonalWorkbenchAiMode 与样式适配,更新 preview-actions/expense-draft/conversation-store/fast-preview/action-router/command-intent/intent-planner 测试
|
2026-06-26 22:42:23 +08:00 |
|
caoxiaozhu
|
5753899eb3
|
feat(web): 主题皮肤系统与 LLM 设置面板重构
- useThemeSkin 重构主题皮肤应用逻辑,支持企业 AI 风格主题切换
- settingsModelHelper 新增主题与模型表字段映射,useSettings 适配
- LlmSettingsPanel/SettingsView 面板重构,支持多模型行编辑与主题区块
- settings-view.css 适配主题样式,新增 settings-theme-section 测试,更新 settings-llm-section 测试
|
2026-06-26 22:42:00 +08:00 |
|
caoxiaozhu
|
9c3fa80d22
|
feat(server): 设置持久化新增 LLM 模型表与主题字段
- SettingsLlmForm 新增 models 列表(SettingsModelRow:slot/provider/url/apiKey/modelId/type),支持多模型行持久化
- settings 服务读写模型表与主题相关字段,更新 test_settings_persistence 测试
|
2026-06-26 22:41:40 +08:00 |
|
caoxiaozhu
|
43c3ff860c
|
fix(web): steward plan 确认按钮直接拉起申请预览,不丢失 remaining tasks
根因:steward plan 的'确认创建申请单'按钮 action_type 是
ASSISTANT_SCOPE_ACTION_SWITCH,handleInlineSuggestedAction 没有匹配分支,
落到 startInlineConversation 重新发起对话,steward_remaining_tasks 完全丢失。
修复:当 payload 有 steward_current_task + session_type=application +
task_type=expense_application 时,直接调 startAiApplicationPreviewFromAction
(会透传 steward_remaining_tasks 到申请预览 message),不走 startInlineConversation。
这样保存草稿成功后,targetMessage 上有 stewardRemainingTasks,
buildApplicationPreviewNextTaskAction 能生成'继续处理费用报销'按钮。
|
2026-06-26 11:40:44 +08:00 |
|
caoxiaozhu
|
3e4b1e1597
|
fix(web): 保存草稿/提交成功后也推进到下一个 task
之前多 task 串行推进只在 steward action 执行链(executeInlineStewardAction)
生效,但保存草稿走的是 application preview 流(executeInlineApplicationPreviewAction),
成功后只显示'查看单据',不会提示继续下一个报销 task。
- startAiApplicationPreviewFromAction 透传 steward_remaining_tasks 到 preview message
- startAiApplicationPreview 把 stewardRemainingTasks 存到 message 上
- executeInlineApplicationPreviewAction 成功后:检查 targetMessage.stewardRemainingTasks,
有剩余 task 则追加'继续处理费用报销'按钮(复用 steward_confirm_flow 分支)
- 新增 buildApplicationPreviewNextTaskAction 辅助函数
现在保存草稿/提交申请成功后,用户会看到:[查看单据] [继续处理费用报销]
|
2026-06-26 11:21:16 +08:00 |
|
caoxiaozhu
|
3a5664c4da
|
feat(web): 多 task 串行推进 - task1 完成后自动展示 task2 确认按钮
场景:'出差并且报销招待费'→LLM 拆出 2 个 task→先做完出差申请→
完成后自动展示'继续处理费用报销'按钮→用户确认后推进到报销流程。
- 新增 buildNextTaskSuggestedAction:从 actionPayload.steward_remaining_tasks
取第一个剩余 task,根据 task_type 生成推进按钮(steward_confirm_flow)
- executeInlineStewardAction 成功后:除'查看单据'外,追加'继续处理下一个 task'按钮
- 用户点击推进按钮复用 handleInlineSuggestedAction 的 steward_confirm_flow 分支
- 前端 28 passed 无回归
|
2026-06-26 10:51:43 +08:00 |
|
caoxiaozhu
|
d139a63e64
|
refactor(server): 意图识别改 LLM 驱动,规则只做闲聊拦截+resume 兜底
规则不再判断'这是哪个业务场景'——那交给 LLM function call。
规则只保留两个不可替代职责:闲聊拦截(省 LLM 成本)、resume 确定性兜底。
- gate_classify 简化:删掉规则匹配门(94 词 CHOICE 匹配)和 ambiguous 提前判断
- 新增 _is_lightweight_off_topic:只拦 greeting+meaningless,不依赖业务关键词
- HANDLER_ONLY 改为 LLM 输出驱动:LLM 返回 query_travel_standard 后转 handler
- 图拓扑简化:gate_classify 只输出 off_topic|resume|model_intent
- 验证:76 passed;复合场景'出差并且报销招待费'→LLM 返回 2 task
|
2026-06-26 10:19:04 +08:00 |
|
caoxiaozhu
|
8a2ae6eb75
|
fix(server): gate_classify 复用 _classify_irrelevant_input 修复 off_topic 误杀
回归问题:P1.3 重构时 gate_classify 的 off_topic 门用了 scene_registry
的 35 个 signal_keywords,丢掉了 legacy 的 73 个关键词(城市名/时间词/金额词/
交通词等),导致'下周去上海''昨天打车30块'等正常业务输入被误判 off_topic,
根本进不了 LLM。
修复:gate_classify 的 off_topic 门改用成熟的 _classify_irrelevant_input
(94 词 + registry 信号词 + greeting/meaningless 细分),scene_registry 的
signal_keywords 只用于规则匹配门(CHOICE 路由)。删除残缺的 _matches_any_signal。
验证:76 passed;实测'下周去上海'→llm_function_call、'昨天打车30块'→
llm_function_call、'你好'→off_topic(正确拦截)。
|
2026-06-25 16:06:52 +08:00 |
|
caoxiaozhu
|
992cf71fa1
|
refactor(server): Phase 1 图拓扑重构 - LangGraph 成为唯一编排者
P1.3-P1.7:把 endpoint 补丁搬进图节点,门控收敛到 gate_classify 单一决策点。
- StewardGraphState 扩展:recent_history/steward_state/gate_decision/gate_scene_id/conversation_id
- 新增 5 个图节点:load_context(读历史+state)/gate_classify(统一门控)/execute_scene_handler/resume_recent_task/pending_flow wrapper
- 图拓扑从 5 节点重构为 10 节点:load_context → gate_classify → {off_topic/handler_only/resume/ambiguous/model_intent} → attach_action_steps
- gate_classify 四步裁决:resume门 → off_topic门 → 规则匹配门 → LLM门
- resume 门控优先于 off_topic,避免'再提交'被误判闲聊
- schema 放宽 planning_source/next_action Literal → str,支持 scene_handler:*/context_resume/answer_only
- endpoint 按 planner 类型分发 build_plan(LangGraph 接 db,legacy 不接)
- 76 passed + 4 场景端到端验证(出差申请/再提交/查差旅标准/闲聊)
|
2026-06-25 15:44:20 +08:00 |
|
caoxiaozhu
|
54356ba81a
|
refactor(server): scene 注册表骨架 + 统一门控管道设计文档
Phase 1 P1.1-P1.2:为后端门控收口提供声明式场景注册基础设施。
- 新建 scenes/ 目录:gate_rules(GateRule/SceneRoute 枚举)、scene_descriptor(SceneDescriptor dataclass)、scene_registry(SceneRegistry 单例)
- 3 个场景迁入 descriptor:expense_application / reimbursement / query_travel_standard
- __init__.py 的 bootstrap_scenes 在 import 时注册 + 运行时绑定 handler/builder/executor(解决循环 import)
- 查询场景 priority=50 优先于 MODEL_ONLY 场景,确保规则匹配先于 LLM
- 落地 UNIFIED_GATE_PIPELINE.md 架构文档:目标架构 / 验收标准(接入 O(1))/ 3 阶段迁移路径
- 76 passed,scene 注册表未破坏现有代码;与 intent_registry 暂时并存,P1.3-P1.8 会统一迁移
|
2026-06-25 15:09:16 +08:00 |
|
caoxiaozhu
|
e9d7c56d5b
|
feat(server): 会话上下文保留(LLM 历史 + 确定性兜底双保险)
解决用户删除草稿后说'再提交'丢失上下文的问题:
- steward.py 新增 _inject_recent_conversation_history:build_plan 前读最近 10 条对话注入 context_json
- steward_intent_agent.py 的 _build_messages 把 recent_history 暴露给模型,system prompt 加确认类话术引导
- 新建 steward_context_resume.py:should_resume_recent_task 检测'再提交'类话术 + state 有可恢复 flow,attach_resumed_task 从 state 恢复 task
- 两个 plan 入口(/plans 和 /plans/stream)都已接入双保险
- 后端 67 passed,端到端验证'上海出差→再提交'成功恢复 task
|
2026-06-25 15:08:56 +08:00 |
|
caoxiaozhu
|
2ebc2756bf
|
fix(server): 兼容模型 tasks 输出为 JSON 字符串与 flow_id 误填
- StewardModelPlanBuilder 解析 tasks 时兼容模型把数组序列化为字符串的情况,先反序列化;JSON 截断/语法不完整时用正则抢救 task_type/requested_action/ontology_fields 等关键字段
- task_type 未命中意图时尝试 flow_id→task_type 映射还原,避免模型把 flow_id(如 travel_application)误填为 task_type 导致正确意图被丢弃
|
2026-06-25 12:25:18 +08:00 |
|
caoxiaozhu
|
606a88c805
|
chore: stewardPlanModel 适配注册表动作结构并更新规则表与日志
- stewardPlanModel 适配新的意图注册表动作步骤结构
- 更新交通/通信/差旅等财务规则表,补 2026-06-25 work-log
|
2026-06-25 11:50:11 +08:00 |
|
caoxiaozhu
|
eaada4bc57
|
refactor(server): steward 意图改用声明式注册表编排
- 新增 steward_intent_registry,IntentDescriptor 统一描述意图的识别关键词、动作步骤构建、字段白名单与副作用集合,替代分散的 if/else
- 新增 steward_intent_bootstrap 注册 expense_application 等意图;新增 steward_query_executors 提供差旅标准查询的无副作用执行与城市/席别标签化输出
- action_contracts/action_executor/graph_planner/intent_agent/model_plan_builder/planner_extraction/fallback 适配注册表,识别与执行分发自动从注册表取数
- 新增 intent_registry/query_executors 测试,更新 intent_agent 测试
|
2026-06-25 11:50:02 +08:00 |
|