mcpField
D
detect

detect

github.com/launchdarkly开发282.3k 次安装1 天前更新
代码仓库

关于 detect

detect 是 LaunchDarkly SDK 安装流程中的仓库检查技能,会在集成前识别技术栈、包管理器、应用入口和现有 SDK 配置,并据此引导后续步骤。

主要功能

  1. 01识别语言和框架
  2. 02检测包管理器与应用入口
  3. 03识别单体仓库布局
  4. 04判断应用证据是否充分
  5. 05搜索现有 LaunchDarkly 配置

适用场景

  1. 01安装 SDK 前检查项目
  2. 02选择单体仓库中的集成目标
  3. 03确认是否已有 LaunchDarkly 配置

安装

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

$npx skills add https://github.com/launchdarkly/ai-tooling --skill detect

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

详细介绍

检测仓库技术栈(安装 SDK)

安装任何内容之前,必须先了解项目。确定项目使用的技术栈,以及是否已包含 LaunchDarkly。

此技能隶属于 LaunchDarkly SDK 安装(入门);父级的 Step 1 是 detect。下一步: 除非决策树指示执行其他操作,否则前往生成集成计划。

1. 语言和框架

查找下方的指示文件(以及相关的根目录布局),然后阅读相关清单文件,以推断语言和框架。

查找以下文件以识别技术栈:

