首页/新闻资讯/正文详情

cloudflare-os 前端开发规范实战:Workshop 与 Gatekeeper 管理界面的 React、Kumo 与测试约定

发布时间:2026/9/24 16:42:33 来源:云帆数科 栏目:资讯中心
cloudflare-os 前端开发规范实战:Workshop 与 Gatekeeper 管理界面的 React、Kumo 与测试约定
人工智能AI 应用AI AgentAgent 沙箱AI 安全治理【免费下载链接】cloudflare-osAgent workspace built on Cloudflare Workers for creating documents, building apps, and running agents with your company’s context and systems.项目地址https://gitcode.com/gh_mirrors/cl/cloudflare-os点击查看免费下载本文以仓库内 frontend-conventions 技能文档 为核心骨架系统讲解 cloudflare-os 项目中 Workshop SPA、各 gatekeeper 管理 SPA 以及共享 UI 包gadgets/ui的统一前端开发约定。读完本文你将掌握这套项目在代码组织、组件与 Hooks 抽取、组件 API 设计、Kumo 样式体系、React 语义、注释与测试上的完整规范并看到它们在gadgets/ui的HierarchicalList源码中的真实落地形态可直接套用于该仓库内任何packages/*下的 React 前端开发与评审。适用范围与文档定位frontend-conventions是仓库内一个以 Agent 技能SKILL.md形式沉淀的规范文档其元信息frontmatter明确了触发场景创建、修改、移动或评审packages/*中任何位置的 React 前端代码涵盖 Workshop 页面、gatekeeper 管理应用、共享 UI、组件、Hooks、表单、交互、样式、可访问性与前端测试。规范适用的三块前端面Workshop SPApackages/workshop-frontend纯客户端单页应用通过持久 WebSocket 上的 RPC API 与后端通信使用 React、Kumo UI、Phosphor icons 与 Vite。各 gatekeeper 管理 SPApackages/gatekeeper-*下的src/configurator/、app/等目录例如 gatekeeper-context 的 Context Library 管理界面、gatekeeper-scheduler 的管理页面。共享 UI 包gadgets/uipackages/ui跨应用复用的运行期 React UI 层。需要特别强调的是层级关系各包的AGENTS.md会补充产品特定的规则但不能取代本规范本规范是所有包之上的公共底线。仓库根 AGENTS.md 中的前端约定小节即是对本技能文档的强制摘要并要求在packages/*下动 React 前端代码前先加载本技能。所有权优先的代码组织按产品归属组织而非按实现类型规范的第一原则是代码按产品归属product ownership组织先于按实现类型组织。功能目录feature directory拥有产品行为可以把因为同一个原因而变更的组件、Hooks、测试与工具函数放在一起。这与按文件类型分目录的传统习惯相反——不应仅仅为了分类而引入components/、hooks/、helpers/、tests/这类子目录。只有在多个文件构成一个内聚单元、或扁平目录已难以扫读时才引入以职责命名的子系统目录。命名与测试文件位置组件文件名用PascalCaseHooks 与非组件模块文件名用camelCase*.test.ts(x)测试文件与被测主体同目录放置colocate功能目录组织不能取代一组件一文件one-component-per-file的模型。代码提升的所有权边界产品行为必须留在所属产品内即使被其他功能消费也要留在原地。提升promote代码只能提升到其所有权所要求的最高层级共有四档代码归属放置位置单功能内部共享最近的公共功能目录同一应用内跨无关区域、与功能无关该应用的components/或hooks/目录多个独立前端共享的运行期 UIgadgets/ui产品特定的组合留在产品侧即使底层使用了共享原语两点硬性约束不要因为组件长得像就合并它们避免用泛化、重 prop 的抽象抹掉领域行为。这在gadgets/ui的 AGENTS.md 中有呼应只有至少两个独立前端需要同一与功能无关的行为、或跨前端一致性是明确产品需求时才把组件放进gadgets/ui产品数据获取、路由、RPC、权限与领域工作流必须留在消费方应用内。组件与 Hooks 的抽取准则什么时候该拆组件当它拥有有意义的状态、副作用、交互、可访问性行为或可复用职责时当它代表一个独立的 UI 关注点时当它遮挡了父组件主流程时。小而无状态的渲染辅助函数保持私有直到它们发展出独立关注点为止。什么时候该抽 Hooks当它拥有连贯的行为或外部同步生命周期时——而不是仅仅为了缩短文件。反过来如果抽出的子组件大部分只是在转发标记markup或高度依赖父组件的 refs、setters 与同步回调就不要拆让代码留在原地。组件/Hooks 书写风格优先使用具名箭头函数组件与 Hooksprops 直接类型标注不要使用React.FC对memo、forwardRef这类包装器要给出稳定的 DevTools 名称命名包装便于调试。组件 API 约定Props 建模仅在同时出现时才有意义的 props建模为对象或可辨识联合discriminated union。受控值必须有变更回调否则就暴露非受控的初始值uncontrolled initial value。不要用 Effect 把受控 prop 复制进本地 state——这是规范明确禁止的反模式。一个现成的落地例子是gadgets/ui中 HierarchicalList.types.ts 里的HierarchicalListExpansionProps它是一个可辨识联合——要么是受控形态{ expandedIds, onExpandedChange }要么是非受控形态{ initialExpandedIds }受控值expandedIds与回调onExpandedChange永远成对出现且两种形态互斥expandedIds?: never/initialExpandedIds?: never从类型层面杜绝了只传值不传回调的用法。回调命名与传值回调统一命名为onAction如onItemClick、onSelectionClear、onExpandedChange、onMove。回调传递领域值domain values而不是 React setter 或浏览器事件对象。例如HierarchicalList的onMove收到的是(item, destination)renderContextMenu收到的是列表项本身。自定义扩展面children、slots、variants、className、DOM 透传、命令式 ref只为当前调用方添加不做投机式复用speculative reuse的预留。Context 的边界Context 只用于真正应用级的值认证authentication、主题theme、toast 提示等实例相关的功能数据与动作必须通过 props 传递。这保证了组件复用不依赖隐式上下文。Kumo 与样式约定默认使用 Kumo 组件与语义 token默认使用Kumo 组件与语义 token动手创建控件或交互模式前先检查 Kumo 与gadgets/ui是否已有现成方案。共享 Gadgets 组件应当组合composeKumo 行为而不是仅仅重命名或重排一个 Kumo 原语不要包一层只为了改样式。禁止引入自定义颜色字面量、任意 Tailwind 颜色、功能本地 token 体系或为 Kumo 的 surface、border、text、status、focus、interaction token 做本地替代——除非用户明确要求。已有的遗留颜色不是先例不能作为新代码的依据。Tailwind 与自定义 CSS 的分工场景手段结构、间距、尺寸、定位、响应式、排版Tailwind 工具类Kumo 与工具类无法表达的技术行为自定义 CSS全局 Kumo token 主题化应用级决策普通功能开发中不得改动gadgets/ui的 AGENTS.md 补充了一个关键实操细节由于共享组件里的工具类由消费方应用编译Tailwind 消费方必须把packages/ui/src加入source否则共享组件的 utility class 不会被生成。源码印证HierarchicalList的 Kumo 落地在 HierarchicalList.tsx 中可以看到这套约定的完整实践基础控件全部来自 KumoButton、DropdownMenu、LayerCard、Text以及 primitives 下的ContextMenu、Drawer、Menu缩进、拖拽预览、下拉指示器等全部用语义 tokenbg-kumo-control、text-kumo-default、ring-kumo-line、bg-kumo-recessed、text-kumo-subtle、text-kumo-inactive、border-kumo-brand、bg-kumo-brand没有一处自定义颜色图标来自phosphor-icons/reactCaretDownIcon、DotsSixVerticalIcon、FolderIcon所有结构/布局诉求用 Tailwind 工具类表达flex、gap-2、min-w-0、max-w-64、rounded-lg、媒体查询[media(any-pointer:coarse)]等显式处理motion-reduce:transition-none、data-[popup-open]等 Kumo 状态选择器遵守了保留可访问性的强制要求。package.json也印证了层次packages/ui/package.json 把 React 与cloudflare/kumo声明为peerDependenciesreact: ^19.2.8、cloudflare/kumo: ^2.12.0确保所有消费方共享同一个运行期与设计系统版本gadgets/ui自身是 private 包、直接导出源码exports指向./src/index.ts没有发布或构建产物步骤。React 语义Effect、State 与性能Effect 是同步机制不是派生状态机器规范把Effect 视为与外部系统的同步而不是派生状态的计算手段也不是串联用户交互的途径。具体规则渲染期数据在渲染期计算calculate render data during render不要塞进 Effectstate 靠近它的拥有者需要身份重置时优先用组件key适合的外部 store 用useSyncExternalStore。Effect 的正确性要求负责 fetch 或 subscribe 的 Effect 必须清理过期工作并且在被重启restart时保持正确避免 Effect 链chains of Effects当一份 state 可以由另一份派生出来时不要同步两份 React state。性能与可访问性没有具体的身份identity或性能需求不要加useMemo或useCallback保留键盘行为、焦点管理、可访问名称accessible names、屏幕阅读器通告announcements以及鼠标/触屏/混合输入的输入一致性input parityRPC stub 必须遵守仓库根 AGENTS.md 中关于释放disposal与 React state 的规则——注意根文档特别警告useState的 setter 遇到可调用对象会把它当函数执行因此 state 中要存放RpcStub时必须包进一个对象stub 不再需要时要调用stub[Symbol.dispose]()或在useEffect的 cleanup 中释放。注释规范优先用名称与类型表达意图注释只解释非显然的约束、安全或性能原因、以及刻意偏离约定之处不要逐行叙述代码do not narrate the next line当约束变化时同步更新或删除对应注释。测试规范测试的目标是保护可观察行为而不是凑覆盖率覆盖产品规则、可访问性、状态转换、竞态races与失败路径不要为了覆盖率去测试 React、JavaScript、Kumo 或其他框架自身的行为避免只耦合实现细节的断言避免琐碎的直通passthrough断言行为保持不变的移动behavior-preserving moves除 import 外不应改动测试只有抽取暴露了此前未测试的重要逻辑时才补充针对性覆盖。测试同样遵循 colocate 约定。gadgets/ui的 AGENTS.md 进一步补充优先headless 行为原语 Kumo 适配层的组合当两者都是真实消费方需求时headless 模型保持无表现策略测试围绕可观察契约而非包边界或框架行为编写。源码印证测试与可访问性在HierarchicalList的实践测试文件与被测文件同目录HierarchicalList.test.tsx、HierarchicalListPrimitive.test.tsx、HierarchicalListDragAndDrop.test.tsxheadless 与样式分离HierarchicalListPrimitive.tsx 是行为原语只拥有展开/选择/拖拽行为通过renderRow、renderDropIndicator、renderTouchDragPreview、slots等渲染槽交给消费方定制表现HierarchicalList是 Kumo 适配层负责把行为原语渲染成 Kumo 风格的行、ContextMenu 与 Drawer可访问性细节在源码中一一落实拖拽移动后有双通道aria-livepolite的rolestatus通告{name} moved to position {n} in {parent}双通道轮换以避免重复播报、拖拽后的焦点恢复逻辑、aria-current、aria-expanded、aria-hidden装饰元素、focus-visible样式。把规范串起来HierarchicalList是一个完整的范本案例gadgets/ui的HierarchicalList入口导出几乎覆盖了本规范的所有条目可作为评审与编写新组件时的对照范本所有权属于跨应用共享 UI因此放在gadgets/ui而不在各 app 内重复实现命名文件 PascalCase组件为具名箭头函数export const HierarchicalList (...)不出现React.FC组件 API受控/非受控可辨识联合、onAction回调、领域值传递、slots/className/DOM 透传只服务于当前调用方Kumo 与样式Kumo 原语 语义 token Tailwind 结构类 motion-reduce可访问性适配无自定义颜色React 语义行为原语内useState/useRef/useEffect各司其职Effect 只做订阅、焦点恢复等同步工作派生状态展开集合、拖拽控制器保持在拥有者附近可访问性aria-live通告、焦点管理、键盘/触屏/鼠标输入一致性、触屏拖拽专用把手与长按抽屉测试colocated 测试围绕可观察行为拖拽移动通告、展开切换、选中清理。落地检查清单把本规范压缩成一份提交前自检清单适用于任何packages/*下的 React 改动目录按产品归属组织未按类型强行建components/、hooks/子目录组件 PascalCase、Hooks/模块 camelCase测试文件与主体同目录共享跨应用 UI 放入gadgets/ui含 Tailwindsource配置未在 app 内复制未合并长得像的组件未引入重 prop 泛化抽象受控值有变更回调未用 Effect 复制受控 prop回调命名onAction传递领域值而非 setter/浏览器事件自定义扩展面只为当前调用方未做投机式预留默认使用 Kumo 组件与语义 token无自定义颜色字面量Tailwind 用于结构/布局自定义 CSS 仅限 Kumo 表达不了的技术行为Effect 只做外部同步无 Effect 链、无冗余派生 state、无空转的useMemo/useCallback键盘、焦点、可访问名称、通告与输入一致性已保留RPC stub 已按根 AGENTS.md 释放注释只解释非显然约束未逐行叙述代码测试保护可观察行为与失败路径未测框架自身行为评审他人代码时同一份清单同样适用frontend-conventions技能文档是仓库内所有 React 前端评审的共同标准包级AGENTS.md只做补充、不做替代。赞分享人工智能AI 应用AI AgentAgent 沙箱AI 安全治理【免费下载链接】cloudflare-osAgent workspace built on Cloudflare Workers for creating documents, building apps, and running agents with your company’s context and systems.项目地址https://gitcode.com/gh_mirrors/cl/cloudflare-os点击查看免费下载相关推荐Cloudflare Agents 前端视觉体系实战基于 Kumo 设计系统构建 Agent Playground 界面Cloudflare Agents 前端视觉体系实战基于 Kumo 设计系统构建 Agent Playground 界面 本文以仓库中的 design/visAI AgentAgent 框架后端云原生MCP 服务实时通信LaMa图像修复教程10分钟跑通照片修复与物体移除LaMa图像修复教程10分钟跑通照片修复与物体移除 LaMa图像修复是一款基于傅里叶卷积的高分辨率图像修复工具给它一张照片加一张掩码用黑白像素标明要修哪人工智能计算机视觉深度学习图像处理Activepieces Web 前端工程规范实战指南React 19 Vite TypeScript 下的一致性开发约定Activepieces Web 前端工程规范实战指南React 19 Vite TypeScript 下的一致性开发约定 导读 本文以 Active工作流自动化低代码AI 应用人工智能AI AgentMCP 服务后端前端上一篇Vision-RWKV视觉感知的未来之选下一篇【亲测免费】 OkHttps打造优雅高效的网络通信体验创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

