微信小程序性能诊断助手
下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/qixiantech--wechat-miniprogram-performance-diagnostic.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @qixiantech/wechat-miniprogram-performance-diagnostic。Agent响应契约多端适配:基于ARC v2.1让同一结果在手机、PC、纯语音及空间终端保持事实一致并按能力改变表现,支持签名履约凭证和授权跨设备取回且不重复计费;需AI Agent显式声明能力并安全保管凭证,服务不自动识别设备。接收微信小程序项目ZIP,静态诊断setData高风险写法、大图片、包体积、首屏同步调用、未清理定时器和监听器、列表渲染及疑似孤立文件。
阅读全文 (展开查看完整说明)
概述
Agent响应契约多端适配
本 Skill 已接入 ARC v2.1,支持手机、PC、纯语音及具备空间显示能力的 AI 终端调用。同一次分析或交付的金额、结论、风险和依据保持一致,终端可以根据自身能力选择精简文本、无 Markdown 语音朗读稿、卡片、表格或空间化重点展示。
支持 ARC v2.1 的 Agent 可安全保存服务端签发的履约凭证,在凭证有效且未退款或吊销时,从其他设备取回同一次履约的原结果;取回不会创建新订单,也不会重复收费。
当前限制: 服务不会读取硬件信息,也不会自动识别真实设备类型,需要调用它的 AI Agent 主动声明自身支持的输入、显示和输出能力。服务提供的是适合朗读的文本,不直接生成音频;语音终端需要具备 TTS 或朗读能力。跨设备取回不是自动账号同步,必须由 Agent 安全保管签名履约凭证,或由可信宿主重新验证用户身份;仅知道微信身份标识、订单号或履约编号不能读取结果。
服务价格 ¥4.99/次。这是源码静态性能诊断,不执行项目代码,也不虚构真实启动耗时、FPS或内存数据。
Pay Skill 标准调用
本 Skill 使用腾讯 SkillHub 微信支付 AI 专属卡(Agent Pay)完成付费。首次调用直接请求业务接口;收到有效 HTTP 402 后,当前 Agent 宿主会按需显示 AI 专属卡的绑定或支付授权入口。该宿主支付动作的技术调用名为 weixinpay_pay,它不一定常驻本地插件列表。不要在首次调用前搜索、安装或检查名为 weixinpay 的 npm、MCP 或本地插件。
官方兼容的普通 JSON 首次请求:
POST https://api.qixiantech.com/api/wechat-miniprogram-performance-diagnostic/v1.1.1
Content-Type: application/json首次请求无需自定义 Header。服务端会生成请求关联 ID;宿主只有在能够生成合法 UUID 时才可选传 X-Request-Id 或 X-Idempotency-Key,不得把文档占位文字作为 Header 值发送。
{
"project_name": "示例商城小程序",
"files": [
{
"path": "app.json",
"content": "{"pages":["pages/index/index"]}",
"size": 33
},
{
"path": "pages/index/index.js",
"content": "Page({onLoad(){wx.getStorageSync("cache")},refresh(){this.setData({items:[]})}})",
"size": 82
},
{
"path": "pages/index/index.wxml",
"content": "<view wx:for="{{items}}">{{item.name}}</view>",
"size": 48
},
{
"path": "assets/banner.png",
"size": 286720
}
]
}收到支付触发响应后,Agent 必须按以下顺序处理:
- 从
WeixinPay-RequiredHeader 读取payment_code;只读取响应体的 Agent 从WeixinPay["WeixinPay-Required"]读取同一值。 - 核对响应中的金额、币种和服务用途,并向用户展示付款信息。
- 将该值作为
paymentCode交给当前 Agent 宿主按需提供的腾讯 SkillHub 微信支付 AI 专属卡支付动作(技术调用名weixinpay_pay)。尚未绑定专属卡时,先按宿主界面完成绑定,再由用户确认支付。 - 支付成功后,使用首次请求的原始业务 JSON,并携带原
WeixinPay-Required和X-Out-Trade-No重试同一 URL。 - 若本次响应协商到 ARC v2.1,Agent 必须安全保存
fulfillment.id、result_digest及extensions.signed_receipt;不得把签名凭证令牌显示给用户、写入普通日志或发送到无关服务。 - 只有在已经收到有效 402、已尝试唤起宿主支付动作,但宿主仍未显示 AI 专属卡绑定或授权入口时,才能说明当前调用环境暂未暴露该能力。不要通过本地插件目录是否存在来判断,不要重新创建订单,也不得伪造支付结果。
边界
- 源码通过HTTPS发送到起弦服务端并在内存中分析;不要提交密钥、环境文件、云函数、用户数据或无关商业秘密。
- 只做静态分析,不执行代码,不安装依赖,不访问微信后台,也不测量真实FPS、启动耗时、内存峰值、网络瀑布或真机差异。
- 静态模式只能估算风险;动态属性调用、运行时生成代码和间接封装可能漏检,不能用静态结果替代开发者工具或真机性能数据。
- 疑似未引用文件只用于复核,动态路径、构建插件和运行时加载可能无法识别,不能据此直接删除。
- 包体积和setData字节数是基于提交文件的静态估算,最终结果须在微信开发者工具性能面板、代码依赖分析和真机中复核。
- 本 Skill 只回答性能问题,不包含上线审核、隐私合规或免费自查。
Agent响应契约接入说明
本节供调用本 Skill 的 AI Agent 读取,普通用户无需填写或理解这些协议字段。设备能力不是由服务端猜测的:Agent 必须根据自身真实能力填写受限的能力声明,不得把浏览器标识、自由文本设备名或用户输入伪装成设备能力。
语音终端读取 presentation.speech_text 并自行朗读;屏幕终端读取结构化 result、extensions 和表现变体。result_digest 用于确认不同终端获得同一业务结果,fulfillment.id 用于识别同一次履约;Agent 不得从展示文案反向解析或修改金额、结论、风险、证据和支付状态。
当前版本已经接入 ARC v2.1,并继续兼容 ARC v2.0。两者都会把不可变业务结果与终端表现分开:同一已履约订单切换终端时不重新运行业务、不重新付款,result_digest 保持一致,仅 presentation 和 representation_id 可按能力变化。服务端协商到 2.1.0 时,还会签发限定当前 Skill、履约、结果摘要和有效期的可携带履约凭证。
已启用能力档案:PAY(支付与幂等履约)、ASSESS(结论与风险评估)、SCAN(扫描范围与定位)、BUNDLE(多文件资源包)、EVID(证据与适用边界)、PAGE(大结果分页与续读)、PRIV(隐私与共享显示)。
显式启用 v2 时使用:
POST https://api.qixiantech.com/api/wechat-miniprogram-performance-diagnostic/v1.1.1
Content-Type: application/vnd.qixiantech.skill-request+json;version=2
Accept: application/vnd.qixiantech.skill-response+json;version=2与普通 JSON 调用相同,ARC v2 首次请求无需自定义 Header;可选请求 ID 或幂等键必须是宿主实际生成的合法 UUID。
{
"contract_request": {
"accepted_versions": [
"2.1.0",
"2.0.0"
],
"accepted_profiles": [
"payment@1",
"assessment@1",
"inspection@1",
"resource-bundle@1",
"evidence@1",
"collection@1",
"privacy@1"
]
},
"client_context": {
"locale": "zh-CN",
"input_modes": [
"text"
],
"output_modalities": [
"text",
"speech",
"visual"
],
"display_class": "standard",
"formats": {
"markdown": true,
"tables": true,
"cards": true,
"links": true,
"actions": true
}
},
"input": {
"project_name": "示例商城小程序",
"files": [
{
"path": "app.json",
"content": "{"pages":["pages/index/index"]}",
"size": 33
},
{
"path": "pages/index/index.js",
"content": "Page({onLoad(){wx.getStorageSync("cache")},refresh(){this.setData({items:[]})}})",
"size": 82
},
{
"path": "pages/index/index.wxml",
"content": "<view wx:for="{{items}}">{{item.name}}</view>",
"size": 48
},
{
"path": "assets/banner.png",
"size": 286720
}
]
}
}支付后重试必须保持 input 不变,允许只切换合法的终端能力声明。request_id 回显当前 HTTP 请求,不作为履约身份;跨终端履约身份读取 fulfillment.id 和 result_digest。服务端未启用 ARC v2.1 时会从上述双版本声明中选择 2.0.0;如果运行中的 v2.1 新订单闸门暂时不可用,错误信封会通过 available_versions 和 retry_with_version 明确提示 2.0.0,Agent 不得在同一请求中自行篡改协商结果。
ARC v2.1 跨设备取回
- 完成响应协商到
2.1.0时,从extensions.signed_receipt保存token、recovery_uri和expires_at,并同时保存fulfillment.id与result_digest。token是 bearer 授权凭证,必须按敏感信息保护。 - 另一设备取回时,向凭证中的
recovery_uri发起GET,使用Authorization: Bearer <token>或X-ARC-Fulfillment-Receipt: <token>,并发送该设备当前的X-Request-Id。 - 成功响应会返回
X-Skill-Replay: true;Agent 必须核对返回的fulfillment.id与result_digest和原履约一致。该请求只读取原结果,不创建订单、不触发支付。 - 仅持有 OpenID、订单号、
fulfillment.id或result_digest均无权读取结果。凭证无效返回401,结果记录不存在或已超过保留期返回404,凭证因退款或安全事件被吊销返回410;这些情况不得通过创建新订单伪装成原履约取回。
调用流程
- 说明提交内容会通过 HTTPS 发往第三方服务;删除不必要的身份信息、密钥和商业秘密并取得用户同意。
- 收集必填字段:
files。 - 按实际情况收集可选字段:
project_name。 - 只接受用户明确提供的小程序项目ZIP;先在 Agent 本地安全读取目录,不执行脚本、不安装依赖、不构建项目。
- 构造
files:json/js/ts/wxml/wxss/css/scss/less文件提交path、UTF-8content和字节size;图片等非源码文件只提交path和size。 - 禁止提交
.env、密钥、证书、云函数、node_modules、.git、miniprogram_npm或无关文件;不得把二进制编码为Base64放入content。 - 输入上限为2500个文件、单个源码1MB、源码文本合计4MB;超限时让用户精简项目,不要拆成多次付费扫描。
- 在 SkillHub 展示 ¥4.99、服务用途和数据边界,取得用户明确付款确认。
- 按“Pay Skill 标准调用”先请求业务接口;支持 ARC v2 的 Agent 可以改用“Agent响应契约接入说明”中的媒体类型和完整请求信封。
平台返回 HTTP 402 时
业务接口是公开的 Pay Skill 入口,不需要用户配置 API Key,也不携带Authorization。首次请求不携带 X-Out-Trade-No,也不要求自定义Header;服务端会生成请求关联 ID。宿主如能生成合法 UUID,可以选传X-Request-Id 或本次业务调用唯一的 X-Idempotency-Key,但不得把文档占位文字作为 Header 值。服务端完成微信支付 Native 下单和SkillHub AI 预下单后,会返回:
- HTTP 状态码:
402 - Header
WeixinPay-Required:支付码 - Header
X-Out-Trade-No:商户订单号 - Body
WeixinPay:兼容只读取响应体的 Agent - v1 Body
amount:4.99,currency:CNY - ARC v2
extensions.payment.amount:499分,currency:CNY
显式 ARC v2 调用的两个支付响应头保持不变;响应体同时包含官方顶层WeixinPay 兼容提示块,以及 status=action_required、result=null和 extensions.payment。支付事实以服务端生成的 extensions.payment 为准,WeixinPay 仅用于 SkillHub 和只读取响应体的 Agent 拉起支付,两处支付码必须一致。
官方兼容字段至少包含以下结构;服务端可以同时返回业务契约字段:
{
"data": {
"message": "本次调用需要付费"
},
"WeixinPay": {
"WeixinPay-Required": "<payment_code>",
"prompt": "这是腾讯 SkillHub 微信支付 AI 专属卡(Agent Pay)的支付授权请求,不是需要在本机安装的插件。请勿搜索或安装同名 npm、MCP 或本地插件。请将 WeixinPay-Required 的值作为 paymentCode 交给当前 Agent 宿主按需提供的 weixinpay_pay。如尚未绑定专属卡,请先按宿主界面完成绑定,再由用户确认支付。支付成功后原样重试业务请求。"
}
}收到 402 后:
- 保存两个响应头,核对金额为 ¥4.99、币种为 CNY;若首次请求选传了合法
X-Idempotency-Key,网络重发时复用该键。 - 将
WeixinPay-Required的值作为paymentCode交给当前 Agent 宿主按需提供的腾讯 SkillHub 微信支付 AI 专属卡支付动作(技术调用名weixinpay_pay);尚未绑定专属卡时,先按宿主界面完成绑定,再由用户确认支付。不要搜索或安装同名 npm、MCP 或本地插件。 - 支付成功后必须重新请求同一 URL;v1 的 JSON body 与首次请求逐字段一致。ARC v2 必须保持
input不变,允许仅切换合法的client_context。 - 重试请求必须原样携带
WeixinPay-Required和X-Out-Trade-No两个 Header。 - 后端按
X-Out-Trade-No向微信支付查单;只有trade_state=SUCCESS、金额、商户号和 AppID 均匹配时才返回付费结果。 - 返回
PAYMENT_REQUIRED或NOT_PAID时等待原订单,不创建新订单;返回REFUNDED时告知已退款并终止。 - 禁止伪造支付码、订单号或支付结果;ARC v2 不得修改原始
input。 - 新的业务调用如选择使用幂等键,必须生成新的合法 UUID;已过期或已处理订单不得复用旧键。
支付后重试示例:
POST <与首次请求相同的 URL>
Content-Type: application/json
WeixinPay-Required: <402 响应中的 payment_code>
X-Out-Trade-No: <402 响应中的 out_trade_no>
<与首次请求完全一致的 JSON>展示结果
原样展示 result_status、summary、score、grade、findings、recommendations、risks、missing_info、performance_metrics、diagnostic_coverage、findings。
- 屏幕终端按
presentation展示文本、表格或卡片;语音终端只朗读presentation.speech_text。任何终端都不得为了适配展示而修改result中的金额、结论、风险或依据。 - Agent 应保留并可向用户展示
fulfillment.id、result_digest和凭证到期时间,用于识别同一次履约和核对跨端结果;不得展示或复述extensions.signed_receipt.token。 - 跨设备取回成功后应明确说明这是原履约结果,且未再次收费;退款、吊销、凭证过期或结果超过保留期时,应如实提示无法继续取回。
ACTION_REQUIRED表示发现高风险性能问题;OPTIMIZATION_RECOMMENDED表示存在值得优化的静态模式;NO_OBVIOUS_STATIC_BOTTLENECK不代表运行时一定流畅。findings按同类问题合并,occurrences保留所有相关文件和行号。
HTTP 402 按上方流程处理支付;400 先修正输入且确认字段类型、长度和枚举值后再重试,不要重复付款;409 订单或幂等键冲突时改用新的合法 UUID,或在首次请求中省略可选幂等键;410 表示订单已过期;429 按 Retry-After 等待;5xx 告知暂不可用。