YYAgentCore.Subagents
2.1.0
See the version list below for details.
dotnet add package YYAgentCore.Subagents --version 2.1.0
NuGet\Install-Package YYAgentCore.Subagents -Version 2.1.0
<PackageReference Include="YYAgentCore.Subagents" Version="2.1.0" />
<PackageVersion Include="YYAgentCore.Subagents" Version="2.1.0" />
<PackageReference Include="YYAgentCore.Subagents" />
paket add YYAgentCore.Subagents --version 2.1.0
#r "nuget: YYAgentCore.Subagents, 2.1.0"
#:package YYAgentCore.Subagents@2.1.0
#addin nuget:?package=YYAgentCore.Subagents&version=2.1.0
#tool nuget:?package=YYAgentCore.Subagents&version=2.1.0
YYAgentCore
一个与 UI 无关的 .NET Agent 运行时基础库,产出 YYAgentCore.dll。
目标:把每次做 agent 工具都要重写的部分——agent 循环、API key 注入、流式解析、各阶段提示词注入、tools 框架、MCP 客户端——沉淀成一个可复用 DLL。之后新建 agent 工具时,宿主只需关心三件事:
- UI(目标宿主:WinForms 与 Unity 2022;库为
netstandard2.0,任何 .NET 宿主可用,WebGL 除外) - 具体工具的实现(继承
ToolBase) - 装配:把 provider、工具、审批回调、钩子注入
AgentRunner,然后await foreach事件流刷新 UI
非目标:不做 UI 组件、不做具体业务工具(通用工具放 Tools.Builtins)、不做定时/剪贴板/截屏等系统能力;不宣称内建检索质量(RAG 以「接口 + 拼装」提供,实现可插拔)。
当前基线(2026-11-13,最近一次实测):
dotnet build YYAgentCore.slnx -c Release0 警告 0 错误;dotnet test1,794/1,794(net8 主工程 1,789 + net48 冒烟 5;含本轮 9 条模块装配诊断用例,见 docs/25。历史明细:1,237 基线 + 17 条数据丢失链/降级只读/损坏保护/完整性标记判别用例,见 docs/17 + 6 条 embedding 分批 + 2 条编排任务数上限 + 4 条记忆 OCE 口径 + 1 条 RagStore Dispose + 9 条归一化缓存一致性 + 2 条召回读不等待写锁 + 2 条代际恢复正确性 + 4 条生命周期/可见性 + 2 条兼容/降级边界 + 3 条复审缺口用例 + 5 条代理身份注入 + 25 条协作总线核心 + 16 条协作工具 + 11 条注入钩子 + 4 条端到端协作用例 + 43 条协作总线审查修复用例(消息不丢/输出转义/终态/限频) + 7 条子代理协作接入用例 + 3 条协作策略 + 5 条编排 presence 用例 + 27 条阶段 4 增强用例 + 22 条阶段 2-4 审查修复用例 + 8 条 Unity AI 编辑器样板用例 + 13 条 replace_in_file 判别用例 + 16 条 search_files 范围/匹配用例 + 6 条 search_files 文件模式(glob)用例 + 8 条 read_file 分页用例 + 6 条 read_image + 3 条 get_environment_info + 5 条 list_dir 递归/排除用例 + 9 条子代理审查修复用例(编码保留/非 UTF-8 拒绝、混合换行拒绝、offset=0 分页、UTF-16 二进制判定、include 不跨目录、MaxFiles 截断提示) + 8 条第二轮动态验证修复用例(tmp 误删/整体时间预算/new_string 换行/单文件 glob/代理对截断/全文二进制/截断提示/空白工作目录) + 2 条 P2 清理用例(路径前缀大小写语义/环境信息 roots 归一化)+ 1 条真实端点复测修复用例(无参工具 schema 归一化)+ 16 条第七轮交叉审查修复用例(摘要跳过洞/并行收尾/SSE 断流计时/进程树/charset/CJK 扩展 A 区/增量槽位解析/分页 include_total/读体预算) + 154 条开箱即用架构用例(模块契约/组合根/配置解析/平台档案/预设/四项能力/复审修补,见 docs/21)+ 10 条多模型复审修补用例(白名单路径拒绝/失败回收钩子/泛型内联/预设命名参数)+ 5 条 net48 冒烟(验证 netstandard2.0 资产))。构建/测试已固化为 CI 门禁(构建与测试)。从 1.0.0 升级的宿主请先读 破坏性变更。
能力矩阵
| 模块 | 提供的能力 | 主要入口 | 设计文档 |
|---|---|---|---|
YYAgentCore(核心) |
agent 主循环、SSE 流式解析与 tool_call 聚合、重试/审批/超时/截断、上下文裁剪与摘要压缩、会话原子持久化、KeyPool/DPAPI 密钥、MCP stdio 客户端、钩子管道、知识注入机制、多模态输入(vision:SupportsVision 开关 / image_url 序列化 / 工具回图 / 持久化策略) |
AgentRunner、AgentDependencies、AgentOptions、ToolBase、IChatProvider、IAgentHook、ImagePart |
02、03 |
Tools.Builtins |
通用工具:get_current_time http_fetch read_file write_file replace_in_file search_files list_dir(支持 depth/exclude)read_image get_environment_info create_dir move trash search_knowledge;可选协作工具(默认不注册,宿主开启子代理/团队时装配 InMemoryAgentBus + AgentBusInjectionHook):agent_send agent_inbox agent_status(agent_send 支持可选审批、广播 scope 白名单与每 run 限频;FileAgentBusStore 提供可选文件持久化) |
各 ToolBase 子类、InMemoryAgentBus、AgentBusInjectionHook、FileAgentBusStore |
03 §7、18 |
Tools.Shell |
命令执行 run_command:白名单 + cwd 校验 + 超时 + 进程树收尾。白名单只约束"跑哪个程序",不约束"这个程序能做什么"——被授权的 git/dotnet/npm 仍可自行 spawn 进程,默认 RequiresApproval = true,请保留人工审批或只授权完全信任的程序 |
ShellModule / RunCommandTool |
docs/21 §6.2 |
Subagents |
把独立上下文的 AgentRunner 包成工具 delegate_task;支持同步/异步委派、父子双向通信、中断后续跑、subagent_control 控制面;可选接入协作总线(SubagentOptions.PeerBus:子代理自动收兄弟/父消息、presence 含父子深度);子代理默认不继承 subagent_control(InheritControlTool) |
SubagentTool、SubagentOptions、SubagentControlTool |
08、09、10 |
Orchestration |
六阶段团队编排(需求→设计→拆分→执行→检测→验收)、任务板 DAG 并发、修复循环、门禁干预、orchestrate 工具;可选接入协作总线(TeamOptions.PeerBus:阶段代理 presence 可见,orchestrate status 输出含阶段代理状态摘要) |
TeamOrchestrator、IOrchestrationAgentPort、TeamOptions |
10 |
Rag |
文本切分 + embedding + 向量索引 + RagRetriever : IKnowledgeRetriever,零改动接入知识注入 |
RagStore、RagRetriever、TextChunker |
12 |
Memory |
记忆闭环:写入(工具 / 自动钩子 / LLM 抽取)→ 存储(JSON 分区 / 分代分片)→ 召回(词法默认 / 向量可选)→ 查询扩展 → 注入 | JsonFileMemoryStore、GenerationalMemoryStore、MemoryWriter、MemoryInjectionHook、MemoryWriteHook |
11、12、13、14 |
快速开始
using System;
using System.Collections.Generic;
using System.Threading;
using YYAgentCore.Contracts;
using YYAgentCore.Engine;
using YYAgentCore.Providers;
using YYAgentCore.Security;
using YYAgentCore.Tools;
using YYAgentCore.Tools.Builtins;
var tools = new ToolRegistry();
tools.Register(new GetCurrentTimeTool());
var provider = new OpenAiCompatibleProvider(new OpenAiCompatibleOptions
{
BaseUrl = "https://api.deepseek.com", // 支持 /、/v1、/chat/completions 三形态
Keys = new EnvironmentKeySource("deepseek", "DEEPSEEK_API_KEY"),
ServiceName = "deepseek",
DefaultModel = "deepseek-chat",
});
var deps = new AgentDependencies(Provider: provider, Tools: tools);
var runner = new AgentRunner(deps, new AgentOptions { MaxRounds = 25 });
// history 由宿主持有:每轮成功后按事件回填,引擎内部会克隆,不改你的列表
var history = new List<ChatMessage>
{
new ChatMessage(ChatRole.User, new List<ContentPart> { new TextPart("现在几点了?") }),
};
await foreach (var evt in runner.RunAsync(history, CancellationToken.None))
{
switch (evt)
{
case AssistantTextDelta d: Console.Write(d.Text); break;
case ToolExecutionFinished f: Console.WriteLine("\n[tool] " + f.ToolName + " → " + f.Outcome.Result.Output); break;
case ApprovalSkipped s: Console.WriteLine("\n[audit] 破坏性工具未经审批执行:" + s.ToolName); break;
case RunFinished: Console.WriteLine(); break;
case RunFailed f: Console.WriteLine("失败:" + f.Error.Message); break;
}
}
要点:一个会话不必一个 AgentRunner(Runner 无全局状态,可每次 new;并发多会话各自持 history 与 CancellationTokenSource);provider 与 registry 可整个程序复用;provider 实现 IDisposable,宿主销毁时应释放。完整模板(含 WinForms/Unity 事件映射、审批弹窗、MCP、会话恢复)见 宿主接入指南。
破坏性变更(必须知晓)
2026-10-23:审批语义从「声明即强制」改为「声明 + 宿主决定」(ApprovalMode 默认 Advisory,见 docs/16 §9.13;决策记录见 ADR 2026-10-23 审批模式):
| 场景 | 旧行为(1.0.0) | 现行为(默认 Advisory) |
|---|---|---|
工具声明 RequiresApproval = true,宿主注入了 IApprovalHandler |
发起审批 | 发起审批(不变) |
同上,但宿主未注入 IApprovalHandler |
拒绝执行(fail-closed) | 直接执行,并发出 ApprovalSkipped 事件 + Warning |
| 宿主要恢复旧行为 | — | AgentOptions.ApprovalMode = ApprovalMode.Strict |
| 宿主想彻底关闭审批 | — | ApprovalMode.Off(忽略声明与策略,不发 ApprovalSkipped) |
受影响的典型工具:forget、write_file/move/trash、MCP 中配置为 confirm 的工具、子代理(默认继承父 run 的模式)。未消费 ApprovalSkipped 的宿主,破坏性工具会静默执行——建议审计事件至少落日志。
2.0.0 起(2026-11-04):ShellModule / RunCommandTool 在构造时拒绝落在可写工作区内的白名单命令路径(ArgumentException)。旧配置若写过 allowedCommands: ["<工作区>/bin/tool.exe"],升级后装配会直接失败——因为模型可以用文件工具覆盖那个 exe,精确路径白名单反而比裸名更危险。迁移:把该程序装到工作区之外,或改用裸名(PATH 搜索会自动排除可写区)。
其他破坏性变更:Orchestration 公开 API 由整包依赖改为端口注入(IOrchestrationAgentPort,ADR),包间已零 ProjectReference。
当前状态
| 项 | 状态 | 证据 |
|---|---|---|
| 版本 | 2.1.0(2026-11-13 发布,见 docs/25;2.0.0 是首个对外发布版本,2026-10-24;1.0.0 为内部验收版本、未对外分发,v1.0.0 tag 保留不动);15 个包统一版本,后续按包独立演进 |
Directory.Build.props、ADR 2026-10-24 |
| 构建 | dotnet build YYAgentCore.slnx -c Release 0 警告 0 错误(TreatWarningsAsErrors 全局生效,构建通过即门禁) |
Directory.Build.props |
| CI | GitHub Actions(Windows runner:构建 + 全量测试)+ 平台无关入口 scripts/ci.ps1;SDK 由 global.json 锁定 |
.github/workflows/ci.yml、scripts/ci.ps1、global.json |
| 测试 | 1,794/1,794(net8 主工程 1,789 + net48 冒烟 5;2026-11-13 实测) | docs/17 · docs/25 |
| 独立审查 | 6 轮共 156 项确定问题,全部修复并配「判别用例 + 回退源码反证」 | 1 · 2 · 3 · 4 · 5 · 6 |
| 宿主验证 | WinForms Demo;Unity 2022.3 Mono 播放器两轮冒烟全绿(普通轮 + MCP stdio 轮);真实 DeepSeek 端点冒烟通过(2026-10-16);Unity AI 编辑器样板(samples/UnityEditorAssistant)batchmode 冒烟 PASS(2026-10-24) | smoke-notes、unity-smoke-notes、acceptance-report |
| 已知欠账 | 真实端点 --compact-check 阈值测量待密钥;NuGet 尚未发布(dotnet pack 已可产出 15 个包) |
acceptance-report §5、docs/16、compact-notes |
宿主矩阵
| 宿主 | 状态 | 说明 |
|---|---|---|
| WinForms(.NET 8 / .NET Framework 4.8) | ✅ | 示例:src/YYAgentCore.Demo.WinForms |
| Unity 2022.3 Mono | ✅ | 实测播放器构建与运行:unity-smoke-notes |
| Unity 2022 IL2CPP | ✅ 限定冒烟通过(2026-11-04) | 2022.3.17f1c1 + IL2CPP 构建出播放器(264 MB)、ManagedStrippingLevel=Low。探针覆盖:AOT 下泛型/接口可用、能力位自动跳过依赖 Process 的模块(skipped=shell)、ChatPreset 装配。未覆盖:真实 SSE 对话、MCP gating、Memory/Rag/Subagents/Orchestration 在 IL2CPP 下的装配、Medium/High 裁剪。见 docs/22 §6 |
| WebGL | ❌ | 无 HttpClient |
| 其他 .NET 宿主 | ✅ | 库为 netstandard2.0,零反射序列化、无 Span<T>、无原生依赖 |
架构与包边界
Contracts/ 消息 / provider / tool / engine / knowledge / embedding / vector 抽象
↑
Engine/AgentRunner 主循环(唯一「知道一切」的地方)
↑
Providers/ Streaming/ Tools/ Mcp/ Sessions/ Security/ Context/ Prompts/ Vector/
↑
可选包:Subagents / Orchestration / Rag / Memory / Tools.Builtins(只依赖核心)
扩展包边界规则(ADR 2026-10-21、02 §3.1):
- R1 核心只定义「引擎要调用」的接口;
- R2 被 ≥2 个包共用的轻契约可进核心(命中
IEmbeddingProvider/IVectorIndex); - R3 包间协作一律端口注入,禁止
ProjectReference包间引用。
代价:跨包组合(如「编排 × 子代理」)需要端口适配。生产适配器已提供:YYAgentCore.Presets.Team 的 SubagentAgentPort(公开类型,见 docs/25);偏好自己实现的宿主也可以写约 90–120 行适配代码。核心库只依赖 4 个 NuGet 包(见文末),能力包之间依赖为零(Presets.* / Hosting.* 属组合层,按 R5 允许引用能力包)。
项目结构
src/YYAgentCore/ 核心库(netstandard2.0;含 Modules 装配契约)
src/YYAgentCore.Hosting/ 组合根(Builder / 配置解析 / 平台档案 / 装配流程)
src/YYAgentCore.Hosting.Windows/ Windows 平台档案(DPAPI 探测、Process)
src/YYAgentCore.Hosting.Unity/ Unity 平台档案(persistentDataPath、主线程调度)
src/YYAgentCore.Tools.Builtins/ 通用工具(含 todo_write)
src/YYAgentCore.Tools.Shell/ 命令执行(白名单 + 命令解析 + 进程树收尾)
src/YYAgentCore.Tools.Web/ 网页搜索(provider 抽象 + Tavily 实现)
src/YYAgentCore.Skills/ 技能包(Markdown 目录 + 按需加载)
src/YYAgentCore.Subagents/ 子代理(delegate_task)
src/YYAgentCore.Orchestration/ 团队编排(orchestrate)
src/YYAgentCore.Rag/ 检索扩展包
src/YYAgentCore.Memory/ 长期记忆
src/YYAgentCore.Presets.Chat/ 预设:纯对话
src/YYAgentCore.Presets.Coding/ 预设:编码助手(文件 + 记忆 + RAG)
src/YYAgentCore.Presets.Team/ 预设:多代理协作(含 IOrchestrationAgentPort 生产适配器)
src/YYAgentCore.Demo.Console/ 控制台宿主(含 --kb-check / --compact-check / --memory-check 测量模式)
src/YYAgentCore.Demo.WinForms/ WinForms 验收宿主
tests/YYAgentCore.Tests/ xUnit 测试(net8.0,1,789 用例)
tests/YYAgentCore.Tests.Net48/ xUnit 冒烟(net48,5 用例;验证 netstandard2.0 资产)
tests/TestAssets/ MCP 测试 server、真实 DeepSeek SSE 方言样本
samples/UnityEditorAssistant/ Unity AI 编辑器接入样板(Runtime 宿主逻辑 + Unity 2022.3 工程 + 批处理冒烟)
unity-smoke/ Unity 2022 冒烟工程(独立,不进 sln)
docs/ 设计、规格、审查、实证(见下)
YYAgentCore.slnx 解决方案(需 .NET SDK 9.0+)
文档导航
必读(新读者从这里开始)
| 文档 | 内容 |
|---|---|
| 宿主接入指南 | 最小装配、事件流 → UI、审批、MCP、会话、知识/记忆注入、30 分钟自测清单 |
| 01-可行性分析与技术选型 | 可行性结论、TS 概念 → C# 映射、技术选型与理由、风险与对策 |
| 02-架构与模块拆解 | 分层图、模块进/不进 DLL 的判据、公共 API 草案、事件与并发模型 |
| 03-模块详细设计 | 每个模块的职责、关键类型、行为细节、边界情况 |
| 04-实施计划与测试策略 | 里程碑与验收标准、测试策略、待决问题 |
能力规格
| 文档 | 内容 |
|---|---|
| 05-实施计划 | 逐项实现手册:任务卡(依赖/产出/验收)、工作流模板、验收协议 |
| 06-知识检索注入 | 检索接口 + 内核拼装、阶段 0–4 记录与拍板结果 |
| 07-长会话摘要压缩 | IAsyncContextManager + SummarizingContextManager、as-built 偏差 |
| 08-子代理 | delegate_task:工具集隔离、递归深度、取消级联、事件桥 |
| 09-父子会话通信与续跑 | SendInstruction、CancelRun 保进度续跑、ask_parent/report_status |
| 10-团队编排与异步子代理 | 异步子代理多轮对话、六阶段编排、任务板 DAG、门禁 |
| 11-记忆系统与 RAG 扩展(方案) | 四层记忆、RAG 边界、六方案裁决、召回实证与拍板 |
| 12-检索与记忆扩展包 | Rag 与 Memory 阶段 1/2 的契约、落地偏差与坑 |
| 13-记忆长期运行与自动整理 | 分代分片存储、内存倒排、归并/归档/治理日志 |
| 14-记忆长期运行-宿主接入示例 | 记忆闭环的宿主装配范例与验证方法 |
| 18-代理协作总线 | 子↔子/多对多内存协作总线:契约、三工具、注入 hook、阶段 1–3 实施清单(阶段 1 已实施,2026-10-24) |
实证与测量记录
| 文档 | 内容 |
|---|---|
| memory-notes | 96 条记忆 / 36 topic 的召回实测、向量对照、真实模型校准(含结论边界) |
| kb-injection-notes | 知识注入的命中/注入量/延迟测量 |
| compact-notes | 摘要压缩的口径与 mock 冒烟数据(真实端点测量待密钥) |
| 15-向量模型对比评测 | 向量模型实验与结论(含长/短文本结论相反的情况) |
| smoke-notes | 真实 DeepSeek 端点冒烟记录 |
| unity-smoke-notes | 历史记录(DLL 方式):DLL 清单与版本对照、实测命令、中国特供版 2022.3.62f3c1 实测。UPM 与 IL2CPP 的当前结论见 docs/22 |
审查、验收与 ADR
| 文档 | 内容 |
|---|---|
| acceptance-report | 最终验收报告(1.0-rc 结论与环境限制) |
| acceptance-findings | 验收期发现项(含 Demo 宿主) |
| bug-report · 2026-10-20 · round4 · round5 · round6 | 六轮独立审查报告(共 156 项确定问题) |
| 16-第六轮审查核验结论 | 第六轮独立核验:38 确认 / 15 部分 / 1 不成立,以及拍板项 |
| bugfix-review-round6 | 第六轮修复的独立复审(R-1~R-10)与两次复核(N-1~N-7) |
| ADR:知识检索 · 摘要压缩 · 包边界 · 记忆存储 · 兼容性政策 · 审批模式 · 首发版本 2.0.0 | 轻量决策记录(决策 / 备选 / 后果) |
| 19-首次对外发布步骤 | 按 ADR 2026-10-23 落地:发布前补齐项核对、9 步发布流程(冻结→门禁→打包→本地验证→推送→tag→核验→回滚)、发布记录模板 |
| 20-第七轮交叉审查与优化建议 | 双模型独立审计 + 人工核验:16 条隐藏缺陷(0 P0 / 3 P1 / 5 P2 / 8 P3),14 条已修复并配判别用例,2 条性能项延后;含修复实施记录与复审结论 |
| 21-开箱即用架构:模块化组装与平台适配 | 已实施:模块契约 IAgentModule + 组合根 Hosting + 平台能力矩阵,把接入成本从 200+ 行压到 3~5 行;含 ADR R2'/R4/R5/R6 修订提议、配置文件格式与 M-1~M-18 行为契约 |
| 22-UPM 包与 Unity 实测 | UPM 包结构与 netstandard2.1 决策(Bcl.AsyncInterfaces 与 mscorlib 的 IAsyncEnumerable 双重定义)、facade 的 Auto Reference 处理、Mono + IL2CPP 实测结论、Unity 批处理的环境坑 |
| 23-全量审查记录 | 四轮独立审查 + 四路交互复审的完整记录:24 条发现的逐条验证、误报与设计取舍的判决依据、变异检验与深度 2 装置 |
| 24-变更说明 | 对外变更说明:2.0.0 基线以来的新增包与能力、10 处宿主需核对的行为变更、修复清单、已知限制与发布前待办 |
| 25-模块装配诊断 | 已实施:降级可查询(AgentHost.DegradedModules)、预设内部能力位校验、modules.enable/disable 路径语法、SubagentAgentPort 公开(M-19~M-23) |
文档是「写作时刻的快照 + as-built 追加」:每篇的状态行只反映其写作时点,当前基线与破坏性变更以本 README 为准。历史文档中与现状冲突的陈述以对应 ADR 为准。
构建与测试
pwsh scripts/ci.ps1 # 构建 + 全量测试 + 覆盖率门槛(与 CI 同一入口)
pwsh scripts/ci.ps1 -SkipCoverage # 只跑测试(本地快速迭代)
# 等价展开:
dotnet build YYAgentCore.slnx -c Release # TreatWarningsAsErrors 全局开启 → 构建通过即 0 警告
dotnet test tests/YYAgentCore.Tests/YYAgentCore.Tests.csproj -c Release ^
--collect "XPlat Code Coverage" --settings tests/YYAgentCore.Tests/coverlet.runsettings ^
--results-directory artifacts/coverage
pwsh scripts/coverage.ps1 # 解析 Cobertura 报告并校验行覆盖率 ≥ 80%
- SDK 由 global.json 锁定为 9.0.312(
rollForward: latestFeature):避开 .NET 10 SDK 在本类环境的 workload 解析问题,并保证本地与 CI 使用同一编译器(不同 SDK 的警告集合不一致,例如 CS1998 只在 SDK 9 下暴露)。 - CI:.github/workflows/ci.yml 在 Windows runner 上执行同样的构建 + 测试;仓库主站是 Gitee(不执行 GitHub Actions),Gitee Go / Jenkins 只需一个脚本任务跑
pwsh scripts/ci.ps1,失败即非 0 退出码。 - 覆盖率门槛:行覆盖率 ≥ 80%(当前基线 87.48%,2026-10-23 实测)。
coverlet.collector收集,coverlet.runsettings 按文件路径排除 Demo 示例工程与测试工程源码;scripts/coverage.ps1 逐程序集输出并以非 0 退出码拦截低于阈值的构建。反证:阈值临时设 99% 时coverage.ps1与ci.ps1均以 exit code 1 失败。 - 需要 .NET 8 运行时(测试与 Demo 目标
net8.0/net8.0-windows)。 - 两个测试工程,覆盖两条 TFM 解析路径:
tests/YYAgentCore.Tests(net8.0)—— net8.0 对 netstandard2.1 兼容性更优,MSBuild 永远选 2.1 资产;tests/YYAgentCore.Tests.Net48(net48)—— 不支持 2.1,只能拿lib/netstandard2.0, 用TargetFrameworkAttribute断言"确实加载了 2.0 资产"。缺了它,2.0 产物的运行时差异不在回归网内。
- 部分 MCP 测试会启动真实 Node 子进程(
tests/TestAssets/*.mjs),本机需安装 Node。 - Unity 侧有两个独立工程:
unity-smoke/(历史 DLL 方式,见 unity-smoke-notes)与upm-smoke/(UPM 包 + IL2CPP 实测,见 docs/22)。均不进 sln。
依赖
| 包 | 版本 | 用途 | 备注 |
|---|---|---|---|
| Microsoft.Bcl.AsyncInterfaces | 8.0.0 | IAsyncEnumerable on netstandard2.0 |
Unity 必需(12 个 DLL 清单见 unity-smoke-notes §3) |
| System.Text.Json | 8.0.5 | JSON(手工 token 映射,零反射) | 带来 Memory/Buffers/Unsafe 等 facade 依赖 |
| Microsoft.Extensions.Logging.Abstractions | 8.0.2 | ILogger |
无默认日志实现,由宿主注入 |
| System.Security.Cryptography.ProtectedData | 8.0.0 | DPAPI 密钥存储 | 仅 Windows 桌面;Unity 用 EnvironmentKeySource |
发布与许可
- 尚未发布 NuGet:当前使用方式是项目引用、UPM 包(Unity)或拷贝 DLL(见 宿主接入指南 §1.1、docs/22);15 个库包统一
2.0.0,后续按语义化版本同步升级。 - 打包:
dotnet pack YYAgentCore.slnx -c Release -o artifacts/nuget产出 15 个库包 + 15 个符号包(核心 + 5 个能力包 + 3 个 Hosting/平台包 + 3 个预设包 + Skills/Shell/Web)。发布用 scripts/publish-nuget.ps1(先-WhatIf演练)。包内含 README、XML 文档、MIT许可证表达式、projectUrl/repository(含构建时的 commit);能力包(Builtins/Subagents/Orchestration/Rag/Memory/Skills/Shell/Web)只依赖核心库、彼此零引用;Hosting依赖核心;Presets.*按 R5 允许引用多个能力包(这正是它存在的意义),Presets.Team的依赖闭包最深(Hosting + Coding + Subagents + Orchestration)。 - 许可证:MIT(LICENSE)——允许商用与闭源再分发,仅需保留版权声明。
- 版本政策:ADR 2026-10-23 兼容性政策 + ADR 2026-10-24 首发版本——
1.0.0是内部验收版本(未对外分发,v1.0.0tag 保留),2.0.0是首个对外发布版本,SemVer 自2.0.0起算:默认值/语义反转按 major,破坏性变更须!提交 + README 迁移路径 + 包版本同步。 - 变更记录:CHANGELOG.md。
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Bcl.AsyncInterfaces (>= 8.0.0)
- YYAgentCore (>= 2.1.0)
-
.NETStandard 2.1
- YYAgentCore (>= 2.1.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on YYAgentCore.Subagents:
| Package | Downloads |
|---|---|
|
YYAgentCore.Presets.Team
预设:多代理协作(编码 + 子代理 + 编排,并提供 IOrchestrationAgentPort)(docs/21 §5.4) |
GitHub repositories
This package is not used by any popular GitHub repositories.