关于 ping-orchestration-sdk-router
用于处理含糊 Ping Identity SDK 请求的路由技能。它扫描项目以识别支持的平台和 ForgeRock 引用,再交由对应的上层技能处理;检测结果有歧义时会先询问用户。
主要功能
- 01检测 Android、iOS、JavaScript 和 React Native 项目
- 02检查 ForgeRock SDK 引用
- 03路由到平台对应的上层技能
- 04在多平台或迁移场景中询问选择
- 05可扩展的平台注册表与探测规则
适用场景
- 01为未明确平台的 Ping SDK 请求分流
- 02在多平台仓库中选择目标平台
- 03决定迁移 ForgeRock 或开发新 SDK 功能
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ pingidentity/ ping-sdk-agent-skills --skill ping-orchestration-sdk-router安装后在 Claude Code 中输入/ping-orchestration-sdk-router确认已加载。
详细介绍
Ping SDK 路由器
作为处理模糊 Ping Identity SDK 请求的首要入口。探测工作目录以检测平台(Android、iOS、JavaScript、React Native)和 ForgeRock SDK 引用,然后将请求交给此插件中最合适的伞形技能。添加新平台时,只需编辑下方平台注册表中的一行,决策树便会自动识别。
平台注册表
此表是路由的唯一事实来源。下方决策树通过 Status 引用此表。若要添加新平台,请将其状态从 placeholder 更改为 active,添加探测代码块,即可完成。
| 平台 | 目标技能 | 状态 | 备注 |
|---|---|---|---|
| Android | ping-orchestration-android-sdk | active | — |
| iOS | ping-orchestration-ios-sdk | active | — |
| JavaScript(Web) | ping-orchestration-javascript-sdk | active | — |
| React Native | ping-orchestration-react-native-sdk | active | — |
| ForgeRock 迁移 | forgerock-to-ping-journey-migration | active | 跨平台;存在 ForgeRock 引用时,优先于平台路由 |
探测代码块
对于注册表中的每个 active 行,运行对应平台的探测。探测范围有限——限制目录深度,并忽略生成目录和依赖目录。
通用忽略模式(应用于每次探测): node_modules、.git、build、dist、Pods、.gradle、DerivedData、.next、out、target。
Android 探测
文件标记(任一项即可):
find . -maxdepth 4 \
\( -name node_modules -o -name .git -o -name build -o -name dist -o -name Pods -o -name .gradle -o -name DerivedData -o -name .next -o -name out -o -name target \) -prune -o \
\( -name "build.gradle" -o -name "build.gradle.kts" -o -name "settings.gradle" -o -name "settings.gradle.kts" -o -name "AndroidManifest.xml" \) -print
结果非空表示检测到 Android。
iOS 探测
文件标记(任一项即可):
find . -maxdepth 4 \
\( -name node_modules -o -name .git -o -name build -o -name dist -o -name Pods -o -name .gradle -o -name DerivedData -o -name .next -o -name out -o -name target \) -prune -o \
\( -name "Package.swift" -o -name "*.xcodeproj" -o -name "*.xcworkspace" -o -name "Podfile" \) -print
结果非空表示检测到 iOS。
ForgeRock 探测(跨平台)
内容标记(源文件或构建文件中匹配任一项即表示存在 ForgeRock):
grep -RIl --max-count=1 \
--exclude-dir={node_modules,.git,build,dist,.gradle,Pods,DerivedData,.next,out,target} \
-E "forgerock-android-sdk|forgerock-ios-sdk|@forgerock/javascript-sdk|FRAuth|FRSession" .
结果非空表示存在 ForgeRock SDK 引用,应采用迁移路径。
JavaScript(Web)探测
文件/内容标记(任一项即可):
find . -maxdepth 4 \
\( -name node_modules -o -name .git -o -name build -o -name dist -o -name Pods -o -name .gradle -o -name DerivedData -o -name .next -o -name out -o -name target \) -prune -o \
-name "package.json" -exec grep -l '"react"\|"vue"\|"@angular/core"\|"vite"' {} \; 2>/dev/null
结果非空表示检测到 JavaScript(Web)项目。
React Native 探测
文件/内容标记(任一项即可):
test -f package.json && grep -qE '"react-native"[[:space:]]*:' package.json && echo "react-native detected"
结果非空表示检测到 React Native 项目。
决策树
调用此技能时,按顺序执行以下阶段。
阶段 1:探测
- 运行 ForgeRock 探测(始终运行——它是跨平台探测)。
- 对 平台注册表中每个
Status: active的行(不包括 ForgeRock 迁移),运行对应平台的探测。 - 记录哪些探测命中(输出非空),哪些未命中。
阶段 2:分类
按顺序应用规则。命中第一条规则后即停止。
- 存在 ForgeRock + 检测到平台 — ForgeRock 探测命中,且至少有一个 active 平台探测命中。
- 如果恰好一个平台探测命中:使用该平台名称,询问 ForgeRock 分支提示词(见备用提示词)。如果用户选择迁移,则路由至
forgerock-to-ping-journey-migration;否则路由至该平台的伞形技能。 - 如果有两个或更多平台探测命中:先询问多平台提示词(仅列出检测到的平台),然后针对选定的平台询问 ForgeRock 分支提示词。这样可确保迁移针对正确的代码库。
- 由于存在 ForgeRock 引用时,用户几乎总是希望迁移,因此此规则优先于普通的多平台检测。
- 如果恰好一个平台探测命中:使用该平台名称,询问 ForgeRock 分支提示词(见备用提示词)。如果用户选择迁移,则路由至
- 多平台单体仓库 — 两个或更多 active 平台探测命中(且未触发规则 1)。询问多平台提示词。路由至用户所选平台的伞形技能。
- 检测到单个 active 平台 — 恰好一个 active 平台探测命中。路由至该平台的伞形技能。
- 检测到 React Native(单个平台) — React Native 探测命中,且没有其他 active 平台探测命中。路由至
ping-orchestration-react-native-sdk。 - 未检测到任何内容 — 没有探测命中。询问未检测到内容提示词,仅列出
Status: active的平台。将占位平台标注为“即将推出”。
阶段 3:移交
按以下确切格式打印单行摘要:
Detected <signals> → routing to <skill-name>.
其中:
<signals>是探测结果的简短逗号分隔列表,例如:Android (build.gradle.kts), no ForgeRock refs。<skill-name>是目标技能 frontmatter 中name字段的原样内容。
然后通过 Skill 工具调用目标技能。不要内联目标技能的内容。不要转述其指令。干净利落地移交。
路由矩阵
一个简明的查找表,Agent 可在第 2 阶段分类后进行匹配。
| 探测结果 | 路由至 |
|---|---|
| 仅 ForgeRock + Android | 提问分支提示词 → forgerock-to-ping-journey-migration 或 ping-orchestration-android-sdk |
| 仅 ForgeRock + iOS | 提问分支提示词 → forgerock-to-ping-journey-migration 或 ping-orchestration-ios-sdk |
| 仅 ForgeRock + JavaScript | 提问分支提示词 → forgerock-to-ping-journey-migration 或 ping-orchestration-javascript-sdk |
| ForgeRock + Android + iOS | 提问多平台提示词 → 然后针对所选平台提问分支提示词 |
| ForgeRock + Android + JavaScript | 提问多平台提示词 → 然后针对所选平台提问分支提示词 |
| ForgeRock + iOS + JavaScript | 提问多平台提示词 → 然后针对所选平台提问分支提示词 |
| ForgeRock + Android + iOS + JavaScript | 提问多平台提示词 → 然后针对所选平台提问分支提示词 |
| 仅 Android | ping-orchestration-android-sdk |
| 仅 iOS | ping-orchestration-ios-sdk |
| 仅 JavaScript(web) | ping-orchestration-javascript-sdk |
| Android + iOS(无 ForgeRock) | 提问多平台提示词 → 所选总入口技能 |
| Android + JavaScript(无 ForgeRock) | 提问多平台提示词 → 所选总入口技能 |
| iOS + JavaScript(无 ForgeRock) | 提问多平台提示词 → 所选总入口技能 |
| 仅 React Native | ping-orchestration-react-native-sdk |
| React Native + JavaScript(无 ForgeRock) | 提问多平台提示词 → 所选总入口技能 |
| 未命中任何探测项 | 提问未检测到提示词 → 所选总入口技能 |
移交模板
调用目标技能前,使用以下确切格式发布公告:
Detected <signals> → routing to <skill-name>.
示例:
检测到 Android (build.gradle.kts),未发现 ForgeRock 引用 → 路由至 ping-orchestration-android-sdk。检测到 iOS (Package.swift) + ForgeRock 引用 (Podfile 中的 forgerock-ios-sdk) → 路由至 forgerock-to-ping-journey-migration。检测到 React/Vite 项目 (package.json),未发现 ForgeRock 引用 → 路由至 ping-orchestration-javascript-sdk。
发布公告后,通过 Skill 工具调用所选技能。不要自行开始执行相关工作。
后备提示词
当分类结果要求提问时,使用以下原样提示词。只能调整方括号中的 <…> 占位符。
ForgeRock 分支提示词
我在这个
<platform>项目中发现了 ForgeRock SDK 引用。有两种方案:
- 迁移现有的 ForgeRock 代码至 Ping Identity Journey SDK(将旧代码保留为注释,并生成迁移报告)。
- 构建新功能:在现有代码旁添加 Ping SDK 功能(不进行迁移)。
你想选择哪种方案?
如果选择迁移 → 路由至 forgerock-to-ping-journey-migration。
如果选择构建新功能 → 路由至对应平台的总入口技能(ping-orchestration-android-sdk、ping-orchestration-ios-sdk 或 ping-orchestration-javascript-sdk)。
多平台提示词
我在此目录中检测到了多个平台(
<list of detected platforms>)。你想处理哪一个?
路由至所选平台的总入口技能。
JavaScript 的当前路由
JavaScript 现在是一个启用的平台。当 JavaScript 探测命中时,打印移交行,并通过 Skill 工具调用 ping-orchestration-javascript-sdk——除非存在歧义(例如也检测到 ForgeRock 引用),否则无需提问。
未检测到项目
我无法在此目录中检测到受支持的项目类型。你要为哪个平台构建项目?
- Android(
ping-orchestration-android-sdk)- iOS(
ping-orchestration-ios-sdk)- JavaScript / Web(
ping-orchestration-javascript-sdk)- React Native(
ping-orchestration-react-native-sdk)
路由到所选的总览技能。
添加新平台
当发布新的总览技能时(例如 ping-orchestration-react-native-sdk),只需贡献者编辑一处即可启用该平台的路由。步骤如下:
- 更新注册表行:在平台注册表表格中,将
Status从placeholder改为active。如果目标技能名称有变,也要一并更新。 - 添加或填写探测代码块:在探测代码块部分中,提供文件标记(
find命令)或内容标记(grep命令),以便唯一识别此类项目。应用通用忽略 glob。 - (可选)更新回退提示词:如果平台的用户可见名称需要更改。
无需编辑决策树、路由矩阵和交接模板。它们会根据 Status 引用注册表,因此会自动纳入新平台。
要移除平台:将其行的 Status 改为 placeholder(保留该行以供查看,但禁用路由)。
非目标
此技能不会执行以下任何操作——这些工作由目标技能负责:
- 搭建项目脚手架、生成代码或编写 SDK 配置。
- 在多次运行之间缓存检测结果。
- 检测注册表中未列出的框架变体(KMP、Flutter、Tauri、Electron 等)。
- 修改用户项目中的任何文件。
- 路由到 6 个平台 × SDK 技能(
ping-orchestration-{android,ios,reactjs}-{journey,davinci}-sdk)——它们可作为 JavaScript 占位项的临时替代方案访问,但路由器会将其视为超出范围的路由目标。