chore: 清理开发草稿并保留最终说明书
AegisRT是一个面向openEuler、从零设计并独立实现的通用Agent Runtime。系统将Agent及其任务视为可调度的运行时实体,在应用工作流层之下统一管理任务依赖、资源准入、操作系统资源限制、AI资源配额、逻辑上下文、生命周期和故障恢复。
AegisRT不依赖特定的多Agent应用或工作流框架。管理员通过本地不可变注册表加载通用Agent配置,应用则通过版本化Runtime API提交任务图,并使用Agent ID引用已经注册的Agent。
当前master分支已经实现由daemon统一管理的单节点进程型Agent Runtime,并具备任务边界持久化和ContextVM投递能力,主要包括:
master
AgentSpec
TaskSpec
ResourceVector
AgentAttempt
aegisrt.agent-output/v1
localhost
cgroup v2驱动、PSI采集器和生命周期路径已经通过单元测试、跨平台构建和openEuler 24.03实机检查。已封存的内核机制验证证据包括固定工作量下的cpu.max节流、禁用swap后的memory.max OOM边界、pids.max任务上限、真实clone-into-cgroup放置,以及daemon硬崩溃后的孤儿进程清理。单种子资源实验和双种子F4实验属于机制门禁,不代表正式性能或长期可靠性统计。详见openEuler证据索引和M1资源控制证据。
cpu.max
memory.max
pids.max
daemon当前统一持有RunService和Coordinator。HTTP客户端只能提交任务图,不能手动推进调度器或声明进程已经完成。Agent命令和参数只能来自本地不可变注册表,不能通过任务请求注入。已经移除的手动tick和完成接口会返回404。
404
ContextVM已经接入daemon执行路径和受控HTTP写入路径。GET /v1/tasks/{taskID}/context返回Manifest元数据和强ETag;POST /v1/tasks/{taskID}/context/pages使用If-Match和Idempotency-Key追加工作流或Agent可见内容。任务ID只用于绑定不可变的(workflow_id, agent_id) Principal,不构成独立授权身份。在文件持久化模式下,Page、去重Blob、Manifest历史、Head和幂等账本保存在<state-file>.context中,并在任务投递前恢复。每次任务图补丁最多包含256个任务;Context容量耗尽时返回HTTP 507,不会使原本健康的仓库进入损坏状态。
GET /v1/tasks/{taskID}/context
POST /v1/tasks/{taskID}/context/pages
If-Match
Idempotency-Key
(workflow_id, agent_id)
<state-file>.context
507
当前Bearer Token是daemon级管理员凭据,不提供用户级或多租户授权。Context文件是带完整性保护的明文JSON Envelope,在Unix上使用所有者独占权限写入,但未进行应用层加密,Windows权限语义也较弱。持久化daemon的Token统计目前采用确定性空白切分,而不是Provider Tokenizer。ContextVM提供有界的命名Provider Tokenizer和Summarizer适配器,并包含确定性抽取式参考摘要器;在配置Provider策略前,持久化daemon默认不启用摘要。
系统尚未实现物理模型KV Cache管理。Context持久化是有界的单节点全量快照,不是分布式存储、跨主机协议或目录级CAS与GC服务。输出完成记录受Context账本条目上限单独约束,目前没有GC;上限耗尽后,新的任务完成操作会失败关闭。Runtime和Context文件分别保证原子性,但不构成跨文件事务。缺少依赖输出标记时,Context解析会失败,而不是在空Context下继续运行;目前尚未保存两份文件共享的统一代际。
Context所有权采用(workflow_id, agent_id),而不是逐任务所有权。直接依赖任务会授权结果传递给其Agent Principal,该Principal也可能被同一工作流中的其他任务复用。早期format-v1 Context Checkpoint可以以兼容方式读取,但其中没有输出完成标记,系统也不会自动补齐来源信息;升级前应先排空未完成DAG并备份状态。EventLog仍是进程内有界事件流,查询API只暴露有界的安全终态投影,而不是持久审计日志。Telemetry导出、SDK和完整远程Worker仍属于后续工作,详见路线图。
恢复语义为任务边界的至少一次执行。优雅重启会将被中断工作重新入队;只有在cgroup隔离能够先清理精确孤儿Attempt时,系统才接受包含活动工作的硬崩溃快照。这不是恰好一次执行、Worker重连或受支持的跨主机迁移协议。如果Context发布成功但Runtime完成状态尚未持久化,重试必须生成语义相同的Artifact Envelope;同一任务产生不同输出时会被判定为幂等冲突。openEuler上已经观察到有界的硬崩溃清理效果,但尚未完成大规模重复可靠性实验。
传统工作流引擎理解任务顺序,却不了解资源竞争;传统CPU调度器理解处理器公平性,却不了解DAG关键路径、LLM Token和工具并发。DAG-DRCFS将以下机制结合起来:
固定的S1、S2、S3正式调度实验已经在干净提交上完成,每个实验单元包含30对匹配样本。DAG-DRCFS降低了S1依赖解锁延迟,将S2 Jain完成速率公平性中位数从0.8262提高到0.9974,并将S3关键路径逻辑延迟从184降低到59逻辑毫秒,同时消除了预先声明的饥饿事件。封存的原始数据和配对区间位于evidence/scheduler/。这些结果来自确定性逻辑时钟策略实验,不代表宿主机或内核执行耗时。
evidence/scheduler/
./scripts/verify.ps1
1.创建包含32至256个允许字符的本地Token。Token文件已被Git忽略。在Linux和openEuler上,该文件必须仅允许所有者访问,通常使用0600权限。
0600
$rng = [Security.Cryptography.RandomNumberGenerator]::Create() $tokenBytes = New-Object byte[] 32 $rng.GetBytes($tokenBytes) $rng.Dispose() [Convert]::ToBase64String($tokenBytes) | Set-Content -NoNewline api.token
2.创建agents.local.json并填写本地可执行文件的绝对路径。以下内容是配置结构示例,使用前应替换entrypoint:
agents.local.json
entrypoint
{ "agents": [ { "id": "example-agent", "name": "Example Agent", "runtime": "process", "entrypoint": "C:\absolute\path\to\agent.exe", "args": [], "capabilities": ["example"], "resources": { "cpu_milli": 500, "memory_mib": 256, "llm_slots": 1, "token_budget": 8000 }, "max_concurrency": 1, "execution_timeout": "30s" } ] }
进程Agent通过标准输入接收一条JSON请求,可以将诊断日志写入标准错误。执行成功时,标准输出必须为空、只含空白字符,或者包含一个严格的aegisrt.agent-output/v1 JSON Envelope。标准输出出现普通日志文本会导致Attempt失败。最小无Artifact响应如下:
{"version":"aegisrt.agent-output/v1","artifacts":[]}
Artifact可见性、接收者规则、配额、示例、失败行为和完整标准输入结构见进程Agent协议。
如果不希望先编写Agent,可以直接运行AegisLab参考任务。它使用确定性的菱形DAG和本地进程Agent,不需要外部模型或网络服务。
真实应用验证见AegisRepoOps。该应用针对固定的公开GitLink Go仓库提交运行六任务扇出与汇合DAG,并生成可复核的质量证据。
3.启动daemon。由于服务当前不负责TLS终止,HTTP监听器仅允许绑定loopback地址。
go run ./cmd/aegisrt ` -listen 127.0.0.1:8080 ` -agents-file agents.local.json ` -auth-token-file api.token ` -scheduler-policy dag-drcfs ` -state-file runtime.state
在浏览器中打开http://127.0.0.1:8080/console/。静态Console Shell可以匿名加载,但服务器不会向页面发送daemon凭据。将本地Token文件中的内容粘贴到连接表单后,Token只保存在当前页面的JavaScript内存中,并在刷新或锁定时清除。Console不依赖业务角色:它从安全Agent目录获取Agent ID,并根据任务依赖渲染工作流。
http://127.0.0.1:8080/console/
在由systemd管理的openEuler主机上,应使用已经审核的openEuler部署包。服务单元使用-cgroup-root auto时,AegisRT只发现被委派的服务cgroup,将daemon移入manager叶节点,并在接受Agent前通过私有层级启用cpu、memory和pids控制器。系统会拒绝直接使用全局cgroup v2挂载根目录。显式指定-cgroup-root属于管理员管理模式,需要提前准备好对应层级。
-cgroup-root auto
manager
cpu
memory
pids
-cgroup-root
系统必须选择且只能选择一种状态模式。正式持久化运行使用-state-file;一次性本地实验可改用-ephemeral。-scheduler-policy只接受fifo、priority或dag-drcfs,默认值为dag-drcfs。所选策略会写入Runtime统计和持久化配置指纹,因此切换策略时必须使用新的状态文件,系统不会静默恢复不兼容的调度器状态。
-state-file
-ephemeral
-scheduler-policy
fifo
priority
dag-drcfs
Runtime文件可能包含任务目标及其他TaskSpec字段,相邻的<state-file>.context保存已提交的Context明文。应确保目录仅对当前用户可见,并禁止提交这两类文件。
默认情况下,系统会拒绝持久化Context格式出现之前生成的Checkpoint。对于受支持的Runtime v1升级,应先备份,再使用-migrate-legacy-state启动一次。由于v1不包含持久化Context内容,迁移只会创建空Context Head。该参数不能为正常的当前格式Runtime重建缺失或不匹配的Context文件。
-migrate-legacy-state
curl http://127.0.0.1:8080/healthz
认证自动执行流程见HTTP API指南。其他验证材料包括:
cmd/aegisrt/ daemon和CLI入口 cmd/aegisrepo-config/ RepoOps注册表和任务图生成器 cmd/aegisrepo-agent/ 真实GitLink仓库进程Agent internal/domain/ Runtime领域模型和生命周期 internal/taskgraph/ 动态DAG管理器 internal/scheduler/ 调度策略、资源账本和统计 internal/runtimecore/ 调度核心、Checkpoint和恢复逻辑 internal/statefile/ 原子且带完整性校验的本地Checkpoint存储 internal/api/ 版本化HTTP API internal/apitoken/ 受限本地Bearer Token加载器 internal/executor/ 有界本地进程执行器 internal/worker/ 进程Agent执行和Attempt记录 internal/agentprotocol/ 严格有界的进程Agent标准输出协议 internal/controlplane/ 调度、执行、完成或失败闭环 internal/runservice/ 有界并发所有权循环和事件适配器 internal/agentconfig/ 严格不可变的本地Agent注册表加载器 internal/resourcecontrol/ cgroup v2和PSI适配器 internal/contextvm/ 逻辑Context数据模型、存储和组装 internal/contextstate/ 持久化Context仓库和Checkpoint internal/contextdispatch/ Manifest注册表和投递时ACL解析 internal/eventlog/ 有界进程内可重放事件历史 internal/repoops/ 真实GitLink仓库多Agent任务 internal/runtimeapp/ 事务化daemon控制组合 internal/webconsole/ 内嵌同源运维Console deploy/openeuler/ 非特权systemd部署资源 docs/ 架构、协议和需求映射 evidence/ 验证记录、证据和适用边界 experiments/ 预注册实验和原始数据契约 scripts/ 可复现的本地验证脚本
go vet
.env
本项目采用Apache License 2.0,详见LICENSE。
面向 openEuler 的通用多智能体运行时,提供 DAG 多资源调度、进程隔离、上下文虚拟化与故障恢复能力。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
AegisRT
AegisRT是一个面向openEuler、从零设计并独立实现的通用Agent Runtime。系统将Agent及其任务视为可调度的运行时实体,在应用工作流层之下统一管理任务依赖、资源准入、操作系统资源限制、AI资源配额、逻辑上下文、生命周期和故障恢复。
AegisRT不依赖特定的多Agent应用或工作流框架。管理员通过本地不可变注册表加载通用Agent配置,应用则通过版本化Runtime API提交任务图,并使用Agent ID引用已经注册的Agent。
当前实现状态
当前
master分支已经实现由daemon统一管理的单节点进程型Agent Runtime,并具备任务边界持久化和ContextVM投递能力,主要包括:AgentSpec、TaskSpec、ResourceVector和AgentAttempt模型;AgentAttempt;aegisrt.agent-output/v1标准输出协议:空标准输出表示无Artifact的有效结果;非空标准输出必须是单个JSON Envelope;Agent诊断信息必须写入标准错误;localhost或loopback IP Authority,与仅监听loopback的策略共同防御DNS Rebinding。cgroup v2驱动、PSI采集器和生命周期路径已经通过单元测试、跨平台构建和openEuler 24.03实机检查。已封存的内核机制验证证据包括固定工作量下的
cpu.max节流、禁用swap后的memory.maxOOM边界、pids.max任务上限、真实clone-into-cgroup放置,以及daemon硬崩溃后的孤儿进程清理。单种子资源实验和双种子F4实验属于机制门禁,不代表正式性能或长期可靠性统计。详见openEuler证据索引和M1资源控制证据。daemon当前统一持有RunService和Coordinator。HTTP客户端只能提交任务图,不能手动推进调度器或声明进程已经完成。Agent命令和参数只能来自本地不可变注册表,不能通过任务请求注入。已经移除的手动tick和完成接口会返回
404。ContextVM已经接入daemon执行路径和受控HTTP写入路径。
GET /v1/tasks/{taskID}/context返回Manifest元数据和强ETag;POST /v1/tasks/{taskID}/context/pages使用If-Match和Idempotency-Key追加工作流或Agent可见内容。任务ID只用于绑定不可变的(workflow_id, agent_id)Principal,不构成独立授权身份。在文件持久化模式下,Page、去重Blob、Manifest历史、Head和幂等账本保存在<state-file>.context中,并在任务投递前恢复。每次任务图补丁最多包含256个任务;Context容量耗尽时返回HTTP507,不会使原本健康的仓库进入损坏状态。当前Bearer Token是daemon级管理员凭据,不提供用户级或多租户授权。Context文件是带完整性保护的明文JSON Envelope,在Unix上使用所有者独占权限写入,但未进行应用层加密,Windows权限语义也较弱。持久化daemon的Token统计目前采用确定性空白切分,而不是Provider Tokenizer。ContextVM提供有界的命名Provider Tokenizer和Summarizer适配器,并包含确定性抽取式参考摘要器;在配置Provider策略前,持久化daemon默认不启用摘要。
系统尚未实现物理模型KV Cache管理。Context持久化是有界的单节点全量快照,不是分布式存储、跨主机协议或目录级CAS与GC服务。输出完成记录受Context账本条目上限单独约束,目前没有GC;上限耗尽后,新的任务完成操作会失败关闭。Runtime和Context文件分别保证原子性,但不构成跨文件事务。缺少依赖输出标记时,Context解析会失败,而不是在空Context下继续运行;目前尚未保存两份文件共享的统一代际。
Context所有权采用
(workflow_id, agent_id),而不是逐任务所有权。直接依赖任务会授权结果传递给其Agent Principal,该Principal也可能被同一工作流中的其他任务复用。早期format-v1 Context Checkpoint可以以兼容方式读取,但其中没有输出完成标记,系统也不会自动补齐来源信息;升级前应先排空未完成DAG并备份状态。EventLog仍是进程内有界事件流,查询API只暴露有界的安全终态投影,而不是持久审计日志。Telemetry导出、SDK和完整远程Worker仍属于后续工作,详见路线图。恢复语义为任务边界的至少一次执行。优雅重启会将被中断工作重新入队;只有在cgroup隔离能够先清理精确孤儿Attempt时,系统才接受包含活动工作的硬崩溃快照。这不是恰好一次执行、Worker重连或受支持的跨主机迁移协议。如果Context发布成功但Runtime完成状态尚未持久化,重试必须生成语义相同的Artifact Envelope;同一任务产生不同输出时会被判定为幂等冲突。openEuler上已经观察到有界的硬崩溃清理效果,但尚未完成大规模重复可靠性实验。
为什么采用DAG-DRCFS?
传统工作流引擎理解任务顺序,却不了解资源竞争;传统CPU调度器理解处理器公平性,却不了解DAG关键路径、LLM Token和工具并发。DAG-DRCFS将以下机制结合起来:
固定的S1、S2、S3正式调度实验已经在干净提交上完成,每个实验单元包含30对匹配样本。DAG-DRCFS降低了S1依赖解锁延迟,将S2 Jain完成速率公平性中位数从0.8262提高到0.9974,并将S3关键路径逻辑延迟从184降低到59逻辑毫秒,同时消除了预先声明的饥饿事件。封存的原始数据和配对区间位于
evidence/scheduler/。这些结果来自确定性逻辑时钟策略实验,不代表宿主机或内核执行耗时。快速开始
环境要求
运行完整验证
启动daemon
1.创建包含32至256个允许字符的本地Token。Token文件已被Git忽略。在Linux和openEuler上,该文件必须仅允许所有者访问,通常使用
0600权限。2.创建
agents.local.json并填写本地可执行文件的绝对路径。以下内容是配置结构示例,使用前应替换entrypoint:进程Agent通过标准输入接收一条JSON请求,可以将诊断日志写入标准错误。执行成功时,标准输出必须为空、只含空白字符,或者包含一个严格的
aegisrt.agent-output/v1JSON Envelope。标准输出出现普通日志文本会导致Attempt失败。最小无Artifact响应如下:Artifact可见性、接收者规则、配额、示例、失败行为和完整标准输入结构见进程Agent协议。
如果不希望先编写Agent,可以直接运行AegisLab参考任务。它使用确定性的菱形DAG和本地进程Agent,不需要外部模型或网络服务。
真实应用验证见AegisRepoOps。该应用针对固定的公开GitLink Go仓库提交运行六任务扇出与汇合DAG,并生成可复核的质量证据。
3.启动daemon。由于服务当前不负责TLS终止,HTTP监听器仅允许绑定loopback地址。
在浏览器中打开
http://127.0.0.1:8080/console/。静态Console Shell可以匿名加载,但服务器不会向页面发送daemon凭据。将本地Token文件中的内容粘贴到连接表单后,Token只保存在当前页面的JavaScript内存中,并在刷新或锁定时清除。Console不依赖业务角色:它从安全Agent目录获取Agent ID,并根据任务依赖渲染工作流。在由systemd管理的openEuler主机上,应使用已经审核的openEuler部署包。服务单元使用
-cgroup-root auto时,AegisRT只发现被委派的服务cgroup,将daemon移入manager叶节点,并在接受Agent前通过私有层级启用cpu、memory和pids控制器。系统会拒绝直接使用全局cgroup v2挂载根目录。显式指定-cgroup-root属于管理员管理模式,需要提前准备好对应层级。系统必须选择且只能选择一种状态模式。正式持久化运行使用
-state-file;一次性本地实验可改用-ephemeral。-scheduler-policy只接受fifo、priority或dag-drcfs,默认值为dag-drcfs。所选策略会写入Runtime统计和持久化配置指纹,因此切换策略时必须使用新的状态文件,系统不会静默恢复不兼容的调度器状态。Runtime文件可能包含任务目标及其他TaskSpec字段,相邻的
<state-file>.context保存已提交的Context明文。应确保目录仅对当前用户可见,并禁止提交这两类文件。默认情况下,系统会拒绝持久化Context格式出现之前生成的Checkpoint。对于受支持的Runtime v1升级,应先备份,再使用
-migrate-legacy-state启动一次。由于v1不包含持久化Context内容,迁移只会创建空Context Head。该参数不能为正常的当前格式Runtime重建缺失或不匹配的Context文件。健康检查
认证自动执行流程见HTTP API指南。其他验证材料包括:
项目目录
开发原则
go vet、竞态测试、普通测试或构建失败都会使CI失败;.env、运行日志和生成的二进制文件。开源许可证
本项目采用Apache License 2.0,详见LICENSE。