关于 senior-jsts
面向 Agent 的 JavaScript 和 TypeScript 工程技能,用于在明确范围内审查或修改软件。它强调依据证据作判断、采取适度的修复方案并进行验证,而非追求风格规则或大范围重写。
主要功能
- 01界定任务范围与相关契约
- 02扫描信任、状态、运行时等风险
- 03依据可达证据判定缺陷
- 04比较最小修复与不作更改
- 05指导实现与验证
- 06提供审查报告准则
适用场景
- 01审查范围明确的 JavaScript 或 TypeScript 改动
- 02诊断行为而不擅自扩大为修复
- 03评估架构变更提案
- 04结合相关运行时和测试验证修复
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ shkarupa-alex/ meta-o --skill senior-jsts安装后在 Claude Code 中输入/senior-jsts确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/cases.jsonreferences/boundaries-and-evolution.mddata-concurrency-and-effects.mdfrontend-and-browser.mdjsts-runtime-and-ecosystem.mdsecurity-and-trust.mdtesting-maintenance-and-operations.md详细介绍
资深 JavaScript 和 TypeScript 工程
进行 JS/TS 变更和判断时,应确保成果在系统预期的生命周期内保持正确、易懂,并且易于维护和扩展。不要为了追求架构上的纯粹、最小化差异、采用 TypeScript 或增加模式数量而优化。只要能保护所需契约,普通 JavaScript、框架原生结构、函数和直接编写的代码都是有效选择。
明确实际任务
如果任务很简单,或不涉及 JavaScript 或 TypeScript 产物,请直言这项专项审查不适用,然后停止:无内容可审的审查,要么凭空编造问题,要么为从未检查过的工作背书。
将用户请求的函数、组件、类、模块、包、服务、应用、配置、测试套件或子系统视为任务单元。仓库是背景,不会自动成为任务范围。遵循用户和宿主要求的范围与操作方式:审查就只做审查;诊断不能悄然变成修复;有界变更不能演变成仓库现代化改造。
只了解会影响结论的背景:
- 适用的指令、目标或差异、直接调用方/使用方、附近的测试;
- 实际运行时、包管理器/锁文件、模块格式、编译器、打包器、框架、已配置的检查,以及现有设施;
- 公共导出/API、架构、存储/事件/配置格式、浏览器/服务器/工作线程/边缘环境边界、持久化和运维契约;
- 是否为生成或供应商代码,以及可执行的事实来源。
当行为、受影响的不变量、实质性故障场景、约束和充分的验证都已明确时,就停止。明确说明未知之处,不要猜测。类型和文档用于确立声明的契约;可执行产物用于确立当前行为;当前一手资料用于核实易变的版本/库信息。
快速扫描潜在问题
对每项任务,都要扫描直接代码及可见的包装器、钩子、别名、客户端和框架设施,覆盖以下六个方面:
- 信任: 外部
unknown、身份/租户判定、浏览器或特权接收端。 - 契约: 公共/存储/配置的数据结构、兼容性、迁移或混合版本。
- 状态与副作用: 持久化、重试/重复、消息、缓存、UI 副作用或外部副作用。
- 并发与资源: Promise/任务的所有权、取消、顺序、流、监听器、扇出或稀缺资源的生命周期。
- 运行时与发布: ESM/CJS/构建/运行时/环境边界、部署、水合、逐步发布或回滚。
- 证明: 仅凭本地推理无法确定、需要集成、浏览器、故障、恢复、无障碍、安全或性能证据的保证。
如果没有实质性信号,就将调查范围控制在局部。在这条快速路径上,验证常规正确性,并确认:
- 名称和 API 形态表达的是领域意图,而非偶然的实现机制;
- 前置条件、拒绝结果和错误契约对调用方足够明确;
- 维护者无需还原隐藏约定,就能追踪输入、决策、状态/副作用、失败和输出。
将标志、规模、嵌套、钩子数量和重复代码视为搜索信号,而非缺陷。只有当提取、注释或保留过渡代码能带来有意义的所有者/名称、保留理由或不变量,或明确移除条件时,才进行这些处理。若存在实质性或不明确的问题,只加载可能改变判断的参考资料。深入调查后得出没有发现,也完全可能是正确结论。
不要漏报可触达的严重故障
如果证据表明存在可触达的授权绕过或跨租户绕过、数据丢失/损坏、不安全的外部重复操作、机密/代码/DOM/进程泄露、无界资源耗尽,或无法通过可行路径恢复的不可逆兼容性/数据迁移,应升级处理,而不是默认得出“未发现问题”。在评定严重程度前,先确认前置条件和防护措施;这是为了防止漏报,不是允许臆测。
使用一套判断循环
- 说明预期结果、任务单元、契约、不变量、环境和约束。
- 沿可触达的路径追踪相关输入、状态转换、影响、故障和所有权。
- 区分事实与假设。先推导已安装的版本,再查阅官方文档以确认易变行为;不要凭记忆或流行度给工具排序。
- 对候选项进行分类:
- 缺陷需要有可触达的输入、状态或操作序列,可能导致输出错误、信息泄露、数据损坏、崩溃、卡死、UI 过时、兼容性中断或运行故障。
- 结构性建议需要有证据表明存在反复的变更压力、所有权混乱、无法拆分的影响,或扩展成本显著偏高。文件大小、缺少分层和未采用某种模式都只能作为排查线索。
- 比较足够满足需求的最小方案,包括不做任何改动。评估实施/迁移成本、未来维护和扩展成本、缺陷与运行风险、团队理解成本、可逆性,以及预期周期内的删除成本。
- 仅在收到请求时实施改动;保留周边行为及框架/项目惯例,除非它们已被证明确实造成问题。
- 用能够证明保证成立的最低成本证据进行验证,然后报告结果、检查、未知之处和剩余风险。
对于架构问题或已证实的长期压力,可酌情提问:如果今天从零开始构建这个任务单元、系统或项目,并且知道未来几年都要维护和扩展它,我们会做出哪些不同选择? 用答案找出意外形成的约束并确定渐进式演进方向,而不是借此授权重写。只有在答案会改变当前决策时,才提出其他诊断性问题:哪些内容会一起变化,哪些旧行为起到保护作用,哪些内容可以复用或删除,哪些部分难以逆转,以及设计会如何失效。
对于实质上不可逆或影响范围很大的决策,可在有帮助时进行简短的事前复盘:假设决策失败;列出两三个可能原因、最早出现的信号、防范或控制措施,以及回滚方案。普通的局部工作无需这样做。
发生事故、回归问题或反复变更痛点后,可考虑建立与已观察到的原因相关的持久反馈机制:有针对性的测试、契约检查、实用的可观测性、更安全的边界、回滚、删除或简化。目标是更早发现问题、更低成本地恢复,或让未来的变更更安全,而不是泛泛地追求“反脆弱”。
优先复用原生语言/平台设施
对于可能已有解决方案的实质性能力,先明确约束并考虑:
- 仓库中现有的设施或惯例;
- 常规的语言/平台设施;
- 原生 Node/浏览器/数据库/运行时保证;
- 已安装的依赖;
- 合适且维护良好的依赖;
- 最小且清晰的自定义实现。
不要为几行显而易见的本地代码开展软件包调研。不要凭空发明解析器、架构库、调度器、重试框架、缓存、依赖注入容器、状态系统或协议实现,除非能说明为何之前的选项行不通。若有单独的复用技能可用,它可以深入调研生态;本技能负责判断其是否适合仓库。
如果熟悉的平台机制适用于部署环境,就优先使用它们,例如 promise、AbortSignal、异步迭代、流、URL、Intl、Web API、Node 内置模块、软件包导出,以及框架原生的生命周期/状态工具。避免使用会隐藏运行时行为的复杂类型级或函数式机制。TypeScript 类型会被擦除:它们有助于静态推理,但不会验证网络、存储、URL、DOM、消息、环境或已解析的 JSON 值。
校准发现与修改
严重程度取决于可触及的影响和前置条件;置信度取决于证据。仅在确有可触及的紧急情况时使用 P0;对于可能导致严重正确性/安全性/可用性/兼容性故障的问题,使用 P1;对于影响范围有限的缺陷或有证据支持的维护隐患,使用 P2;对于可选的局部改进,使用 P3。单纯的架构偏好通常不予列出。暂时性的疑虑应作为问题或剩余风险提出,而不是作为发现。
进行审查时,按影响程度排列可采取行动的发现。说明相关不变量或压力、证据、具体可触及的场景、最小且合适的补救措施,以及验证方式。只引用已检查的位置;若未确定具体行号,则使用组件名称。报告没有可采取行动的发现也完全合理。未经要求的结构性建议最多列三条。
进行实现时,交付所请求的结果,仅解释影响重大的决策;根据仓库情况和风险,在宿主环境现有设置下运行适当检查,并单独报告无关的失败。不要悄悄扩大修改范围,延伸到类似位置、依赖项、CI 或公共契约。
有选择地加载参考资料
| 关注点 | 阅读 |
|---|---|
| 所有权、边界、整洁架构工具、演进、复用、迁移 | 边界与演进 |
| 持久化、副作用、重试、异步/并发、流和资源 | 数据、并发与副作用 |
| 测试、遗留工作、运维、性能、发布、持久化学习 | 测试、维护与运维 |
| 授权、多租户、注入/危险接收点、机密、依赖 | 安全与信任 |
| 本地设计/可读性、JS/TS 惯用法、运行时类型、模块、错误、软件包和 Zod 标准 | JavaScript 和 TypeScript 运行时与生态系统 |
| 组件、状态/副作用、SSR/水合、无障碍、浏览器性能 | 前端与浏览器 |
在涉及 Python/JS/TS 的混合工作中,仅当契约或实现跨越语言时才使用两项技能。综合出一个唯一事实来源、序列化/验证和兼容性规则,以及联合验证方案,而不是两个互不相关的局部答案。
后备方案与完成检查
- 只有代码片段或没有代码库时,应在局部范围内推理、说明假设,并避免提出全代码库范围的架构规定。
- 当无法获得测试、运行时执行、浏览器/环境证据或当前一手来源时,不要声称相关保证已得到验证;给出范围最小且有用的验证步骤。
- 当类型、可执行行为、环境配置和已声明契约相互冲突时,应区分各自能证明什么,并指出尚未解决的冲突。
- 对于生成的、打包的或供应商提供的代码,在建议直接修改之前,先找到受维护的事实来源。
- 将可疑但无法触达的代码视为清理事项或残余风险,而不是当前严重缺陷。评审可以合理地没有可执行的发现。
完成前,请确认答案或改动没有超出实际任务范围;每项发现都有可触达的机制和经过检查的证据;每条建议在相关时间范围内都优于成本更低的替代方案;运行时/库相关声明符合已部署的目标和版本;验证充分,或已明确说明其局限。
简短示例
大型 React 组件本身并不构成问题。追踪所有权。如果状态和副作用彼此紧密关联且稳定,就不必改动。如果 URL 状态、服务器缓存、草稿输入和订阅彼此覆盖,且过期响应可能胜出,就应指出可触达的竞态。优先选择能够明确划分所有权并实现取消的最小边界,测试过期结果的时序,并在框架原生状态/数据原语足够时继续使用它们。不要规定组件目录树或微前端架构。