Skip to content

Releases: alecksty/waycoder

v0.96.810

Choose a tag to compare

@alecksty alecksty released this 09 Oct 06:25

v0.96.810 —— 重打一个不含受限第三方模型的包(v0.96.809 的补丁版)

只为一件事:把随包分发的那 4 个受限 3D 模型清出去。v0.96.809 的包是在删它们之前打的,
里面仍然含着一个 CC BY-NC(禁商用) 模型 —— 而本 App 是收费的。

⚠ v0.96.809 的 CHANGELOG 里只记了「删 Fox.glb」(CC-BY,要署名);
接着往深里查才发现真正的坑:那批模型只存在于打包那台机器的 models/ 目录
(被 .gitignore 挡在仓库外)⇒ 光看工作树查不出来,必须解开 vml_lib.zip 逐份查
(工作树 3 个、包里 9 个)。逐份核出来:DamagedHelmet = CC BY-NC 4.0、
BoxTextured = CC-BY 4.0(Cesium)、AntiqueCamera = CC0 但内嵌 UX3D logo(须署名 + 商标限制)、
Fox = CC-BY 4.0 ⇒ 四个全删;保留 5 个 CC0 的(Avocado/BoomBox/Duck/Lantern/WaterBottle)

  • 自制的 rover_cutout.glb。zip 65.6 MB → 62.4 MB。

统一由 scripts/make-vml-lib.sh 重生成(zip 与 vml_lib.hash 一起更新),
逐份许可与"为什么光看工作树查不出来"记在 Examples/c/3d/models/CREDITS.md。

⚠ 升版本号是必需的(本仓 E117):同一个 CFBundleVersion 第二次上传会被 App Store Connect 拒收。
⚠ 安卓包与 iOS 包都要重打 —— 两边嵌的是同一份 vml_lib.zip(桌面 vmlcli 不读它,所以桌面包不受影响)。


v0.96.809 —— 修 App Store 退回两条:「设了服务商却切不过去」的静默失败 + 内购促销图

2026-10-08 App Store 退回 v0.96.578(提交号 960578),两条。这一版处理掉:

一、2.1(a) 核心功能不可用 —— 真因在提审版,但同族的洞还在

审核员按我们给的备注路径走(设置 → 模型 → 给主模型选服务商 DeepSeek → 填 Key → 测试 → 返回 → 对话),
主模型始终停在 Main model:(OpenAI)gpt-5.5。

  • 提审版(v0.96.578)的真因:那版设置页必须有「保存配置」按钮才生效(OnProviderChanged
    只重建模型下拉,切模型只发生在 OnSaveClicked 里),而审核员那条路径与我们写给他的备注都没提这个按钮
    ⇒ ConnectionConfig.ApplyModelChoice 一次都没被调用。该问题已在提审次日 cbb3f823
    (v0.96.579「手机端设置改为即时保存」)修掉 —— 现在选服务商即生效。
  • 同族残留(本次修):注册表里 gitee / groq / minimax / opencode-go / opencode-zen / together
    这 6 个供应商注册了、也有默认地址,但没有内置模型。在设置页选中它们时模型下拉是空的,
    CommitModel 撞上 SelectedItem is not ModelInfo 静默 return ⇒ 主模型不变、零提示 ——
    与审核员报的症状完全同型。

修法(判据只留一处):

  1. ModelCatalog.HasModels(pid) —— 「设置页能不能真正选中它」的唯一判据
    (⚠ 不要拿它收编 ConnectionConfig.TryParseSpec 里那句 ByProvider(pid).Length > 0:
    那里问的是「/connect pid/model 的 pid 合法吗」,注册过就算合法,语义有意不同);
  2. 手机端大/小模型两个服务商下拉按它过滤 —— 不能用的东西摆在列表里,正是本仓
    「与其解释,不如按实际情况不显示它」那条(同全能版优化器那一项的处置),另加一行说明去处;
  3. CommitModel 不再静默:模型列表为空时说清"为什么没变 + 去哪里加模型"(兜底,正常路径不可达)。