WPScan 仓库开发指南:面向 AI Agent 的架构解析、测试与构建实践
WPScan 仓库开发指南:面向 AI Agent 的架构解析、测试与构建实践

网络安全漏洞扫描渗透测试应用安全CLI 【免费下载链接】wpscan WPScan WordPress security scanner. Written for security professionals and blog maintainers to test the security of their WordPress websites. Contact us via contactwpscan.com 项目地址: ht… · 2026/9/24 16:42:33

TVA具身智能运行机理(18):生成式规划与轻量化策略深度协同
TVA具身智能运行机理(18):生成式规划与轻量化策略深度协同

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”)是依托Transformer架构与“因式智能体”理论构建的新型工业视觉系统,也是当前最具代表性的具身视觉技术之一。它有机融合深度强化学习&… · 2026/9/24 16:42:26

ParlAI 中的 ConvAI2 任务全指南:PersonaChat 数据集、模型训练与交互评测实战
ParlAI 中的 ConvAI2 任务全指南:PersonaChat 数据集、模型训练与交互评测实战

ParlAI 中的 ConvAI2 任务全指南:PersonaChat 数据集、模型训练与交互评测实战 【免费下载链接】ParlAI A framework for training and evaluating AI models on a variety of openly available dialogue datasets. 项目地址: https://gitcode.com/gh_mirrors/pa/… · 2026/9/24 16:42:26

