一次发布改了 2000+ 个文件:Avalonia 原生做出 3D 地球、AI 聊天和会动的 AI 原理动画(TKCode.Arc 0.3.0-preview.2)
大家好,我是 token。TKCode.Arc 发布了 0.3.0-preview.2。
这一版是到目前为止最大的一次更新:一次发布合并了 2000+ 个文件的改动 (2,163 个文件,分 9 个提交合入),新增三类共 18 个 页面级区块,一个全新的 TKCode.Arc.Special 包,以及一批底层动效和性能改进。同时,TKCode.Arc.Blocks、TKCode.Arc.AdvancedCharts 和 TKCode.Arc.Special 三个包从这一版开始正式发布到 NuGet,不用再从仓库自己编译。
下面的效果图都是用真实的 Gallery 示例在 Avalonia 里渲染出来的,原生控件,没有 WebView。
- 仓库:https://github.com/AIDotNet/TKCode.Arc
- 在线体验:https://docs.tkcode.si/
- NuGet:https://www.nuget.org/packages/TKCode.Arc
这一版有什么
| 类别 | 内容 |
|---|---|
| 改动规模 | 2000+ 个文件,9 个提交 |
| 新包 | TKCode.Arc.Special(AI 动画讲解) |
| 新区块 | AI 区块(7)、项目区块(5)、展示区块(6),共 18 个 |
| 新发布到 NuGet | Blocks、AdvancedCharts、Special |
| 底层 | 动效调度、文本缓存、ArcRing、WordDiff 等 |
| 文档 | 三语言文档、示例和测试同步补齐,并提供给 AI 助手的 llms.txt |
展示区块(Showpieces):完全自绘
这一组区块不依赖任何图表库,数据、相机、投影和命中测试都是自己写的。
RevenueGlobe:实时支付地球
一个点阵地球,显示全球各城市的实时支付。可以拖动旋转、点城市飞过去,底部的时间轴可以回放一整天。陆地来自 0.5° 的 Natural Earth 掩码。

ActivityTerrain:一周活动的 3D 地形
一周 24 小时的活动量画成可旋转、可缩放的 3D 地形,指到柱子上有详情卡片;点 "Heat map" 地形会被压平成热力图,再点回来又立起来。

LayoutMorph:同一组卡片,六种看法
网格、瀑布流、列表、堆叠、轮播、螺旋。每一张卡片都用自己的弹簧飞到新位置,不是整体淡入淡出。

这一组还有 CustomerGalaxy(2,400 个客户组成的旋转星系,可以重新聚成簇)、SemanticZoom(从团队缩放到项目再到单个任务,带面包屑、小地图和引导游览)和 ExplodedView(滚动时一个界面拆成带标签的图层)。
项目区块(Projects)
五个面向项目协作的区块:
WeekCalendar:周、工作周、日、三日、议程五种视图,拖拽创建、移动、调整事件,15 分钟一格,支持撤销AvailabilityPicker:多人会议时间选择ProjectBoard:紧凑的迭代看板ReleaseReadiness:检查清单解锁一个异步发布动作KanbanBoard:物理拖拽(抬起、倾斜、落下弹簧),键盘和触摸也能拖,泳道、实时 WIP 限制、快速添加

AI 区块
这一版开始补齐 AI 应用最常用的那一组界面,全部是原创设计和实现:
- Model picker:模型选择,带推理强度和按厂商分组的菜单
- Agent memory:智能体记忆卡片,容量条、搜索高亮、就地编辑、"忘记"带撤销
- AI composer :AI 输入框,
/命令、@提及变成令牌,附件、工具开关、发送变停止 - AI chat:完整聊天,Markdown 流式输出,按词释放,推理折叠、工具调用、引用预览,重试与版本切换
- AI answer:文章式回答页,引用、句子和来源卡片三方联动高亮
- AI side panel 和 Prompt studio
下面是 AiChat:输入问题,回答按词流出,带推理折叠和工具调用,滚动跟随到底部。

