mcpField
S
senior-jsts

senior-jsts

github.com/shkarupa-alex开发0100 次安装4 周前更新
代码仓库

关于 senior-jsts

面向 Agent 的 JavaScript 和 TypeScript 工程技能,用于在明确范围内审查或修改软件。它强调依据证据作判断、采取适度的修复方案并进行验证,而非追求风格规则或大范围重写。

主要功能

  1. 01界定任务范围与相关契约
  2. 02扫描信任、状态、运行时等风险
  3. 03依据可达证据判定缺陷
  4. 04比较最小修复与不作更改
  5. 05指导实现与验证
  6. 06提供审查报告准则

适用场景

  1. 01审查范围明确的 JavaScript 或 TypeScript 改动
  2. 02诊断行为而不擅自扩大为修复
  3. 03评估架构变更提案
  4. 04结合相关运行时和测试验证修复

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/shkarupa-alex/meta-o --skill senior-jsts

安装后在 Claude Code 中输入/senior-jsts确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

evals/
cases.json
references/
boundaries-and-evolution.md
data-concurrency-and-effects.md
frontend-and-browser.md
jsts-runtime-and-ecosystem.md
security-and-trust.md
testing-maintenance-and-operations.md

详细介绍

资深 JavaScript 和 TypeScript 工程

进行 JS/TS 变更和判断时,应确保成果在系统预期的生命周期内保持正确、易懂,并且易于维护和扩展。不要为了追求架构上的纯粹、最小化差异、采用 TypeScript 或增加模式数量而优化。只要能保护所需契约,普通 JavaScript、框架原生结构、函数和直接编写的代码都是有效选择。

明确实际任务

如果任务很简单,或不涉及 JavaScript 或 TypeScript 产物,请直言这项专项审查不适用,然后停止:无内容可审的审查,要么凭空编造问题,要么为从未检查过的工作背书。

将用户请求的函数、组件、类、模块、包、服务、应用、配置、测试套件或子系统视为任务单元。仓库是背景,不会自动成为任务范围。遵循用户和宿主要求的范围与操作方式:审查就只做审查;诊断不能悄然变成修复;有界变更不能演变成仓库现代化改造。

只了解会影响结论的背景:

  • 适用的指令、目标或差异、直接调用方/使用方、附近的测试;
  • 实际运行时、包管理器/锁文件、模块格式、编译器、打包器、框架、已配置的检查,以及现有设施;
  • 公共导出/API、架构、存储/事件/配置格式、浏览器/服务器/工作线程/边缘环境边界、持久化和运维契约;
  • 是否为生成或供应商代码,以及可执行的事实来源。

当行为、受影响的不变量、实质性故障场景、约束和充分的验证都已明确时,就停止。明确说明未知之处,不要猜测。类型和文档用于确立声明的契约;可执行产物用于确立当前行为;当前一手资料用于核实易变的版本/库信息。

快速扫描潜在问题

对每项任务,都要扫描直接代码及可见的包装器、钩子、别名、客户端和框架设施,覆盖以下六个方面:

  • 信任: 外部 unknown、身份/租户判定、浏览器或特权接收端。
  • 契约: 公共/存储/配置的数据结构、兼容性、迁移或混合版本。
  • 状态与副作用: 持久化、重试/重复、消息、缓存、UI 副作用或外部副作用。
  • 并发与资源: Promise/任务的所有权、取消、顺序、流、监听器、扇出或稀缺资源的生命周期。
  • 运行时与发布: ESM/CJS/构建/运行时/环境边界、部署、水合、逐步发布或回滚。
  • 证明: 仅凭本地推理无法确定、需要集成、浏览器、故障、恢复、无障碍、安全或性能证据的保证。

如果没有实质性信号,就将调查范围控制在局部。在这条快速路径上,验证常规正确性,并确认:

  • 名称和 API 形态表达的是领域意图,而非偶然的实现机制;
  • 前置条件、拒绝结果和错误契约对调用方足够明确;
  • 维护者无需还原隐藏约定,就能追踪输入、决策、状态/副作用、失败和输出。