另一条同族加固:模型栏的守卫同步(用户 2026-10-09 口径「设置改了模型或供应商,切换到聊天界面,
模型供应商就应该改变」「只要切换 tab 就应该读一下」)。
模型栏原来只在 OnAppearing 里刷新,而"标签切换时 OnAppearing/Shell 导航事件会不会触发"
正是平台相关的(审核平台是 iPad)⇒ 等于把这条要求交给平台运气。改成 ChatPage.SyncModelBarIfChanged():
挂在本页已有的 100ms 状态定时器最前面(在 idle 早退之前),读内存 state、只在文本真变了才赋值
(变化驱动,不是节拍重绘)。OnAppearing 那条保留。

判据(SelfTest.Chunk4 新增 [供应商-模型一致性],已登记进模块表):
① 14 个可选供应商逐个 ApplyModelChoice 后 Config.Provider/Model 必须真的变成它;
② 内置注册表不许新出现「只注册、没模型」的供应商 —— 这条做过注入式反证
(临时塞一个空供应商 ⇒ 立刻红并点名,撤掉即绿)。
⚠ 第 ② 条第一版把名单手推成 5 个,跑一次就红了 —— 实际是 6 个(漏了 together):
这份名单只能跑出来,不能数出来。

二、2.3.2 促销图

新增 scripts/make-iap-promo.py:内购「促销图」1024×1024、RGB 无 alpha,构图是
22 块解锁方块 + 一行大字(22 = 全能版解锁的语言数),不用 App 图标那幅画面、没有任何小字 ——
正好对上退回的两条("等同于 App 图标" + "带小字")。产物落 ios-shots/iap/full-edition-1024.png,
复核走既有的 scripts/check-appicon.py(不另写校验)。
⚠ 它与「审核截图」是两个不同的 ASC 栏位,最容易传混。
ios-shots/README.md 与 docs/上架逐屏操作.md 补上这个栏位 —— 此前完全没写,正是它漂掉的原因。

三、手机端两个选择器改成整页(用户 2026-10-09 口径)

用户原话:「选择服务商可以弹出一页,最上面是输入框,用来输入过滤信息,下面是供应商的选择列表,
供应商名称(模型数量),没有不能出现没有模型的供应商」;
「同样的选择模型也一样……已经选中的打钩,点选后,弹框关闭,返回模型名称」。

  • 新增 ProviderPickerPage(路由 providerpicker):顶部过滤框 + 列表「名称(模型数量)」,
    当前生效的打 ✓,点一条即生效并返回。列表按 ModelCatalog.HasModels 滤过 ——
    与设置页的过滤、自测 [供应商-模型一致性] 同一份口径。

  • ModelPickerPage 改成"选择模型"整页:顶部过滤框 + 只列当前服务商的模型列表 +
    当前生效打 ✓,点一条即生效并返回。设置页与对话页顶部的模型栏共用这一页。
    ⚠ 原来的「🧠 大模型 / ⚡ 小模型」切换整块去掉。

    ⚠⚠ 两件事都是实测出来的,别当成"顺手改的":

    1. 列表原来一个子项都不渲染(用户报「现在模型列表是空的」)。取证实录(小米 13 / 0.96.809):
      RecyclerView 有空间(y[440,2202])但子项数为 0;过滤框键入 deepseek 仍是 0 行;
      logcat 无异常;页面实例被复用(输入框文字跨导航还在)。同一进法下
      ProviderPickerPage(扁平列表)渲染完全正常。
      ⇒ 病根是 IsGrouped="True" 那条分组渲染路径 —— 全仓只有这一处用过 IsGrouped,
      即没有第二个样本能证明它在本环境可用。改成扁平列表后正常。
    2. 用户口径「模型列表……没有跟着服务商一起变化」⇒ 列表按当前服务商收敛。
      收敛之后本来也只剩一个组 ⇒ 分组本身就没有必要了,两件事一次解决。
  • 设置页那两个 Picker 换成"点开进整页"的行:ProviderPicker / ModelPicker
    保留为不可见的取值容器(CommitKey / CommitBaseUrl / TestKeyFlowAsync / CommitModel
    都读它们的 SelectedItem,不动那几处 = 不动风险),只是不再显示原生下拉。

  • 两个选择页都不显示底部 TAB 栏(用户 2026-10-09:「选模型和选服务商的时候,不需要下面的 TAB 栏」)。
    ⚠ 必须在 code-behind 里 Shell.SetTabBarIsVisible(this, false) —— XAML 上写 Shell.TabBarIsVisible
    对 push 出来的页面不生效(本仓实机验过,同 SettingsGroupPage / EditorPage / DrawWindowPage)。

