@aurelienbn/ agentlint-plugin-shopfy-app (原始内容存档于2018-09-26)
15 Agentlint评论Shopify应用和扩展:一个决定性的触发器找到现场,一个审查者根据Shopify自己的指导来检查.
[尖叫声] 需要引擎
@aurelienbbn/agentlint>=0.3.0 <0.9.0作为同伴. 证据。 。 。 .
调查结论是需要检查的,而不是违反政策. 决议 .agentlint/acceptances.jsonl 保留审查证据;无论是App Store还是Choshify的资格证明.
快开始
agentlint init --preset "@aurelienbbn/agentlint-plugin-shopify-app#starterPreset"
agentlint rules test
agentlint rules scan --review
agentlint next --format json
init 保存已有的配置并打印安装命令;从未安装. 要求前校正绑定 agentlint check --all。 。 。 .
import { defineConfig } from "@aurelienbbn/agentlint";
import { checkoutExtensionPreset, shopifyAppPreset } from "@aurelienbbn/agentlint-plugin-shopify-app";
export default defineConfig({ extends: [shopifyAppPreset, checkoutExtensionPreset] });
规则
| 规则 | shopifyApp | appServer | checkoutExtension | starter | 订正 | 选项 |
|---|---|---|---|---|---|---|
session-token-auth | ✅ | ✅ | 2 国 家 | identityKeyPattern | ||
form-error-recovery | ✅ | ✅ | 1个 | errorAttribute | ||
action-label-clarity | ✅ | 1个 | ambiguousLabelPatterns | |||
banner-usage | ✅ | 1个 | ||||
destructive-action-review | ✅ | 1个 | toneAttribute, (中文(简体) ), destructiveTone | |||
modal-workflow-review | ✅ | 1个 | ||||
no-pressure-copy | ✅ | 1个 | languages (单位:千美元)en, (中文(简体) ), fr, (中文(简体) ), de, (中文(简体) ), additionalPatterns | |||
review-solicitation | ✅ | 1个 | additionalPatterns, (中文(简体) ), useDefaultPatterns | |||
settings-save-bar | ✅ | 页:1 | formElementPattern, (中文(简体) ), saveBarMarkerPattern | |||
admin-api-loop-review | ✅ | 1个 | graphqlCalleePattern | |||
webhook-handler-review | ✅ | 1个 | topicPattern | |||
checkout-network-discipline | ✅ | 2 国 家 | networkCallPattern | |||
scope-change-review 🧪 | 1个 | manifestPattern | ||||
flow-action-handler-review 🧪 | 1个 | handlerPathPattern | ||||
app-ux-review 🧪 | 1个 | targets, (中文(简体) ), elementNamePattern |
预设为 <name>Preset。在无预设的情况下:注册 scopeChangeReview, (中文(简体) ), flowActionHandlerReview / 一个配置 defineAppUxReview(...). 所有规则:代理授权,探测器 1. 预设忽略 **/*.d.ts。 。 。 移徙。 。 。 .
| 预设 | 范围 | 缩小到 |
|---|---|---|
shopifyAppPreset | **/*.{ts,tsx,js,jsx} + 键 **/locales/**/*.json | 您的应用程序 家源, 当 repo 持有多个 Shopify 表面时 |
appServerPreset | **/*.{ts,tsx,js,jsx},不包括测试 | 服务器代码( e)app/routes/**, (中文(简体) ), app/**/*.server.*除了其他GraphQL客户 |
checkoutExtensionPreset | extensions/**/*.{ts,tsx,js,jsx} |
每个规则都输出一个 defineX(options) ; 在同一规则 ID 下注册已配置实例。 状态正则表达式在每次匹配前重置.
defineNoPressureCopy({ languages: ["en", "fr"], additionalPatterns: [/última oportunidad/iu] });
defineSettingsSaveBar({ saveBarMarkerPattern: /useSaveBar/ });
什么火吗
<form data-save-bar>…</form> // ✅ direct literal attribute
<form title="SaveBar">…</form> // ❌ a mention isn't a marker
<form data-save-bar={false}>…</form> // ❌ false or dynamic values don't count
for (const id of ids) await admin.graphql(QUERY, { variables: { id } }); // ❌ admin-api-loop-review
for (const edge of (await admin.graphql(QUERY)).edges) {
total += edge.node.count;
} // ✅ the iterable
来文方其他地方的储蓄酒吧不再压制表格的审查. 应用 内部规则符合JSX的准确名称: 没有导入、包装或分布分辨率; 设置 elementNamePattern 给您的审查包装.
复制、 认证和表格: 触发和边界
| 规则 | 着火了 | 边界 |
|---|---|---|
no-pressure-copy | jSX文本或字符串中的紧急性、稀缺性或结果保证性措辞 | 默认词典 : en, (中文(简体) ), fr, (中文(简体) ), de |
session-token-auth | document.cookie· ; localStorage 编号 : sessionStorage getItem 编号 : setItem 带有身份钥匙 | identityKeyPattern 默认: 符号/会话/auth/jwt/证书/ api- key. 候选资格,而不是认证核查 |
settings-save-bar | (单位:千美元) <form> 编号 : <Form> 打开元素时没有自己的保存栏标记 | 习惯 saveBarMarkerPattern 在打开的单元上保留一个信任的逃生舱口 |
review-solicitation | jSX文本或字符串中的具体审查请求短语 | 英文、法文和德文缺省为部分词汇;中立请求仍然需要职位安排和奖励审查 |
公认的保存栏标记不能证明肮脏状态或导航行为:用路由审查来锻炼那些状态.
session-token-auth 也要求离线代币通过图书馆会话存储器读取: 保存在别处的复制件会沉淀于图书库下 expiringOfflineAccessTokens 未来的旗帜。 指南使用当前 ID 标志术语; 规则 ID 保留 session-token-auth。 。 。 .
英语风格和可读性分数从不被视为通用地语或无障碍要求.
App 主机组件:触发器和边界
它们不解决进口,包装,动态组件,散放道具或生成模板. 匹配另一个 Shopify 表面的名称不会使 App Home 指南应用到那里: 将这些规则范围扩大到正确的文件.
| 规则 | 着火了 | 边界 |
|---|---|---|
action-label-clarity | 直接在内部配置模糊的文字 s-button 或者说 s-link | ambiguousLabelPatterns 替换一个小的英语默认词典; 翻译助手和任意字符串没有分析 |
banner-usage | s-banner,包括: dismissible | (c) 正确的道具不能证实任何证据 |
destructive-action-review | s-button 或者说 s-clickable 字数 tone="critical" | 动态色调需要单独审查 |
form-error-recovery | 一个已知的极地输入控制,可能具有活性 error 道具 | 空无, false, (中文(简体) ), null, (中文(简体) ), undefined 字节保持安静; 运行时表达式调度审查 |
modal-workflow-review | s-modal 或者说 s-app-window | 审查进入路径、任务匹配、解职、恢复;结构档次规则分开 |
文本字段引用在打字时鼓励反馈;提醒指南在模糊后建议出错. form-error-recovery 揭露了这种差异,要求提供未经更改、打字、模糊、提交和复原的证据。 没有禁忌 onInput 或从道具中验证验证时间.
服务器:环路、网络呼声、流程动作、范围
| 规则 | 着火了 | 保持安静 |
|---|---|---|
admin-api-loop-review | admin.graphql, (中文(简体) ), client.request 或者说 client.query (可选资格)a for 编号 : for…of 编号 : while 编号 : do 体 体 或 一个 .map 编号 : .forEach 编号 : .flatMap 回调 | (单位:千美元) for…of 可执行, a for 初始化器, 仅在循环内定义的函数; 测试文件 |
webhook-handler-review | 每个文件一次 : authenticate.webhook,一个 X-Shopify-Hmac-Sha256 编号 : X-Shopify-Topic 编号 : X-Shopify-Webhook-Id 字符串,或已知的题目字面(orders/create, (中文(简体) ), APP_UNINSTALLED作为 switch 实例或比较 | 测试文件 |
flow-action-handler-review 🧪 | 每个文件一次 : authenticate.flow,一个 action_run_id 编号 : action_definition_id 键(成员、解结构、计算或对象键),或路径匹配 handlerPathPattern | 预览和验证端点( 无运行 id), 键为纯文本; 测试文件 |
scope-change-review 🧪 | 更改规则 : shopify.app.toml 编号 : shopify.app.<name>.toml 谁 [access_scopes] scopes 编号 : optional_scopes (或高级遗产) scopes(自基特基线以来获得条目) | 删除、重新排序或降级范围;从未清点过未经修改的清单,即使有 --all |
| 限制 | |
|---|---|
admin-api-loop-review | graphqlCalleePattern 增加项目包装;进口和别名未解决. 被捆绑的标注是合法的: 发现要求绑定和油门处理 |
webhook-handler-review | topicPattern 替换默认主题词典。 恒定时间数据库工作内行通道; 调出或排队到另一个文件是审查者引用的证据, 而不是触发解决的东西 |
flow-action-handler-review | 问HMAC, action_run_id ddup, 10 s(202个延长工作)以内, 4xxx只针对永久失败, a return_value 躯体。 不读 runtime_url 从 TOML: 设置 handlerPathPattern 给把有效载荷下放到别处的处理者。 手动 HMAC 检查也触发 webhook-handler-review |
scope-change-review | 读取两个已知的密钥;而不是 TOML 解析器。 范围必要性得到判断,从未得到证实 |
检出: 第一次油漆等待无所可避免
checkout-network-discipline 开火 fetch (净值或 window. 编号 : globalThis. 编号 : self.- 合格)和 shopify.query() 下级 extensions/**· ; networkCallPattern 添加工程抓取包装 . 触发器不能确定耐久性:对照两种性能来源审查量度的请求和渲染时机. 将网络呼叫调出模块范围.
验出消息说
| 来源 | 说 |
|---|---|
| 退出扩展性能 | 在第一次涂料之前在扩展调用中装入必要的初始数据, 因此 Shopify 的装入骨架会一直停留到稳定内容准备好为止 |
| 检查最佳做法 | 响应时间低于一秒;初始骨架 |
| 离职能力 | 后端只信任已核实的会话控件要求 ^ 没有可调用买方的敏感端点 ^ 用 Access-Control-Allow-Origin: * · 不期望 logged_in_customer_id 在 App 代理服务器上从扩展名拨打 |
app-ux-review qq: 您将文件映射到审查区域
Dormant 默认; 目的从未从文件名中推断 . 优于缩小 App Home 预设的 超 复选 、 管理员 和 Sidekick 扩展 .
areas home · onboarding · navigation · responsive · premium · visual-editor · inputs
collections · content · copy-mechanics · checkout · admin-extension · sidekick
配置和报告
import { defineConfig } from "@aurelienbbn/agentlint";
import { defineAppUxReview, shopifyAppPreset } from "@aurelienbbn/agentlint-plugin-shopify-app";
export default defineConfig({
extends: [shopifyAppPreset],
rules: [
defineAppUxReview({
targets: [
{ filenamePattern: /\/app\._index\.tsx$/, areas: ["home", "responsive"] },
{ filenamePattern: /editor\.tsx$/, areas: ["visual-editor"] },
{ filenamePattern: /extensions\/admin\//, areas: ["admin-extension"], trigger: "file" },
{ filenamePattern: /sidekick\.ts$/, areas: ["sidekick"], trigger: "file" },
],
}),
],
});
| 目标类型 | 报告 |
|---|---|
| 页面(默认) | 第一次匹配时 s-page |
trigger: "file" | tS/JS程序节点:没有JSX页面的扩展切入点 |
每个触发器报告每个文件一次,合并匹配区域;查找名称仅指那些区域. 审查它们,附上源修订和浏览器或运行时间观察,并记录未解决状态. 规则不读出或发现扩展目标.
移徙
| 规则 | 变动 |
|---|---|
⚠️ checkout-network-discipline, (中文(简体) ), session-token-auth 转录 2 | 添加容量安全检查和离线切换会话存储检查 |
⚠️ settings-save-bar | 仅一个直线字 data-save-bar 表格上的复议 |
要求的身份证和证据边界: policy/shopify-requirements.json 和寄存器 保存检查.
Agentlint规则合同
| 事实 | 细节 |
|---|---|
| 规则形状 | lifecycle, (中文(简体) ), standard (订正), detector (版本), binding (id, 权威, 范围, 实质性选项) |
| 编译 | defineConfig({ extends: [preset] }) 或者说 defineConfig({ rules: [configuredRule] }); 重复使用需要不同的绑定标识 |
| 权力 | 默认允许代理接受;存储器所有者选择范围,并可以向 human |
| 接受结论 | 需要匹配当前证据 财务报告和审定财务报表 权力 |
| 固定装置 | @aurelienbbn/agentlint/testing 使用真实解析器运行嵌入式活性/静态固定装置 |
来源
从Shopify的正式文件中独立执行;没有Shopify代码或模板供货商. 可盗取 @attribution 标记执行文件中的源概念. starterPreset 登机:由Peter O'Malley拆卸而来的概念灵感;没有复制代码或指南.
按日期和规则分列的检查页面
| 检查过 | 来源 | 种子 |
|---|---|---|
| 2026-09-05 (英语) | 为商店化要求而建, (中文(简体) ), App Store 要求 | 适用性和编号义务 |
| 2026-09-05 (英语) | 内容, (中文(简体) ), 营销, (中文(简体) ), 警报, (中文(简体) ), 表单 | 可读行动、限制宣传、可以理解的反馈、有组织的编辑 |
| 2026-09-05 (英语) | 语音和语气, (中文(简体) ), 语法和力学 | 适合情况的副本,特定地方的机械师 |
| 2026-09-05 (英语) | App 结构 | 使行政扩展规模和工作流程审查适合 |
| 2026-09-05 (英语) | App 主页, (中文(简体) ), 上岗, (中文(简体) ), 导航, (中文(简体) ), 版式 | 路线一级审查区 |
| 2026-09-05 (英语) | 极地 按钮, (中文(简体) ), 横幅, (中文(简体) ), 模式, (中文(简体) ), 文本字段 | 组件意图和行为 |
| 2026-09-05 (英语) | 极地 切换, (中文(简体) ), 取颜色器, (中文(简体) ), 图表, (中文(简体) ), 选择列表, (中文(简体) ), 菜单, (中文(简体) ), 工具提示, (中文(简体) ), 段 次 页 次 | 有针对性的投入、收集和内容审查 |
| 2026-09-05 (英语) | 退出扩展性能, (中文(简体) ), 检查最佳做法 | 初始渲染序列, 测量反应时间目标 |
| 2026-09-05 (英语) | 标识符, (中文(简体) ), 保存条 API | 当前平台指导 |
| 2026-09-19 (英语) | 管理图形QL API, (中文(简体) ), API 限制, (中文(简体) ), 大宗业务, (中文(简体) ), 一能性 | admin-api-loop-review |
| 2026-09-19 (英语) | HTTPS 网络快递, (中文(简体) ), 复制网点, (中文(简体) ), 网上最佳做法, (中文(简体) ), authenticate.webhook | webhook-handler-review |
| 2026-09-19 (英语) | 准入范围管理, (中文(简体) ), 受保护的客户数据 | scope-change-review |
| 2026-09-19 (英语) | 离职能力, (中文(简体) ), shopify-app-js 未来旗帜 | 延长检查和认证指导 |
| 2026-09-24 (英语) | 流动动作终点, (中文(简体) ), 创建流程动作, (中文(简体) ), 复杂数据类型 | flow-action-handler-review |
登记的合同库存
从软件包导出 pnpm catalog. 规则特定选项和限制在上文和源测试中都有描述.
| 规则/检查 | 触发或审查范围 |
|---|---|
action-label-clarity | 审查在其商贸背景中对极地行动进行了模糊的文字标记. |
admin-api-loop-review | Flags Admin GraphQL 调用由循环或迭代调用发布,用于成本,分批,节流审查. |
app-ux-review | 请为明确配置的应用程序路径和扩展出入口提供 UX 证据 . |
banner-usage | 评论App Home的标语,目的,背景,解雇的坚持,以及相竞的信息. |
checkout-network-discipline | Flags Network在取出扩展码中调用以进行休息-预算审查. |
destructive-action-review | 以破坏性的语气对后果、确认和失败处理进行审查. |
flow-action-handler-review | 旗帜 流程动作运行时间处理器每文件一次,用于签名,重复运行,响应时间,状态码和回放值审查. |
form-error-recovery | 审查Polaris与错误接线形成控制,以获取可以理解的、持续的恢复反馈. |
modal-workflow-review | 审查商家启动、任务合适和可用解雇的模式和应用程序窗口工作流程. |
no-pressure-copy | 旗下紧急,稀缺, 或结果-保证副本 在商家的UI. |
review-solicitation | 审核应用评分请求短语中性措辞,激励,安置,和商贸控制. |
scope-change-review | 自必要性审查基线以来,在Shopify应用程序上添加了标记访问范围. |
session-token-auth | 被嵌入的 Shopify 应用程序代码中的旗下饼干或Web存储身份状态. |
settings-save-bar | 嵌入式app页面中缺少上下文保存条集成的旗帜格式. |
webhook-handler-review | Flags Shopify Webhook 处理器每个文件一次,用于响应时间,重复交付,订购,解装,以及遵守审查. |
信用概念
- https://github.com/Shophify/shopify-app-js (中文(简体) ) (过期Offline AccessTokens 未来旗帜概念;独立执行)
- https://shopify.dev/docs/api/app-home/latest/apis/user-interface-和-interactions/save-bar-api 互联网档案馆的存檔,存档日期2013-12-21 (激励;独立执行)
- https://shopify.dev/docs/api/app-home/latest/web-组件/动作/按钮 (激励;独立执行)
- https://shopify.dev/docs/api/app-home/latest/web-组件/feedback-和-status-indicators/班纳 (激励;独立执行)
- https://shopify.dev/docs/api/app-home/latest/web-组件/形式/取色器 (激励;独立执行)
- https://shopify.dev/docs/api/app-home/latest/web-组件/形式/switch (激励;独立执行)
- https://shopify.dev/docs/api/app-home/latest/web-组件/形式/文本-字段 (激励;独立执行)
- https://shopify.dev/docs/api/app-home/latest/web-组件/layout-和-结构/表 (激励;独立执行)
- https://shopify.dev/docs/api/app-home/latest/web-组件/重叠/模式 (激励;独立执行)
- https://shopify.dev/docs/api/app-home/latest/web-组件/打字法-和-content/tooltip (激励;独立执行)
- https://shopify.dev/docs/api/usage/bulk-operations/queries 互联网档案馆的存檔,存档日期2014-12-02 (激励;独立执行)
- https://shopify.dev/docs/api/usage/限值 (激励;独立执行)
- https://shopify.dev/docs/apps/building/认证-授权/app-installation/manage-access-scope (激励;独立执行)
- https://shopify.dev/docs/apps/building/认证-授权/id-tokens (激励;独立执行)
- https://shopify.dev/docs/apps/building/checkout/capabilitys 互联网档案馆的存檔,存档日期2013-12-02 (激励;独立执行)
- https://shopify.dev/docs/apps/building/checkout/extension-性能 (激励;独立执行)
- https://shopify.dev/docs/apps/building/flow/actions/create 互联网档案馆的存檔,存档日期2013-12-02 (激励;独立执行)
- https://shopify.dev/docs/apps/building/flow/actions/endpoints 互联网档案馆的存檔,存档日期2013-12-02 (激励;独立执行)
- https://shopify.dev/docs/apps/building/flow/confult-complex-data-types 互联网档案馆的存檔,存档日期2013-12-22 (激励;独立执行)
- https://shopify.dev/docs/apps/building/webhooks/最佳做法 (激励;独立执行)
- https://shopify.dev/docs/apps/building/webhooks/ignore-复制 (激励;独立执行)
- https://shopify.dev/docs/apps/building/webhooks/订阅/https (激励;独立执行)
- https://shopify.dev/docs/apps/design/app-structure 互联网档案馆的存檔,存档日期2014-12-22 (激励;独立执行)
- https://shopify.dev/docs/apps/design/content (中文(简体) ) (激励;独立执行)
- https://shopify.dev/docs/apps/design/content/语法与机械学 (激励;独立执行)
- https://shopify.dev/docs/apps/design/content/voice-and-tone 互联网档案馆的存檔,存档日期2013-12-22 (激励;独立执行)
- https://shopify.dev/docs/apps/design/layout 互联网档案馆的存檔,存档日期2013-12-02 (激励;独立执行)
- https://shopify.dev/docs/apps/design/navigation 页面存档备份,存于互联网档案馆 (激励;独立执行)
- https://shopify.dev/docs/apps/design/user-experience/aerts (中文(简体) ) (激励;独立执行)
- https://shopify.dev/docs/apps/design/用户经验/app-home-page (激励;独立执行)
- https://shopify.dev/docs/apps/design/用户经验/形式 (激励;独立执行)
- https://shopify.dev/docs/apps/design/user-experience/marketing 互联网档案馆的存檔,存档日期2013-12-02 (激励;独立执行)
- https://shopify.dev/docs/apps/design/用户-经验/登机 (激励;独立执行)
- https://shopify.dev/docs/apps/launch/built-for-shopify/requirements 互联网档案馆的存檔,存档日期2013-12-02 (激励;独立执行)
- https://shopify.dev/docs/apps/launch/shopify-app-store/app-store-requires 互联网档案馆的存檔,存档日期2013-12-02 (激励;独立执行)
- https://shopify.dev/docs/apps/launch/shopify-app-store/最佳做法#18-checkout-apps (激励;独立执行)