AiChat 通过 IAiChatResponder(一个事件流)驱动,也可以自己往 AiChatReply 里填内容;你只需要接自己的模型,界面和动效都是现成的。
Special:AI 动画讲解
新包 TKCode.Arc.Special,五个会动的 AI 讲解卡片,每一个都是可复用、数据驱动的控件,所有数字都由数据算出来,而不是写死的动画:
AgentLoop:智能体循环,收集上下文、执行动作、验证,不通过就再转一圈MixtureOfExperts:路由器给每个专家打分,token 飞向 top-k 专家,带负载均衡条SpeculativeDecoding:小模型猜、大模型一次验证,被接受的 token 飞进答案PromptCache:多个请求共享同一段缓存前缀,成本和首 token 节省ReasoningTree:对思路做束搜索,剪枝,留下得分最高的路径


它们共用 Explainer 基类:播放、暂停、单步、重来、倍速、进入视野自动播放、循环,以及减弱动效下的行为都是现成的。
底层改进
ArcSurface.Elevation:对话框、抽屉、气泡卡片和菜单的内容知道自己放在抬升的界面上。鼠标悬停在这类界面上的幽灵按钮,现在有清楚可见的悬停填充,不再几乎看不出来ArcRing、WordDiff、WordPacer、DecoratedTextBlock,以及新增的 23 个 Lucide 图标TokenTextEditor:令牌作为整体处理的多行编辑器,MentionInput在此基础上重建,行为不变- 性能:动效调度器每帧只推进每个驱动一次;隐藏的循环不再产生开销;模糊效果和文本排版有缓存;ActivityTerrain 的单帧 GPU 时间降到原来的约五分之一,轨道旋转时每帧 UI 线程分配从 410 KB 降到 34 KB
- Gallery :WebAssembly 站点首帧前少下载约 1.5 MB(12.0 MB → 10.5 MB);站点还提供
llms.txt、llms-full.txt和每个页面的 Markdown 版本,方便 AI 助手直接读文档
修复
- Tabs、PageHeader、Breadcrumb、ArcContentSwap 和 DataGrid 里的模板不再以
null数据上下文构建,之前读取数据的模板会抛NullReferenceException - 从
Transparent渐入渐出填充时不再闪一下灰色 - 侧栏从轨道展开后,内容不再保留第一帧的宽度
- 输入框的聚焦环不再是粗重的深色,与 Arc 原版一致
升级前请注意
仓库迁移,XAML 命名空间变了。 仓库现在是 AIDotNet/TKCode.Arc,命名空间随之改变,旧地址不再解析到任何类型:
xml
<!-- 之前 -->
xmlns:arc="https://github.com/AtomUICommunity/TKCode.Arc"
<!-- 现在 -->
xmlns:arc="https://github.com/AIDotNet/TKCode.Arc"
Lucide 图标命名空间同样从 .../AtomUICommunity/TKCode.Arc/lucide 改为 .../AIDotNet/TKCode.Arc/lucide。
另外:Sidebar.ResizeMode 默认值改为 Overlay,需要原来的行为请设 ResizeMode="Push";FieldFrameToken 的 FocusRing* 值已移除。
安装
bash
dotnet add package TKCode.Arc --version 0.3.0-preview.2
dotnet add package TKCode.Arc.Blocks --version 0.3.0-preview.2 # 页面级区块(AI、项目、展示)
dotnet add package TKCode.Arc.AdvancedCharts --version 0.3.0-preview.2 # DataGrid
dotnet add package TKCode.Arc.Special --version 0.3.0-preview.2 # AI 动画讲解
dotnet add package TKCode.Arc.Fonts --version 0.3.0-preview.2 # 可选:Geist 字体
dotnet add package TKCode.Arc.Icons.Lucide --version 0.3.0-preview.2 # 可选:完整 Lucide 图标
在应用启动时注册:
csharp
builder.UseDesktopControls();
builder.UseArc();
builder.UseArcBlocks();
builder.UseArcAdvancedCharts();
builder.UseArcSpecial();
版本带 -preview 后缀,API 在版本之间仍可能变化,建议固定版本号。AtomUI 固定为 6.2.8,Avalonia 为 12.1.4。
完整更新日志在仓库的 CHANGELOG.md,在线文档在 https://docs.tkcode.si/。欢迎试用、提 Issue,也欢迎点个 Star。