Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ All notable changes to this repository will be documented in this file.

## Unreleased

- Add `agentcontrol/legacy-sdk-migrate` 0.1.0: migrate an app from the legacy AI SDKs (`launchdarkly-server-sdk-ai`, `@launchdarkly/server-sdk-ai`) to the current handler-based SDKs, following [Migrate from the legacy AI SDKs](https://launchdarkly.com/docs/sdk/ai/migration). Inventories legacy calls, maps each to a convenience function, `config().invoke()`, or `graph()`, moves tools into `tool_handlers` / `toolHandlers` or a `Registry`, replaces trackers with automatic metrics (and `track_feedback` with `result.track_data`), ports `enabled=False` fallbacks to error handling and `inspect_config()` / `inspectConfig()`, and covers streaming, history, async judges, and graphs. `references/api-mapping.md` has before/after code in Python and Node.js using the handler factory names the packages export.
- `feature-flags/flag-release` 0.2.0 and `feature-flags/flag-and-release-change` 0.2.0: release with environment release plans instead of release policies, which the plans replace at GA. Each environment's default release plan decides how a flag rolls out there, and a stated release intent (now, hold, `notBefore`, segment, prerequisite) still overrides it per environment. Precedence is intent, then an explicit override, then a flag release plan, then the environment's default release plan. The preview reads each environment's default plan with `get-environment-release-plans` (it does not depend on the flag, so the orchestrator's plan phase uses it before the flag exists), and reads a flag release plan through `launchdarkly-release-plans` where one applies. An environment with no default release plan is held, with a pointer to the onboarding skill or the environment's release plan settings, and there is no fallback. A flag release plan that names a plan other than the default is recorded through the REST API (`environmentReleasePlanKey`, `LD-API-Version: beta`): the skill shows the curl command, and the user runs it in their own terminal with their LaunchDarkly API access token. The agent never runs it or reads a token. The skills no longer call `match-release-policies` or `get-release-policies`. Evals: both suites put SKILL.md in the agent's instructions (`inline_skill`, since the skill text does not load with builtins off), get the release plan tool definition and a guarded default plan mock, hide the release policy tools, assert the plan read, and add "default plan exists" and "no default plan" cases. A `flag-release` case with built-in tools and a planted `.env` checks that, for a non-default plan, the agent shows the REST command and does not run curl or read a token.
- Add `release-autopilot/launchdarkly-release-plans` 1.0.0 (Claude Code plugin 1.0.8, Cursor plugin 1.0.9): one skill for both kinds of release plan. Environment release plans: read, choose (the environment's default first, other complete plans as alternatives), create from starter plans (Progressive, guarded with rollback metrics whose `analysisUnits` match the unit, at most 50% per step, or Custom) after checking the randomization unit with `search-contexts`, set the default, and edit through the MCP tools; delete, and clear the default, through the REST API. Flag release plans: list, get, create, update in place, make default, and delete, and start a flag's release from one, through the REST API (`/api/v2/projects/{projectKey}/flag-release-plans`, `/flag-release-plans/{planKey}`, `/flags/{flagKey}/flag-releases`). An environment with no complete release plan gets one first (or is left out when the user declines), and the skill never invents or points at an incomplete plan. A flag release plan stores each environment's release plan key, so a later change to that environment's default does not update it. For each REST operation the skill shows the exact curl command (with `LD-API-Version: beta`), the user runs it in their own terminal with their own API access token and pastes the output back, and the skill reads that output to continue; the agent never runs a REST command or uses a token, and never asks for a token in the chat. The commands use curl because the MCP server has no flag release plan tools and `ldcli` 3.16.0 has no command for these endpoints. Before any create, the skill checks for an existing default (environment or project), names it with a short summary, and asks whether to use it, replace it, or create another; it also names incomplete plans. Modes: Apply (confirm every write), Read-only, and Record only for skills that confirm and write later. Starter plan definitions and the custom plan questions move here from onboarding's `references/release-plans.md`.
- `release-autopilot/launchdarkly-release-autopilot-onboarding` 1.1.0: release setup follows `launchdarkly-release-plans` in Record only mode for environment release plans and the project's flag release plan; onboarding keeps the wizard steps, the confirmation, the write order, and verification, and its own `references/release-plans.md` is gone. The flag release plan is a new "Default release" plan when the project has no default, no change when the default matches, or the default updated in place ("Update <name>" recommended, or "Keep <name>"; never a second plan). Step 7 shows what an update changes and notes that the plan keeps its release plan keys when an environment's default changes later. Step 8 writes it after the environment release plans and their defaults and before the repo writes, and Step 9 reads it back. The flag release plan is a step the user runs after "Looks good", like the browser steps: the agent shows the command, waits for the pasted output, and verifies from it. If the user skips it or it fails, it is a follow-up, auto-releasing stays on as picked, and the summary says Release Autopilot proposes no release on pull requests until the plan exists. A starter offer can be declined ("Not now"). Evals: a scripted `{ command, text }` answer stands for output the user pastes after running a shown command, and the provider's `scrub_ld_credentials` option removes LaunchDarkly credentials from the agent's shell, so cases check that the agent shows each command with the beta header, never runs one or reads a token, and reads the pasted output; the starter, guarded, no-contexts, and custom plan cases move to the new skill's suite, and onboarding adds flag release plan cases (with a shell, skipped as a follow-up with auto-releasing on, Preview, and an in-place update).
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ Agent Skills are modular, text-based playbooks that teach an agent how to perfor
| Skill | Description |
|-------|-------------|
| `agentcontrol/configs-create` | Create configs with variations for agent or completion mode |
| `agentcontrol/migrate` | Migrate an app with hardcoded LLM prompts to AgentControl in five stages (extract, wrap, tools, tracking, evals) |
| `agentcontrol/migrate` | Migrate an app with hardcoded LLM prompts (not on AgentControl yet) to the current AI SDKs in five stages |
| `agentcontrol/legacy-sdk-migrate` | Migrate between LaunchDarkly AI SDKs: from the legacy Python and Node.js AI SDKs to the current handler-based SDKs (packages, init, `config()`, tools, registries, judges, graphs, fallbacks) |
| `agentcontrol/configs-update` | Update and delete configs, manage lifecycle |
| `agentcontrol/configs-variations` | Manage config variations for A/B testing |
| `agentcontrol/tools` | Create and attach tools for function calling |
Expand Down
8 changes: 8 additions & 0 deletions skills.json
Original file line number Diff line number Diff line change
Expand Up @@ -519,6 +519,14 @@
"rest-api"
]
},
{
"name": "legacy-sdk-migrate",
"description": "Migrate an app from the legacy LaunchDarkly AI SDKs (Python `launchdarkly-server-sdk-ai` / `ldai`, Node.js `@launchdarkly/server-sdk-ai`) to the current handler-based AI SDKs (`launchdarkly-ai-server`, `@launchdarkly/ai-node` / `@launchdarkly/ai-server` plus handler packages). Use when code calls `LDAIClient`, `initAi`, `completion_config` / `completionConfig`, `agent_config` / `agentConfig`, `agent_configs`, `create_tracker` / `trackMetricsOf`, `create_judge`, `create_model`, or `agent_graph`, or when the user asks to upgrade between LaunchDarkly AI SDKs. For apps with hardcoded LLM prompts that aren't on LaunchDarkly yet, use `migrate` instead.",
"path": "skills/agentcontrol/legacy-sdk-migrate",
"version": "0.1.0",
"license": "Apache-2.0",
"compatibility": "Python 3.12+ (`launchdarkly-ai-server` 1.0.0+ with `launchdarkly-server-sdk`) or Node.js (`@launchdarkly/ai-node` 1.0.0+). No LaunchDarkly MCP tools needed; the AgentControl configs already exist."
},
{
"name": "mcp-configure",
"description": "Configure the LaunchDarkly hosted MCP server during onboarding. Use when the parent LaunchDarkly onboarding skill reaches the MCP offer, after the first flag works. Supports Cursor, Claude Code, Windsurf, GitHub Copilot, and other MCP-compatible agents. OAuth authentication; no API keys for the hosted server.",
Expand Down
Loading
Loading