⚠ 为什么不再用原生 Picker:它弹的是可滚动的原生对话框,而真机上光服务商就有 142 个
(实测)—— 盲滚找一条极难,而且"某个供应商到底在不在列表里"几乎无法确认。
本次 App Store 退回(2.1a)报的「设置里换了服务商、主模型纹丝不动」就出在那条路径上。

四、手机端小模型全面退场(用户 2026-10-09 定)

用户原话:「手机版只要一个大模型,小模型不需要,暂时用不上」、
「设置、对话下面的提示文字,不要出现小模型,手机平板暂时不需要小模型」。

理由不是审美:手机端根本不用小模型 —— AgentService 只按大模型 provider 建一个 LLM,
那一组填了服务商 / Key / 地址也只在记录层面存着、运行时不生效
(CommitBaseUrl(large:false) 里那句注释写的就是这件事)。
摆着一个"填了没用"的入口,正是本仓反复记过的「显示了但暗地里不生效」形态
⇒ 与全能版优化器那一项同一个处置:与其解释,不如按实际情况不显示它。

改动(只隐藏/去文案,不删底层能力 —— 桌面端双模型架构还要用,connections / session 那套是共用的):

位置 处理
设置 →「模型」页的「小模型(摘要/压缩/补全)」整组 整块 IsVisible="False"(配置键与 Commit* 路径一个没动)
设置首页「对话(AI)」卡片那行摘要 去掉「· 小模型 xxx」——用户明说提示文字里不要出现它
模型选择页的「⚡ 小模型」切换按钮 整块去掉(本页现在只选主模型)
模型管理页(ProviderModelsPage)的「大/小」切换、大✓小✓ 标记、编辑菜单里的「设为当前小模型」 全部收成主模型一档(主✓)

哪天手机端接上小模型,把上面那几处删掉的 IsVisible="False" / 按钮加回来即可。