文件语言/框架
package.jsonJavaScript/TypeScript(检查是否使用 React、Next.js、Vue、Angular、Express、React Native、Electron 等)
requirements.txt、pyproject.toml、Pipfile、setup.pyPython(检查是否使用 Django、Flask、FastAPI)
go.modGo(检查是否使用 Gin、Echo、Fiber、Chi)
pom.xml、build.gradle、build.gradle.ktsJava/Kotlin(检查是否使用 Spring、Quarkus、Android)
GemfileRuby(检查是否使用 Rails、Sinatra)
*.csproj、*.sln、*.fsproj.NET/C#(检查是否使用 ASP.NET、MAUI、Xamarin、WPF、UWP)
composer.jsonPHP(检查是否使用 Laravel、Symfony)
Cargo.tomlRust(检查是否使用 Actix、Axum、Rocket)
pubspec.yamlFlutter/Dart
Package.swift、Podfile、*.xcodeprojSwift/iOS
AndroidManifest.xmlAndroid(另检查 build.gradle 中是否包含 com.android)
rebar.config、mix.exsErlang/Elixir
CMakeLists.txt、Makefile(包含 C/C++ 特征)C/C++(检查 #include 特征)
*.cabal、stack.yamlHaskell
*.lua、rockspecLua
manifest、*.brsRoku(BrightScript)
wrangler.tomlCloudflare Workers(边缘 SDK)
包含边缘函数的 vercel.jsonVercel Edge(边缘 SDK)

阅读依赖文件以确定具体框架。对于 package.json,同时检查 dependencies 和 devDependencies。

如果无法识别语言或框架:

D5 -- 阻塞: 立即调用结构化提问工具。

  • question: "我无法检测项目使用的语言或框架。你想使用哪个 SDK?"
  • options: 将 SDK 配方 中提供的 SDK 作为可选项列出。
  • STOP. 不要将问题作为文本写出。用户选择选项前不要继续。
2. 包管理器

确定项目如何安装依赖:

指示文件包管理器
package-lock.jsonnpm
yarn.lockyarn
pnpm-lock.yamlpnpm
bun.lockbbun
Pipfile.lockpipenv
poetry.lockpoetry
go.sumgo modules
Gemfile.lockbundler

所有安装命令都使用检测到的包管理器。如果存在多个锁文件,优先使用最近修改的那个。

3. 单体仓库布局

有些仓库包含多个包或服务。查找以下指示:

文件/模式工具或布局
pnpm-workspace.yamlpnpm 工作区
lerna.jsonLerna
nx.jsonNx
turbo.jsonTurborepo
rush.jsonRush
包含多个 package.json 文件的 packages/ 目录通用单体仓库

如果符合上述任一情况,不要假设仓库根目录就是集成目标:

D5 -- 阻塞: 立即调用结构化提问工具。

  • question: "这是一个单体仓库。你希望将 LaunchDarkly 集成到哪个包、应用或服务中?"
  • options: 将发现的包/应用作为可选项列出。
  • STOP. 不要将问题作为文本写出。用户选择选项前不要继续。

然后,在该目标目录(及其子目录)中运行此检测步骤的其余部分——语言、包管理器、入口点和 SDK 搜索——而不是只在根目录中运行。

4. 应用入口点

找到应用启动的主文件。在单体仓库中,请在根据第 3 节 单体仓库布局选择的包内应用以下模式。常见模式:

  • Node.js(服务端):检查 package.json 中的 "main" 字段,或查找 index.js、server.js、app.js、src/index.ts
  • NestJS:查找 src/main.ts 或 src/main.js
  • Python:查找 app.py、main.py、manage.py、wsgi.py,或 [tool.poetry.scripts] 部分
  • Go:查找 main.go 或 cmd/*/main.go
  • Java:搜索 public static void main 或 @SpringBootApplication
  • Ruby:查找 config.ru、config/application.rb
  • React/Vue/Angular:查找 src/index.tsx、src/main.tsx、src/App.tsx、src/main.ts
  • Next.js:App Router——app/layout.tsx 或 app/layout.js(根布局)。Pages Router——pages/_app.tsx 或 pages/_app.js
  • React Native:查找 App.tsx、App.js、index.js(其中包含 AppRegistry.registerComponent)
  • Electron:检查 package.json 中的 "main";常见路径包括 main.js 或 src/main.ts
  • JavaScript(浏览器):查找 index.html、src/index.js,或 webpack.config.js / vite.config.ts 中的打包工具入口
  • Flutter:查找 lib/main.dart
  • Swift/iOS:查找 AppDelegate.swift、SceneDelegate.swift,或 @main 结构体
  • Android:查找 MainActivity.java 或 MainActivity.kt
5a. 对工作区信心进行分类

完成第 1 至 4 节后,先将工作区分类为 三种状态之一,然后再继续。此分类决定后续流程。

状态含义标准
明确的应用找到了可运行的应用检测到语言/框架,存在实际入口点,并且有包含应用依赖项的依赖清单
不明确 / 证据不足存在一些内容,但无法明确判断其是否代表可运行的应用零散或最简的 package.json(例如只有 devDependencies,没有脚本)、孤立的配置/清单文件、仅包含主题或配置的文件夹、令牌/固件 JSON、没有对应源代码的锁定文件,或存在多个相互冲突的指标且没有明显的应用结构
未找到应用未检测到可识别的应用结构没有依赖清单、入口点、符合已知模式的源文件,或工作区为空/仅包含文档

不得将薄弱证据视为确认。 薄弱证据示例:

  • 没有 scripts 部分且没有应用源文件的 package.json
  • 数据文件或笔记本目录中单独存在的 requirements.txt
  • 清单文件不代表可运行服务的配置、主题或固件目录
  • 实际应用位于子目录、但尚未选择任何子目录的 monorepo 根目录

按状态分支:

D5-UNCLEAR -- 阻塞: 立即调用结构化提问工具。

  • question: "我找到了一些项目文件,但不确定是否已识别出要集成的正确应用。能否告诉我正确的应用文件夹?"
  • context: 简要说明你发现的内容以及存在歧义的原因(例如:"根目录有一个 package.json,但它没有启动脚本,也没有应用源文件")。
  • options:
    • 将检测到的候选文件夹列为可选项
    • "在其他地方——我会告诉你路径"
    • "目前还没有应用——帮我创建一个演示应用"
  • 停止。用户确认目标之前,不得更改代码、安装软件包或生成集成计划。用户选择一个选项之前,不得继续。

用户指出正确文件夹后,在该文件夹范围内重新运行检测(第 1 至 4 节)。

  • 未找到应用:

明确告知用户:"我没有在此工作区中找到可运行的应用。" 然后提供两种方案:

D5-NOAPP -- 阻塞: 立即调用结构化提问工具。

  • question: "我没有在此工作区中找到可运行的应用。你想如何继续?"
  • options:
    • "告诉我正确的文件夹——应用在其他地方"
    • "创建一个最简演示应用,让我试用 LaunchDarkly"
  • 停止。用户选择一个选项之前,不得继续。

如果用户选择“告诉我正确的文件夹”,则在其提供的路径范围内重新运行检测。如果用户选择“创建演示应用”,则使用最简单易搭建的技术栈(Node.js + Express 或静态 HTML 页面都是不错的默认选项),在新的子文件夹(例如 launchdarkly-demo/)中创建一个最简可运行应用,然后从该子文件夹继续检测。

除非已确认应用目标且应用确实可以运行,否则不得宣告引导流程已完成。

6. 现有 LaunchDarkly SDK

在代码库中搜索现有的 LaunchDarkly 用法:

Search for: launchdarkly, ldclient, ld-client, LDClient, @launchdarkly, launchdarkly-

检查:

  • SDK 是否已在依赖文件中?
  • 是否存在初始化代码?
  • 配置是否正确,还是只完成了部分设置?
  • 是否已有功能标志评估?

SDK 确认

检测到技术栈后,请与用户确认 SDK 选择:

  • 如果有一个 SDK 明显最合适:给出推荐并征求确认:

**D5 —— 阻塞:**立即调用结构化提问工具。

  • 问题:"根据我的发现,我推荐使用 [SDK name] SDK。您觉得合适吗?"

  • 选项:

    • "是,使用该 SDK 继续" → 继续制定计划
    • "否,我想换一个" → 让用户指定
  • 停止。不要将问题写成文本。用户选择选项前不要继续。

  • 如果有多个 SDK 都适用(例如,同时使用服务端和客户端组件的 Next.js 项目):

    • 如果用户已要求同时集成两者(例如,“前端和后端”、“服务端 + 浏览器端”、“API 和 SPA”):将其视为双 SDK范围。继续执行生成集成计划,并将两个 SDK 都纳入范围——不要只计划或实现其中一个,并假设另一个已被“涵盖”。
    • 如果范围不明确:

**D5 —— 阻塞:**立即调用结构化提问工具。

  • 问题:"此项目同时包含服务端和客户端部分。您想集成哪一部分?"
  • 选项:
    • "仅服务端"
    • "仅客户端"
    • "服务端和客户端都要"
  • 停止。不要将问题写成文本。用户选择选项前不要继续。

如果用户选择两者,计划必须包含两个具体集成(参见计划:双 SDK 集成)。

  • 如果无法确定合适的 SDK:在提问工具中将 SDK 配方中的可用选项作为可选项提供,并采用上述相同的阻塞模式。

决策树

检测并确认后:

  • 未发现应用或情况不明确 --> 已在第 5a 节通过 D5-NOAPP / D5-UNCLEAR 处理。用户确认真实的应用目标前,不要继续制定计划。
  • SDK 已安装并初始化 --> 跳转至父技能的步骤 4:首个标记
  • SDK 已安装但尚未初始化 --> 跳转至应用代码更改(只需添加初始化代码)
  • 尚未安装 SDK --> 继续生成集成计划
  • 检测到多个目标(例如,前端 + 后端) --> 如果用户希望集成两个 SDK(已通过上述 D5 确认),则继续生成集成计划,范围设为双 SDK(两个包、两个入口点)。如果用户只想集成其中一个部分,则只为对应的 SDK 制定计划。
  • 未检测到语言 --> 已在第 1 节通过 D5 阻塞性问题处理。

完成后(常规流程):生成集成计划

评论

支持 Markdown