blob: fea154097bcee8ec6d0487a2b141b103c72dd5ce [file] [view]
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
# maka-agent-native
[English](README.md)
将 Agent 执行暴露为原生应用服务。`provide` 注册工厂,`executor` 和 `workhub` 连接执行与协调领域。包声明和产品组合决定激活哪些工厂,以及如何绑定导入。
服务管理自己的激活,并委托 `maka-agent-engine` 执行运行。会话历史、控制和工具调用使用获准作用域与原始操作回执。文件、进程、技能等服务都是通过组合显式选择的依赖。
启用工作区指令时,选中的全局 `AGENTS.md` 正文紧接内置身份介绍,仅用 `<global_instruction>` 和 `</global_instruction>` 包裹。优先使用 `~/.maka/AGENTS.md`,只有它不存在时才使用 `~/.agents/AGENTS.md`。其他全局和项目指令文件放在后面。指令在受理时捕获,恢复运行时保留原内容。Native 全局指令 API 读取和保存选中的完整 UTF-8 文件,提示词捕获不设独立的文件大小门槛。保存会检查选中的来源与内容 revision,再原子替换文件;助手编辑器使用共享的完整文本编辑与捕获路径。
新指令按业务 Root 保存的语言偏好、组合配置语言、原生环境的顺序选择英文、简体中文或繁体中文;显式「自动」使用原生环境。一次策略快照同时决定内置指令、技能包装、默认摘要及运行指引的语言。工具 schema 保持英文,用户、自定义及外部内容保留原文。
排队工作、重试、恢复调用及已批准的 Goal/计划任务链保留接收时的语言。新消息、通知及独立接收的标题/回顾请求使用当前偏好;标题和回顾仍要求按用户语言输出。压缩保留复用的 Main 前缀,仅对新生成的包装文字选择语言。持久记录的语言默认英文,英文记录省略该字段;中文使用完整的 `zh-CN` 或 `zh-TW` 标签。
历史回答和思考保留各步骤请求的模型,以及提供方报告的模型(若有)。历史和原文片段在切换模型、复制及重启后保留这些证据。界面将未获报告的模型标为请求模型,将导入记录的模型标为导入来源;外部执行器输出不推断模型身份。
[独立公共 client 验收](../../../products/maka/cli/src/acp/tests/public_client.rs)使用真实公共 Host、Agent 和可控 HTTP 模型,不经过 ACP、TUI 或 GPUI 适配器。它检查固定边界的历史分页、watch 游标继续、所有客户端断开后保留的待回答问题,以及重连回答后停止原 invocation。现有 fixture 提供原 endpoint 与 epoch;重连不会重新发送消息。接入说明见[公开契约入口](../api/README.zh-CN.md)。
```sh
cargo nextest run -p maka-cli --bin maka -E 'test(independent_public_agent_client_reconnects_history_watch_and_pending_interaction)'
```
Agent 接收消息时保存模型的 Code Mode 默认值或显式 `codeMode` 覆盖设置;排队消息和恢复运行保留原模式。服务工具可以通过 `nestable: true` 允许代码内调用,仍执行与直接调用相同的权限检查、操作回执和清理流程。JavaScript 收到声明的业务结果,持久日志保留原生操作的原始回执。省略该字段时仅允许直接调用。Maka 默认组合为文件、进程、Web 和 Skills 工具启用嵌套调用。
模型设置通过 `codeModeLanguage: "javascript" | "python"` 独立选择语言,`codeMode` 控制是否启用,默认语言仍为 JavaScript。Python 使用随包提供的 Monty 解释器,支持顶层 await、`asyncio.gather`、JSON 工具参数和相同的输出/存储辅助函数。消息接收时固定语言,排队和恢复运行沿用原选择;修改只影响新提交的消息。该设置不改变 `maka code`、插件 JavaScript 或 Computer Use REPL。
Maka 默认组合启用 `toolDiscovery`:可选工具通过 `tool_search` 加载说明,并在同一 Host 会话内跨轮保留。Code Mode 在说明尚未加载时仍可调用已授权的嵌套工具。消息接收时保存发现策略,恢复运行时沿用原策略。已加载工具说明和 Code Mode 的 `store`/`load` 值按会话隔离、保存在内存中,Host 重启后清空;上下文压缩成功提交后重置已加载的工具说明。
独立的模型覆盖项 `applyPatch` 选择补丁编辑或 Write/Edit 结构化编辑。与 Code Mode 一样,GPT、DeepSeek 模型及 DeepSeek 端点默认启用;排队消息和恢复运行保留接收时的选择。筛选依据是实际绑定的 Files 契约和方法,工具改名不影响策略。读取工具保留,文件操作仍检查实时权限。连接设置的模型覆盖 JSON 可分别设置 `codeMode` 与 `applyPatch`。
Shell 工具默认接受模型生成的可选 `title`。助手偏好可关闭后续模型请求中的标题参数;已有调用的完整参数仍保留在模型历史中。标题用于历史展示,仅在转发给进程服务时移除;未提供标题时显示命令。
Maka 默认组合启用 `todo`:`todo_read` 和 `todo_write` 维护当前会话的持久清单,也可用于 Code Mode 和只读工作区。写入会校验版本并替换整个列表。UI 显示已报告的进度和只读「清单」面板,以有界分页浏览最多 200 项。清单完成状态是模型报告的进度,不代表操作已成功的执行证据。
Maka 默认组合启用 `automaticTitles`。通过 `automaticTitle: true` 创建的会话在首条消息获准后,使用该消息选定的模型发起一次有界、独立计费的标题请求。显式命名、手动改名(包括保留原占位名称)、归档及托管会话保留原名称。重试和 Host 重启不会重复已接收的标题尝试;Host 关闭会等待请求实际清理完成。
自动标题的准备、模型及无效输出失败会持久记录到会话诊断。空响应或输出达到上限时,保留实际请求用量,同时记录标题生成失败。服务停止及策略性跳过不报告标题失败;持久化或清理结果不确定时,保留原有恢复优先级。
模型准备和 OAuth 刷新失败在原始原因被转换为公开错误前写入 Host 警告。警告包含安全错误分类及已有的连接/会话标识(若可用),不包含凭据、配置、请求内容或任意 provider 错误文本。再次读取已失败的刷新结果不会重复记录原始失败。队列及辅助请求的致命错误会记录安全 Host 诊断,并关联可用的 owner、原调用或请求身份。诊断区分会话隔离与 owner 关闭;恢复与资源保管仍遵循原有规则。
模型上下文总容量、独立输入上限与压缩阈值随模型选择一起保存,排队和重启后继续使用接收时的值。未显式设置压缩阈值时,使用已知输入容量的 85%;输出预留仍由引擎单独计算。
默认组合启用 `recaps`。「会话回顾」命令读取缓存;生成新回顾前需明确确认所选模型及可能产生的费用。每次最多扫描 256 个有界历史页,保留不超过 32 KiB 的历史文本,输出上限为 1,024 token,生成限时 30 秒。读取缓存也检查隐私模式和会话访问范围。刷新和原始操作恢复不会重新生成;结果未知的请求在重启后仍保留为待定。辅助用量归属于原始应用操作,关闭时等待模型请求实际清理完成。
默认组合启用 `goals`。「持续目标」命令可创建或保存目标,设置 1–100 轮上限及可选的回顾式 token 阈值。确认时固定所选模型、会话工作区和权限边界;边界变化后须重新授权。每轮进入原有 Agent 消息队列,重启后保留原始接收记录和操作回执。`GoalStatus` 始终可发现,可从 Direct 和 Code Mode 调用,但只能报告其所属的活动目标执行;报告在该轮正常结束且实际清理完成后才生效。暂停允许已接收的当前轮结束;取消只作用于该目标的原始执行。设置 token 阈值后,缺失用量会停止续跑。隐私模式、归档和权限撤销阻止新的接收;Host 交接暂停时,须先显式恢复会话,再恢复目标。
默认组合启用 `plans`。「计划」命令可将空闲会话切到规划模式:工具仅允许检查、提问和 `SubmitPlan`,不允许修改工作区或自主委派。提交提案结束当前轮,不会执行。批准展示的提案时固定计划内容、所选模型、工作区和权限边界,实施进入原有 Agent 队列。`update_plan` 也可从 Code Mode 报告所有固定步骤,但只有全部步骤完成或跳过、执行成功且实际清理完成后,计划才算完成。显式继续保留计划内容和进度,并重新取得授权;取消只作用于该计划的原始调用。持久决策、有界只读历史和原始审批回执在重启后保留;过期权限边界和隐私模式阻止新的执行。
WorkHub 协调会话可以选择 Graph 或 Swarm。Graph 决策与原 WorkHub 任务记录原子提交;原任务所有者继续负责派发、依赖输入捕获、控制回执和清理。五个 Graph 工具提供已发布目标、工作/结果/历史的有界读取、更新和让出执行。Swarm 在需要处理或整批工作结束时唤醒协调者。跨轮次输入必须引用较早已完成轮次选定的最终结果;输入采用 16 KiB 结果预览,完整结果仍可分页读取。停止、排队和重启后仍检查原会话、轮次和权限边界。
WorkHub 任务和 Graph 通知在历史中保留其记录的来源,并使用独立的消息标签。
WorkHub 任务按受理时间从新到旧排列。任务详情包含记录的标题和受理时间,状态变化和重启不会改变它们。分页游标保留实时列表中的位置;刷新首页可查看较新的任务。
可复用的 WorkHub 预设保存明确的连接和模型。普通及 Graph 新任务按当前设置解析该目标,无关的连接编辑不会使预设失效。已受理任务保留接收时的模型选择和工具,修改或禁用预设不会重写它们。新路由在受理前明确报告预设、连接或模型不可用。
[源码](src/lib.rs) · [Cargo 配置](Cargo.toml)