已开启
[Feature]: 应用级产物演进——从静态文件到平台可托管的交互应用(app artifact kind) #121
spaceWing创建于 26 天前
openJiuwen-bot
26 天前 评论:
26 天前 评论:
欢迎来到 openJiuwen 社区
Hey @spacewing , 感谢你对社区的贡献.
机器人使用手册
有关指令的使用,可以点击 此处 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。


Hey @spacewing , 感谢你对社区的贡献.
有关指令的使用,可以点击 此处 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。


🚀 背景描述
1.1 现状:科学产物是静态文件
ScienceDiscovery 目前的产物形态是静态文件:图表(PNG/SVG)、看板(HTML)、数据集(CSV/JSON)、notebook。它们有三个共性限制:
我们在开发"ML 训练异常检测"功能时直接撞上了这些限制。
1.2 我们已做的事:把报告做成应用(L1 基线,已实现)
我们把 ML 训练异常检测做成 skill(training-anomaly-detection,v1.7.0)。它的 worker 产出两层 manifest;加
--render参数时同时产出report_app.html——一个可交互的报告应用,直接在产物面板既有的sandbox="allow-scripts"iframe 里运行:我们用与产物面板完全相同 sandbox 属性的 iframe 做过实测:所有交互可用;
localStorage按预期抛异常(opaque origin 行为),而应用从未依赖它。1.3 我们撞到的天花板(为什么需要平台能力)
1.4 提案内容
我们提议在静态产物与完整服务之间开辟一个应用级产物(app artifact kind):自描述的应用包,平台可托管、可按需运行——带交互、可访问声明的输入数据、会话作用域生命周期——同时保持平台既有的溯源保障不变。
说明:这不是最终 RFC,而是提请社区讨论的方向性提案。设计与开放问题见下节,供讨论定形。
设计思路
2.1
app产物 kind新增一种产物类型,打包形态如
.app.zip,包含:app.manifest.json,声明:packages/schema/src/scientific-artifact.ts中的"扩展名 → kind"映射是干净的扩展点。2.2 沙箱应用的数据注入
opaque origin 是结构性约束:
sandbox="allow-scripts"iframe 里的应用无法 fetch 平台 API(跨源、无认证态)。可选方向三个,供讨论:2.3 生命周期
按需启动(用户点开产物时)、会话作用域、空闲回收。关键溯源立场:
这保住了平台"同输入 → 同字节"的既有语义——应用形态升级,可复现性承诺不缩水。
2.4 网络
默认零出网;按应用粒度的域名白名单 opt-in,复用 runner 既有的 egress-bridge 机制(
services/runner/src/egress-bridge.ts)——与 worker 同一套安全模型。2.5 安全评审门槛
与 worker 相同:任何服务端运行时一律 bwrap + seccomp。
2.6 曾考虑过的替代方案
2.7 讨论问题(供评审聚焦)
app应该是新 kind,还是html加 opt-in 服务端的演进?边界在哪里?origin=app_output的一等产物?涉及到的对外API
proposal 阶段:不新增、不变更任何已发布对外 API;以下为落地时可能涉及的接触面(供评估周边影响):
declare_artifactapp(新 kind,向后兼容)packages/schema需版本升级appkind 渲染为托管运行时入口(而非静态 iframe)src直接引用,内容分发不要求请求方认证头——静态产物下良性;应用运行时使访问模型需要一个明确答案(我们理解认证已在产品化路线图上,这只是一个额外输入)与其他模块的相关性描述
appkind 的预览入口与生命周期 UI(启动中/运行中/空闲回收);数据注入桥(若选 postMessage 方案)宿主scientific-artifact.ts);app.manifest.jsonschema 定义declare_artifact回流——ExecutionRun/Claim-Evidence语义不变场景验证建议:以本提案的参考应用(训练异常报告应用)为第一个验证场景——L1 已实测跑通(沙箱 iframe 内五标签页全部可用),L2 各方案(挂载/桥/端点)都能直接在这个真实应用上验证,不需要 mockup。
测试设计与测试计划
5.1 已有测试资产(可复用为平台侧 app 契约检查)
我们的 skill 包已内置产物自包含契约测试(19 项,全部通过):
这些测试的断言方式可直接平移为平台侧
appkind 的准入契约:app 包声明 static-host 时必须通过"自包含 + 零网络 + 零存储"检查。5.2 平台侧测试计划(按能力维度)
5.3 验收口径
app产物 → 面板点开 → 大数据量曲线不降采样可交互 → 用户标注回流为产物——全链路可回放。其他信息
6.1 我们带来什么
appkind 公民。6.2 L1 基线细节(现状证据,供核验)
运行环境约束(代码实读 + 实测):
sandbox="allow-scripts"(无allow-same-origin)→ opaque origin数据契约(内嵌 JSON):
var D = {...}单一数据出口,Python 侧全部预计算(JS 只读不改写):meta:结论 / 六态色 / grade / judgementConfidence / 权重 / 四维因子 / scorestags+curves:每 tag{steps[], values[], ema[], nFinite, downsampled}——≤20000 点全量嵌入(真实样例 562~1000 点约 25~50KB),超出等距降采样(保首末点)并标注events[]:detector / isAnomaly / eventStep(联动锚点)/ triggerRule / confidence / magnitude(NaN 过滤)/ missingInputscauses:candidates[](id/category/pattern/likelihood/rank/evidence[]/reasoning/check)+ insufficient[] + basis验收记录(2026-09-21 实测):
已知边界(如实声明):
6.3 三层演进总览(定位图)
appkind + 托管运行时 + 数据注入 + 生命周期L1 已落地意味着:社区讨论 L2 时不必从 mockup 开始——第一个参考应用已经存在,且它的每一项能力都经过沙箱实测。
6.4 结语
产物形态从"静态文件"到"应用"的演进,本质是把分析结论交付形态从"一次性快照"升级为"可探索、可复算、可对话的空间"。我们已经用 L1 证明了第一步在零平台改造下可行;L2 的平台能力(app kind、数据注入、生命周期、网络与安全模型)希望能与社区共同设计。欢迎在 issue 区讨论,也欢迎直接 review 我们的 L1 参考实现。