Skip to content

skills/objectstack-ui/SKILL.md 的 App 例子仍教 defaultAgent: 'sales_copilot' —— ADR-0063 之后该绑定解析不到任何 agent #5985

Description

@hotlong

实现 #5891(PR #5984,给 content/docs/ui/apps.mdxcontextSelectors / defaultAgent 两键散文)时核对 defaultAgent 语义,顺带发现的越界项。未在该 PR 内修

现象

skills/objectstack-ui/SKILL.md:478(带 os:check 标记的 App 例子内):

defaultAgent: 'sales_copilot',          // optional AI copilot binding

为什么是缺陷,不是风格问题

ADR-0063 §2 撤回了租户 / 应用包级自定义 agent,app.defaultAgent 的可解析集合收窄到两个平台 agent(ask / build,别名可解析)。仓内三处独立佐证:

  • packages/spec/src/ui/app.zod.tsdefaultAgent JSDoc:「the resolvable values are the two platform agents…a name that is not a platform agent will not resolve at chat time」;
  • packages/lint/src/validate-ai-agent-authoring.ts 头注释:「a stack-authored agent 404s on chat and cannot be pinned via app.defaultAgent」(cloud#904);
  • objectui packages/app-shell/src/hooks/surfaceAgent.ts:app.defaultAgentisBuiltinAgentName 限界,表外的名字直接拒收而不是透传。

也就是说这行例子 parse 得过、build 得过、os:check 也过(字符串就是字符串),运行期却绑不上任何东西 —— 静默回落平台默认。而 skills/ 恰恰是 AI 写元数据时第一个读的语料,sales_copilot 这种「像真的一样」的名字被逐字抄进业务包的概率很高。

现有闸门都盖不到它:validate-ai-agent-authoring 只看 stack.agents,不看 app.defaultAgent取值;check:skill-examples 只做类型检查,而 defaultAgentSnakeCaseIdentifierSchema,任何 snake_case 串都合法。

建议

  1. 把例子改成真实可解析的写法 —— 数据类 app 直接删掉这行(ask 是隐式默认),或写 defaultAgent: 'build' 并注明只用于 authoring surface;注释也要跟着改(现注释「optional AI copilot binding」正是让人以为可以随便起名的那句)。
  2. 可选、更根本的一层:给 defaultAgent取值加一条 lint(平台 agent 名单之外即 warning),把「声明得过 / 运行期无效」这一对从消费侧宽容改成生产侧响亮 —— ADR-0078 的形状。是否值得建这条规则请 PM 判;单独第 1 条就已经把语料的错纠正了。

同页 hidden: true 那条注释(「ADR-0045 — drop from the App Switcher but keep routable」)也踩在 #4829 正在争议的语义上,但那条已由 #4829 跟踪,不重复开单。

参考:#5891 / PR #5984(本发现的来源)、ADR-0063、#4829(hidden 语义争议)。


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions