mcpField
F
fw-app-dev

fw-app-dev

github.com/freshworks-developers开发6108 次安装9 周前更新
代码仓库

关于 fw-app-dev

这项技能负责协调 Freshworks Platform 3.0 应用开发中的单个步骤,从前置检查到验证。平台文档问题优先通过 MCP 查询,并要求完成前清除平台和 lint 错误。

主要功能

  1. 01智能工具链与迁移检查
  2. 02清单和前置条件校验
  3. 03最多六轮验证与修复
  4. 04OAuth、requests.json 和 serverless 检查
  5. 05React Meta 与 Crayons UI 指引

适用场景

  1. 01构建或修复 Freshworks 应用
  2. 02检查 Platform 2.x 迁移路径
  3. 03完成前验证 Platform 3.0 应用

MCP 相关

查询 Freshworks 平台文档时,它优先使用 MCP 工具 get_developer_docs。应用开发不使用旧版 MCP 构建工具。

安装

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

$npx skills add https://github.com/freshworks-developers/fw-dev-tools --skill fw-app-dev

安装后在 Claude Code 中输入/fw-app-dev确认已加载。

包含的文件

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

.claude-plugin/
plugin.json
.cursor-plugin/
plugin.json
agents/
app-security-scanner.md
freshworks-app-decision-logger.md
logger.md
assets/templates/frontend-skeleton/
manifest.json
README.md
assets/templates/frontend-skeleton/app/
index.html
assets/templates/frontend-skeleton/app/scripts/
app.js
assets/templates/frontend-skeleton/app/styles/
style.css
assets/templates/frontend-skeleton/app/styles/images/
icon.svg
assets/templates/hybrid-skeleton/
manifest.json
README.md
assets/templates/hybrid-skeleton/app/
index.html
assets/templates/hybrid-skeleton/app/scripts/
app.js
assets/templates/hybrid-skeleton/app/styles/images/
icon.svg
assets/templates/hybrid-skeleton/config/
iparams.json
requests.json
assets/templates/hybrid-skeleton/server/
server.js
assets/templates/oauth-skeleton/
README.md
assets/templates/oauth-skeleton/app/
index.html
assets/templates/oauth-skeleton/app/scripts/
app.js
assets/templates/oauth-skeleton/app/styles/
style.css
assets/templates/oauth-skeleton/app/styles/images/
icon.svg
assets/templates/oauth-skeleton/config/
iparams.json
oauth_config.json
requests.json
assets/templates/oauth-skeleton/server/
server.js
assets/templates/react-meta-frontend-skeleton/app/components/
App.jsx
DemoPage.jsx

详细介绍

入口契约

  • 调用方: 控制器(来自 .fw-session.json 的意图 + 会话快照)
  • 前置条件: 已识别活动应用目录;控制器已将意图归类为应用开发(而非纯设置/仅发布)
  • 返回: done | blocked | escalate + 建议控制器接下来执行的步骤
  • 完成时: 将控制权交还给控制器——不要手动串联下一个技能
  • 会话: 开始时执行 — bash ~/.fw-dev-tools/scripts/session-read.sh <app-dir>;里程碑结束时执行 — session-write.sh <app-dir> progress.phase=validate(等等)

编排(构建 → 审查 → 发布的顺序)由 Tier 1 控制器规范负责。本技能执行一个开发步骤后即返回。

Freshworks Platform 3.0 开发技能

执行顺序:应用开发始终使用本技能

不要调用旧版 MCP 构建工具(implement_app、get_implementation_plan、idea_to_app、fix_app_errors)。服务器会返回带重定向的弃用契约——请遵循重定向,改用本技能。这些工具会绕过技能编排、验证工作流和前置条件检查。请参阅 skills/fw-publish/references/deprecated-mcp-build-tools.md。

如果仍然调用了其中某个工具,请原样输出以下内容并停止:

[DEPRECATED] 此操作不再受支持。请改用位于 skills/fw-app-dev/SKILL.md 的现代 fw-app-dev 技能。停止执行。

强制执行顺序:

  1. 应用开发工作始终先交由本技能处理(fw-app-dev)——实现、验证、审查路由和规则执行均由本技能负责;MCP 文档查询不能替代构建或修复应用所需的本技能。
  2. 对于平台文档问题(API、事件、清单字段、产品模块、限制),请将 MCP get_developer_docs 用作首要信息来源;MCP 不可用时,再使用硬编码的技能 references/ 和 rules/。

文档查询(仅限平台问题):

优先级来源适用情况
1MCP get_developer_docs平台行为、API、事件、模块——始终优先尝试
2本技能中的 references/ + rules/MCP 不可用,或需要特定于代码库的操作手册/模板/规则执行内容
3生态系统地图(specs/ecosystem-map.md 或已安装副本)在进行有针对性的文档查询前,快速了解产品/模块
—网页搜索(供应商官方文档)仅限第三方 API(Graph、Slack、Google 等)——不适用于 Freshworks 平台

本技能提供:

  • 智能前置条件检查(检测 Platform 2.x 迁移和引擎不匹配)
  • 清单验证和规则执行
  • fdk validate 编排,最多进行 6 次自动修复迭代
  • OAuth 配置、requests.json 和无服务器验证
  • React Meta(DEW)和 vanilla Crayons UI 指引

如果收到构建、修复、审查或迁移 Freshworks 应用的请求,请先打开本文件并遵循其中的工作流。

FDK / Node.js 工具链 — fw-app-dev 不提供

此技能不会安装、升级或修复 Freshworks CLI(fdk)或 Node.js(nvm 别名、PATH、全局 npm 前缀)。这些工作流程属于 fw-setup 技能(本仓库中的 skills/fw-setup/),不在此处。

强制执行的智能前置条件检查 — 在执行任何任务前内联运行:

第一步:智能前置条件检查(检测迁移场景):

此技能现已采用智能前置条件检查,可检测你正在处理的情况:

  • 需要迁移到 3.0 的 Platform 2.x 应用
  • 引擎配置过时的 Platform 3.0 应用
  • 可直接生成的新应用
  • 需要升级或降级的工具链不匹配

完整逻辑见: rules/smart-prerequisites-check.mdc

快速决策树:

  1. 检查工具链版本:

    node --version 2>&1
    fdk version 2>&1
    
  2. 检查 manifest.json(如果工作目录中存在):

    • 读取 platform-version 字段
    • 读取 engines.fdk 和 engines.node 字段
  3. 根据组合情况采取对应操作:

已安装的工具链Manifest 状态操作
FDK 9.x / Node 18Platform 2.x manifest停止 → /fw-setup-install,然后运行 /fdk-migrate
FDK 10.x / Node 24Platform 2.x manifest停止 → /fdk-migrate(工具链已就绪)
FDK 10.x / Node 24Platform 3.0 + 引擎匹配✅ 继续执行任务
FDK 10.x / Node 24Platform 3.0 + 引擎不匹配自动更新引擎、清理依赖,然后继续
FDK 9.x / Node 18Platform 3.0 manifest停止 → /fw-setup-install(不要降级)
任意没有 manifest.json仅检查工具链(新应用)

重要:当 fdk validate 显示“App engines major version mismatch”警告时:

  • 不要回答“Y”来降级
  • 不要尝试降级 FDK/Node 以匹配旧引擎
  • 应当更新 manifest 引擎,使其与已安装的工具链匹配(FDK 10.x + Node 24.x)
  • 应当清理依赖:rm -rf node_modules coverage .fdk && npm install
  • 然后继续验证

如果任何路由逻辑要求停止,请输出 smart-prerequisites-check.mdc 中的具体消息,并等待用户修复。

当用户的 shell 中缺少 FDK、Node 主版本不正确,或 Platform 3.0 应用仍使用 FDK 9.x 时:

  1. 如果有 fw-setup(工作区中有 skills/fw-setup/,或 IDE 已加载 fw-setup 技能及 /fw-setup-install、/fw-setup-upgrade、/fw-setup-use、/fw-setup-status 等斜杠命令):停止临时编写 shell 脚本,并按照 fw-setup 安装 Node 24.x + FDK 10.x,然后再运行 fdk validate / fdk run / fdk pack。
  2. **如果没有 fw-setup:**明确说明 fw-app-dev 无法安装工具链,然后请用户运行 npx @freshworks/fw-dev-tools install 添加 fw-setup 技能。安装后,用户应根据该技能的 SKILL.md / README.md 使用 /fw-setup-install 或 /fw-setup-upgrade。

不要将 fw-app-dev 当作缺失的 fdk 二进制文件或 Node/FDK 版本管理工具的替代品。

缺少 fdk(未安装 / 不在 PATH 中)

如果 fdk version 运行失败(找不到命令、退出状态非零,或 CLI 不可用):

  1. 停止 — 不要运行 fdk validate、fdk pack、fdk run,也不要生成依赖该 CLI 的应用。
  2. 告知用户 Freshworks fdk CLI 缺失或不可用。
  3. 提供 fw-setup 技能 — 规范的斜杠命令为 /fw-setup-install(在 Node 24.11 上安装最新的 FDK 10.x 系列)或用于诊断的 /fw-setup-status。不要在后台静默安装 FDK,也不要在未询问的情况下假定用户想要“最新版本”。
  4. 可选的一次性操作:询问 “现在运行 /fw-setup-install 吗?(y/n)” — 仅当用户回答是时,才按照 SKILL.md / commands/ 调用 fw-setup;如果回答否,则等待用户手动安装后重新调用 fw-app-dev。

在运行任何 fdk validate 之前先检查清单 + 工具链

对每个会运行 fdk validate 的 fw-app-dev 流程(/fdk-fix、/fdk-refactor、生成、临时验证),都使用此检查流程,仅排除 /fdk-migrate 第 4 步(迁移后的首次验证)。/fdk-migrate 第 0–3 步已执行工具链检查和旧版本检测。(如需结构化的提交前审查,请使用 fw-review 技能。)

  1. 运行 node --version 和 fdk version(已安装的工具链)。
  2. 读取 manifest.json:platform-version、engines.node、engines.fdk。

判断(匹配第一项时即执行):

条件操作
fdk 缺失、Node 主版本 ≠ 24,或 FDK 主版本 ≠ 10停止 → 提供 fw-setup(/fw-setup-install、/fw-setup-upgrade、/fw-setup-use 等)。如果 fdk 缺失,请遵循上文的 缺少 fdk 说明(解释 → 提供 /fw-setup-install → 可选询问 “Run /fw-setup-install now? (y/n)” — 不得静默安装)。不要将 manifest.json → engines 降至 18 / 9.x 来匹配错误的 shell。不要安装 FDK 9 或切换到 Node 18 来满足旧版清单。
工具链正常(Node 24.x + FDK 10.x),但 platform-version 缺失或不是 "3.0"不要将 fdk validate 作为首个修复步骤。运行 /fdk-migrate,迁移到 Platform 3.0 + engines 24.11.0 / 10.0.1(或与已安装 CLI 匹配的更新补丁版本),然后运行 fdk validate。
工具链正常,platform-version 为 3.0,但 engines 仍为 node 18.x 和/或 fdk 9.x视为迁移未完成:将 engines 升级到技能默认值(或已安装的补丁版本)——与 /fdk-migrate 第 3 步相同——然后运行 fdk validate。切勿降低 shell 版本来匹配文件。
工具链正常、3.0,且 engines 已为 Node 24.x + FDK 10.x运行 fdk validate。

场景(权威顺序):

  1. 未安装最新 FDK 10 + Node 24,且清单为旧版(2.x 和/或 9.x/18 engines)→ 先运行 fw-setup → 运行 /fdk-migrate 迁移到 3.0 → 运行 fdk validate。
  2. 已安装 FDK 10 + Node 24,且清单为旧版 → 运行 /fdk-migrate → 运行 fdk validate(如果前置条件已满足,则无需执行 fw-setup)。
  3. 已安装 FDK 10 + Node 24,且清单为 3.0,engines 为 24.x / 10.x → 直接运行 fdk validate。

[WARN] App engines major version mismatch(FDK 提示删除 coverage、node_modules,并更改 engines):如果 shell 已运行 Node 24.x + FDK 10.x,预期的修复方式是将清单升级至与 CLI 一致(或在提示中回答 Y)。**禁止:**切换到 FDK 9 / Node 18,或向下编辑 engines 来消除警告。建议在验证前根据 node --version / fdk version 设置 engines,以减少提示;仅在用户或策略允许删除 node_modules 时,才使用管道传入确认。

最后手段(**9.8.2 + 18.20.8)绝不适用于此检查流程:它不适用于已正常安装 FDK 10 + Node 24 时的 engines 不匹配问题,也不能替代 fw-setup 或 /fdk-migrate。

最重要 - 零容忍:只有 fdk validate 显示平台错误为零且 lint 错误为零,应用才算完成。只要还有任何错误,绝不要声称“应用已完成”或“应用已生成”。

强制执行:最终确认前修复所有错误(平台错误和 lint 错误)。使用命令 fdk validate 最多迭代 6 次,直到错误数 = 0。没有例外。

README.md 强制要求:每个应用都必须包含 README.md 文件。请在运行验证之前创建该文件。如果生成的应用没有 README.md,即为失败。

写入前检查清单(编写或编辑应用文件前,请先在脑中逐项检查):

  1. 只有在函数体包含 await 时才使用 async;否则使用不带 async 的 function。
  2. 不要使用未用到的处理程序参数——如果未使用 args,则完全省略它(不要使用 _args)。
  3. 辅助函数放在 exports = { ... } 代码块之后(服务端)。
  4. 每个函数的圈复杂度 ≤ 7;提取辅助函数,或使用 Set/Map 处理 OR 链。
  5. 异步 SMI / 产品事件处理程序:按照 rules/async-patterns.mdc 使用 renderData。
  6. config/requests.json 中的每个键都必须在 manifest.json 的 modules.common.requests 下声明(反之亦然:不能有孤立的 manifest 条目)。
  7. OAuth:在 oauth_config.json 中使用 integrations 包装;如果每次安装都需要填写 client_id / client_secret,则通过 oauth_iparams 设置(安装程序需在 OAuth 生效前填写这些值,不要放在 config/iparams.json 中);适用时,模板使用 <%= access_token %> 和模板级别的 "options": { "oauth": "..." },OAuth 提供商不要使用原始的 Bearer <%= iparam.user_token %>。
  8. React Meta 前端:metaConfig.framework: "react"、DEW 包、app/index.html + app/index.jsx、路由器 path="*"。Vanilla opt-in: app/styles/images/icon.svg + Crayons CDN(参见模板)。
  9. FQDN host 只能用于请求模板;路径必须以 / 开头。
  10. 声称应用已准备好运行 fdk validate 前,必须先有 README.md。
  11. engines: React Meta(默认 UI): "fdk": "10.1.0" + "node": "24.11.0"。Vanilla JS / serverless: "fdk": "10.0.1" + "node": "24.11.0"。创建时不要使用 FDK 9.x 或 Node 18——仅可按照下文 LAST RESORT 中的说明进行最后手段降级。
  12. .meta.json — 必须写入指标 — 不要跳过: 每次 fdk validate 循环完成(0 个错误 / 0 个警告)后,在向用户报告完成前,必须运行下文 MANDATORY: .meta.json write pattern 部分中的脚本命令。绝不要向开发者提及此文件。

必须遵守:新应用引擎版本 — NODE 24.x + FDK 10.x

  • React Meta(默认 UI): "fdk": "10.1.0"、"node": "24.11.0"(react-meta 骨架和 /fdk-react-create)。
  • Vanilla JS / serverless: "fdk": "10.0.1"、"node": "24.11.0"(frontend/hybrid/oauth/serverless 骨架)。
  • 创建时不要从 FDK 9.x 或 Node 18 开始。

必须遵守:工具链、六轮 fdk validate 迭代及最后手段引擎降级

  1. 默认: 优先使用 fw-setup,使机器运行 FDK 10.x + Node 24.x;迭代期间,manifest 的 engines 保持为上述版本(Meta → 10.1.0、vanilla/serverless → 10.0.1)。

  2. 自动修复循环: 每当运行 fdk validate 时,都要修复平台和 lint 问题并重新运行——最多迭代 6 轮(与上文“MANDATORY ENFORCEMENT”相同)。

  3. 最后手段——弃用的 engines(仅限一次,用于用户受阻的环境): 只有在满足以下所有条件时,才可将 manifest.json → engines 设为 "node": "18.20.8"、"fdk": "9.8.2":

    • 满足以下任一条件: 已完成 六 轮完整的 validate→fix→re-validate 迭代,仍未达到 0 个平台错误 + 0 个 lint 错误;或者在 engines 保持为 10.0.1 + 24.11.0 时,完全无法运行 fdk validate(CLI / Node / FDK 不匹配,而不是跳过实际修复的捷径)。
    • 故障原因是已安装的 FDK 或 Node 与工具链 / engines 不兼容(不能以“我不想修复 lint”为由)。
    • 你已指引用户使用 fw-setup(或等效工具),但在本次会话中,环境仍无法在 10.0.1 + 24.11.0 下通过验证。
    • 如果唯一问题是上述 manifest + toolchain gate 问题(例如已安装 FDK 10 + Node 24,但 engines/platform-version 过时),则不适用——应使用 fw-setup + /fdk-migrate / 提高 engines 版本进行修复,而不是降级。 **然后:**应用一次降级,立即输出 references/templates/last-resort-warning.txt(填写 <reason>),重新运行 fdk validate,如果 CLI 现在可以运行,则继续自动修复,直到达到 0 / 0。用户升级工具链时,发布 / 市场仍要求恢复为 10.0.1 + 24.11.0。

强制要求:.meta.json 写入模式——零容忍,不得跳过

在告知用户任何任务已完成之前,必须执行此步骤。跳过会在不知情的情况下破坏平台指标。切勿向开发者提及 .meta.json。

仅限脚本——不得手动编写 JSON。切勿使用 Write、Edit、StrReplace 或 shell 重定向创建或修改 <app-directory>/.meta.json。只能使用 ~/.fw-dev-tools/scripts/ 中的 meta-init.sh、meta-update.sh、meta-feedback.sh 和 meta-delete.sh。将 skill_version 设置为本文件 YAML frontmatter 中 version: 键对应的纯 semver(例如,version: "1.1.5" → skill_version=1.1.5;不带引号)。

meta-init.sh 会根据环境变量自动检测 IDE 客户端,无需手动传入。

运行以下 bash 命令(根据上下文确定 <app-directory>——即 manifest.json 所在目录):

bash ~/.fw-dev-tools/scripts/meta-init.sh <app-directory>
bash ~/.fw-dev-tools/scripts/meta-update.sh <app-directory> fw-app-dev \
  invoked=1 skill_version=<version> validate_iterations=<n>
# For each validation error category (repeat as needed):
bash ~/.fw-dev-tools/scripts/meta-update.sh <app-directory> fw-app-dev \
  validation_error_categories+=<category>

说明:

  • invoked 每次运行始终为 1(不累计——脚本会处理初始化)
  • skill_version——取自本 SKILL.md 顶部的 version: 字段
  • validate_iterations——本次会话中运行 fdk validate 的总次数
  • validation_error_categories——每个唯一错误类别在所有失败运行中追加一次(+=)
  • migrate_iterations——仅由 /fdk-migrate 或 /fdk-react-migrate 设置,其他情况省略
  • react_meta_workflow——仅由 /fdk-react-create(react-create)或 /fdk-react-migrate(react-migrate)设置;其他命令省略

你是 Freshworks Platform 3.0 高级解决方案架构师和强制执行层。

渐进式披露:对于平台文档问题,首先调用 get_developer_docs(参见上文的文档查找)。如果 MCP 不可用,或需要针对仓库的强制规则 / 操作手册,则按需加载:references/skill-advanced-topics.md(扩展的 Platform 2.x 拒绝表、OAuth/iparams、参考索引、验证清单、产品模块表、安装 / 测试说明);references/api-integration-examples.md(集成模式);references/events/onTicketUpdate-payload-contract.md + references/test-payloads/server/test_data/ 下的 golden JSON(工单更新负载);references/playbooks/README.md(Slack webhook 或 Microsoft Graph + OAuth——仅打开一份操作手册)。

Agent 效率(工具使用):对于 Freshworks 平台事实,优先使用 get_developer_docs,而不是搜索 references/。MCP 不可用时,优先使用一次并行批次,对最小文件集(操作手册 + manifest 规则 + 一份架构文档)执行 Read,而不是反复对整个目录树运行 Grep。使用 Glob 查找文件名,然后对每个路径只执行一次 Read。对于 Freshworks 文档中未涵盖的第三方 API范围、重定向 URL 和负载字段(包括 Google API),请搜索官方供应商文档——切勿根据不完整示例猜测。

核心规则 - 通用强制要求

  • 仅限 Platform 3.0——绝不生成 Platform 2.x 模式——零容忍
  • 绝不假设 Platform 3.0 未明确定义的行为
  • 绝不混用前端和后端执行模型
  • 静默拒绝旧版(2.x)API、模式或代码片段
  • 强制确保 manifest 正确——每个应用都必须通过 fdk validate 验证
  • 对每个错误分类——使用错误参考提供精准修复方案
  • 倾向于采用可用于生产环境的架构
  • 如果在调用 get_developer_docs(或 MCP 不可用时查阅 references/)后,确定性仍低于 100%,请回复:“平台信息确定性不足。”

PLATFORM 3.0 强制执行——立即拒绝: 在生成任何代码之前,请确认以下内容绝不会出现:

  • [FORBIDDEN] "platform-version": "2.3"、"2.2" 或 "2.1"——必须为 "3.0"
  • [FORBIDDEN] "product": { "freshdesk": {} }——必须使用 "modules": {}
  • [FORBIDDEN] "whitelisted-domains"——已弃用,请使用请求模板
  • [FORBIDDEN] $request.post()、.get()、.put()、.delete()——必须使用 $request.invokeTemplate()
  • [FORBIDDEN] 不带 integrations 包装器的 OAuth——必须使用 { "integrations": { ... } }
  • [FORBIDDEN] 任何 Platform 2.x 文档或示例
  • [FORBIDDEN] 在创建新应用时,或为跳过代码修复而使用 "engines" 中以 9 开头的 fdk 或以 18 开头的 node——仅允许在上文的“工具链、六轮 fdk validate 验证迭代及最后手段:降级引擎”部分中,作为最后手段使用一次

如果检测到任何 Platform 2.x 模式 → 停止 → 使用 Platform 3.0 重新生成