五、模型工具补齐(导入 / 清空 / 进度)+ 过滤框放大镜换 SVG(用户 2026-10-09 口径)

  • 导入模型从"两项"扩成四种来源(与桌面/TUI 同源,不另造):
    在线导入(列出 ModelCli.OnlineSources 全部 10 个站点:OpenCode Go/Zen、OpenRouter、Groq、
    SiliconFlow、Together AI、DeepSeek、OpenAI、Moonshot、models.dev)、内置模型目录、
    本地配置文件(Claude Code / Codex / OpenCode / Crush / OpenClaw)、自定义添加(手填)。
  • 新增「🗑 清空模型(可恢复)」:ModelCatalog.ClearAll(),二次确认并说明"不动 API Key 与当前连接";
    清空后自动露出 「♻️ 恢复内置模型目录」(RestoreBuiltIn())—— 破坏性动作必须留回头路。
  • 新增一行状态:模型库:N 个模型(内置 X + 自定义 Y)。
  • 在线导入显示进度(用户:「要显示进度,不然还以为卡住了」):ModelCli.ImportOnline 本来就有
    onProgress 回调,之前没接。现在接到那行状态文字上(🔍 拉取… → 🔄 解析…(KB) → 🔄 解析完成 N 个 → ✅ 完成),
    不弹模态框(进度是可变的、框里写不了)。⚠ 回调来自后台线程 ⇒ 碰控件回主线程
    (MainThread.BeginInvokeOnMainThread)。
  • 两个过滤框的放大镜换成单色 SVG、放到右边:用现成的 Resources/Images/icons/icon_search.svg
    (#777777 单色)—— 仓里已有先例,它的注释里就记着用户 2026-10-02 提的同一条要求(文件页那个放大镜)。
    ⚠ 给图片加 InputTransparent,否则点在图标上输入框收不到焦点(本仓 E104)。

跨端验收(2026-10-09 实测):

端 怎么验的 结果
安卓真机(小米 13 cd53cb14) uiautomator + 文本点击驱动,走审核员那条路径 选择流程全通(含幂等守卫要"先切走再切回"才可观测)
iOS 模拟器(iPad 13") SIMCTL_CHILD_WC_SHOT="go:<路由>" 直达各页 + 截图 三页均正常

⚠ iOS 那边有个硬限制要先知道:模拟器没有触摸注入(simctl 无触控命令、这台 Mac 也没给
osascript 辅助权限、没装 cliclick/idb)⇒ iOS 上只能验"页面渲染",不能验"点着走一遍";
点选流程只在安卓真机验。三张截图逐条确认了:过滤框 + 放大镜在右(单色 SVG)、
没有底部 tab 栏、服务商行是「名称(数量)」且没有模型的一个都不出现、
模型页只列当前服务商且列表非空(旧版分组那条路在安卓上是一个子项都不渲染的)、
设置页没有「小模型」那一组、模型工具三个按钮 + 状态行都在。

六、第三方 3D 资产许可核查:删掉一个无署名随包的 CC-BY 模型(用户 2026-10-09:「只带那些没有版权问题的文件」)

起因:用户要求查一遍 Examples/c/3d/ 下随包分发的 .glb 有没有版权问题。

怎么查的(不是看文档猜,是读文件自身):逐份解析 GLB 的 JSON chunk,把
asset.copyright / asset.generator 打出来 —— 那是关于来源最硬的一手证据。

查出来的真问题:

文件 文件内声明的许可 结论
models/Fox.glb CC-BY 4.0(Model by PixelMannen / @tomkranis / @AsoboStudio with @scurest,带链接) ❌ 要署名,而仓里记成 CC0 ⇒ 无署名随 vml_lib.zip 进 APK
ToyCar.glb Public domain (CC0). … created by Guido Odendahl. ✅ 可随包,无需署名
Avocado.glb / BoomBox.glb 文件内无 copyright 字段(generator = glTF Tools for Unity);许可出自 Khronos glTF-Sample-Assets 该模型的 README(CC0) ✅ 可随包
rover_cutout.glb generator = 我们自己的 make-rover-cutout-glb.py(从世界常量程序化构造,不读外部素材) ✅ 无第三方权利

⚠ 关键前提:models/ 下的文件会进 vml_lib.zip(= 进 APK)(2026-10-08 起)——
而 .gitignore / CHANGELOG / 两个例子的注释都把它记成 CC0。四处都记错了。

处理:

  1. 删掉 models/Fox.glb(git rm)—— CC-BY 允许分发但必须署名,而我们没有任何署名;
    要么署名、要么不发,这里选了不发。
  2. 随仓库进的那份换成 rover_cutout.glb(我们自己生成、无第三方权利,42 KB,带 baseColorTexture
    所以 ⑦「贴图生效」那条判据照样能响)⇒ 自测 ⑥/⑦ 已改为指向它,闸门没有变成"永远绿的空转"。
    (models/ 是 * 白名单,删掉 Fox 后全新 clone 该目录为空 ⇒ 那两道判据会直接 Fail,所以必须换一份。)
  3. 新增 Examples/c/3d/models/CREDITS.md —— 照仓里既有的 Examples/pascal/CREDITS.md 惯例,
    逐份记「文件 → 许可 → 证据 → 能否随包发」,并写清怎么恢复覆盖。
    这同时了结了 docs/VML3D对标浏览器.md 里 F7「许可与署名」 那条一直挂着的
    「🅿️ 未量(待查:仓内有没有随包分发的第三方资产许可清单)」。
  4. 改掉四处会教错人的注释/文档(.gitignore、glbview.c、gltf_demo.c、SelfTest.*.cs
    里"它是 CC0"的声明)—— 本仓 E168:注释是给用户看的文档,写错就是教错人。
    ⚠ CHANGELOG 里的旧条目不动(改历史就是失真):v0.96.808 那句「Fox.glb(CC0)」保持原样,
    更正记在本条。

⚠ v0.96.809 这个已上传的包里仍然含着 Fox.glb —— 它是本次打包之前的状态;
下一次打包起才不再包含。要彻底干净,得用去掉它之后的代码重打一个构建再传。

七、审核备注重写

WayCoder.Maui/ios-review.local.md(本地、gitignored)按当前界面重写,并给出验收点
(对话页顶部应显示 Main model:(DeepSeek)deepseek-v4-flash)。
教训:给审核员的路径必须逐条对着真实界面走一遍,且每一步都给一个"怎么知道它生效了"的判据 ——
这次两头都漏(界面要按保存、备注没写保存),审核员只能看到"点了没反应"。


v0.96.808 —— 应用内 3D 预览扩到 .glb/.gltf(「glb 不可编辑,可以预览」)

用户口径(2026-10-08):「继续完善 3D 格式预览 glb 文件预览」,紧接着一句定调:
「glb 不可编辑,可以预览」。此前应用内那套「3D 模型预览」只认 .obj
(PreviewFormatter.IsModel3d 里写死 .obj)—— 引擎侧早就能加载 .glb(ui_3d_gltf_load #643),
唯独静态预览不认,于是文件页里 glb 既没有缩略图、也点不开。

一、渲染器泛化:ObjPreview → ModelPreview(输入归一成"三角汤")

原类名改了(它现在渲 obj + glb,叫 ObjPreview 是撒谎)。两种源格式归一到同一个形状
(ModelPreview.Soup:顶点 8-float 步长 + 索引 + 可选逐三角形颜色),光栅那条路只有一份实现
(别为 glb 再写一套):

  • .obj:老路(ObjModel.Parse(shareVertsOverride: true)),无材质 ⇒ 平灰;
  • .glb/.gltf:走引擎同一个装载器 GltfModel.Parse,从 Result.Roots 遍历可达节点、
    按 NodeDef.World 把顶点变换到世界空间拼汤,并按 MatDef.Argb 逐图元上色
    (所以 glb 预览一眼能认出模型的样子,不再是纯灰块)。

⚠ 只渲"可达"节点(不然共享网格会被重复画几遍);骨骼蒙皮不做(装载器本就不解析 skins)⇒ 用绑定姿势。

二、文件能力矩阵(编辑 / 预览 / 编译 / 运行)—— 用户口径就是这四维

后缀 编辑 预览 编译 运行 分类
.obj / .gltf(纯文本) ✅ ✅ 3D ✗ ✗ Source(与其它源码同待遇)
.glb(二进制) ✗ ✅ 3D ✗ ✗ 新 FileCategory.Model(图标 🗿)

⇒ SandboxFsService 新增 FileCategory.Model(只收 .glb);.gltf 加进 SourceExts。
分类口径仍是"这个文件能干什么"(同 Archive),不是"属于哪个格式家族"——
所以同族的 glb/gltf 因为"能不能编辑"这一维不...

Read more

v0.96.798

Choose a tag to compare

@alecksty alecksty released this 07 Oct 03:37

v0.96.798 —— 文件页多一种「树视图」(可展开/收起的目录树)+ IDE 差距清单清空

用户 2026-10-07 在「编辑器内项目视图」(清单 #7)的两条路线里选了把文件页升级成树。
做完这条,docs/编辑器到IDE-差距清单.md 的第一、二梯队全部清空
(剩下的是第三梯队:#11 转到定义/查引用、#12 调试、#13 git、#14 终端 —— 清单自己标着"别急着碰")。

  • 文件页从三种视图模式变四种:大图标 / 小图标 / 列表 / 树(工具条第 4 颗按钮,图标只切 IsVisible)。
  • 数据:树这一档的 ItemsSource 不是 FsEntry 列表,而是扁平化之后的可见行(TreeRow 包装:
    Entry / Depth / HasChildren / IsExpanded)—— ⚠ 没给 FsEntry 加字段(它被另外三份模板共用)。
    展开状态按相对路径记在 _expanded,懒展开:只有用户展开过的那一层才 ListDir 下去
    (工作区可能几万文件,切模式时递归整棵树是不可接受的)。
  • 交互(有意与桌面资源管理器一致):点箭头 = 展开/收起那一层(不进入);
    点行的其余部分 = 目录就进入它、文件就打开(复用原来那条 OnItemTapped 分支)。
    ⚠ 箭头用 Button 而不是 GestureRecognizer:它自己消费触摸、不冒泡到行根(与列表档那颗 ⋮ 同一个道理),
    可点区 36×40(手机点得准)。缩进 = 10 + Depth × 16,算式只此一处。
  • ⚠ 另外三档一个字没变(列表/大图标/小图标、搜索、选择、更多菜单、预览九宫格)。
    树这一档不画勾选框(多选仍只在另外三档)。
  • ⚠ 图标是专门补的一张:起初借用了编辑器的 icon_outline,而它与 icon_view_list 撞脸
    (都是"圆点 + 横线",并排分不出哪个是列表哪个是树)⇒ 新增 icon_view_tree.svg
    (主干 + 横枝 + 两行不等长 = 缩进层级)。判据 scripts/check-maui-icons.py 守"每个 icon_*.svg
    必须显式写 width/height"(只给 viewBox 会被栅格化到 ~48dp 撑出按钮)。
  • App 内帮助与官网同步跟上(用户当天追加要求「更新版本日志文档提交推送」时查出来的缺口):
    help/{zh,en}/editor/panel.md 的「查找」补上范围那两档,help/{zh,en}/files/browse.md
    补上「视图:四种看法」与树视图的用法(箭头展开 / 点行进入、展开会被记住)。
    ⚠ 帮助改了必须重跑 make-vml-lib.sh,否则手机上那份还是旧的(包的内容指纹是解压的闸门);
    官网同时重新生成(make-site-docs.py)。
  • 判据(scripts/_maui_editor_probe.py 的 files 套件,J12 系列 6 条):
    切到树模式能读出行数且全收起时 == 列表模式的条目数 → 展开一个有子目录的行 ⇒ 行数变多且出现 depth ≥ 1
    → 再点收起 ⇒ 回到原值 → 切回列表 ⇒ 老模式没被影响。反证过:把展开做成空操作 ⇒ J12b/J12b2 红
    (13 → 13),其余 28 条照绿;还原后核 md5 逐字节相同并复跑。整套 files PASS=30 FAIL=0。

同日:全部安装包上官网(用户:「更新所有安装包到 Web 下载那边」)+ 顺手修掉四处"平行表"

  • 发的什么:桌面 6 平台(win-x64/arm64、linux-x64/arm64、osx-x64/arm64)+ 安卓 APK,
    全部走站内镜像(website/dl/,downloads.json 里四个平台都 local: true)。
    下载页四端全部 → v0.96.798;website/update.json 第一次真正上线(此前该 URL 实测 404
    —— 即 App 的"官网优先"更新链路一直是断的,每次都回退 GitHub)。
  • ⚠ website/dl/ 在此之前一个桌面包都没有(实测 waycoder-v0.96.559-win-x64.zip → 404),
    桌面按钮全靠跳 GitHub。本次起镜像自足。
  • 修一:make-site-manifest.py 写错了地方。它把清单写到 website/downloads.json,
    而 2026-09-30 官网分三段后下载页读的是 website/dolaima/downloads.json
    ⇒ 跑一次就在站点根生成一个没人读的孤儿文件,真清单还是旧版本号,而脚本报"成功"。
    现在按 dolaima/ 写(对分段前的旧布局留兼容分支)。
  • 修二:安卓那条"必须手工同步的平行表"收进脚本。脚本从前有意跳过安卓平台
    ("各有各的发版节奏"),于是每发一次安卓包都得有人记着去改 JSON。现在版本号从 APK 文件名里读,
    发一次自动跟着走。
  • 修三:下载页 12 处硬写的版本号(中英各 6 处:tar -xzf …、cd …、certutil -hashfile …)
    改成 <span data-ver="windows|linux|macos">,跟着 downloads.json 渲染 ——
    照旧做法每次发版都要满页找版本号,漏一处用户照着敲就是"文件不存在"。
  • 修四:签入的 Resources/Raw/vml_lib.zip 是过期的(与仓库 Lib/ 不一致,make-vml-lib.sh
    自己报的)⇒ 重生成。这是"桌面全绿、手机上坏"那一类,因为桌面不读这个包。
    同批把上一版(v0.96.797)声称"官网同步"、实际没同步的那批生成页补齐
    (例程页里那份字节数还停在旧值:tetris.c 51435 → 52539)。
  • 钥匙钉回 Windows 那把:官网已发布的 0.96.589 APK 实测是 75:98:F1… 签的
    ⇒ 发行包必须继续用它,否则从官网装过的用户全都得卸载重装。手机按用户拍板「卸载重装」换到同一把,
    keystore.sha256 的 # CURRENT 随之改钉(三处并排实测:下载页 / 本机 keystore / 手机 pull 出来的 base.apk)。
  • 验收(都是量出来的,不是"脚本说成功"):7 个资产服务端 HTTP 200 且 Content-Length 与本地逐个相等
    → 再把 APK 与 win-x64 整份下载回来复算 sha256,与本地逐字节一致;
    check-website.py 4113 项全绿;GitHub Release v0.96.798 的 6 个资产 digest 与 dist/SHA256SUMS.txt 逐条一致。
    手机侧:装上 0.96.798(versionCode 960798)、补回 MANAGE_EXTERNAL_STORAGE、启动无崩溃,
    外部存储上的 config/.waycoder/(含 api_keys.json)与工作区未丢。

同日(续):图形版进发行包(用户:三大桌面「其实软件有几种版本」)+ 包里塞着调试符号的修复

  • 发现的实情:Web 版 与 TUI 版 不是两个包 —— 网页模式在主工程那个二进制里(waycoder --web)。
    真正的"另一个版本"是 WayCoder.Gui(Avalonia 图形版),此前从没进过发行包。
  • scripts/package.sh 改成一次出两个版本(同一套 RID 与打包逻辑,build_one/pack_one 各只有一份实现):
    终端版 waycoder-<版本>-<RID>、图形版 waycoder-gui-<版本>-<RID>;图形版永远是 JIT
    (Avalonia 走 JIT,PublishAot 对它没意义)。六个平台共 12 个包,全部走站内镜像。
  • ⚠ 修掉一个一直在生效的缺陷:包里塞着调试符号。pack_one 的 zip 分支写了 -x '*.pdb',
    但本机 Git Bash 没有 zip ⇒ 每次走的都是 PowerShell Compress-Archive 兜底分支,
    而那一支没有排除:实测 waycoder-v0.96.798-win-x64.zip 里躺着一个 56MB 的 waycoder.pdb
    (zip 20MB,去掉后 ~12MB);图形版更夸张(libSkiaSharp.pdb 84MB + libHarfBuzzSharp.pdb 21MB,
    占总量的 46%)。⇒ 兜底分支补 -Exclude '*.pdb',并把判据换成"包里有没有 .pdb 条目"
    (写在上面的 -x 里、而实际走另一支,正是"判据写在不会经过被测机制的那一层")。
  • 清单分工(谁读哪份,别混):update.json 是自动更新器的清单,按 RID 取包 ⇒
    图形版不进去(混进去会被喂终端版的包);图形版自己也不自更新 —— 它的 /update 只是一句提示
    (WayCoder.Gui/GuiCommands.cs)。downloads.json 是下载页按钮的清单 ⇒ 两个版本都列,
    图形版在前(商店文档里它是"推荐主打")。已写进 make-site-manifest.py 的注释与自检(缺包就报错退出)。
  • 文案与事实对齐:站点多处写着"桌面端是免安装的单文件" —— 那是终端版的事实,
    图形版是 exe + 几个原生库(SkiaSharp 等)。download.html(中英)、guide.html(中英)、
    index.html(中英,含三张平台卡的 meta)逐处改准,并补上「两个版本怎么选」「图形版不自升级」。

同日(续):官网补上**「能写哪几种程序」**(用户:「网站还要介绍」)

  • dolaima/vml.html(中英)把原来那节「绘图接口的分层:tty_* 与 ui_*」改写成五档一览
    (锚点 #draw 保留 —— 页内 TOC 与教学页都链着它):
    ① stdio 程序(各语言的 printf/scanf)· ② 彩色 TTY 程序(tty_*;老的 conio/curses 同路)·
    ③ 传统 BGI 程序(graphics.h 兼容层,转发到 ui_*、不模拟显存)·
    ④ 跨平台 UI 程序(ui_*)· ⑤ 跨平台 3D 程序(ui_3d_*,号段 600–632,可载入 .obj)。
    ⚠ 这五档不是新造的说法 —— Examples/c/demo/demo_std.c("第 1 层")、tty/demo_tty.c(第 2 层)、
    bgi/demo_bgi.c(第 3 层)、ui/demo_ui.c(第 4 层)的注释里本来就是这么分层的,照它写。
  • 每档都链到站上真有的例程页(11 个链接,含用户点名的太阳系 3d/solar3d.c)——
    ⚠ 英文页在 dolaima/en/ 下,跨段链接要 ../../vml/examples/(先写成 ../ 少一层,
    check-website.py 当场红了 11 条死链,正是这道闸门的用处)。
  • 首页(中英)那条 VML 引导带同步改成"五类程序",指到介绍页。

安装包:官网下载页 https://www.tansuoyz.com/dolaima/download.html (备案前用 http://112.74.99.96/dolaima/download.html )
每个桌面平台两个版本:图形版(waycoder-gui,Avalonia 窗口)与终端版(waycoder,含网页模式 waycoder --web)。

v0.96.559

Choose a tag to compare

@github-actions github-actions released this 28 Sep 01:52

Full Changelog: v0.96.110...v0.96.559

v0.96.110

Choose a tag to compare

@github-actions github-actions released this 12 Sep 15:47

Full Changelog: v0.96.109...v0.96.110

v0.96.109

Choose a tag to compare

@github-actions github-actions released this 12 Sep 14:25

Full Changelog: v0.96.105...v0.96.109

WayCoder v0.96.105

Choose a tag to compare

@alecksty alecksty released this 11 Sep 14:17

WayCoder 道码 v0.96.105 发行版(六平台 AOT 单文件)

累积自 v0.96.70 的修复与打磨:TUI VT 字节流输入修复(退格/Ctrl 组合键/F1-F4)、TUI 动态栏段级刷新与流式不整屏重绘、GUI 回车发送/聚焦样式/工作目录栏、编码与 BOM(notebook_edit/ps/kill/抓屏 ProcEncoding)、大量重复代码清理与单一真源收口、技能目录边界修复。

详见仓库 CHANGELOG.md。附带 SHA256SUMS.txt 校验。

Full Changelog: v0.96.70...v0.96.105

v0.96.70

Choose a tag to compare

@github-actions github-actions released this 08 Sep 12:53

Full Changelog: v0.96.68...v0.96.70

v0.96.68

Choose a tag to compare

@github-actions github-actions released this 07 Sep 11:35

Full Changelog: v0.96.67...v0.96.68

v0.96.67

Choose a tag to compare

@github-actions github-actions released this 07 Sep 03:23

What's Changed

New Contributors

Full Changelog: v0.96.36...v0.96.67

v0.96.36

Choose a tag to compare

@alecksty alecksty released this 31 Aug 02:30

v0.96.36

  • 四端 promptbar 输入框常用命令提示栏
  • 四端补充 /review 代码审查指令
  • 四端 Provider 管理对话框补齐(Web/GUI 新增)+ 多重价格显示
  • 四端动态状态栏 + 忙时消息排队统一

Full Changelog: v0.96.32...v0.96.36