胡飞
6c303e2839
fix(agent): connections.save 的 function-calling schema 去掉顶层 oneOf
...
现象:内置 AI 里让模型保存连接时,整个任务直接失败:
模型调用失败: Invalid request: OpenAI: Invalid schema for function
'connections_save': schema must have type 'object' and not have
'oneOf'/'anyOf'/'allOf'/'enum'/'const'/'not' at the top level
根因有两层:
1. `connections.save` 的工具参数 schema 用顶层 `oneOf` 表达「创建 or 更新」,
分支里还带 `not`。provider 要求工具参数 schema 顶层是纯 object,遇到这些
组合关键字会拒绝整个模型请求,而不是拒绝这一个工具——所以是任务级失败。
2. 本仓的 `validate_function_calling_schema` 当时只要求顶层是 object、组合
分支自身是 object,因此放行了这份 schema,直到请求发到 provider 才炸,且
报错只带函数名,很难定位到具体工具。
修复:
- `connections.save` 改为扁平 object schema,把「不带 id 即创建、带 id 即更新」
写进 schema/字段描述,二选一约束仍由运行时 `save` 按是否携带 `id` 分流,行为
与之前一致。
- `agent_runtime` 的 function-calling 校验新增顶层关键字拦截
(oneOf/anyOf/allOf/enum/const/not),本地就报错并带上工具名与指针;嵌套层
(如 `properties.*` 内的 anyOf)不受影响。
验证:
- `cargo test -p navop_runtime --lib connections::` → 46 passed
- `cargo test -p agent_runtime --lib tools::spec` → 10 passed
- `cargo test -p main --bin navop
agent_runtime_tool_schemas_convert_to_function_calling` → 1 passed
- 新增回归契约:连接工具 schema 顶层 provider-safe;LLM 边界上所有已暴露工具都
必须能转换成 llm-connector 工具定义(旧代码下该测试必红)。
2026-09-20 14:52:00 +08:00
胡飞
0106e166f7
fix(agent): 压缩后保证请求至少含一条 user 消息
...
上下文压缩会把本轮唯一的用户输入并入摘要,保留的尾部只剩助手与工具消息,压缩后的请求没有任何 user 消息,OpenAI 兼容网关会以 400 No user query found in messages 拒绝,导致整轮任务失败。
请求构造改为经过 ensure_user_message:缺失 user 消息时补一条「继续当前任务」的 user 消息,摘要仍保留在 system 提示中。
2026-09-18 14:05:33 +08:00
user.email
450be1241a
refactor(ai_chat): 统一内置 Agent 系统提示词并 i18n,用户仅自定义追加
...
- 三套模式提示词合并为一份本地化模板(en/zh-CN/zh-HK),资源/Skill/计划/工具/时间经占位符注入
- custom_system_prompt 保持追加语义,不再替换默认模板;修复空设置后填写不生效、切换会话被覆盖
- subagent / compaction 提示词接入 i18n;资源标记与段落文案本地化
2026-09-12 21:35:19 +08:00
user.email
396a31591a
fix(agent_runtime): 压缩上下文后仅保留开头唯一 system 消息 ( #174 )
...
Qwen3 等 OpenAI 兼容模型的 chat template 要求 system 消息必须是第一条且只能
出现一次。历史前缀被压缩为 ContextSummary 后,history_to_messages 会在 agent
system 提示之后再生成为第二条 system,触发
`System message must be at the beginning`。
在构造模型请求前统一归一化:把所有 system 消息合并为一条并置于开头,同时补充
压缩场景的回归测试。
2026-09-12 06:36:40 +08:00
胡飞
5bc197423a
style: format Rust code
2026-09-08 10:40:47 +08:00
胡飞
210da2db9f
fix(agent_runtime): 规范上下文消息的角色分配以兼容OpenAI协议
...
- 引入 push_context_message 函数,根据已有消息角色决定推送 system 或 user 角色消息
- 所有上下文型消息(压缩摘要、系统说明、孤立观测等)改用 push_context_message 替代直接推 system 消息
- 避免非首条消息出现 system 角色,符合部分模型对 system 消息位置的限制
- 添加多项单元测试验证上下文消息角色正确性和 system 消息出现位置
- 修正部分测试中 system 消息角色改为 user,保证一致性和正确性
2026-09-07 21:32:44 +08:00
胡飞
1b3d03f6ec
Bump v0.15.2
2026-08-31 23:02:35 +08:00
胡飞
16de9e0f07
feat(public-mcp): add raw terminal key input
2026-08-18 21:39:37 +08:00
胡飞
4abb81084d
feat(agent): configure iteration limit and clean copied messages
2026-08-10 21:51:24 +08:00
胡飞
78934aa86a
fix(agent): fall back when context compaction fails
2026-08-06 11:05:49 +08:00
胡飞
08f1f1fe7c
fix(agent): prevent plan data from becoming shell commands
2026-08-03 20:53:18 +08:00
胡飞
9724be9af4
chore: format workspace files
2026-07-30 22:33:18 +08:00
胡飞
894df8887d
feat(ai-chat): complete queued prompts and lifecycle safety
2026-07-29 08:03:22 +08:00
胡飞
3da671e2a2
fix(ai-chat): 支持多会话并优化图片与用户消息
2026-07-25 12:59:24 +08:00
胡飞
1837070cdf
feat(i18n): complete user-facing translations
2026-07-18 15:47:54 +08:00
胡飞
1cdd281b4e
fix(agent): refresh tool settings in open sessions
2026-07-18 07:17:18 +08:00
胡飞
c40871f3d1
feat(terminal): add PTY diagnostics and safer exec preflight
...
Add terminal.read for bounded scrollback inspection, clarify ssh.exec versus terminal.exec selection, and avoid sending Ctrl+C at an empty prompt. Ctrl+C preflight is now reserved for detected unsubmitted input.
2026-07-17 18:53:20 +08:00
胡飞
cb549a4539
fix(agent): keep long-running commands observable
...
Preserve ssh.exec and terminal.exec command tracking after output timeouts, stream incremental output through the command store, raise the agent loop budget, and reduce context compaction frequency.\n\nRefs #21
2026-07-17 16:34:06 +08:00
胡飞
4e12524b63
merge: sync OnetCli upstream changes
2026-07-11 22:54:58 +08:00
胡飞
e0925a223a
feat(agent): auto-execute tools without approval
2026-07-11 17:43:34 +08:00
胡飞
53e0747c07
feat(agent): guide explicit terminal interrupts
2026-07-11 16:03:22 +08:00
胡飞
f2a3adf1ec
fix(terminal): harden cancellation supervisor edges
2026-07-10 22:27:49 +08:00
胡飞
c580a8767a
fix(agent): decouple turn cancellation from tool cleanup
2026-07-10 20:57:53 +08:00
胡飞
247f6a066e
feat(terminal): decouple visible exec lifecycle
2026-07-10 20:23:26 +08:00
胡飞
4de9c0f9d2
feat: expose Navop product branding
2026-07-10 17:24:23 +08:00
胡飞
47525f26ab
feat(agent): load skills through tools
2026-07-05 12:18:07 +08:00
胡飞
81ae88ea59
chore: verify agent resource catalog scope
2026-07-05 01:10:52 +08:00
胡飞
10b07cc103
fix: require explicit target without scope default
2026-07-05 00:49:18 +08:00
胡飞
cda794901c
feat: add agent resource catalog scope types
2026-07-05 00:33:57 +08:00
胡飞
4f756e541f
feat(agent_runtime): 实现上下文压缩以优化历史消息管理
...
- 新增 ContextSummary 历史条目,用于保存压缩后的上下文摘要
- 在历史转消息转换中支持 ContextSummary 转为系统消息
- 增加 RuntimeHistory 的旧历史压缩方法 compact_old_items
- 添加 Session.compact_history 及 compact_session_context_if_needed
- 实现 ContextCompactionPolicy 策略控制上下文压缩行为
- 上下文超阈值时异步调用模型生成摘要并压缩历史前缀
- agent 任务中集成上下文压缩机制,异常时返回失败结果
- 为 ai_chat_view 添加工具调用确认卡的处理逻辑和操作事件
- 资源池中添加基于提及自动加载资源及设置默认当前资源的功能
- resource_builder 新增构建工作台上下文及提及项的相关方法
- 增加多个单元测试与集成测试覆盖上下文压缩和资源提及功能
- public_mcp 调整 ssh.list_sessions 接口以支持请求参数过滤会话列表
2026-07-04 19:06:56 +08:00
胡飞
1b0523b311
refactor(agent): 将默认工具执行模式更改为手动确认
...
- 调整 ToolExecutionMode 枚举,默认由 Auto 改为 Manual
- 在逻辑中根据不同执行模式和工具风险等级动态判断是否需要用户确认
- 添加多项测试覆盖手动确认和自动模式下工具调用行为
- 修改 UI 显示默认工具模式标签为“手动确认”
- 优化消息视图最大宽度,提升界面表现一致性
- 新增函数与测试,确保空标签时默认显示“手动确认”
- 调整 agent 运行时和工具注册相关设置,强化低风险写入工具标注
- 修改 public_mcp 配置,确保 agent 内部工具集启用全部功能模块
- 添加 UI 交互测试,验证工具确认点击不受阻碍
2026-07-04 13:01:15 +08:00
胡飞
2a7241e271
feat(tools): add capability-aware resource targets
2026-07-03 20:44:40 +08:00
胡飞
920691b38a
fix(public_mcp): resolve live terminal targets
2026-07-03 18:29:51 +08:00
胡飞
87558d74d9
feat(agent): expose runtime targets through target
2026-07-03 15:28:11 +08:00
胡飞
1f09dd1fb9
feat(tools): remove legacy tool aliases
2026-07-03 13:58:50 +08:00
胡飞
4cb6079d6e
feat(ai_chat): render batched tool approvals
2026-07-03 11:36:21 +08:00
胡飞
ab703ce34d
feat(agent): batch sibling high risk approvals
2026-07-03 11:25:00 +08:00
胡飞
b03ae47061
test(agent): preserve parallel tool safety semantics
2026-07-02 22:13:11 +08:00
胡飞
f5caa2628f
feat(agent): dispatch parallel-safe tool batches
2026-07-02 22:08:24 +08:00
胡飞
639cbe282c
feat(agent): batch executable tool calls
2026-07-02 21:58:18 +08:00
胡飞
2027820a17
feat(agent): guide terminal exec tool selection
2026-07-02 18:54:28 +08:00
胡飞
1a99fd670e
feat(agent): bridge database read tools through tool runtime
2026-07-02 17:15:46 +08:00
胡飞
366e9d2f0f
feat(agent_runtime): bridge tool runtime registry
2026-07-02 16:44:32 +08:00
胡飞
9ba42fbbd8
feat(agent_runtime): add tool runtime adapter contracts
2026-07-02 16:30:48 +08:00
胡飞
f77dda5bf3
feat(agent_db_tools): 添加Agent数据库工具支持
...
- 新增Agent数据库工具模块,支持读写SQL执行、查询数据库元信息、采样数据等功能
- 增加数据库资源上下文解析及连接管理
- 实现数据库工具调用时的SQL执行与结果格式化
- 针对高风险SQL执行工具添加强制用户确认机制
- 更新Agent运行时工具注册逻辑,支持动态启用数据库工具集
- 添加数据库工具的完整单元测试,覆盖高风险工具审批逻辑和查询功能
- 添加对sqlite和其它数据库资源类型的支持检测与处理
- 引入async-trait、rusqlite、tokio-util等依赖支持异步执行和数据库操作
2026-06-30 21:45:34 +08:00
胡飞
1c4d8806b5
feat(subagent): 实现子代理采样循环支持只读工具调用
...
- 新增 subagent_task 模块,实现子代理任务的多轮采样执行逻辑
- 子代理只能调用业务注册表中的只读工具,禁止工具委派或状态更新
- 修改 delegate_task,使其要求子代理名且调用新的运行接口
- 优化子代理系统提示,明确限制调用只读工具和禁止使用部分工具
- 移除旧的子代理模型运行及流处理代码,改用新采样流程
- 更新集成测试,验证子代理任务必须指定名称且允许只读工具调用
- 移除 ai_chat_view 中子代理相关事件转换追踪逻辑,保持工具调用事件语义
- 在 ai_chat_view UI 中新增「子代理」面板,支持展示子代理条目及状态指示
- 调整上下文结构,添加 ComposerSubAgentItem 支持子代理界面数据展示
2026-06-30 19:47:05 +08:00
胡飞
13d5a8f530
feat(agent-runtime): 实现 Agent 会话持久化与日志脱敏
...
- 新增 chat_sessions 表 agent 相关字段及唯一索引
- 实现 AgentSession 结构体及 AgentSessionRepository 访问持久层
- 在 ai_chat_view persistence 模块实现会话保存、加载、重命名、归档、删除功能
- 加载老版 chat_sessions 记录时自动切换为 Ask 模式并加载历史
- agent_runtime 任务中日志输出关键字段脱敏,防止敏感信息泄露
- 增加对嵌套结构的递归脱敏支持,包括模型负载、工具调用参数等
- 添加持久化相关单元测试,覆盖快照存储、列表、加载、编辑、归档与删除
- 添加日志脱敏功能测试,验证敏感字段正确隐藏且保留部分信息预览
2026-06-30 15:53:02 +08:00
胡飞
da07aa70c3
refactor(agent_runtime): 优化工具调用消息处理逻辑
...
- 将 assistant_tool_call_message 对功能拆分,新增 push_assistant_tool_call_message 实现消息合并
- 修正多工具调用时一次写入所有工具调用再写观测,保留 reasoning_content
- 新增 MultiToolReasoningFollowupModel 用于测试多工具调用合并行为
- 添加测试验证多工具调用的 follow-up 请求中工具调用合并及推理内容准确
- 重构 agent 卡片中工具输出渲染,新增 JSON 格式化与去重展示逻辑
- 实现 distinct_tool_output_json 过滤与输入 JSON 结构重复的输出
- 新增工具输出 JSON 高度计算及只读代码编辑器组件渲染
- 增加多项单元测试覆盖工具输出 JSON 格式化、去重及展示界面渲染逻辑
2026-06-30 11:25:42 +08:00
胡飞
499ea7fb43
feat(ai_chat): 工具卡片显示执行入参
...
扩展 RuntimeEvent::ToolCallStarted / NeedUserInput 与
TaskOutcome::NeedUserInput 携带 arguments,本地 agent 和 ACP
翻译层都把工具入参透传到 UI。
ai_chat_view 新增 agent_tool_input 模块:按工具类型提取关键
参数(command/sql/path/url 等)生成摘要,敏感字段递归脱敏。
ToolCardData / ToolConfirmCardData 增加 input_summary /
input_json 向后兼容字段;卡片头部显示摘要,展开详情按
input / output 分块展示,确认卡只显示 input。
AgentTranscript.push_tool_call 接收 arguments,实时事件与
load_history 两条路径都生成入参展示,重开会话后工具卡片
仍能看到当时的入参。
2026-06-29 20:18:29 +08:00
胡飞
0982aff9c7
feat(runtime): 增加工具执行的手动确认模式支持
...
- 为 Runtime 添加工具执行模式支持,包括自动、只读和手动确认三种模式
- 新增工具调用审批事件和相关数据结构,支持用户审批工具调用
- 在手动确认模式下,模型请求工具调用时暂停等待用户确认
- 实现批准和拒绝待审批工具调用的接口及内部处理流程
- 更新 Agent 任务执行逻辑,根据工具执行模式过滤可用工具
- 手动模式下,待审批工具调用获得明确的用户提示和事件发出
- 工具调用执行逻辑调整,区分自动执行和等待用户审批
- 添加集成测试覆盖只读模式和手动确认模式的行为验证
- AI 聊天输入框调整,新增执行模式选择UI和状态显示优化
2026-06-29 16:59:32 +08:00