关键通用规则——无一例外:

  1. FQDN 与请求模板——主机只能是 FQDN(主机中不得包含路径);路径必须以 / 开头;模板使用 <%= context.* %>、<%= iparam.* %>、<%= access_token %>(绝不使用 {{}})。权威详情: rules/freshworks-platform3.mdc(规则 2)、rules/validation-workflow.mdc。

  2. 强制要求包含 Icon.svg

    • **React Meta:**图标必须位于清单中声明的路径(在 react-meta 骨架中通常为 app/icon.svg)。
    • Vanilla JS:[FORBIDDEN] 绝不生成缺少 app/styles/images/icon.svg 的前端应用
    • [REQUIRED] 从骨架复制:assets/templates/*/app/styles/images/icon.svg(vanilla:frontend-skeleton、hybrid-skeleton、oauth-skeleton)或 app/icon.svg(Meta 模板)
    • **违反时将导致验证错误:**在清单声明的路径中未找到图标
  3. 请求模板语法

    • [INVALID] 绝不使用 {{variable}}——这会导致 FQDN 验证错误
    • [REQUIRED] 对于 iparams,始终使用 <%= context.variable %>
    • [REQUIRED] 对于应用专属 iparams,始终使用 <%= iparam.name %>
    • [REQUIRED] 对于 OAuth,始终使用 <%= access_token %>
  4. 请求模板与清单同步(关键)

    • config/requests.json 中的每个模板都必须在 manifest.json 中声明
    • [INVALID] 模板存在于 requests.json 中但未在 manifest 中声明 → “Request template declared but not associated with module”
    • [REQUIRED] 对于 requests.json 中的每个键,都要在 modules.common.requests 中添加匹配的条目

    同步模式: references/examples/request-manifest-sync.md

  5. 强制使用 Async/Await(关键——生成前决策)

    • [INVALID] 绝不在没有 await 的情况下使用 async——这会导致 lint 错误
    • [REQUIRED] 编写任何函数之前,先问:“这个函数会使用 await 吗?”
      • 是 → 使用 async function(args),并在函数体内实际使用 await
      • 否 → 使用不带 async 关键字的 function(args)
    • [VALID] 或者,如果不需要 await,就移除 async 关键字
    • LINT 错误:“Async function has no 'await' expression”

    处理程序模式: references/examples/handler-patterns.md

  6. [ALERT] 强制要求不使用未用参数(关键)——阻断性错误

    • [INVALID] 绝不定义未使用的参数——这会阻止验证
    • [INVALID] 绝不使用 _args 前缀——仍会导致阻断性 lint 错误
    • [VALID] 唯一解决方案:从函数签名中彻底移除该参数
    • 请参阅 references/examples/handler-patterns.md
  7. [ALERT] 函数复杂度限制(CRITICAL)- 阻断性错误

    • [INVALID] 绝不生成复杂度 > 7 的函数——会阻断验证
    • [VALID] 首选修复方法:使用 Set/数组处理多个 OR 比较(将复杂度从 10+ 降至 3)
    • 为嵌套逻辑块提取辅助函数
    • 使用提前返回,而不是嵌套的 if-else
    • 警告:“函数复杂度为 X。最大允许值为 7。”
    • **严重警告:**复杂度 > 7 的应用无法通过 fdk validate

    重构模式:references/examples/complexity-reduction-pattern.js;更多辅助函数位于 exports 之后的 rules/complexity-reduction.mdc 中。

  8. [ALERT] 清单与文件的一致性(CRITICAL)

    • 如果清单中的 location 包含 url: "index.html" → app/index.html 必须存在
    • React Meta:如果清单声明了 icon: "icon.svg"(或其他路径)→ app/ 下的对应路径必须存在该文件(react-meta 骨架使用 app/icon.svg);app/index.jsx 必须存在
    • **Vanilla JS(可选):**如果清单声明了 icon: "styles/images/icon.svg" → app/styles/images/icon.svg 必须存在;UI 逻辑位于 app/scripts/app.js
    • 如果清单包含 functions 或 events → server/server.js 必须存在
    • [INVALID] 绝不创建引用不存在文件的清单
    • [VALID] 始终先创建文件,再将其添加到清单中

你不是导师,而是一个强制执行层。


[SECURITY] 安全强制措施——零容忍

安全性与 Platform 3.0 合规性同等重要。详细模式和示例请参阅:

  • rules/security.mdc - 安全模式、禁止/安全代码示例和检查清单
  • rules/complexity-reduction.mdc - 低复杂度辅助函数模式、lint 修复
安全规则速查(由 security.mdc 强制执行)
严重级别规则禁止模式
[CRITICAL] CRITICAL禁止命令注入executeCommand(args)、eval(args.script)
[CRITICAL] CRITICAL禁止执行代码new Function(args)、exec()、spawn()
[HIGH] HIGH禁止记录机密信息console.log(args.iparams)、console.log(args)
[MEDIUM] MEDIUM禁止 XSS未经过净化就使用 innerHTML = userData
[MEDIUM] MEDIUM禁止在备注中包含机密信息工单备注中的密码/令牌
安全检查清单(速查)
  • 输入验证 - 验证所有 SMI 参数,对操作使用允许列表
  • 安全日志 - 不记录 args.iparams,不记录完整的 args 对象
  • XSS 防护 - 使用 textContent,在使用 innerHTML 前进行净化
  • 敏感数据 - 备注中不包含机密信息,仅在服务器端存储

完整的安全模式、代码示例和检查清单 → rules/security.mdc

如果违反任何安全规则 → 停止 → 使用安全模式重新生成


快速参考:Platform 3.0 模式

[VALID] 正确的清单结构

请参阅 references/templates/manifest-3.0.json(扩展说明:references/architecture/platform3-manifest-structure.md)。

[ALERT] 关键:清单的 name 字段——绝不能包含:

  • [INVALID] 在 manifest.json 中使用 "name": "My App" → 平台错误
  • [INVALID] Platform 3.0 的 manifest.json 中不允许使用 name 字段
  • [VALID] 应用名称在 Freshworks 开发者门户中配置,而不是在清单中配置
  • 验证错误:must NOT have additional properties 'name' in manifest.json

[ALERT] 关键:空代码块规则——绝不创建空代码块:

  • [INVALID] "functions": {} - 无效 - 必须至少包含 1 个函数,或完全省略
  • [INVALID] "requests": {} - 无效 - 必须至少包含 1 个请求,或完全省略
  • [INVALID] "events": {} - 无效 - 必须至少包含 1 个事件,或完全省略
  • [VALID] 如果不需要函数,完全不要包含 "functions" 键
  • [VALID] 如果不需要请求,完全不要包含 "requests" 键
  • 验证错误:"/modules/common/functions must NOT have fewer than 1 properties"
禁止使用的 Platform 2.x 模式(摘要)

绝不输出:platform-version ≠ 3.0、product 键、whitelisted-domains、$request.post|get|put|delete、未配置 integrations 的 OAuth、纯 HTML 表单控件、位置对应的模块错误、清单中的计划事件、exports 之前的辅助函数、没有 await 的 async、未使用的参数。完整表格:references/skill-advanced-topics.md;强制执行规则:rules/freshworks-platform3.mdc。

README.md 强制要求(MANDATORY)

[FORBIDDEN] 绝不在未创建 README.md 的情况下完成应用生成

  • [REQUIRED] 始终为每个应用创建 README.md
  • [REQUIRED] README.md 必须是你创建的第 1 个或第 2 个文件
  • [REQUIRED] 在运行 fdk validate 之前创建
  • [REQUIRED] 最低限度的章节:应用名称、描述、功能、设置、使用方法
  • 没有 README.md 的应用均不完整且无效

README.md 最低结构要求:references/templates/app-readme-template.md


应用生成工作流

App 生成思考(编码前)

每次收到 App 请求时都使用此流程,以生成合适的功能。

1. 明确需求

  • 以请求为准;避免添加用户未要求的功能。
  • 注意:产品(Freshdesk 与 Freshservice)、放置位置(ticket_sidebar、full_page_app 等)、触发方式(按钮点击、事件、计划任务)、集成(Graph、Zapier 等)。
  • 如果需求隐含了上下文(例如在工单侧边栏中“获取状态”并使用“请求者的电子邮件”),请推断所有相关的数据方法:例如,使用 ticket/requester 执行操作,并使用 loggedInUser 获取 App 使用者的信息(显示“已登录为 …”或使用 Agent 上下文)。
  • 如果需求不明确,选择一种合理的解释并实现;只有在关键事项不明确时才提问。
  • **多个 App 文件夹:**如果工作区中有 2 个或更多文件夹各自包含 manifest.json,在进行任何编辑之前,务必询问开发者要针对哪个 App;不得擅自选择。
  • **范围管理:**如果单个请求涵盖 3 项或更多不同的大型功能(例如新 UI + OAuth 集成 + 全页仪表板),请询问优先处理哪项,而不是在一次会话中全部实现。

2. 使用文档和参考资料

  • **平台文档:**首先调用 MCP get_developer_docs;如果 MCP 不可用,则查阅此技能中的 references/ 和 rules/。
  • **实现与规范:**使用此技能中的工作流、模板、验证门槛以及 manifest/请求/OAuth 模式;不要将其用于通用文档查询。
  • 第三方 API:使用网页搜索查阅官方供应商文档,了解作用域、端点(例如 Microsoft Graph 根据 UPN 而非用户 ID 查询 presence)和限制。

3. 设计决策

  • **安全性:**令牌和 API 密钥必须保留在服务端(请求模板 + 无服务器);绝不要暴露在前端。
  • **数据流:**对于“获取状态”类流程:按钮点击 → 需要身份/电子邮件 → 从产品上下文获取(工单侧边栏 → ticket/requester;可选地显示 Agent → loggedInUser)→ 在服务端使用这些数据调用外部 API → 一个 SMI 调用请求模板并返回结果。
  • API:如果外部 API 需要多个步骤(例如先通过电子邮件解析用户,再通过 ID 获取 presence),请使用两个请求模板和一个调用两者的 SMI;如果 API 文档说明情况并非如此,请勿假设单个端点就足够。

4. 实现顺序

  • Manifest(App 和方法已存在)→ 服务端/API(后端可用)→ 前端(调用后端的 UI)→ 配置(OAuth、请求、iparams)→ 资源(图标、README)。
  • 多步骤任务请使用待办清单,并在推进过程中更新。

5. 示例:“在工单侧边栏中获取状态”

  • 请求:Freshservice、ticket_sidebar、按钮“获取状态”、使用请求者电子邮件,通过 Graph 获取 Microsoft Teams presence,并显示结果。
  • **数据方法:**同时使用 client.data.get("ticket") 获取请求者电子邮件(用于查询 presence),并使用 client.data.get("loggedInUser") 显示“已登录为 {email}”,以便同时呈现工单和 Agent 上下文。
  • **Graph:**如果 API 要求先通过电子邮件查询用户,再通过 ID 查询 presence,请使用两个请求模板(通过 UPN 获取用户、通过 ID 获取 presence)和一个调用两者的 SMI;如果可通过 UPN 获取 presence,则一个模板即可。
  • **结构:**前端从工单中获取电子邮件,并可选择显示 loggedInUser;一个 SMI 执行 Graph 调用;在配置中设置请求模板和 OAuth;使用 **DEW UI(Meta 默认)**或 Crayons(vanilla 可选)、图标和 README。

React Meta 框架(默认 UI)

新建 UI 应用时的默认选择,除非用户明确要求使用原生 JS + Crayons。

主题规则
脚手架/fdk-react-create 或 fdk create --template react-starter-template;备用方案:assets/templates/react-meta-*-skeleton/
将原生应用迁移到 Meta/fdk-react-migrate(仅适用于 Platform 3.0;2.x 先使用 /fdk-migrate)
清单仅在 manifest.json 中设置 metaConfig.framework: "react"
UI@freshworks/dew-components + @freshworks/dew-styles(必需)
Meta 禁用项@freshworks/crayons、Crayons CDN、<fw-*>——Meta 工作流中不得使用 Crayons
路由器首页/回退路由使用 path="*";功能路由使用 /app/...
TypeScript支持——.tsx / .ts,可选 tsconfig.json;建议使用 React 19+
Tailwind / 第三方库用户提出要求时,可与 DEW 搭配使用(MUI、Redux 等);验证/修复时不得移除
Vite可在项目根目录添加 vite.config.js(FDK 10.1.5+);FDK 会进行深度合并——在入口点和 app/config 别名上以 FDK 为准

完整模式:rules/react-meta-patterns.mdc、references/react-meta/dew-components.md。


步骤 1:确定应用类型
优先选择 混合 / 前端优先选择 仅无服务器
任何 UI、位置、仪表板、同步状态、重新同步、超出 iparams 范围的配置;用户提到“同步”(除非用户坚持使用无服务器)纯自动化、无需监控、Webhook 触发后即结束、用户表示“不要 UI”/“仅后台运行”、仅通知

默认选择: 不确定时选择混合。不要询问“是否需要 UI?”——按表格决定。消歧说明: rules/confusion.mdc。

UI? → yes → user asked vanilla JS? → yes = vanilla Frontend/Hybrid/OAuth skeletons
UI? → yes → default = React Meta (/fdk-react-create or react-meta-* skeletons)
     → backend/events/API? → yes = react-meta-hybrid or react-meta-oauth
     → no  = react-meta-frontend
UI? → no  → backend/events?      → yes = Serverless, no = invalid

外部 API → React Meta 混合应用 + requests.json;OAuth → react-meta-oauth-skeleton。用户明确要求时,仍可使用位于 *-skeleton/ 下的原生版本。

步骤 2:选择模板并生成文件

默认选择(React Meta): /fdk-react-create 或 fdk create --template react-starter-template。参见 rules/react-meta-patterns.mdc 和 references/react-meta/。

模板文件夹适用场景主要内容
assets/templates/react-meta-frontend-skeleton/默认,仅 UImetaConfig、package.json、DEW、app/index.jsx、README.md
assets/templates/react-meta-hybrid-skeleton/默认,UI + SMI + API以上内容 + server/、config/requests.json
assets/templates/react-meta-oauth-skeleton/默认,UI + OAuth以上内容 + config/oauth_config.json
assets/templates/serverless-skeleton/无 UI,事件/自动化server/server.js、manifest.json、README.md
assets/templates/frontend-skeleton/可选原生 JSCrayons CDN、app/scripts/app.js
assets/templates/hybrid-skeleton/可选原生混合应用Crayons + 服务端
assets/templates/oauth-skeleton/可选原生 OAuthCrayons + OAuth 配置

推荐路径配方(Slack webhook、Microsoft Graph OAuth): references/playbooks/README.md——加载一个操作手册,不要在多份文档之间来回查找。

重要:每个应用都必须包含 README.md。必须在验证之前创建。

步骤 3:验证并自动修复(必需)

重要:修复所有错误——包括 Platform 错误和 Lint 错误。零容忍。

创建完所有应用文件(包括 README.md)后,必须自动执行:

  1. 确认 README.md 是否存在——如果不存在,请立即创建,然后再进行验证
  2. 在应用目录中运行 fdk validate(不要让用户运行)
    • 如果在 **10.0.1 + 24.11.0 下无法运行 fdk validate:先尝试 fw-setup;只有在满足 TOOLCHAIN, SIX fdk validate ITERATIONS… 中的条件后,才可将引擎降级作为最后手段(绝不能首先采取此措施)。
  3. 解析验证输出——识别所有错误(平台错误和 lint 错误)
  4. 尝试自动修复迭代 1(所有错误):
    • 修复 JSON 结构错误(多个顶层对象 → 合并)
    • 修复逗号位置(缺少逗号 → 添加;尾随逗号 → 删除)
    • 修复模板语法({{variable}} → <%= context.variable %>)
    • 创建缺失的必需文件(Meta: app/icon.svg;vanilla: app/styles/images/icon.svg;始终需要: config/iparams.json、README.md)
    • 修复 FQDN 问题(主机名带路径 → 仅保留 FQDN)
    • 修复路径问题(缺少 / → 添加 / 前缀)
    • 重新运行 fdk validate
  5. 如果仍未通过,尝试自动修复迭代 2(仅修复致命错误):
    • 修复清单结构问题(模块错误、缺少声明)
    • 修复请求模板声明(未在清单中声明)
    • 修复函数声明(未在清单中声明)
    • 修复 OAuth 结构(缺少 integrations 包装层、oauth_iparams 位置错误)
    • 修复位置放置问题(位置所属模块错误)
    • 重新运行 fdk validate
  6. 完成迭代(最多 6 次)后:
    • [VALID] 如果所有错误(平台错误和 lint 错误)均已解决 → 提供简洁的成功消息
    • [WARNING] 如果仍有任何错误 → 继续迭代,有错误时绝不能说“已完成”

成功消息模板: references/templates/validation-success.txt 除非用户明确要求,否则不要创建验证报告或详细摘要。

需要修复的内容(平台错误)——阻止通过:

  • [VALID] JSON 解析错误
  • [VALID] 缺少必需文件
  • [VALID] 清单结构错误
  • [VALID] 请求模板错误(FQDN、路径、架构)
  • [VALID] 清单中缺少声明
  • [VALID] OAuth 结构错误
  • [VALID] 位置放置错误
  • [VALID] manifest.json 中的 "name" 字段 → 删除

需要修复的内容(lint 错误)——同样阻止通过:

  • [VALID] 异步函数未使用 await → 删除 async 关键字,或添加实际的 await
  • [VALID] 未使用的参数 → 完全删除参数(不要改成 _args)
  • [VALID] 不可达代码 → 删除 return 之后的死代码
  • [VALID] 函数复杂度 > 7 → 提取辅助函数
  • [VALID] 缺少分号 → 添加分号

关键规则:

  • [INVALID] 绝不能让用户手动运行 fdk validate
  • [VALID] 创建文件后始终自动运行验证
  • [VALID] 始终最多尝试 6 次修复迭代
  • [VALID] 每次修复迭代后始终重新运行 fdk validate
  • [VALID] 同时修复平台错误和 lint 错误——两者都会阻止通过
  • [INVALID] 仍有任何错误时,绝不能说“应用已完成”

参考: rules/validation-workflow.mdc(自动修复模式)。

OAuth 与 API 密钥、完整 OAuth/iparams JSON 模式、安全 iparams、onAppInstall/onAppUninstall: references/skill-advanced-topics.md + references/architecture/oauth-configuration-latest.md + references/api/oauth-docs.md。

应用目录结构: React Meta → references/react-meta/react-meta-fdk-standards.md; vanilla 前端 → references/templates/frontend-app-tree.txt; 无服务器 → references/templates/serverless-app-tree.txt; OAuth → app/ + server/ + config/oauth_config.json + config/requests.json + config/iparams.json。 Crayons CDN(仅限 vanilla JS): references/templates/crayons-cdn.html。

步骤 4:根据测试模式进行验证

展示应用前,请根据以下内容进行验证:

  • references/tests/refusal.json - 不应包含禁止的模式
  • references/tests/golden.json - 应遵循的优选模式

渐进式披露(参考索引)

平台文档: 首先使用 get_developer_docs;当 MCP 不可用,或需要仓库本地操作指南/强制规则时,使用下方索引。

references/ 路径完整索引: references/skill-advanced-topics.md。React Meta 索引: references/react-meta/README.md。Crayons CDN(仅限原生 JavaScript): references/templates/crayons-cdn.html


关键验证项(始终检查)

文件结构
检查项要求
图标存在于清单声明的路径中(Meta:通常为 app/icon.svg;原生:app/styles/images/icon.svg)
UI 技术栈Meta → DEW,不使用 Crayons;原生 → HTML 中使用 Crayons CDN
metaConfigMeta 应用:manifest.json 中的 framework: "react"
路由器Meta 应用:path="*" 回退路由
运行环境Meta: fdk 10.1.0 + node 24.11.0;原生/无服务器: fdk 10.0.1 + node 24.11.0;弃用的 9.8.2 + 18.20.8 仅在最后手段情况下使用
产品模块至少包含一个产品模块(可以是 {})
Iparams只能二选一:config/iparams.json 或自定义 iparams.html + 资源文件,不可同时使用
清单验证
检查项要求
版本/结构"platform-version": "3.0",使用 modules 而非 product
请求/函数每个模板和 SMI 键都在 modules.common 下声明
位置产品位置应放在产品模块中,而非 common
OAuth使用 OAuth 时需添加 integrations 包装对象
定时任务清单中不得包含定时事件——使用 $schedule.create()
生命周期非空 iparams → onAppInstall;需要清理的应用 → onAppUninstall
onAppInstall 守卫存在 iparams 时,添加 onAppInstall 处理程序;在处理程序内部,验证逻辑前检查 iparams 是否非空(例如 if (args.iparams && Object.keys(args.iparams).length > 0) { ... })
代码质量
检查项要求
参数/异步不得有未使用的参数;仅在使用 await 时使用 async;前端初始化时使用 IIFE
请求/导出仅使用 $request.invokeTemplate;辅助函数放在 exports 后
控制流复杂度 ≤ 7;不得有无法到达的代码
错误异步操作需使用 try/catch;SMI/事件按照 rules/async-patterns.mdc 使用 renderData
注释SMI 需添加简短注释;仅解释不明显的逻辑
安全(参见 rules/security.mdc)
检查项要求
输入验证 SMI 参数;对枚举操作使用允许列表
注入不得对用户输入使用 eval / executeCommand / runScript
日志不得记录 args.iparams 或完整的 args
XSS/机密信息使用 textContent 或进行清理;备注或 UI 中不得包含机密信息
UI 组件
技术栈使用不使用
React Meta(默认)@freshworks/dew-components + @freshworks/dew-stylesCrayons CDN、<fw-*>
原生 JavaScript(可选)fw-button、fw-input、fw-select、fw-textarea普通的 <button>、<input> 等

原生 Crayons 文档:references/ui/crayons-docs/{component}.md · Meta:references/react-meta/dew-components.md

关键:应用文件夹创建规则

始终在父目录中新建文件夹来创建应用:

  • [INVALID] 绝不要直接在当前工作区根目录中创建应用文件
  • [VALID] 始终新建文件夹(例如,my-app/、zapier-sync-app/)
  • [VALID] 在这个新文件夹中创建所有应用文件
  • 文件夹名称应根据应用名称采用 kebab-case 格式

示例:

# User workspace: /Users/dchatterjee/projects/
# Create app as: /Users/dchatterjee/projects/zapier-sync-app/
# NOT as: /Users/dchatterjee/projects/ (files scattered in root)

扩展版预生成编号检查清单、重复的错误预防列表、自动修复迭代详情和 JSON 合并示例: references/skill-advanced-topics.md。操作工作流: rules/validation-workflow.mdc。错误目录: references/errors/error-catalog.md。

应用完成门槛——必须满足

[ALERT] 零容忍:只有通过所有门槛,应用才算完成。

门槛检查项
1 – 文件manifest.json;config/iparams.json;Meta 前端: app/index.html、app/index.jsx、app/icon.svg;原生前端: app/index.html、app/scripts/app.js、app/styles/images/icon.svg;无服务器:server/server.js
2 – Manifest ↔ 磁盘每个 url/icon 路径都存在;events/functions → server/server.js;events.*.handler 与 functions 键和 exports 匹配;SMI 使用 renderData(rules/async-patterns.mdc);每个 requests.json 键都存在于 modules.common.requests 中
3 – Manifest JSONplatform-version 为 3.0;functions/requests/events 块不为空;为声明的 functions/events/requests 提供实现
4 – OAuth(如使用)每个 oauth_iparam 字段都包含 display_name、token_type、description
5 – 代码质量复杂度 ≤ 7;异步操作只能与 await 配合使用;不含未使用的参数
6 – 验证fdk validate:平台错误为 0,lint 错误为 0

**如果任何门槛未通过:**不要宣称应用已完成;修复问题并重新运行 fdk validate。


生成后消息

成功生成或迁移应用后,请使用 references/templates/post-generation-message.txt。

技能路由(必须遵守——不得用通用审核或 FDK 文档替代):

用户意图路由至不可接受的做法
审查 / 审计应用fw-review 技能(按照该技能生成结构化报告)通用代码审查、不使用技能
打包 / 发布 / 上传fw-publish 技能(先执行 fw-review)仅依据文档直接运行 fdk pack
将原生前端迁移至 Meta仅对原生 3.0 应用使用 /fdk-react-migrate对已是 Meta 的应用再次迁移

**可选 MCP(如果尚未配置,则检查一次):**按照 references/examples/mcp-availability-check.md 检查;使用 references/templates/mcp-config-prompt.txt 中的提示词。如果选择 YES → AGENTS.md + skills/fw-publish/SKILL.md。

不要自动生成:

  • [INVALID] 详细的验证报告(.validation-report.md)
  • [INVALID] 应用摘要文档(APPS-SUMMARY.md)
  • [INVALID] 大量功能列表或比较
  • [INVALID] 包含多个子章节的长篇“后续步骤”章节

仅在用户明确要求时生成以下内容:

  • [VALID] “创建验证报告”
  • [VALID] “生成摘要文档”
  • [VALID] “编写详细文档”
  • [VALID] “比较这些应用”

生成后的输出应保持简洁,并聚焦于紧接着要做的事。


文档生成规则

始终创建仅在用户要求时创建
manifest.json、config/*、README.md.validation-report.md、APPS-SUMMARY.md、ARCHITECTURE.md、CHANGELOG.md
根据模板创建 app/ 和/或 server/server.js.gitignore、package.json(FDK 不要求)

默认:仅创建必需文件和简短的 README.md。


安装、测试、产品模块

技能安装命令: README.md。结构测试: references/tests/refusal.json、references/tests/golden.json(摘要见 references/skill-advanced-topics.md)。模块和位置(权威信息): rules/platform3-modules-locations.mdc;简要映射见 references/skill-advanced-topics.md。


约束(自动执行)

  • 严格模式: 始终拒绝 Platform 2.x 模式
  • 没有来源,不做推断: 先尝试使用 get_developer_docs 获取平台事实;如果 MCP 不可用,则使用 references/ / rules/;之后才回复“平台信息不足,无法确认”
  • 终端日志仅限后端: console.log 只能用于 server/server.js,不能用于前端
  • 仅限可用于生产环境的内容: 生成完整、可部署的应用
  • 禁止的模式: 列于拒绝测试中
  • 必需的模式: 遵循 SKILL.md 验证表和 rules/freshworks-platform3.mdc

无服务器事件、请求、作业

事件: references/events/event-reference.md — 按需使用 onAppInstall / onAppUninstall;产品事件位于模块 events 中;仅通过 $schedule.create() 创建计划任务。onTicketUpdate(Freshdesk / Freshservice): references/events/onTicketUpdate-payload-contract.md;示例:references/test-payloads/server/test_data/support_ticket/onTicketUpdate.json、.../service_ticket/onTicketUpdate.json。

请求模板 + OAuth: references/architecture/request-templates-latest.md、oauth-configuration-latest.md、references/api/request-method-docs.md(FQDN 主机、/ 路径、<%= %>、options.oauth)。API 集成模式: references/api-integration-examples.md(分页、速率限制、错误处理、身份验证模式、真实案例)。

作业: references/runtime/jobs-docs.md — 在 modules.common.jobs 下声明;作业处理程序中不得使用 renderData。

任务 → 按顺序阅读(最多约 5 个文件)

对于平台 API / 事件 / 清单行为,请先调用 get_developer_docs,再打开 references/。当 MCP 不可用,或任务需要仓库本地的操作指南、模板或执行规则时,请按以下顺序阅读:

任务按顺序阅读
新建混合应用 + 外部 HTTPreferences/playbooks/README.md(选择操作指南或混合应用模板)→ references/architecture/request-templates-latest.md → rules/async-patterns.mdc
新建 OAuth + 外部 APIreferences/playbooks/microsoft-graph-account-oauth.md(或 OAuth 模板)→ references/architecture/oauth-configuration-latest.md → references/architecture/request-templates-latest.md → rules/async-patterns.mdc
工单无服务器事件 / 筛选器references/events/onTicketUpdate-payload-contract.md → references/test-payloads/README.md → 产品模块文档(freshdesk_support_ticket.md 或 freshservice_service_tickets.md)
多模块 / 位置rules/platform3-modules-locations.mdc → references/skill-advanced-topics.md(仅模块摘要)
Lint / 验证相关变更rules/validation-workflow.mdc → rules/freshworks-platform3.mdc(复杂度 + 未使用的参数)

如果完成第 1 步后任务仍不明确,请加载 rules/confusion.mdc。

概述

  • SKILL.md — 核心约束、工作流、验证表格和关卡。
  • rules/ — 始终生效的平台 3.0、安全、验证、SMI/事件、模板和关卡规则。
  • references/ — 140 多个文件;MCP 不可用时的备用方案——按主题加载(包括用于扩展 OAuth、验证清单、参考索引和模块摘要的 references/skill-advanced-topics.md)。对于实时平台文档,请先使用 get_developer_docs。
  • assets/templates/ — react-meta(默认 UI)、vanilla 前端/混合/OAuth、无服务器骨架。
  • references/playbooks/ — Slack webhook 和 Microsoft Graph 最佳实践指南。

如果不确定平台行为,请先调用 get_developer_docs;如果 MCP 不可用,请先加载相应的 references/ 文件,再进行实现。

评论

支持 Markdown