OpenStack实例生命周期管理:Terminate与Pause/Resume操作全解
OpenStack实例生命周期管理:Terminate与Pause/Resume操作全解

玩 OpenStack(33):Terminate 和 Pause/Resume Instance,实例生命周期里的“刹车”与“拆解”我做了几年 OpenStack 运维之后发现一个很有意思的现象:新手最爱研究的是怎么创建实例,怎么把一台虚拟机从镜像拉… · 2026/9/24 18:22:36

麻雀算法优化BP神经网络:解决多特征分类初始值难题的SSA-BP实现
麻雀算法优化BP神经网络:解决多特征分类初始值难题的SSA-BP实现

简介:面向需要完成多特征分类预测任务的Matlab开发者与科研人员,这份资源提供基于麻雀算法(SSA)优化BP神经网络权重和阈值的完整实现方案。麻雀算法通过模拟麻雀觅食与反捕食行为进行全局搜索,可帮助BP网络获得更优初始… · 2026/9/24 18:22:36

BERT情感分析实战:IMDB影评分类Python源码全解析与踩坑指南
BERT情感分析实战:IMDB影评分类Python源码全解析与踩坑指南

简介:基于BERT模型的情感分析项目,面向自然语言处理入门及情感分析应用开发者,提供一套针对IMDB影评数据集进行正面/负面二分类的Python实现。项目包含完整可运行的微调与推理流程,难度适中,适合希望掌握BERT下游任务实… · 2026/9/24 18:22:29