将标志、规模、嵌套、钩子数量和重复代码视为搜索信号,而非缺陷。只有当提取、注释或保留过渡代码能带来有意义的所有者/名称、保留理由或不变量,或明确移除条件时,才进行这些处理。若存在实质性或不明确的问题,只加载可能改变判断的参考资料。深入调查后得出没有发现,也完全可能是正确结论。

不要漏报可触达的严重故障

如果证据表明存在可触达的授权绕过或跨租户绕过、数据丢失/损坏、不安全的外部重复操作、机密/代码/DOM/进程泄露、无界资源耗尽,或无法通过可行路径恢复的不可逆兼容性/数据迁移,应升级处理,而不是默认得出“未发现问题”。在评定严重程度前,先确认前置条件和防护措施;这是为了防止漏报,不是允许臆测。

使用一套判断循环

  1. 说明预期结果、任务单元、契约、不变量、环境和约束。
  2. 沿可触达的路径追踪相关输入、状态转换、影响、故障和所有权。
  3. 区分事实与假设。先推导已安装的版本,再查阅官方文档以确认易变行为;不要凭记忆或流行度给工具排序。
  4. 对候选项进行分类:
    • 缺陷需要有可触达的输入、状态或操作序列,可能导致输出错误、信息泄露、数据损坏、崩溃、卡死、UI 过时、兼容性中断或运行故障。
    • 结构性建议需要有证据表明存在反复的变更压力、所有权混乱、无法拆分的影响,或扩展成本显著偏高。文件大小、缺少分层和未采用某种模式都只能作为排查线索。
  5. 比较足够满足需求的最小方案,包括不做任何改动。评估实施/迁移成本、未来维护和扩展成本、缺陷与运行风险、团队理解成本、可逆性,以及预期周期内的删除成本。
  6. 仅在收到请求时实施改动;保留周边行为及框架/项目惯例,除非它们已被证明确实造成问题。
  7. 用能够证明保证成立的最低成本证据进行验证,然后报告结果、检查、未知之处和剩余风险。

对于架构问题或已证实的长期压力,可酌情提问:如果今天从零开始构建这个任务单元、系统或项目,并且知道未来几年都要维护和扩展它,我们会做出哪些不同选择? 用答案找出意外形成的约束并确定渐进式演进方向,而不是借此授权重写。只有在答案会改变当前决策时,才提出其他诊断性问题:哪些内容会一起变化,哪些旧行为起到保护作用,哪些内容可以复用或删除,哪些部分难以逆转,以及设计会如何失效。

对于实质上不可逆或影响范围很大的决策,可在有帮助时进行简短的事前复盘:假设决策失败;列出两三个可能原因、最早出现的信号、防范或控制措施,以及回滚方案。普通的局部工作无需这样做。

发生事故、回归问题或反复变更痛点后,可考虑建立与已观察到的原因相关的持久反馈机制:有针对性的测试、契约检查、实用的可观测性、更安全的边界、回滚、删除或简化。目标是更早发现问题、更低成本地恢复,或让未来的变更更安全,而不是泛泛地追求“反脆弱”。

优先复用原生语言/平台设施

对于可能已有解决方案的实质性能力,先明确约束并考虑:

  1. 仓库中现有的设施或惯例;
  2. 常规的语言/平台设施;
  3. 原生 Node/浏览器/数据库/运行时保证;
  4. 已安装的依赖;
  5. 合适且维护良好的依赖;
  6. 最小且清晰的自定义实现。

不要为几行显而易见的本地代码开展软件包调研。不要凭空发明解析器、架构库、调度器、重试框架、缓存、依赖注入容器、状态系统或协议实现,除非能说明为何之前的选项行不通。若有单独的复用技能可用,它可以深入调研生态;本技能负责判断其是否适合仓库。

如果熟悉的平台机制适用于部署环境,就优先使用它们,例如 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 状态、服务器缓存、草稿输入和订阅彼此覆盖,且过期响应可能胜出,就应指出可触达的竞态。优先选择能够明确划分所有权并实现取消的最小边界,测试过期结果的时序,并在框架原生状态/数据原语足够时继续使用它们。不要规定组件目录树或微前端架构。

评论

支持 Markdown