关于 experience-lwc-widget-assess
该技能评估 Lightning Web Component 是否适合迁移为声明式 widget,并分别判断现有行为能否迁移、候选 widget 是否仍能满足目标。它依据组件代码、数据来源和可用 UI 组件证据生成机器可读判定与审查报告,不创建元数据。
主要功能
- 01检查 LWC 代码与子组件
- 02评估渲染、交互和数据来源
- 03依据组件发现结果判断适配性
- 04识别阻碍并记录证据
- 05生成 JSON 判定与 Markdown 报告
适用场景
- 01评估组件迁移到 widget 的可行性
- 02区分原样迁移与需重建的情形
- 03定位数据契约或交互方面的阻碍
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill experience-lwc-widget-assess安装后在 Claude Code 中输入/experience-lwc-widget-assess确认已加载。
详细介绍
评估 LWC 是否适合改为 widget
针对每个 LWC 回答两个问题:能否呈现当前行为? 如果不能,可行的 widget 是否仍能实现用户的目标? 仅进行评估;不要创建元数据。widget 是独立的声明式构件,与 Lightning Type 不同。它的主体使用已发现的图块、绑定、公式和受支持的操作来呈现所提供的数据。它无法运行任意 LWC 代码、在渲染后获取数据,也无法保留响应式客户端状态。
证据与判断
- 阅读组件的 JS/TS、模板、元数据和相关子组件。用一句话说明用户的目标。追踪每个可见值的来源,并识别实现该目标所必需的交互。
@api属性能证明存在外部输入,但不能证明可调用操作会返回该属性。用户明确说明操作输出的内容,可作为可行性评估的证据;在声称迁移可行前,先核实实际的操作契约以及 Lightning Type/渲染器的连线方式。 - 将每个渲染元素和操作的用途映射到目标界面。
platform-widget-generate说明发现流程;实际的discoverUiComponents响应和getUiComponentSchemas结果才能确定可用的区块和属性。只有在转换确有影响时,才阅读其references/widget-formulas.md。依据证据记录目标渠道,而不要假设渠道或磁贴数量固定。没有发现结果时,有文档记录的模式可以支持一个暂定候选项,但示例中未出现某个区块,并不能证明该区块不可用。若这一不确定性会影响结论,则使用review;绝不要臆造磁贴、操作、输入提交机制或公式。 - 即使某个维度未通过,也要检查所有维度:渲染词汇;保留的状态、命令式效果和操作;数据来源;以及转换。有限快照或预先整形的集合有时可以移入可调用操作的输出中。断言操作能够做到这一点前,先检查操作的实现。公式支持标量
MIN/MAX、日期或正则表达式,并不意味着它支持集合排序或聚合。输入表单需要有证据证明当前磁贴能够收集值,并且能将这些值传递给操作;仅凭sendMessage不能证明这一点。 - 分别判断当前 LWC 和拟议的 widget。如果 Agent 确实能基于必要上下文执行所请求的工作,那么链接或
sendMessage可能保留用户意图,但未必保留原有交互。轮播图可以改为产品列表;但如果订单构建器的用途是选择数量,就未必可行。应将这种变更视为重建。评估 widget 候选项的rendersAsWidget时,可以考虑一个明确指定的拟议 IA 契约;并明确说明契约变更。如果可行性或用途仍未确定,则使用review,不要强行给出是或否的结论。
使用以下结果:
| 结果 | 含义 |
|---|---|
asIsVerdict: port-declarative | 当前可见行为和数据契约均可表示。 |
asIsVerdict: needs-IA-contract-change | 只需要有限的输出或预先整形变更。 |
asIsVerdict: not-portable | 当前某些行为或视觉元素没有经过验证的等效实现。 |
asIsVerdict: review | 现有证据无法确定当前方案是否适用。 |
asDisplayWidget.verdict: viable | 已验证或明确识别的候选项能够满足目标,可能需要按说明变更契约或重建。 |
asDisplayWidget.verdict: pointless | 虽然可以渲染,但无法满足用户目标。 |
asDisplayWidget.verdict: blocked | 拟议的展示或操作无法表示。 |
asDisplayWidget.verdict: review | 能力、数据来源或用途尚未确定。 |
在报告中列出所有实质性阻碍,并标明对应门槛及证据,引用源代码位置或具体行为。门槛名称为 role、rendering vocabulary、behavior/interactivity、data source 和 transformation。不要在遇到第一个未通过的维度后就停止检查。contractChange.shapeToAdd 仅填写操作有可能返回的字段或预先整形的值;绝不要臆造载荷。即使当前 LWC 的结论是 not-portable,可行的改造方案仍可能需要契约变更。如果拟议的 widget 会改变 UX,则设置 isRebuild: true,并在报告中说明失去的交互。对不确定的结论标记低置信度,并说明需要什么证据才能确定。
输出
生成两项产物。如果给出了输出位置,请将它们保存为 verdict.json 和 report.md。
判定 — experience-lwc-widget-migrate 所依据的机器可读决策。每个组件对应一个 JSON 对象;文件夹对应一个数组。请严格保留以下字段:
{
"component": "caseDetailsPanel",
"role": "renderer",
"asIsVerdict": "port-declarative",
"contractChange": {"suggested": false, "shapeToAdd": []},
"asDisplayWidget": {"verdict": "viable", "rendersAsWidget": true, "stillServesPurpose": true, "isRebuild": false},
"needsHumanReview": false
}
role 的取值为 renderer、input 或 interactive。stillServesPurpose 的值为布尔值或 "unknown";如果能力尚未确定,rendersAsWidget 的值为布尔值或 null。对于 viable,两者都为 true。对于 pointless,渲染能力为 true,用途为 false。对于 blocked,渲染能力为 false,用途为 "unknown"。对于 review,未确定的字段保留为 unknown/null。对于 review 判定或用途未知的情况,将 needsHumanReview: true。仅当组件显示的值不在操作的输出中时,才建议更改契约(例如,该值是在渲染后获取的)。已在负载中的数据无需更改契约,即使 LWC 为 not-portable,或该组件是重建版本。任何建议的契约更改都必须提供非空的 shapeToAdd;needs-IA-contract-change 必须包含此类建议。port-declarative 不涉及契约更改。
报告 — 供人工审核的文档。对于文件夹,每个组件单独设一个章节。请使用以下结构:
# <component>: <one-line conclusion>
**Verdict:** <asIsVerdict> → <asDisplayWidget.verdict> (rebuild or not) · **Confidence:** high | low · **Needs human review:** yes | no
## Why
The user's goal, what maps cleanly, and what decides the verdict.
## Blockers
Each material blocker: gate, signal, evidence. "None" for `port-declarative`.
## Suggested contract change
Each field to add and why it must move into the action output. Omit when none is suggested.
## What the widget keeps / drops
Kept actions and dropped or replaced interactions.
## Open questions
What would resolve any low-confidence conclusion.