BERT模型IMDB影评情感分析:Python源码微调实战
BERT模型IMDB影评情感分析:Python源码微调实战

简介:基于BERT的情感分析项目面向自然语言处理初学者与深度学习实践者,聚焦IMDB影评的正负面二分类任务。资源以Python源码为主,整体结构清晰:包含核心建模与训练脚本、不同框架/设备下的测试脚本、模型评估脚本,并配套… · 2026/9/24 18:22:29

提示极限趋近:识别临界信号,布局否极泰来
提示极限趋近:识别临界信号,布局否极泰来

1. 为什么说“提示极限趋近”才是真正的转机信号“否极泰来”这四个字大家都会写,但多数人是在谷底等待它出现,少数人是在信号阶段就开始布局。“新否极泰来20_提示极限趋近”这个标题如果拆开看,其实传达了一条非常实用的经验:在… · 2026/9/24 18:22:11

蒙特卡洛概率潮流实战:从IEEE33节点到配电网安全性分析
蒙特卡洛概率潮流实战:从IEEE33节点到配电网安全性分析

做配电网分析的同仁应该都有这种感受——算例一换,结果就变,但IEEE33节点这个老面孔始终绕不开。今天这篇东西,我想把基于蒙特卡洛法的概率潮流安全性分析这件事整个拆开讲一遍:从为什么选IEEE33节点、光伏和风电的不确定性怎么建… · 2026/9/24 18:22:11

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码