Changelog - Lightsage
Documentation Index
Fetch the complete documentation index at: /docs/llms.txt
Use this file to discover all available pages before exploring further.
Changelog
2026-10-26
You can now create tasks from the CLI, the API, and the MCP server.
CLI
- Added
lightsage tasks create. It takes--titleand optional--description,--task-type,--effort,--priority,--action-type, and--assignee-user-id.
API
View API changes
New endpoints
POST /v2/tasksadds a task to today’s queue with the statusnewand returns it with its execution prompt. The assignee must be a member of your organization.
MCP
- Added the
tasks-createtool.
2026-09-26
Lightsage prompts now support coding-agent web access settings and optional web-search instructions.
CLI
- Added
run_settingssupport to each prompt object passed tolightsage prompts create --prompts. - Added
--run-settingstolightsage prompts update. - Prompt list, create, retrieve, and update output now includes the resolved
run_settings.
API
View API changes
Updated endpoints and schemas
- Added optional
run_settingsto prompt batch-create items and prompt update requests. search_groundingacceptsdisabled,enabled, ordefaultfor coding-agent runs. Answer-engine runs are unaffected.web_search_instructionacceptsomit,append, orboth.- Prompt run list and detail responses now report the requested grounding mode, observed web retrieval, and grounding qualification details.
MCP
- Regenerated prompt tools with
run_settingsinputs and grounding fields in prompt and prompt-run responses.
SDK/OpenAPI
- Regenerated the public OpenAPI, CLI, and MCP contracts with prompt-level grounding settings.
2026-09-15
Lightsage evals now support explicit setup and cleanup commands for reusable evals and direct create-and-run requests.
CLI
- Added repeatable
--setup-commandand--cleanup-commandflags tolightsage evals createandlightsage evals run. --clivalues now serialize directly as saved CLI IDs or installation command strings.
API
View API changes
Updated endpoints and schemas
- Added
setup_commandsandcleanup_commandsarrays toPOST /v2/evals,PATCH /v2/evals/{eval_id}, andPOST /v2/eval-runs. - Setup commands execute sequentially in the prepared repository before the agent starts. A failed setup command prevents agent execution.
- Cleanup commands execute best-effort after result capture and before sandbox deletion. Cleanup failures do not replace the primary attempt result.
- Saved-run requests inherit lifecycle commands from the eval. An explicit empty array disables the saved commands for one launch.
clisis an ordered string array. UUID strings resolve saved CLIs; all other strings are installation commands.
SDK/OpenAPI
- Updated the public OpenAPI, CLI, and MCP contracts with lifecycle command fields and the string-array CLI contract.
Migration notes
- Replace CLI objects such as
{ "install_command": "brew install ..." }with the command string itself inclisarrays. - Use plural
setup_commandsandcleanup_commandsin JSON requests, or the singular repeatable CLI flags.
2026-09-14
Lightsage evals now support reusable simulation matrices across multiple prompts, agents, CLI installations, MCP servers, and repeated attempts.
CLI
- Added repeatable
--prompt,--judge,--agent,--cli, and--mcpflags to bothlightsage evals createand directlightsage evals run. - Added
--personaand--runsto saved and direct eval workflows. --cliaccepts either a saved CLI UUID or an inline installation command.--mcpaccepts a saved MCP UUID, inline JSON, or@path/to/file.json.- Direct runs accept repeatable
--env KEY=VALUEvalues for inline MCP authentication and other runtime secrets.
API
View API changes
Updated endpoints and schemas
- Updated
POST /v2/evals,PATCH /v2/evals/{eval_id}, andPOST /v2/eval-runsto useprompts,judges,persona,agent,clis,mcps, andruns. agentis an array of runnable agent IDs.clisis an ordered string array of saved UUIDs or installation commands.mcpsis an ordered array that can mix saved{ "id": "<uuid>" }references with inline definitions.- Direct and saved runs fan out across
prompts × agent × runs, with a maximum of 100 attempts per submitted run. - Parent run responses now report agents, persona, prompt count, repeat count, attempt count, status, and progress. Attempt analysis and trace records include prompt and matrix coordinates.
- Inline MCP definitions support
http,sse, andstdio.${VAR}references resolve from private run environment values before harness-specific config is created. - Saved and inline MCP definitions now use native harness configuration across Claude Code, Codex, Cursor, GitHub Copilot, Antigravity, Gemini CLI, OpenClaw, OpenCode, Hermes, Pi, Kilo, and Grok.
- Saved CLI IDs, inline CLI installation commands, and public skill packages are installed through the same pre-execution setup before each selected harness starts.
SDK/OpenAPI
- Regenerated the public OpenAPI, CLI, and MCP contracts with typed saved and inline MCP unions and string CLI entries.
- Kept legacy request field aliases server-side for compatibility while hiding them from the current OpenAPI contract.
Migration notes
- Replace
agent_idwithagent: ["<agent-id>"]in public eval requests. - Replace
promptwithprompts, and use arrays forjudges,clis, andmcps. - CLI scripts should replace
--agent-idwith repeatable--agentand use the singular repeatable--prompt,--judge,--cli, and--mcpflags.
2026-09-06
Lightsage simplified API Performance target payloads so callers select models and coding-agent harnesses directly.
API
View API changes
Updated endpoints and schemas
- Removed
execution_platformfrom API Performance target request and response schemas. - Text targets now use
target_typeandmodel_idonly. - Agent targets now use
agent_idto select the harness andmodel_idto select the public model vendor and model.
SDK/OpenAPI
- Updated the public OpenAPI contract so generated clients use
agent_idfor coding-agent harnesses and model IDs such asopenai/gpt-5.4.
Migration notes
- Remove
execution_platformfrom text target payloads. - Replace an agent target’s
execution_platformfield withagent_id.
2026-09-03
Lightsage added URL-level citation reporting for GEO analysis and outreach.
API
View API changes
New endpoints
| Area | Endpoint |
|---|---|
| Top cited URLs | GET /v1/visibility/citations |
New filters and response data
- Filter cited URLs by date range, answer platform, and
all,owned, orexternalsource type. - Each result includes the URL, domain, title, citation count, distinct prompt count, ownership status, and citing platform names.
- Results include only runs from currently active prompts and support a bounded limit from 1 to 100 URLs.
MCP
- Lightsage MCP can retrieve the most cited URLs for a specific platform, such as ChatGPT, through the visibility citations operation.
SDK/OpenAPI
- Regenerated the public OpenAPI contract with the visibility citations operation and response schemas.
2026-08-21
Lightsage added read-only public access to the latest website Site Audit, focused on actionable page issues and their recommended fixes.
CLI
- Released Lightsage CLI
0.6.5. - Added
lightsage site-audit website-listto retrieve every audited page and its actionable issues. - Added
lightsage site-audit retrieve --site-id <site_id>to retrieve one page’s issues and recommended fixes.
API
View API changes
New endpoints
| Area | Endpoint |
|---|---|
| Website audit results | GET /v1/site-audit/website |
| Audited page detail | GET /v1/site-audit/{site_id} |
New response data
- Added
PublicSiteAuditListResponsewith a concise audit summary and page-level issue lists. - Added stable public
site_idvalues derived from the organization and normalized page URL. - Added
PublicSiteAuditPageandPublicSiteAuditIssuewith page score, priority, issue severity, message, evidence, and recommendation. - The detail endpoint returns the selected page directly without unrelated citation, crawl-debug, or passing-check data.
- The endpoints read existing audit data and never start a crawl.
SDK/OpenAPI
- Regenerated the public OpenAPI contract and CLI with the Site Audit endpoints and response schemas.
2026-08-10
Lightsage standardized its CLI, public API, MCP authentication, Agent Tracker,
and GitHub docs-eval commands under the lightsage name.
CLI
- Released Lightsage CLI
0.6.4with thelightsageexecutable andlightsagehq/tools/lightsageHomebrew formula. - Standardized API-key authentication on
--lightsage-api-key-auth. - Added
CLI_LIGHTSAGE_API_KEY_AUTHand theLIGHTSAGE_API_KEYshorthand environment variable. - Changed the default public API server to
https://api.lightsage.com. - Store configuration and update-check state under
~/.config/lightsage.
API
View API changes
Updated authentication
- Renamed the documented public API header to
X-Lightsage-Api-Key. - Renamed the OpenAPI security scheme to
LightsageApiKeyAuth.
MCP
- Released
@lightsage/mcp``0.1.7for local stdio MCP clients. - Standardized hosted MCP API-key authentication on
X-Lightsage-Api-Key. - Use
https://mcp.lightsage.com/mcpfor hosted connections.
Agent Tracker
- Released Agent Tracker
0.1.13with Lightsage-prefixed browser APIs and declarative attributes. - Added
initLightsagePixelas the browser helper initializer. - Kept the previous initializer as a deprecated compatibility alias.
- Added
data-lightsage-*attributes for browser script configuration and declarative conversion tracking. - Continued accepting
data-sapient-*attributes as deprecated compatibility fallbacks. - Made Lightsage attributes take precedence when both prefixes are present.
Lightsage Docs Agent
- Renamed GitHub pull request commands to
/lightsage run evals,/lightsage status, and/lightsage help. - Moved the docs pages to
/lightsage-docs-agent/*with redirects from the previous paths.
Migration notes
- Update direct API and MCP clients to send the Lightsage header names.
- Re-run
lightsage auth loginafter replacing an older CLI installation. - Update local MCP configuration to use
@lightsage/mcp. - Update GitHub automation and saved comments to use
/lightsagecommands. - Replace
data-sapient-*attributes with their matchingdata-lightsage-*names. - See Migrate from Sapient to Lightsage for complete examples.
2026-08-04
Lightsage replaced the prompt is_active boolean with the prompt lifecycle status across the public API and generated CLI contract.
CLI
- Removed
--is-activefromsapient prompts listandsapient prompts update. - Use
--status activeor--status inactivewhen listing or updating prompts.
API
View API changes
Updated endpoints and schemas
GET /v1/promptsnow filters prompt lifecycle state with thestatusquery parameter.PATCH /v1/prompts/{prompt_id}now acceptsstatusvalues ofactiveorinactive.- Prompt responses use the required
statusfield withactive,inactive, orarchivedvalues.
Removed or replaced fields
- Removed the
is_activequery parameter fromGET /v1/prompts. - Removed
is_activefrom prompt request and response schemas.
SDK/OpenAPI
- Updated the public OpenAPI contract without the prompt
is_activefield.
Migration notes
- Replace
is_active=truefilters withstatus=active. - Replace
is_active=falsefilters withstatus=inactive. - Replace prompt update payloads such as
{"is_active": true}with{"status": "active"}.
2026-08-03
Lightsage added execution prompts to public task and opportunity responses, so API clients receive agent-ready instructions without storing separate prompt fields.
API
View API changes
New endpoints
| Area | Endpoint |
|---|---|
| Prompt opportunities | GET /v1/opportunities |
Updated endpoints and schemas
- Added
execution_prompttoPublicTask. Lightsage derives this prompt from the task title, goal, reasoning, evidence, source references, and metadata. - Updated
GET /v1/tasksso the defaultstatus=activeresponse includes todo/new and in-progress tasks across persisted task batches. Usestatus=todo,status=in_progress,status=done,status=dismissed,status=completed, orstatus=allto request a specific slice. - Added
execution_promptto prompt opportunity responses fromGET /v1/opportunities. Lightsage derives this prompt from the opportunity title, description, action, evidence, and metadata.
Removed or replaced endpoints
- Removed
GET /v1/prompts/actions. UseGET /v1/opportunitiesfor prompt opportunities.
SDK/OpenAPI
- Regenerated the public OpenAPI contract with
GET /v1/opportunities, task execution prompts, opportunity execution prompts, and the updated task status defaults.
2026-07-25
Lightsage added public access to the prompt visibility report, including the overall summary and the topic and prompt rows shown in the dashboard.
API
View API changes
New endpoints
| Area | Endpoint |
|---|---|
| Prompt visibility report | GET /v1/visibility/prompts |
Updated endpoints and schemas
- Added
PublicPromptVisibilityReportResponsewith the selected date range, company, overall summary, and nested topic and active prompt rows. - Added visibility score, visibility rank, share of voice, average position, owned-domain citation count, and run count metrics to summary, topic, and prompt rows.
- Added optional
start_dateandend_datequery parameters. When omitted, Lightsage uses the current 30-day range.
SDK/OpenAPI
- Regenerated the public OpenAPI contract with the prompt visibility report endpoint and response schemas.
2026-07-20
Lightsage promoted the custom eval execution workflow to first-class CLI commands and added pollable run lifecycle data for active executions.
CLI
- Added
sapient run evalsto start configured custom evals. - Added
sapient list evalsto list active and completed custom eval executions. - Added
sapient get run --run-id <run_id>to poll one execution. - Added
sapient get trace --run-id <run_id>to retrieve a completed trace or poll trace availability while the execution is active. - Renamed custom eval definition management from
sapient api-performance custom-evals ...tosapient api-performance custom-eval-definitions .... - Removed
sapient eval-runs create,sapient eval-runs retrieve, andsapient api-performance custom-evals history listfrom the generated CLI contract.
API
View API changes
New endpoints
| Area | Endpoint |
|---|---|
| Start custom evals | POST /v1/evals/run |
| List custom eval executions | GET /v1/evals |
| Get execution state | GET /v1/runs/{run_id} |
| Get execution trace | GET /v1/runs/{run_id}/trace |
Updated endpoints and schemas
- Custom eval execution responses now include lifecycle status, stage, elapsed time, trace availability, and stable child
run_idvalues. GET /v1/evalsnow returns a fulldashboard_urlfor every execution, including the authenticated organization ID and selected run ID.- Moved custom eval definition CRUD from
/v1/api-performance/custom-evalsto/v1/api-performance/custom-eval-definitions. - Removed
POST /v1/eval-runs,GET /v1/eval-runs/{eval_run_id}, andGET /v1/api-performance/custom-evals/history.
SDK/OpenAPI
- Regenerated the public OpenAPI contract with the first-class
run,list, andgetcommand methods. - Removed the legacy eval-run and custom eval history operations from generated clients.
Migration notes
- Replace custom eval
sapient eval-runs createcalls withsapient run evals. - Replace custom eval history calls with
sapient list evals. - Poll an individual child
run_idwithsapient get run, then use the same ID withsapient get trace. - Replace
sapient api-performance custom-evalsdefinition commands withsapient api-performance custom-eval-definitions.
2026-07-09
Lightsage added public visibility metrics for the organization resolved by your API key, so API clients can read share of voice, visibility score, and the full overview without passing a company selector.
API
View API changes
New endpoints
| Area | Endpoint |
|---|---|
| Visibility | GET /v1/visibility/current |
| Visibility | GET /v1/visibility/overview |
Updated endpoints and schemas
- Added
PublicCurrentVisibilityResponsewithvisibility_score,share_of_voice, ranks, date-range metadata, andhas_data. - Added
PublicVisibilityOverviewResponse, mirroring the dashboard overview: asnapshot(visibility score, share of voice, average position, ranks, and total citations aggregated over the range), a dailytimeseriesof visibility score, per-platform visibility and citation series inby_platform, and acompetitorscomparison. - Added optional
start_dateandend_datequery parameters to both endpoints. When omitted, Lightsage uses the current 30-day range.
SDK/OpenAPI
- Regenerated the public OpenAPI contract with the new visibility endpoint.
2026-05-30
Lightsage updated the public API and generated CLI contract for API Performance source and operation fields. The contract now uses user-facing source and operation terminology consistently, and eval-run creation can infer the source when the selected evals or operations identify one.
CLI
- Updated generated API Performance commands to use
--source-idinstead of--integration-id. - Updated operation selection fields and flags to use
operation_id,operation_ids, andoperation_pathsinstead of endpoint naming. - Updated
sapient eval-runs createfor API Performance runs sosource_idcan be inferred fromoperation_ids,eval_ids, or an unambiguoussource_type. - Updated
sapient api-performance skills listto use--source-idfor API Performance sources and--skill-source-idfor skill-source filtering.
API
View API changes
Updated endpoints and schemas
- Updated API Performance config, evals, starter projects, actions, source targets, docs audit, and eval-run request schemas to expose
source_idinstead ofintegration_id. - Updated API Performance eval definitions to expose
operation_idinstead ofendpoint_id, and to include the relatedsource_idandsourceobject. - Updated API Performance config and eval-run request schemas to use
operation_idsandoperation_pathsinstead of endpoint field names. - Updated
GET /v1/api-performance/sourcesresponses to returnoperation_count. - Updated skill responses to return
skill_source_idfor the skill repository/source andsource_idfor the API Performance source. - Updated
POST /v1/eval-runserrors to use public source terminology when a source is missing or ambiguous.
SDK/OpenAPI
- Regenerated the public OpenAPI contract for the updated source and operation field names.
Migration notes
- Replace
integration_idrequest fields and CLI flags withsource_id. - Replace
endpoint_id,endpoint_ids, andendpoint_pathswithoperation_id,operation_ids, andoperation_paths. - Use
eval_ids,operation_ids, or a single-sourcesource_typewhen you wantsapient eval-runs createto infer the source. - Update skill filters to use
source_idfor API Performance sources andskill_source_idfor skill-source IDs.
2026-05-29
Lightsage updated eval-run creation and CLI diagnostics so public runs are immediately pollable and dry-run output does not expose Lightsage API keys.
CLI
- Updated
sapient --dry-runto redactX-Lightsage-Api-Keyand other*-api-keyheaders. sapient eval-runs createnow receives adispatch_idand queued child progress when Lightsage can determine the runnable work.
API
View API changes
Updated endpoints and schemas
- Updated
POST /v1/eval-runsto create the durable dispatch and child queue items during the create request, while keepingidandjob_idas the parent eval-run job ID. - Updated
GET /v1/eval-runs/{eval_run_id}to report queued dispatch progress immediately after creation.
SDK/OpenAPI
- Regenerated the public OpenAPI contract for the updated eval-run behavior.
Migration notes
- Use the returned
idas before when polling eval-run progress. - Use
dispatch_idwhen you need to correlate the run with child queue progress.
2026-05-27
Lightsage updated API Performance run retrieval so generated CLI and public API responses show the runtime context used for each run.
CLI
- Updated
sapient api-performance runs retrieveto return the stored harness prompt inprompt_sent. - Added runtime trace fields to retrieved API Performance runs:
run_context_sent,conversation_turns,generated_files, andgrader_results.
API
View API changes
Updated endpoints and schemas
- Updated
GET /v1/api-performance/runs/{run_id}to return the stored run prompt instead of the base eval definition prompt. - Updated
EvalRunDetailwith runtime context and trace fields for docs selection, skills, generated files, conversation turns, and grader results. - Updated API Performance
eval_overridesonPOST /v1/eval-runsto apply runtime fields such ascustom_prompt,docs_mode,include_env_vars,env_profile_ids,model_ids,compare_skills,skills_mode,skills_enabled,runs_per_execution, andstarting_project_id.
SDK/OpenAPI
- Regenerated the public OpenAPI contract for the updated API Performance run detail schema.
Migration notes
- Use
docs_mode: "exclude"in an eval override when you need a no-docs run. - Use
docs_mode: "include"in an eval override when you need to force docs context for a run.
2026-05-26
Lightsage added public eval-run orchestration and custom eval history access to the CLI and public API. You can now start durable eval jobs, poll progress, and list the history rows shown in the custom eval dashboard.Lightsage also updated API Performance commands to resolve organization scope from the API key. Generated CLI commands no longer require a brand selector, and public responses no longer expose brand IDs.
CLI
- Added
sapient eval-runs create. - Added
sapient eval-runs retrieve. - Added
sapient api-performance custom-evals history list. - Removed
--brandfrom generated API Performance commands.
API
View API changes
New endpoints
| Area | Endpoint |
|---|---|
| Eval runs | POST /v1/eval-runs, GET /v1/eval-runs/{eval_run_id} |
| API Performance custom eval history | GET /v1/api-performance/custom-evals/history |
Updated endpoints and schemas
- Added
PublicPromptEvalRunRequestfor starting prompt eval jobs. - Added
PublicApiPerformanceEvalRunRequestfor starting API Performance jobs, includingsource_type: "custom_evals". - Added
PublicEvalRunResponsewith job ID, status, stage, dispatch ID, progress, counts, cost estimate, and timestamps. - Added custom eval history response fields for run IDs, prompts, targets, pass/fail result, score, tool call count, latency, run time, and facets.
- Removed public brand selector parameters and request fields from API Performance endpoints.
- Removed brand ID fields from public API Performance response schemas.
- Removed the legacy
include_brand_docseval field. Usedocs_modeinstead.
SDK/OpenAPI
- Regenerated the public OpenAPI contract for the new eval-runs and custom eval history operations.
- Regenerated the public OpenAPI contract without brand selectors or public brand ID fields.
Migration notes
- Use
sapient eval-runs createwhen you need to trigger prompt, API Performance, or custom eval jobs from automation. - Use
sapient eval-runs retrieve --eval-run-id <eval_run_id>to poll job progress. - Use
sapient api-performance custom-evals history list --custom-eval-id <custom_eval_id>to list evaluated custom eval rows before retrieving a specific run. - Remove
--brandfrom API Performance CLI calls. Lightsage now resolves the organization scope fromLIGHTSAGE_API_KEY. - Replace
include_brand_docswithdocs_modewhen updating eval context.
2026-05-23
Lightsage updated the public API and generated CLI contract for API Performance. This release introduces resource-shaped commands, API Performance actions, skill discovery, starter projects, custom evals, environment profiles, eval runtime selection fields, and source metadata for API, SDK, and CLI runs.
CLI
- Added
sapient prompts actions list. - Added
sapient api-performance diagnose. - Added
sapient api-performance targets list. - Added
sapient api-performance config retrieveandupdate. - Added
sapient api-performance sources list. - Added
sapient api-performance skills list. - Added
sapient api-performance evals list,retrieve, andupdate. - Added
sapient api-performance custom-evals list,create,retrieve,update, anddelete. - Added
sapient api-performance starter-projects list,create,retrieve,update, anddelete. - Added
sapient api-performance actions list,refresh,retrieve,update, andverify.
API
View API changes
New endpoints
| Area | Endpoint |
|---|---|
| Prompt config | GET /v1/prompts/config |
| Prompt actions | GET /v1/prompts/actions |
| API Performance diagnosis | POST /v1/api-performance/diagnose |
| API Performance targets | GET /v1/api-performance/targets |
| API Performance sources | GET /v1/api-performance/sources |
| API Performance skills | GET /v1/api-performance/skills |
| API Performance eval definitions | GET /v1/api-performance/evals, GET /v1/api-performance/evals/{eval_id}, PATCH /v1/api-performance/evals/{eval_id} |
| API Performance custom evals | GET /v1/api-performance/custom-evals, POST /v1/api-performance/custom-evals, GET /v1/api-performance/custom-evals/{custom_eval_id}, PATCH /v1/api-performance/custom-evals/{custom_eval_id}, DELETE /v1/api-performance/custom-evals/{custom_eval_id} |
| API Performance starter projects | GET /v1/api-performance/starter-projects, POST /v1/api-performance/starter-projects, GET /v1/api-performance/starter-projects/{starter_project_id}, PATCH /v1/api-performance/starter-projects/{starter_project_id}, DELETE /v1/api-performance/starter-projects/{starter_project_id} |
| API Performance actions | GET /v1/api-performance/actions, POST /v1/api-performance/actions/refresh, GET /v1/api-performance/actions/{action_id}, PATCH /v1/api-performance/actions/{action_id}, POST /v1/api-performance/actions/{action_id}/verify |
Updated endpoints and schemas
- Updated
GET /v1/promptsandPOST /v1/promptswith stable generated-client operation metadata. - Updated
GET /v1/prompts/actionswith atagselector forcited_pages,opportunities, orall. - Updated prompt topic, prompt retrieve, prompt update, and prompt delete operation metadata for generated clients.
- Updated
/v1/api-performance/configto includeenv_profilesanddefault_env_profile_id. - Updated
GET /v1/api-performance/runsandGET /v1/api-performance/runs/{run_id}run summaries to include a sanitizedsourceobject with sourceid,type,label, and public metadata. - Updated API Performance eval definitions with
docs_mode,env_profile_ids,skills_mode,skill_ids, andcompare_skills. - Updated environment profile responses to return environment variable keys instead of secret values.
Replaced endpoint groups
- Replaced
/v1/api-performance/evaluation-configwith/v1/api-performance/config. - Replaced
/v1/api-performance/interfaceswith/v1/api-performance/sources. - Replaced
/v1/api-performance/operationsand operation prompt routes with/v1/api-performance/evalsand/v1/api-performance/custom-evals. - Replaced
/v1/api-performance/use-caseswith/v1/api-performance/custom-evals. - Removed prompt platform and prompt cost-estimate endpoints from the current public contract.
Migration notes
- Use
sapient api-performance config retrieveandupdateinstead ofsapient api-performance evaluation-config. - Use
sapient api-performance sources listinstead ofsapient api-performance interfaces list. - Use
sapient api-performance evalsandcustom-evalsinstead of the previous operations, operation-prompts, prompts, and use-cases command groups. - Use
sapient api-performance skills listto discover skill IDs before settingskills_mode selected. - Use
docs_modewhen controlling docs context for evals. - Use
skills_mode selectedwith one or more skill IDs to attach specific skill context to an eval.
2026-05-15
Lightsage’s public API and generated CLI exposed the original prompt management and API Performance operation-management contract.
CLI
sapient status getsapient auth statussapient prompts list,create,retrieve,update, anddeletesapient prompts topics list,create,update, anddeletesapient prompts platforms listsapient prompts estimate-costsapient api-performance runs listandretrievesapient api-performance evaluation-config retrieveandupdatesapient api-performance interfaces listsapient api-performance platforms listandestimate-costsapient api-performance operations list,create,retrieve,update, anddeletesapient api-performance operations prompts listandcreatesapient api-performance prompts retrieve,update, anddeletesapient api-performance use-cases list,create,retrieve,update, anddelete
API
View API baseline
Public endpoints
| Area | Endpoint |
|---|---|
| Status and auth | GET /v1/status, GET /v1/auth/status |
| Prompts | GET /v1/prompts, POST /v1/prompts, GET /v1/prompts/{prompt_id}, PATCH /v1/prompts/{prompt_id}, DELETE /v1/prompts/{prompt_id} |
| Prompt topics | GET /v1/prompts/topics, POST /v1/prompts/topics, PATCH /v1/prompts/topics/{topic_id}, DELETE /v1/prompts/topics/{topic_id} |
| Prompt catalog and cost | GET /v1/prompts/platforms, GET /v1/prompts/estimate-cost |
| API Performance runs | GET /v1/api-performance/runs, GET /v1/api-performance/runs/{run_id} |
| API Performance config | GET /v1/api-performance/evaluation-config, PUT /v1/api-performance/evaluation-config |
| API Performance interfaces and platforms | GET /v1/api-performance/interfaces, GET /v1/api-performance/platforms, GET /v1/api-performance/platforms/estimate-cost |
| API Performance operations | GET /v1/api-performance/operations, POST /v1/api-performance/operations, GET /v1/api-performance/operations/{operation_id}, PATCH /v1/api-performance/operations/{operation_id}, DELETE /v1/api-performance/operations/{operation_id} |
| API Performance operation prompts | GET /v1/api-performance/operations/{operation_id}/prompts, POST /v1/api-performance/operations/{operation_id}/prompts, GET /v1/api-performance/prompts/{prompt_id}, PATCH /v1/api-performance/prompts/{prompt_id}, DELETE /v1/api-performance/prompts/{prompt_id} |
| API Performance use cases | GET /v1/api-performance/use-cases, POST /v1/api-performance/use-cases, GET /v1/api-performance/use-cases/{use_case_id}, PATCH /v1/api-performance/use-cases/{use_case_id}, DELETE /v1/api-performance/use-cases/{use_case_id} |
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Lightsage","colors":{"primary":"#0EA5E9","light":"#38BDF8","dark":"#0284C7"},"logo":{"light":"https://mintcdn.com/sapient-14d4e375/0RQiSxJPQv6MyuZt/images/lightsage-logo-with-text-light.svg?fit=max\\u0026auto=format\\u0026n=0RQiSxJPQv6MyuZt\\u0026q=85\\u0026s=843d0563baa54c778891f942711ab938","dark":"https://mintcdn.com/sapient-14d4e375/0RQiSxJPQv6MyuZt/images/lightsage-logo-with-text-dark.svg?fit=max\\u0026auto=format\\u0026n=0RQiSxJPQv6MyuZt\\u0026q=85\\u0026s=0ec933f6e5153f8392cb4c5f19b7017f"},"favicon":"https://mintcdn.com/sapient-14d4e375/lnqlKs8p\_hzadcGt/images/favicon.png?fit=max\\u0026auto=format\\u0026n=lnqlKs8p\_hzadcGt\\u0026q=85\\u0026s=358b3be56f25189cd6d5417fd300fefc","background":{"color":{"light":"#FFFFFF","dark":"#0D0C0C"}},"navbar":{"links":\[{"href":"https://lightsage.com","label":"Homepage"}\],"primary":{"type":"button","label":"Dashboard","href":"https://app.lightsage.com"}},"seo":{"indexing":"all"},"fonts":{"family":"Geist"},"integrations":{"ga4":{"measurementId":"G-417S0EJVMS"},"posthog":{"apiKey":"phc\_yrA1TjjqeYfsoJEofjxd0Bw7cTrxs8N402k3NwusII7"}},"contextual":{"options":\["copy","chatgpt","cursor","vscode"\],"display":"header"},"styling":{"latex":false},"navigation":{"pages":\[\]}},"deployment":{"deploymentMetadataValue":{"subdomain":"sapient-14d4e375","hasAudioNarration":false,"actualSubdomain":"sapient-14d4e375","customDomains":\["lightsage.com"\],"gitSource":{"type":"github","owner":"lightsagehq","repo":"docs","deployBranch":"main","isPrivate":true,"contentDirectory":"","mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae02893fa64afb3742fc617","collectionId":"5733d0e5-4574-4b13-bbeb-88d7bc3f6d01","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae02893fa64afb3742fc617"},"entitlements":{"AI\_CHAT":{"status":"DISABLED"}},"buildId":"6ae02c324c09e96410641fcb","clientVersion":"0.0.3971","searchFilterCounts":\[{"language":"default","tag":"API Reference","count":74},{"language":"default","tag":"CLI Reference","count":18},{"language":"default","tag":"Evals","count":14},{"language":"default","tag":"Documentation","count":13},{"language":"default","tag":"Prompts","count":13},{"language":"default","tag":"Visibility","count":12},{"language":"default","tag":"MCP Reference","count":10},{"language":"default","tag":"Clients","count":9},{"language":"default","tag":"Agent Preference","count":8},{"language":"default","tag":"Agent Analytics","count":7}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"changelog","slug":"/changelog","pageMetadata":{"title":"Changelog","description":"Developer-facing Lightsage CLI and public API changes.","icon":"clock-rotate-left","href":"/changelog"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Developer-facing Lightsage CLI and public API changes.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,Heading,Table}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`1`,id:`changelog`,children:`Changelog`}),`\n`,_jsx(Heading,{level:`2`,id:`2026-10-26`,children:`2026-10-26`}),`\n`,_jsx(_components.p,{children:`You can now create tasks from the CLI, the API, and the MCP server.`}),`\n`,_jsx(Heading,{level:`3`,id:`cli`,children:`CLI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`lightsage tasks create`}),`. It takes `,_jsx(_components.code,{children:`--title`}),` and optional\n`,_jsx(_components.code,{children:`--description`}),`, `,_jsx(_components.code,{children:`--task-type`}),`, `,_jsx(_components.code,{children:`--effort`}),`, `,_jsx(_components.code,{children:`--priority`}),`, `,_jsx(_components.code,{children:`--action-type`}),`,\nand `,_jsx(_components.code,{children:`--assignee-user-id`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`api`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes`,children:[_jsx(Heading,{level:`4`,id:`new-endpoints`,children:`New endpoints`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`POST /v2/tasks`}),` adds a task to today’s queue with the status `,_jsx(_components.code,{children:`new`}),` and\nreturns it with its execution prompt. The assignee must be a member of your\norganization.`]}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`mcp`,children:`MCP`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added the `,_jsx(_components.code,{children:`tasks-create`}),` tool.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-09-26`,children:`2026-09-26`}),`\n`,_jsx(_components.p,{children:`Lightsage prompts now support coding-agent web access settings and optional\nweb-search instructions.`}),`\n`,_jsx(Heading,{level:`3`,id:`cli-2`,children:`CLI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`run_settings`}),` support to each prompt object passed to\n`,_jsx(_components.code,{children:`lightsage prompts create --prompts`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`--run-settings`}),` to `,_jsx(_components.code,{children:`lightsage prompts update`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Prompt list, create, retrieve, and update output now includes the resolved\n`,_jsx(_components.code,{children:`run_settings`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`api-2`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes-1`,children:[_jsx(Heading,{level:`4`,id:`updated-endpoints-and-schemas`,children:`Updated endpoints and schemas`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added optional `,_jsx(_components.code,{children:`run_settings`}),` to prompt batch-create items and prompt update\nrequests.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`search_grounding`}),` accepts `,_jsx(_components.code,{children:`disabled`}),`, `,_jsx(_components.code,{children:`enabled`}),`, or `,_jsx(_components.code,{children:`default`}),` for\ncoding-agent runs. Answer-engine runs are unaffected.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`web_search_instruction`}),` accepts `,_jsx(_components.code,{children:`omit`}),`, `,_jsx(_components.code,{children:`append`}),`, or `,_jsx(_components.code,{children:`both`}),`.`]}),`\n`,_jsx(_components.li,{children:`Prompt run list and detail responses now report the requested grounding mode,\nobserved web retrieval, and grounding qualification details.`}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`mcp-2`,children:`MCP`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Regenerated prompt tools with `,_jsx(_components.code,{children:`run_settings`}),` inputs and grounding fields in\nprompt and prompt-run responses.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`sdk/openapi`,children:`SDK/OpenAPI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Regenerated the public OpenAPI, CLI, and MCP contracts with prompt-level\ngrounding settings.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-09-15`,children:`2026-09-15`}),`\n`,_jsx(_components.p,{children:`Lightsage evals now support explicit setup and cleanup commands for reusable\nevals and direct create-and-run requests.`}),`\n`,_jsx(Heading,{level:`3`,id:`cli-3`,children:`CLI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added repeatable `,_jsx(_components.code,{children:`--setup-command`}),` and `,_jsx(_components.code,{children:`--cleanup-command`}),` flags to\n`,_jsx(_components.code,{children:`lightsage evals create`}),` and `,_jsx(_components.code,{children:`lightsage evals run`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--cli`}),` values now serialize directly as saved CLI IDs or installation\ncommand strings.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`api-3`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes-2`,children:[_jsx(Heading,{level:`4`,id:`updated-endpoints-and-schemas-2`,children:`Updated endpoints and schemas`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`setup_commands`}),` and `,_jsx(_components.code,{children:`cleanup_commands`}),` arrays to `,_jsx(_components.code,{children:`POST /v2/evals`}),`,\n`,_jsx(_components.code,{children:`PATCH /v2/evals/{eval_id}`}),`, and `,_jsx(_components.code,{children:`POST /v2/eval-runs`}),`.`]}),`\n`,_jsx(_components.li,{children:`Setup commands execute sequentially in the prepared repository before the\nagent starts. A failed setup command prevents agent execution.`}),`\n`,_jsx(_components.li,{children:`Cleanup commands execute best-effort after result capture and before sandbox\ndeletion. Cleanup failures do not replace the primary attempt result.`}),`\n`,_jsx(_components.li,{children:`Saved-run requests inherit lifecycle commands from the eval. An explicit\nempty array disables the saved commands for one launch.`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`clis`}),` is an ordered string array. UUID strings resolve saved CLIs; all other\nstrings are installation commands.`]}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`sdk/openapi-2`,children:`SDK/OpenAPI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Updated the public OpenAPI, CLI, and MCP contracts with lifecycle command\nfields and the string-array CLI contract.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`migration-notes`,children:`Migration notes`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Replace CLI objects such as `,_jsx(_components.code,{children:`{ \"install_command\": \"brew install ...\" }`}),`\nwith the command string itself in `,_jsx(_components.code,{children:`clis`}),` arrays.`]}),`\n`,_jsxs(_components.li,{children:[`Use plural `,_jsx(_components.code,{children:`setup_commands`}),` and `,_jsx(_components.code,{children:`cleanup_commands`}),` in JSON requests, or the\nsingular repeatable CLI flags.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-09-14`,children:`2026-09-14`}),`\n`,_jsx(_components.p,{children:`Lightsage evals now support reusable simulation matrices across multiple\nprompts, agents, CLI installations, MCP servers, and repeated attempts.`}),`\n`,_jsx(Heading,{level:`3`,id:`cli-4`,children:`CLI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added repeatable `,_jsx(_components.code,{children:`--prompt`}),`, `,_jsx(_components.code,{children:`--judge`}),`, `,_jsx(_components.code,{children:`--agent`}),`, `,_jsx(_components.code,{children:`--cli`}),`, and `,_jsx(_components.code,{children:`--mcp`}),`\nflags to both `,_jsx(_components.code,{children:`lightsage evals create`}),` and direct `,_jsx(_components.code,{children:`lightsage evals run`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`--persona`}),` and `,_jsx(_components.code,{children:`--runs`}),` to saved and direct eval workflows.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--cli`}),` accepts either a saved CLI UUID or an inline installation command.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--mcp`}),` accepts a saved MCP UUID, inline JSON, or `,_jsx(_components.code,{children:`@path/to/file.json`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Direct runs accept repeatable `,_jsx(_components.code,{children:`--env KEY=VALUE`}),` values for inline MCP\nauthentication and other runtime secrets.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`api-4`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes-3`,children:[_jsx(Heading,{level:`4`,id:`updated-endpoints-and-schemas-3`,children:`Updated endpoints and schemas`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`POST /v2/evals`}),`, `,_jsx(_components.code,{children:`PATCH /v2/evals/{eval_id}`}),`, and `,_jsx(_components.code,{children:`POST /v2/eval-runs`}),` to use `,_jsx(_components.code,{children:`prompts`}),`, `,_jsx(_components.code,{children:`judges`}),`, `,_jsx(_components.code,{children:`persona`}),`, `,_jsx(_components.code,{children:`agent`}),`, `,_jsx(_components.code,{children:`clis`}),`, `,_jsx(_components.code,{children:`mcps`}),`,\nand `,_jsx(_components.code,{children:`runs`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`agent`}),` is an array of runnable agent IDs. `,_jsx(_components.code,{children:`clis`}),` is an ordered string array\nof saved UUIDs or installation commands. `,_jsx(_components.code,{children:`mcps`}),` is an ordered array that can\nmix saved `,_jsx(_components.code,{children:`{ \"id\": \"\u003cuuid>\" }`}),` references with inline definitions.`]}),`\n`,_jsxs(_components.li,{children:[`Direct and saved runs fan out across `,_jsx(_components.code,{children:`prompts × agent × runs`}),`, with a maximum\nof 100 attempts per submitted run.`]}),`\n`,_jsx(_components.li,{children:`Parent run responses now report agents, persona, prompt count, repeat count,\nattempt count, status, and progress. Attempt analysis and trace records\ninclude prompt and matrix coordinates.`}),`\n`,_jsxs(_components.li,{children:[`Inline MCP definitions support `,_jsx(_components.code,{children:`http`}),`, `,_jsx(_components.code,{children:`sse`}),`, and `,_jsx(_components.code,{children:`stdio`}),`. `,_jsx(_components.code,{children:\"${VAR}\"}),` references\nresolve from private run environment values before harness-specific config is\ncreated.`]}),`\n`,_jsx(_components.li,{children:`Saved and inline MCP definitions now use native harness configuration across\nClaude Code, Codex, Cursor, GitHub Copilot, Antigravity, Gemini CLI,\nOpenClaw, OpenCode, Hermes, Pi, Kilo, and Grok.`}),`\n`,_jsx(_components.li,{children:`Saved CLI IDs, inline CLI installation commands, and public skill packages\nare installed through the same pre-execution setup before each selected\nharness starts.`}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`sdk/openapi-3`,children:`SDK/OpenAPI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Regenerated the public OpenAPI, CLI, and MCP contracts with typed saved and\ninline MCP unions and string CLI entries.`}),`\n`,_jsx(_components.li,{children:`Kept legacy request field aliases server-side for compatibility while hiding\nthem from the current OpenAPI contract.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`migration-notes-2`,children:`Migration notes`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Replace `,_jsx(_components.code,{children:`agent_id`}),` with `,_jsx(_components.code,{children:`agent: [\"\u003cagent-id>\"]`}),` in public eval requests.`]}),`\n`,_jsxs(_components.li,{children:[`Replace `,_jsx(_components.code,{children:`prompt`}),` with `,_jsx(_components.code,{children:`prompts`}),`, and use arrays for `,_jsx(_components.code,{children:`judges`}),`, `,_jsx(_components.code,{children:`clis`}),`, and\n`,_jsx(_components.code,{children:`mcps`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`CLI scripts should replace `,_jsx(_components.code,{children:`--agent-id`}),` with repeatable `,_jsx(_components.code,{children:`--agent`}),` and use the\nsingular repeatable `,_jsx(_components.code,{children:`--prompt`}),`, `,_jsx(_components.code,{children:`--judge`}),`, `,_jsx(_components.code,{children:`--cli`}),`, and `,_jsx(_components.code,{children:`--mcp`}),` flags.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-09-06`,children:`2026-09-06`}),`\n`,_jsx(_components.p,{children:`Lightsage simplified API Performance target payloads so callers select models and coding-agent harnesses directly.`}),`\n`,_jsx(Heading,{level:`3`,id:`api-5`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes-4`,children:[_jsx(Heading,{level:`4`,id:`updated-endpoints-and-schemas-4`,children:`Updated endpoints and schemas`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Removed `,_jsx(_components.code,{children:`execution_platform`}),` from API Performance target request and response schemas.`]}),`\n`,_jsxs(_components.li,{children:[`Text targets now use `,_jsx(_components.code,{children:`target_type`}),` and `,_jsx(_components.code,{children:`model_id`}),` only.`]}),`\n`,_jsxs(_components.li,{children:[`Agent targets now use `,_jsx(_components.code,{children:`agent_id`}),` to select the harness and `,_jsx(_components.code,{children:`model_id`}),` to select the public model vendor and model.`]}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`sdk/openapi-4`,children:`SDK/OpenAPI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated the public OpenAPI contract so generated clients use `,_jsx(_components.code,{children:`agent_id`}),` for coding-agent harnesses and model IDs such as `,_jsx(_components.code,{children:`openai/gpt-5.4`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`migration-notes-3`,children:`Migration notes`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Remove `,_jsx(_components.code,{children:`execution_platform`}),` from text target payloads.`]}),`\n`,_jsxs(_components.li,{children:[`Replace an agent target’s `,_jsx(_components.code,{children:`execution_platform`}),` field with `,_jsx(_components.code,{children:`agent_id`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-09-03`,children:`2026-09-03`}),`\n`,_jsx(_components.p,{children:`Lightsage added URL-level citation reporting for GEO analysis and outreach.`}),`\n`,_jsx(Heading,{level:`3`,id:`api-6`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes-5`,children:[_jsx(Heading,{level:`4`,id:`new-endpoints-2`,children:`New endpoints`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Area`}),_jsx(_components.th,{children:`Endpoint`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Top cited URLs`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /v1/visibility/citations`})})]})})]}),_jsx(Heading,{level:`4`,id:`new-filters-and-response-data`,children:`New filters and response data`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Filter cited URLs by date range, answer platform, and `,_jsx(_components.code,{children:`all`}),`, `,_jsx(_components.code,{children:`owned`}),`, or\n`,_jsx(_components.code,{children:`external`}),` source type.`]}),`\n`,_jsx(_components.li,{children:`Each result includes the URL, domain, title, citation count, distinct prompt\ncount, ownership status, and citing platform names.`}),`\n`,_jsx(_components.li,{children:`Results include only runs from currently active prompts and support a bounded\nlimit from 1 to 100 URLs.`}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`mcp-3`,children:`MCP`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Lightsage MCP can retrieve the most cited URLs for a specific platform, such\nas ChatGPT, through the visibility citations operation.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`sdk/openapi-5`,children:`SDK/OpenAPI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Regenerated the public OpenAPI contract with the visibility citations\noperation and response schemas.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-08-21`,children:`2026-08-21`}),`\n`,_jsx(_components.p,{children:`Lightsage added read-only public access to the latest website Site Audit, focused on actionable page issues and their recommended fixes.`}),`\n`,_jsx(Heading,{level:`3`,id:`cli-5`,children:`CLI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Released Lightsage CLI `,_jsx(_components.code,{children:`0.6.5`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`lightsage site-audit website-list`}),` to retrieve every audited page and its actionable issues.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`lightsage site-audit retrieve --site-id \u003csite_id>`}),` to retrieve one page’s issues and recommended fixes.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`api-7`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes-6`,children:[_jsx(Heading,{level:`4`,id:`new-endpoints-3`,children:`New endpoints`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Area`}),_jsx(_components.th,{children:`Endpoint`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Website audit results`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /v1/site-audit/website`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Audited page detail`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /v1/site-audit/{site_id}`})})]})]})]}),_jsx(Heading,{level:`4`,id:`new-response-data`,children:`New response data`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`PublicSiteAuditListResponse`}),` with a concise audit summary and page-level issue lists.`]}),`\n`,_jsxs(_components.li,{children:[`Added stable public `,_jsx(_components.code,{children:`site_id`}),` values derived from the organization and normalized page URL.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`PublicSiteAuditPage`}),` and `,_jsx(_components.code,{children:`PublicSiteAuditIssue`}),` with page score, priority, issue severity, message, evidence, and recommendation.`]}),`\n`,_jsx(_components.li,{children:`The detail endpoint returns the selected page directly without unrelated citation, crawl-debug, or passing-check data.`}),`\n`,_jsx(_components.li,{children:`The endpoints read existing audit data and never start a crawl.`}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`sdk/openapi-6`,children:`SDK/OpenAPI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Regenerated the public OpenAPI contract and CLI with the Site Audit endpoints and response schemas.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-08-10`,children:`2026-08-10`}),`\n`,_jsxs(_components.p,{children:[`Lightsage standardized its CLI, public API, MCP authentication, Agent Tracker,\nand GitHub docs-eval commands under the `,_jsx(_components.code,{children:`lightsage`}),` name.`]}),`\n`,_jsx(Heading,{level:`3`,id:`cli-6`,children:`CLI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Released Lightsage CLI `,_jsx(_components.code,{children:`0.6.4`}),` with the `,_jsx(_components.code,{children:`lightsage`}),` executable and\n`,_jsx(_components.code,{children:`lightsagehq/tools/lightsage`}),` Homebrew formula.`]}),`\n`,_jsxs(_components.li,{children:[`Standardized API-key authentication on `,_jsx(_components.code,{children:`--lightsage-api-key-auth`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`CLI_LIGHTSAGE_API_KEY_AUTH`}),` and the `,_jsx(_components.code,{children:`LIGHTSAGE_API_KEY`}),` shorthand environment variable.`]}),`\n`,_jsxs(_components.li,{children:[`Changed the default public API server to `,_jsx(_components.code,{children:`https://api.lightsage.com\`}),\`.\`\]}),\`\\n\`,\_jsxs(_components.li,{children:[`Store configuration and update-check state under `,_jsx(_components.code,{children:`~/.config/lightsage`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`api-8`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes-7`,children:[_jsx(Heading,{level:`4`,id:`updated-authentication`,children:`Updated authentication`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Renamed the documented public API header to `,_jsx(_components.code,{children:`X-Lightsage-Api-Key`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Renamed the OpenAPI security scheme to `,_jsx(_components.code,{children:`LightsageApiKeyAuth`}),`.`]}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`mcp-4`,children:`MCP`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Released `,_jsx(_components.code,{children:`@lightsage/mcp`}),` `,_jsx(_components.code,{children:`0.1.7`}),` for local stdio MCP clients.`]}),`\n`,_jsxs(_components.li,{children:[`Standardized hosted MCP API-key authentication on `,_jsx(_components.code,{children:`X-Lightsage-Api-Key`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`https://mcp.lightsage.com/mcp\`}),\` for hosted connections.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`agent-tracker`,children:`Agent Tracker`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Released Agent Tracker `,_jsx(_components.code,{children:`0.1.13`}),` with Lightsage-prefixed browser APIs and\ndeclarative attributes.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`initLightsagePixel`}),` as the browser helper initializer.`]}),`\n`,_jsx(_components.li,{children:`Kept the previous initializer as a deprecated compatibility alias.`}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`data-lightsage-*`}),` attributes for browser script configuration and declarative conversion tracking.`]}),`\n`,_jsxs(_components.li,{children:[`Continued accepting `,_jsx(_components.code,{children:`data-sapient-*`}),` attributes as deprecated compatibility fallbacks.`]}),`\n`,_jsx(_components.li,{children:`Made Lightsage attributes take precedence when both prefixes are present.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`lightsage-docs-agent`,children:`Lightsage Docs Agent`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Renamed GitHub pull request commands to `,_jsx(_components.code,{children:`/lightsage run evals`}),`, `,_jsx(_components.code,{children:`/lightsage status`}),`, and `,_jsx(_components.code,{children:`/lightsage help`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Moved the docs pages to `,_jsx(_components.code,{children:`/lightsage-docs-agent/*`}),` with redirects from the previous paths.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`migration-notes-4`,children:`Migration notes`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Update direct API and MCP clients to send the Lightsage header names.`}),`\n`,_jsxs(_components.li,{children:[`Re-run `,_jsx(_components.code,{children:`lightsage auth login`}),` after replacing an older CLI installation.`]}),`\n`,_jsxs(_components.li,{children:[`Update local MCP configuration to use `,_jsx(_components.code,{children:`@lightsage/mcp`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Update GitHub automation and saved comments to use `,_jsx(_components.code,{children:`/lightsage`}),` commands.`]}),`\n`,_jsxs(_components.li,{children:[`Replace `,_jsx(_components.code,{children:`data-sapient-*`}),` attributes with their matching `,_jsx(_components.code,{children:`data-lightsage-*`}),` names.`]}),`\n`,_jsxs(_components.li,{children:[`See `,_jsx(_components.a,{href:`/migration-guide`,children:`Migrate from Sapient to Lightsage`}),` for complete examples.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-08-04`,children:`2026-08-04`}),`\n`,_jsxs(_components.p,{children:[`Lightsage replaced the prompt `,_jsx(_components.code,{children:`is_active`}),` boolean with the prompt lifecycle `,_jsx(_components.code,{children:`status`}),` across the public API and generated CLI contract.`]}),`\n`,_jsx(Heading,{level:`3`,id:`cli-7`,children:`CLI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Removed `,_jsx(_components.code,{children:`--is-active`}),` from `,_jsx(_components.code,{children:`sapient prompts list`}),` and `,_jsx(_components.code,{children:`sapient prompts update`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`--status active`}),` or `,_jsx(_components.code,{children:`--status inactive`}),` when listing or updating prompts.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`api-9`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes-8`,children:[_jsx(Heading,{level:`4`,id:`updated-endpoints-and-schemas-5`,children:`Updated endpoints and schemas`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`GET /v1/prompts`}),` now filters prompt lifecycle state with the `,_jsx(_components.code,{children:`status`}),` query parameter.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`PATCH /v1/prompts/{prompt_id}`}),` now accepts `,_jsx(_components.code,{children:`status`}),` values of `,_jsx(_components.code,{children:`active`}),` or `,_jsx(_components.code,{children:`inactive`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Prompt responses use the required `,_jsx(_components.code,{children:`status`}),` field with `,_jsx(_components.code,{children:`active`}),`, `,_jsx(_components.code,{children:`inactive`}),`, or `,_jsx(_components.code,{children:`archived`}),` values.`]}),`\n`]}),_jsx(Heading,{level:`4`,id:`removed-or-replaced-fields`,children:`Removed or replaced fields`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Removed the `,_jsx(_components.code,{children:`is_active`}),` query parameter from `,_jsx(_components.code,{children:`GET /v1/prompts`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Removed `,_jsx(_components.code,{children:`is_active`}),` from prompt request and response schemas.`]}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`sdk/openapi-7`,children:`SDK/OpenAPI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated the public OpenAPI contract without the prompt `,_jsx(_components.code,{children:`is_active`}),` field.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`migration-notes-5`,children:`Migration notes`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Replace `,_jsx(_components.code,{children:`is_active=true`}),` filters with `,_jsx(_components.code,{children:`status=active`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Replace `,_jsx(_components.code,{children:`is_active=false`}),` filters with `,_jsx(_components.code,{children:`status=inactive`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Replace prompt update payloads such as `,_jsx(_components.code,{children:`{\"is_active\": true}`}),` with `,_jsx(_components.code,{children:`{\"status\": \"active\"}`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-08-03`,children:`2026-08-03`}),`\n`,_jsx(_components.p,{children:`Lightsage added execution prompts to public task and opportunity responses, so API clients receive agent-ready instructions without storing separate prompt fields.`}),`\n`,_jsx(Heading,{level:`3`,id:`api-10`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes-9`,children:[_jsx(Heading,{level:`4`,id:`new-endpoints-4`,children:`New endpoints`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Area`}),_jsx(_components.th,{children:`Endpoint`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Prompt opportunities`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /v1/opportunities`})})]})})]}),_jsx(Heading,{level:`4`,id:`updated-endpoints-and-schemas-6`,children:`Updated endpoints and schemas`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`execution_prompt`}),` to `,_jsx(_components.code,{children:`PublicTask`}),`. Lightsage derives this prompt from the task title, goal, reasoning, evidence, source references, and metadata.`]}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`GET /v1/tasks`}),` so the default `,_jsx(_components.code,{children:`status=active`}),` response includes todo/new and in-progress tasks across persisted task batches. Use `,_jsx(_components.code,{children:`status=todo`}),`, `,_jsx(_components.code,{children:`status=in_progress`}),`, `,_jsx(_components.code,{children:`status=done`}),`, `,_jsx(_components.code,{children:`status=dismissed`}),`, `,_jsx(_components.code,{children:`status=completed`}),`, or `,_jsx(_components.code,{children:`status=all`}),` to request a specific slice.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`execution_prompt`}),` to prompt opportunity responses from `,_jsx(_components.code,{children:`GET /v1/opportunities`}),`. Lightsage derives this prompt from the opportunity title, description, action, evidence, and metadata.`]}),`\n`]}),_jsx(Heading,{level:`4`,id:`removed-or-replaced-endpoints`,children:`Removed or replaced endpoints`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Removed `,_jsx(_components.code,{children:`GET /v1/prompts/actions`}),`. Use `,_jsx(_components.code,{children:`GET /v1/opportunities`}),` for prompt opportunities.`]}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`sdk/openapi-8`,children:`SDK/OpenAPI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Regenerated the public OpenAPI contract with `,_jsx(_components.code,{children:`GET /v1/opportunities`}),`, task execution prompts, opportunity execution prompts, and the updated task status defaults.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-07-25`,children:`2026-07-25`}),`\n`,_jsx(_components.p,{children:`Lightsage added public access to the prompt visibility report, including the overall summary and the topic and prompt rows shown in the dashboard.`}),`\n`,_jsx(Heading,{level:`3`,id:`api-11`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes-10`,children:[_jsx(Heading,{level:`4`,id:`new-endpoints-5`,children:`New endpoints`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Area`}),_jsx(_components.th,{children:`Endpoint`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Prompt visibility report`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /v1/visibility/prompts`})})]})})]}),_jsx(Heading,{level:`4`,id:`updated-endpoints-and-schemas-7`,children:`Updated endpoints and schemas`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`PublicPromptVisibilityReportResponse`}),` with the selected date range, company, overall summary, and nested topic and active prompt rows.`]}),`\n`,_jsx(_components.li,{children:`Added visibility score, visibility rank, share of voice, average position, owned-domain citation count, and run count metrics to summary, topic, and prompt rows.`}),`\n`,_jsxs(_components.li,{children:[`Added optional `,_jsx(_components.code,{children:`start_date`}),` and `,_jsx(_components.code,{children:`end_date`}),` query parameters. When omitted, Lightsage uses the current 30-day range.`]}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`sdk/openapi-9`,children:`SDK/OpenAPI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Regenerated the public OpenAPI contract with the prompt visibility report endpoint and response schemas.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-07-20`,children:`2026-07-20`}),`\n`,_jsx(_components.p,{children:`Lightsage promoted the custom eval execution workflow to first-class CLI commands and added pollable run lifecycle data for active executions.`}),`\n`,_jsx(Heading,{level:`3`,id:`cli-8`,children:`CLI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`sapient run evals`}),` to start configured custom evals.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`sapient list evals`}),` to list active and completed custom eval executions.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`sapient get run --run-id \u003crun_id>`}),` to poll one execution.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`sapient get trace --run-id \u003crun_id>`}),` to retrieve a completed trace or poll trace availability while the execution is active.`]}),`\n`,_jsxs(_components.li,{children:[`Renamed custom eval definition management from `,_jsx(_components.code,{children:`sapient api-performance custom-evals ...`}),` to `,_jsx(_components.code,{children:`sapient api-performance custom-eval-definitions ...`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Removed `,_jsx(_components.code,{children:`sapient eval-runs create`}),`, `,_jsx(_components.code,{children:`sapient eval-runs retrieve`}),`, and `,_jsx(_components.code,{children:`sapient api-performance custom-evals history list`}),` from the generated CLI contract.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`api-12`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes-11`,children:[_jsx(Heading,{level:`4`,id:`new-endpoints-6`,children:`New endpoints`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Area`}),_jsx(_components.th,{children:`Endpoint`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Start custom evals`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`POST /v1/evals/run`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`List custom eval executions`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /v1/evals`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Get execution state`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /v1/runs/{run_id}`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Get execution trace`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /v1/runs/{run_id}/trace`})})]})]})]}),_jsx(Heading,{level:`4`,id:`updated-endpoints-and-schemas-8`,children:`Updated endpoints and schemas`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Custom eval execution responses now include lifecycle status, stage, elapsed time, trace availability, and stable child `,_jsx(_components.code,{children:`run_id`}),` values.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`GET /v1/evals`}),` now returns a full `,_jsx(_components.code,{children:`dashboard_url`}),` for every execution, including the authenticated organization ID and selected run ID.`]}),`\n`,_jsxs(_components.li,{children:[`Moved custom eval definition CRUD from `,_jsx(_components.code,{children:`/v1/api-performance/custom-evals`}),` to `,_jsx(_components.code,{children:`/v1/api-performance/custom-eval-definitions`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Removed `,_jsx(_components.code,{children:`POST /v1/eval-runs`}),`, `,_jsx(_components.code,{children:`GET /v1/eval-runs/{eval_run_id}`}),`, and `,_jsx(_components.code,{children:`GET /v1/api-performance/custom-evals/history`}),`.`]}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`sdk/openapi-10`,children:`SDK/OpenAPI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Regenerated the public OpenAPI contract with the first-class `,_jsx(_components.code,{children:`run`}),`, `,_jsx(_components.code,{children:`list`}),`, and `,_jsx(_components.code,{children:`get`}),` command methods.`]}),`\n`,_jsx(_components.li,{children:`Removed the legacy eval-run and custom eval history operations from generated clients.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`migration-notes-6`,children:`Migration notes`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Replace custom eval `,_jsx(_components.code,{children:`sapient eval-runs create`}),` calls with `,_jsx(_components.code,{children:`sapient run evals`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Replace custom eval history calls with `,_jsx(_components.code,{children:`sapient list evals`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Poll an individual child `,_jsx(_components.code,{children:`run_id`}),` with `,_jsx(_components.code,{children:`sapient get run`}),`, then use the same ID with `,_jsx(_components.code,{children:`sapient get trace`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Replace `,_jsx(_components.code,{children:`sapient api-performance custom-evals`}),` definition commands with `,_jsx(_components.code,{children:`sapient api-performance custom-eval-definitions`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-07-09`,children:`2026-07-09`}),`\n`,_jsx(_components.p,{children:`Lightsage added public visibility metrics for the organization resolved by your API key, so API clients can read share of voice, visibility score, and the full overview without passing a company selector.`}),`\n`,_jsx(Heading,{level:`3`,id:`api-13`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes-12`,children:[_jsx(Heading,{level:`4`,id:`new-endpoints-7`,children:`New endpoints`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Area`}),_jsx(_components.th,{children:`Endpoint`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Visibility`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /v1/visibility/current`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Visibility`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /v1/visibility/overview`})})]})]})]}),_jsx(Heading,{level:`4`,id:`updated-endpoints-and-schemas-9`,children:`Updated endpoints and schemas`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`PublicCurrentVisibilityResponse`}),` with `,_jsx(_components.code,{children:`visibility_score`}),`, `,_jsx(_components.code,{children:`share_of_voice`}),`, ranks, date-range metadata, and `,_jsx(_components.code,{children:`has_data`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`PublicVisibilityOverviewResponse`}),`, mirroring the dashboard overview: a `,_jsx(_components.code,{children:`snapshot`}),` (visibility score, share of voice, average position, ranks, and total citations aggregated over the range), a daily `,_jsx(_components.code,{children:`timeseries`}),` of visibility score, per-platform visibility and citation series in `,_jsx(_components.code,{children:`by_platform`}),`, and a `,_jsx(_components.code,{children:`competitors`}),` comparison.`]}),`\n`,_jsxs(_components.li,{children:[`Added optional `,_jsx(_components.code,{children:`start_date`}),` and `,_jsx(_components.code,{children:`end_date`}),` query parameters to both endpoints. When omitted, Lightsage uses the current 30-day range.`]}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`sdk/openapi-11`,children:`SDK/OpenAPI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Regenerated the public OpenAPI contract with the new visibility endpoint.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-05-30`,children:`2026-05-30`}),`\n`,_jsx(_components.p,{children:`Lightsage updated the public API and generated CLI contract for API Performance source and operation fields. The contract now uses user-facing source and operation terminology consistently, and eval-run creation can infer the source when the selected evals or operations identify one.`}),`\n`,_jsx(Heading,{level:`3`,id:`cli-9`,children:`CLI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated generated API Performance commands to use `,_jsx(_components.code,{children:`--source-id`}),` instead of `,_jsx(_components.code,{children:`--integration-id`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Updated operation selection fields and flags to use `,_jsx(_components.code,{children:`operation_id`}),`, `,_jsx(_components.code,{children:`operation_ids`}),`, and `,_jsx(_components.code,{children:`operation_paths`}),` instead of endpoint naming.`]}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`sapient eval-runs create`}),` for API Performance runs so `,_jsx(_components.code,{children:`source_id`}),` can be inferred from `,_jsx(_components.code,{children:`operation_ids`}),`, `,_jsx(_components.code,{children:`eval_ids`}),`, or an unambiguous `,_jsx(_components.code,{children:`source_type`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`sapient api-performance skills list`}),` to use `,_jsx(_components.code,{children:`--source-id`}),` for API Performance sources and `,_jsx(_components.code,{children:`--skill-source-id`}),` for skill-source filtering.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`api-14`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes-13`,children:[_jsx(Heading,{level:`4`,id:`updated-endpoints-and-schemas-10`,children:`Updated endpoints and schemas`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated API Performance config, evals, starter projects, actions, source targets, docs audit, and eval-run request schemas to expose `,_jsx(_components.code,{children:`source_id`}),` instead of `,_jsx(_components.code,{children:`integration_id`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Updated API Performance eval definitions to expose `,_jsx(_components.code,{children:`operation_id`}),` instead of `,_jsx(_components.code,{children:`endpoint_id`}),`, and to include the related `,_jsx(_components.code,{children:`source_id`}),` and `,_jsx(_components.code,{children:`source`}),` object.`]}),`\n`,_jsxs(_components.li,{children:[`Updated API Performance config and eval-run request schemas to use `,_jsx(_components.code,{children:`operation_ids`}),` and `,_jsx(_components.code,{children:`operation_paths`}),` instead of endpoint field names.`]}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`GET /v1/api-performance/sources`}),` responses to return `,_jsx(_components.code,{children:`operation_count`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Updated skill responses to return `,_jsx(_components.code,{children:`skill_source_id`}),` for the skill repository/source and `,_jsx(_components.code,{children:`source_id`}),` for the API Performance source.`]}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`POST /v1/eval-runs`}),` errors to use public source terminology when a source is missing or ambiguous.`]}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`sdk/openapi-12`,children:`SDK/OpenAPI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Regenerated the public OpenAPI contract for the updated source and operation field names.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`migration-notes-7`,children:`Migration notes`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Replace `,_jsx(_components.code,{children:`integration_id`}),` request fields and CLI flags with `,_jsx(_components.code,{children:`source_id`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Replace `,_jsx(_components.code,{children:`endpoint_id`}),`, `,_jsx(_components.code,{children:`endpoint_ids`}),`, and `,_jsx(_components.code,{children:`endpoint_paths`}),` with `,_jsx(_components.code,{children:`operation_id`}),`, `,_jsx(_components.code,{children:`operation_ids`}),`, and `,_jsx(_components.code,{children:`operation_paths`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`eval_ids`}),`, `,_jsx(_components.code,{children:`operation_ids`}),`, or a single-source `,_jsx(_components.code,{children:`source_type`}),` when you want `,_jsx(_components.code,{children:`sapient eval-runs create`}),` to infer the source.`]}),`\n`,_jsxs(_components.li,{children:[`Update skill filters to use `,_jsx(_components.code,{children:`source_id`}),` for API Performance sources and `,_jsx(_components.code,{children:`skill_source_id`}),` for skill-source IDs.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-05-29`,children:`2026-05-29`}),`\n`,_jsx(_components.p,{children:`Lightsage updated eval-run creation and CLI diagnostics so public runs are immediately pollable and dry-run output does not expose Lightsage API keys.`}),`\n`,_jsx(Heading,{level:`3`,id:`cli-10`,children:`CLI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`sapient --dry-run`}),` to redact `,_jsx(_components.code,{children:`X-Lightsage-Api-Key`}),` and other `,_jsx(_components.code,{children:`*-api-key`}),` headers.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`sapient eval-runs create`}),` now receives a `,_jsx(_components.code,{children:`dispatch_id`}),` and queued child progress when Lightsage can determine the runnable work.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`api-15`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes-14`,children:[_jsx(Heading,{level:`4`,id:`updated-endpoints-and-schemas-11`,children:`Updated endpoints and schemas`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`POST /v1/eval-runs`}),` to create the durable dispatch and child queue items during the create request, while keeping `,_jsx(_components.code,{children:`id`}),` and `,_jsx(_components.code,{children:`job_id`}),` as the parent eval-run job ID.`]}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`GET /v1/eval-runs/{eval_run_id}`}),` to report queued dispatch progress immediately after creation.`]}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`sdk/openapi-13`,children:`SDK/OpenAPI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Regenerated the public OpenAPI contract for the updated eval-run behavior.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`migration-notes-8`,children:`Migration notes`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Use the returned `,_jsx(_components.code,{children:`id`}),` as before when polling eval-run progress.`]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`dispatch_id`}),` when you need to correlate the run with child queue progress.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-05-27`,children:`2026-05-27`}),`\n`,_jsx(_components.p,{children:`Lightsage updated API Performance run retrieval so generated CLI and public API responses show the runtime context used for each run.`}),`\n`,_jsx(Heading,{level:`3`,id:`cli-11`,children:`CLI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`sapient api-performance runs retrieve`}),` to return the stored harness prompt in `,_jsx(_components.code,{children:`prompt_sent`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added runtime trace fields to retrieved API Performance runs: `,_jsx(_components.code,{children:`run_context_sent`}),`, `,_jsx(_components.code,{children:`conversation_turns`}),`, `,_jsx(_components.code,{children:`generated_files`}),`, and `,_jsx(_components.code,{children:`grader_results`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`api-16`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes-15`,children:[_jsx(Heading,{level:`4`,id:`updated-endpoints-and-schemas-12`,children:`Updated endpoints and schemas`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`GET /v1/api-performance/runs/{run_id}`}),` to return the stored run prompt instead of the base eval definition prompt.`]}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`EvalRunDetail`}),` with runtime context and trace fields for docs selection, skills, generated files, conversation turns, and grader results.`]}),`\n`,_jsxs(_components.li,{children:[`Updated API Performance `,_jsx(_components.code,{children:`eval_overrides`}),` on `,_jsx(_components.code,{children:`POST /v1/eval-runs`}),` to apply runtime fields such as `,_jsx(_components.code,{children:`custom_prompt`}),`, `,_jsx(_components.code,{children:`docs_mode`}),`, `,_jsx(_components.code,{children:`include_env_vars`}),`, `,_jsx(_components.code,{children:`env_profile_ids`}),`, `,_jsx(_components.code,{children:`model_ids`}),`, `,_jsx(_components.code,{children:`compare_skills`}),`, `,_jsx(_components.code,{children:`skills_mode`}),`, `,_jsx(_components.code,{children:`skills_enabled`}),`, `,_jsx(_components.code,{children:`runs_per_execution`}),`, and `,_jsx(_components.code,{children:`starting_project_id`}),`.`]}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`sdk/openapi-14`,children:`SDK/OpenAPI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Regenerated the public OpenAPI contract for the updated API Performance run detail schema.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`migration-notes-9`,children:`Migration notes`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`docs_mode: \"exclude\"`}),` in an eval override when you need a no-docs run.`]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`docs_mode: \"include\"`}),` in an eval override when you need to force docs context for a run.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-05-26`,children:`2026-05-26`}),`\n`,_jsx(_components.p,{children:`Lightsage added public eval-run orchestration and custom eval history access to the CLI and public API. You can now start durable eval jobs, poll progress, and list the history rows shown in the custom eval dashboard.`}),`\n`,_jsx(_components.p,{children:`Lightsage also updated API Performance commands to resolve organization scope from the API key. Generated CLI commands no longer require a brand selector, and public responses no longer expose brand IDs.`}),`\n`,_jsx(Heading,{level:`3`,id:`cli-12`,children:`CLI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`sapient eval-runs create`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`sapient eval-runs retrieve`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`sapient api-performance custom-evals history list`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Removed `,_jsx(_components.code,{children:`--brand`}),` from generated API Performance commands.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`api-17`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes-16`,children:[_jsx(Heading,{level:`4`,id:`new-endpoints-8`,children:`New endpoints`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Area`}),_jsx(_components.th,{children:`Endpoint`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Eval runs`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`POST /v1/eval-runs`}),`, `,_jsx(_components.code,{children:`GET /v1/eval-runs/{eval_run_id}`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`API Performance custom eval history`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /v1/api-performance/custom-evals/history`})})]})]})]}),_jsx(Heading,{level:`4`,id:`updated-endpoints-and-schemas-13`,children:`Updated endpoints and schemas`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`PublicPromptEvalRunRequest`}),` for starting prompt eval jobs.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`PublicApiPerformanceEvalRunRequest`}),` for starting API Performance jobs, including `,_jsx(_components.code,{children:`source_type: \"custom_evals\"`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`PublicEvalRunResponse`}),` with job ID, status, stage, dispatch ID, progress, counts, cost estimate, and timestamps.`]}),`\n`,_jsx(_components.li,{children:`Added custom eval history response fields for run IDs, prompts, targets, pass/fail result, score, tool call count, latency, run time, and facets.`}),`\n`,_jsx(_components.li,{children:`Removed public brand selector parameters and request fields from API Performance endpoints.`}),`\n`,_jsx(_components.li,{children:`Removed brand ID fields from public API Performance response schemas.`}),`\n`,_jsxs(_components.li,{children:[`Removed the legacy `,_jsx(_components.code,{children:`include_brand_docs`}),` eval field. Use `,_jsx(_components.code,{children:`docs_mode`}),` instead.`]}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`sdk/openapi-15`,children:`SDK/OpenAPI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Regenerated the public OpenAPI contract for the new eval-runs and custom eval history operations.`}),`\n`,_jsx(_components.li,{children:`Regenerated the public OpenAPI contract without brand selectors or public brand ID fields.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`migration-notes-10`,children:`Migration notes`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`sapient eval-runs create`}),` when you need to trigger prompt, API Performance, or custom eval jobs from automation.`]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`sapient eval-runs retrieve --eval-run-id \u003ceval_run_id>`}),` to poll job progress.`]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`sapient api-performance custom-evals history list --custom-eval-id \u003ccustom_eval_id>`}),` to list evaluated custom eval rows before retrieving a specific run.`]}),`\n`,_jsxs(_components.li,{children:[`Remove `,_jsx(_components.code,{children:`--brand`}),` from API Performance CLI calls. Lightsage now resolves the organization scope from `,_jsx(_components.code,{children:`LIGHTSAGE_API_KEY`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Replace `,_jsx(_components.code,{children:`include_brand_docs`}),` with `,_jsx(_components.code,{children:`docs_mode`}),` when updating eval context.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-05-23`,children:`2026-05-23`}),`\n`,_jsx(_components.p,{children:`Lightsage updated the public API and generated CLI contract for API Performance. This release introduces resource-shaped commands, API Performance actions, skill discovery, starter projects, custom evals, environment profiles, eval runtime selection fields, and source metadata for API, SDK, and CLI runs.`}),`\n`,_jsx(Heading,{level:`3`,id:`cli-13`,children:`CLI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`sapient prompts actions list`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`sapient api-performance diagnose`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`sapient api-performance targets list`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`sapient api-performance config retrieve`}),` and `,_jsx(_components.code,{children:`update`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`sapient api-performance sources list`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`sapient api-performance skills list`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`sapient api-performance evals list`}),`, `,_jsx(_components.code,{children:`retrieve`}),`, and `,_jsx(_components.code,{children:`update`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`sapient api-performance custom-evals list`}),`, `,_jsx(_components.code,{children:`create`}),`, `,_jsx(_components.code,{children:`retrieve`}),`, `,_jsx(_components.code,{children:`update`}),`, and `,_jsx(_components.code,{children:`delete`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`sapient api-performance starter-projects list`}),`, `,_jsx(_components.code,{children:`create`}),`, `,_jsx(_components.code,{children:`retrieve`}),`, `,_jsx(_components.code,{children:`update`}),`, and `,_jsx(_components.code,{children:`delete`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`sapient api-performance actions list`}),`, `,_jsx(_components.code,{children:`refresh`}),`, `,_jsx(_components.code,{children:`retrieve`}),`, `,_jsx(_components.code,{children:`update`}),`, and `,_jsx(_components.code,{children:`verify`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`api-18`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API changes`,id:`view-api-changes-17`,children:[_jsx(Heading,{level:`4`,id:`new-endpoints-9`,children:`New endpoints`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Area`}),_jsx(_components.th,{children:`Endpoint`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Prompt config`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /v1/prompts/config`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Prompt actions`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /v1/prompts/actions`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`API Performance diagnosis`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`POST /v1/api-performance/diagnose`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`API Performance targets`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /v1/api-performance/targets`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`API Performance sources`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /v1/api-performance/sources`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`API Performance skills`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /v1/api-performance/skills`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`API Performance eval definitions`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`GET /v1/api-performance/evals`}),`, `,_jsx(_components.code,{children:`GET /v1/api-performance/evals/{eval_id}`}),`, `,_jsx(_components.code,{children:`PATCH /v1/api-performance/evals/{eval_id}`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`API Performance custom evals`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`GET /v1/api-performance/custom-evals`}),`, `,_jsx(_components.code,{children:`POST /v1/api-performance/custom-evals`}),`, `,_jsx(_components.code,{children:`GET /v1/api-performance/custom-evals/{custom_eval_id}`}),`, `,_jsx(_components.code,{children:`PATCH /v1/api-performance/custom-evals/{custom_eval_id}`}),`, `,_jsx(_components.code,{children:`DELETE /v1/api-performance/custom-evals/{custom_eval_id}`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`API Performance starter projects`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`GET /v1/api-performance/starter-projects`}),`, `,_jsx(_components.code,{children:`POST /v1/api-performance/starter-projects`}),`, `,_jsx(_components.code,{children:`GET /v1/api-performance/starter-projects/{starter_project_id}`}),`, `,_jsx(_components.code,{children:`PATCH /v1/api-performance/starter-projects/{starter_project_id}`}),`, `,_jsx(_components.code,{children:`DELETE /v1/api-performance/starter-projects/{starter_project_id}`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`API Performance actions`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`GET /v1/api-performance/actions`}),`, `,_jsx(_components.code,{children:`POST /v1/api-performance/actions/refresh`}),`, `,_jsx(_components.code,{children:`GET /v1/api-performance/actions/{action_id}`}),`, `,_jsx(_components.code,{children:`PATCH /v1/api-performance/actions/{action_id}`}),`, `,_jsx(_components.code,{children:`POST /v1/api-performance/actions/{action_id}/verify`})]})]})]})]}),_jsx(Heading,{level:`4`,id:`updated-endpoints-and-schemas-14`,children:`Updated endpoints and schemas`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`GET /v1/prompts`}),` and `,_jsx(_components.code,{children:`POST /v1/prompts`}),` with stable generated-client operation metadata.`]}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`GET /v1/prompts/actions`}),` with a `,_jsx(_components.code,{children:`tag`}),` selector for `,_jsx(_components.code,{children:`cited_pages`}),`, `,_jsx(_components.code,{children:`opportunities`}),`, or `,_jsx(_components.code,{children:`all`}),`.`]}),`\n`,_jsx(_components.li,{children:`Updated prompt topic, prompt retrieve, prompt update, and prompt delete operation metadata for generated clients.`}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`/v1/api-performance/config`}),` to include `,_jsx(_components.code,{children:`env_profiles`}),` and `,_jsx(_components.code,{children:`default_env_profile_id`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`GET /v1/api-performance/runs`}),` and `,_jsx(_components.code,{children:`GET /v1/api-performance/runs/{run_id}`}),` run summaries to include a sanitized `,_jsx(_components.code,{children:`source`}),` object with source `,_jsx(_components.code,{children:`id`}),`, `,_jsx(_components.code,{children:`type`}),`, `,_jsx(_components.code,{children:`label`}),`, and public metadata.`]}),`\n`,_jsxs(_components.li,{children:[`Updated API Performance eval definitions with `,_jsx(_components.code,{children:`docs_mode`}),`, `,_jsx(_components.code,{children:`env_profile_ids`}),`, `,_jsx(_components.code,{children:`skills_mode`}),`, `,_jsx(_components.code,{children:`skill_ids`}),`, and `,_jsx(_components.code,{children:`compare_skills`}),`.`]}),`\n`,_jsx(_components.li,{children:`Updated environment profile responses to return environment variable keys instead of secret values.`}),`\n`]}),_jsx(Heading,{level:`4`,id:`replaced-endpoint-groups`,children:`Replaced endpoint groups`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Replaced `,_jsx(_components.code,{children:`/v1/api-performance/evaluation-config`}),` with `,_jsx(_components.code,{children:`/v1/api-performance/config`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Replaced `,_jsx(_components.code,{children:`/v1/api-performance/interfaces`}),` with `,_jsx(_components.code,{children:`/v1/api-performance/sources`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Replaced `,_jsx(_components.code,{children:`/v1/api-performance/operations`}),` and operation prompt routes with `,_jsx(_components.code,{children:`/v1/api-performance/evals`}),` and `,_jsx(_components.code,{children:`/v1/api-performance/custom-evals`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Replaced `,_jsx(_components.code,{children:`/v1/api-performance/use-cases`}),` with `,_jsx(_components.code,{children:`/v1/api-performance/custom-evals`}),`.`]}),`\n`,_jsx(_components.li,{children:`Removed prompt platform and prompt cost-estimate endpoints from the current public contract.`}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`migration-notes-11`,children:`Migration notes`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`sapient api-performance config retrieve`}),` and `,_jsx(_components.code,{children:`update`}),` instead of `,_jsx(_components.code,{children:`sapient api-performance evaluation-config`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`sapient api-performance sources list`}),` instead of `,_jsx(_components.code,{children:`sapient api-performance interfaces list`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`sapient api-performance evals`}),` and `,_jsx(_components.code,{children:`custom-evals`}),` instead of the previous operations, operation-prompts, prompts, and use-cases command groups.`]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`sapient api-performance skills list`}),` to discover skill IDs before setting `,_jsx(_components.code,{children:`skills_mode selected`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`docs_mode`}),` when controlling docs context for evals.`]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`skills_mode selected`}),` with one or more skill IDs to attach specific skill context to an eval.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2026-05-15`,children:`2026-05-15`}),`\n`,_jsx(_components.p,{children:`Lightsage’s public API and generated CLI exposed the original prompt management and API Performance operation-management contract.`}),`\n`,_jsx(Heading,{level:`3`,id:`cli-14`,children:`CLI`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`sapient status get`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`sapient auth status`})}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`sapient prompts list`}),`, `,_jsx(_components.code,{children:`create`}),`, `,_jsx(_components.code,{children:`retrieve`}),`, `,_jsx(_components.code,{children:`update`}),`, and `,_jsx(_components.code,{children:`delete`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`sapient prompts topics list`}),`, `,_jsx(_components.code,{children:`create`}),`, `,_jsx(_components.code,{children:`update`}),`, and `,_jsx(_components.code,{children:`delete`})]}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`sapient prompts platforms list`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`sapient prompts estimate-cost`})}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`sapient api-performance runs list`}),` and `,_jsx(_components.code,{children:`retrieve`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`sapient api-performance evaluation-config retrieve`}),` and `,_jsx(_components.code,{children:`update`})]}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`sapient api-performance interfaces list`})}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`sapient api-performance platforms list`}),` and `,_jsx(_components.code,{children:`estimate-cost`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`sapient api-performance operations list`}),`, `,_jsx(_components.code,{children:`create`}),`, `,_jsx(_components.code,{children:`retrieve`}),`, `,_jsx(_components.code,{children:`update`}),`, and `,_jsx(_components.code,{children:`delete`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`sapient api-performance operations prompts list`}),` and `,_jsx(_components.code,{children:`create`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`sapient api-performance prompts retrieve`}),`, `,_jsx(_components.code,{children:`update`}),`, and `,_jsx(_components.code,{children:`delete`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`sapient api-performance use-cases list`}),`, `,_jsx(_components.code,{children:`create`}),`, `,_jsx(_components.code,{children:`retrieve`}),`, `,_jsx(_components.code,{children:`update`}),`, and `,_jsx(_components.code,{children:`delete`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`api-19`,children:`API`}),`\n`,_jsxs(Accordion,{title:`View API baseline`,id:`view-api-baseline`,children:[_jsx(Heading,{level:`4`,id:`public-endpoints`,children:`Public endpoints`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Area`}),_jsx(_components.th,{children:`Endpoint`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Status and auth`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`GET /v1/status`}),`, `,_jsx(_components.code,{children:`GET /v1/auth/status`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Prompts`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`GET /v1/prompts`}),`, `,_jsx(_components.code,{children:`POST /v1/prompts`}),`, `,_jsx(_components.code,{children:`GET /v1/prompts/{prompt_id}`}),`, `,_jsx(_components.code,{children:`PATCH /v1/prompts/{prompt_id}`}),`, `,_jsx(_components.code,{children:`DELETE /v1/prompts/{prompt_id}`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Prompt topics`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`GET /v1/prompts/topics`}),`, `,_jsx(_components.code,{children:`POST /v1/prompts/topics`}),`, `,_jsx(_components.code,{children:`PATCH /v1/prompts/topics/{topic_id}`}),`, `,_jsx(_components.code,{children:`DELETE /v1/prompts/topics/{topic_id}`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Prompt catalog and cost`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`GET /v1/prompts/platforms`}),`, `,_jsx(_components.code,{children:`GET /v1/prompts/estimate-cost`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`API Performance runs`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`GET /v1/api-performance/runs`}),`, `,_jsx(_components.code,{children:`GET /v1/api-performance/runs/{run_id}`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`API Performance config`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`GET /v1/api-performance/evaluation-config`}),`, `,_jsx(_components.code,{children:`PUT /v1/api-performance/evaluation-config`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`API Performance interfaces and platforms`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`GET /v1/api-performance/interfaces`}),`, `,_jsx(_components.code,{children:`GET /v1/api-performance/platforms`}),`, `,_jsx(_components.code,{children:`GET /v1/api-performance/platforms/estimate-cost`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`API Performance operations`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`GET /v1/api-performance/operations`}),`, `,_jsx(_components.code,{children:`POST /v1/api-performance/operations`}),`, `,_jsx(_components.code,{children:`GET /v1/api-performance/operations/{operation_id}`}),`, `,_jsx(_components.code,{children:`PATCH /v1/api-performance/operations/{operation_id}`}),`, `,_jsx(_components.code,{children:`DELETE /v1/api-performance/operations/{operation_id}`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`API Performance operation prompts`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`GET /v1/api-performance/operations/{operation_id}/prompts`}),`, `,_jsx(_components.code,{children:`POST /v1/api-performance/operations/{operation_id}/prompts`}),`, `,_jsx(_components.code,{children:`GET /v1/api-performance/prompts/{prompt_id}`}),`, `,_jsx(_components.code,{children:`PATCH /v1/api-performance/prompts/{prompt_id}`}),`, `,_jsx(_components.code,{children:`DELETE /v1/api-performance/prompts/{prompt_id}`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`API Performance use cases`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`GET /v1/api-performance/use-cases`}),`, `,_jsx(_components.code,{children:`POST /v1/api-performance/use-cases`}),`, `,_jsx(_components.code,{children:`GET /v1/api-performance/use-cases/{use_case_id}`}),`, `,_jsx(_components.code,{children:`PATCH /v1/api-performance/use-cases/{use_case_id}`}),`, `,_jsx(_components.code,{children:`DELETE /v1/api-performance/use-cases/{use_case_id}`})]})]})]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Changelog","description":"Developer-facing Lightsage CLI and public API changes.","icon":"clock-rotate-left","href":"/changelog"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Changelog","slug":"changelog","depth":1,"children":[]},{"title":"2026-10-26","slug":"2026-10-26","depth":2,"children":[{"title":"CLI","slug":"cli","depth":3,"children":[]},{"title":"API","slug":"api","depth":3,"children":[]},{"title":"MCP","slug":"mcp","depth":3,"children":[]}]},{"title":"2026-09-26","slug":"2026-09-26","depth":2,"children":[{"title":"CLI","slug":"cli-2","depth":3,"children":[]},{"title":"API","slug":"api-2","depth":3,"children":[]},{"title":"MCP","slug":"mcp-2","depth":3,"children":[]},{"title":"SDK/OpenAPI","slug":"sdk/openapi","depth":3,"children":[]}]},{"title":"2026-09-15","slug":"2026-09-15","depth":2,"children":[{"title":"CLI","slug":"cli-3","depth":3,"children":[]},{"title":"API","slug":"api-3","depth":3,"children":[]},{"title":"SDK/OpenAPI","slug":"sdk/openapi-2","depth":3,"children":[]},{"title":"Migration notes","slug":"migration-notes","depth":3,"children":[]}]},{"title":"2026-09-14","slug":"2026-09-14","depth":2,"children":[{"title":"CLI","slug":"cli-4","depth":3,"children":[]},{"title":"API","slug":"api-4","depth":3,"children":[]},{"title":"SDK/OpenAPI","slug":"sdk/openapi-3","depth":3,"children":[]},{"title":"Migration notes","slug":"migration-notes-2","depth":3,"children":[]}]},{"title":"2026-09-06","slug":"2026-09-06","depth":2,"children":[{"title":"API","slug":"api-5","depth":3,"children":[]},{"title":"SDK/OpenAPI","slug":"sdk/openapi-4","depth":3,"children":[]},{"title":"Migration notes","slug":"migration-notes-3","depth":3,"children":[]}]},{"title":"2026-09-03","slug":"2026-09-03","depth":2,"children":[{"title":"API","slug":"api-6","depth":3,"children":[]},{"title":"MCP","slug":"mcp-3","depth":3,"children":[]},{"title":"SDK/OpenAPI","slug":"sdk/openapi-5","depth":3,"children":[]}]},{"title":"2026-08-21","slug":"2026-08-21","depth":2,"children":[{"title":"CLI","slug":"cli-5","depth":3,"children":[]},{"title":"API","slug":"api-7","depth":3,"children":[]},{"title":"SDK/OpenAPI","slug":"sdk/openapi-6","depth":3,"children":[]}]},{"title":"2026-08-10","slug":"2026-08-10","depth":2,"children":[{"title":"CLI","slug":"cli-6","depth":3,"children":[]},{"title":"API","slug":"api-8","depth":3,"children":[]},{"title":"MCP","slug":"mcp-4","depth":3,"children":[]},{"title":"Agent Tracker","slug":"agent-tracker","depth":3,"children":[]},{"title":"Lightsage Docs Agent","slug":"lightsage-docs-agent","depth":3,"children":[]},{"title":"Migration notes","slug":"migration-notes-4","depth":3,"children":[]}]},{"title":"2026-08-04","slug":"2026-08-04","depth":2,"children":[{"title":"CLI","slug":"cli-7","depth":3,"children":[]},{"title":"API","slug":"api-9","depth":3,"children":[]},{"title":"SDK/OpenAPI","slug":"sdk/openapi-7","depth":3,"children":[]},{"title":"Migration notes","slug":"migration-notes-5","depth":3,"children":[]}]},{"title":"2026-08-03","slug":"2026-08-03","depth":2,"children":[{"title":"API","slug":"api-10","depth":3,"children":[]},{"title":"SDK/OpenAPI","slug":"sdk/openapi-8","depth":3,"children":[]}]},{"title":"2026-07-25","slug":"2026-07-25","depth":2,"children":[{"title":"API","slug":"api-11","depth":3,"children":[]},{"title":"SDK/OpenAPI","slug":"sdk/openapi-9","depth":3,"children":[]}]},{"title":"2026-07-20","slug":"2026-07-20","depth":2,"children":[{"title":"CLI","slug":"cli-8","depth":3,"children":[]},{"title":"API","slug":"api-12","depth":3,"children":[]},{"title":"SDK/OpenAPI","slug":"sdk/openapi-10","depth":3,"children":[]},{"title":"Migration notes","slug":"migration-notes-6","depth":3,"children":[]}]},{"title":"2026-07-09","slug":"2026-07-09","depth":2,"children":[{"title":"API","slug":"api-13","depth":3,"children":[]},{"title":"SDK/OpenAPI","slug":"sdk/openapi-11","depth":3,"children":[]}]},{"title":"2026-05-30","slug":"2026-05-30","depth":2,"children":[{"title":"CLI","slug":"cli-9","depth":3,"children":[]},{"title":"API","slug":"api-14","depth":3,"children":[]},{"title":"SDK/OpenAPI","slug":"sdk/openapi-12","depth":3,"children":[]},{"title":"Migration notes","slug":"migration-notes-7","depth":3,"children":[]}]},{"title":"2026-05-29","slug":"2026-05-29","depth":2,"children":[{"title":"CLI","slug":"cli-10","depth":3,"children":[]},{"title":"API","slug":"api-15","depth":3,"children":[]},{"title":"SDK/OpenAPI","slug":"sdk/openapi-13","depth":3,"children":[]},{"title":"Migration notes","slug":"migration-notes-8","depth":3,"children":[]}]},{"title":"2026-05-27","slug":"2026-05-27","depth":2,"children":[{"title":"CLI","slug":"cli-11","depth":3,"children":[]},{"title":"API","slug":"api-16","depth":3,"children":[]},{"title":"SDK/OpenAPI","slug":"sdk/openapi-14","depth":3,"children":[]},{"title":"Migration notes","slug":"migration-notes-9","depth":3,"children":[]}]},{"title":"2026-05-26","slug":"2026-05-26","depth":2,"children":[{"title":"CLI","slug":"cli-12","depth":3,"children":[]},{"title":"API","slug":"api-17","depth":3,"children":[]},{"title":"SDK/OpenAPI","slug":"sdk/openapi-15","depth":3,"children":[]},{"title":"Migration notes","slug":"migration-notes-10","depth":3,"children":[]}]},{"title":"2026-05-23","slug":"2026-05-23","depth":2,"children":[{"title":"CLI","slug":"cli-13","depth":3,"children":[]},{"title":"API","slug":"api-18","depth":3,"children":[]},{"title":"Migration notes","slug":"migration-notes-11","depth":3,"children":[]}]},{"title":"2026-05-15","slug":"2026-05-15","depth":2,"children":[{"title":"CLI","slug":"cli-14","depth":3,"children":[]},{"title":"API","slug":"api-19","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"subdomain":"sapient-14d4e375","siteName":"Lightsage","title":"Changelog - Lightsage","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-27T04:44:43.741Z","originalFileLocation":"changelog.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Developer-facing Lightsage CLI and public API changes.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Lightsage\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Changelog - Lightsage\">\u003cmeta data-mint-head property=\"og:description\" content=\"Developer-facing Lightsage CLI and public API changes.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Lightsage\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://lightsage.com/docs/changelog\\">\\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://sapient-14d4e375.mintlify.app/\_mintlify/api/og/v2?division=Documentation\\u0026amp;title=Changelog\\u0026amp;description=Developer-facing+Lightsage+CLI+and+public+API+changes.\\u0026amp;theme=dd8ce0054346ff07fc865000\\u0026amp;signature=3fde2941d71840abf7b8a5bc55b2579ae784e92fcba2678d0443631ead5a51c8\\">\\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Changelog - Lightsage\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Developer-facing Lightsage CLI and public API changes.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://sapient-14d4e375.mintlify.app/\_mintlify/api/og/v2?division=Documentation\\u0026amp;title=Changelog\\u0026amp;description=Developer-facing+Lightsage+CLI+and+public+API+changes.\\u0026amp;theme=dd8ce0054346ff07fc865000\\u0026amp;signature=3fde2941d71840abf7b8a5bc55b2579ae784e92fcba2678d0443631ead5a51c8\\">\\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Lightsage\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0EA5E9\">\u003clink data-mint-head rel=\"canonical\" href=\"https://lightsage.com/docs/changelog\\">\\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/changelog.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\\",\\"@graph\\":\[{\\"@type\\":\\"Organization\\",\\"@id\\":\\"https://lightsage.com/#organization\\",\\"name\\":\\"Lightsage\\",\\"url\\":\\"https://lightsage.com\\",\\"logo\\":{\\"@type\\":\\"ImageObject\\",\\"url\\":\\"https://mintcdn.com/sapient-14d4e375/0RQiSxJPQv6MyuZt/images/lightsage-logo-with-text-light.svg?fit=max\\u0026auto=format\\u0026n=0RQiSxJPQv6MyuZt\\u0026q=85\\u0026s=843d0563baa54c778891f942711ab938\\"}},{\\"@type\\":\\"WebSite\\",\\"@id\\":\\"https://lightsage.com/docs#website\\",\\"name\\":\\"Lightsage\\",\\"url\\":\\"https://lightsage.com/docs\\",\\"publisher\\":{\\"@id\\":\\"https://lightsage.com/#organization\\"}},{\\"@type\\":\\"WebPage\\",\\"@id\\":\\"https://lightsage.com/docs/changelog#webpage\\",\\"url\\":\\"https://lightsage.com/docs/changelog\\",\\"name\\":\\"Changelog\\",\\"description\\":\\"Developer-facing Lightsage CLI and public API changes.\",\"dateModified\":\"2026-10-27T04:44:43.741Z\",\"isPartOf\":{\"@id\":\"https://lightsage.com/docs#website\\"}},{\\"@type\\":\[\\"Article\\",\\"TechArticle\\"\],\\"@id\\":\\"https://lightsage.com/docs/changelog#article\\",\\"headline\\":\\"Changelog\\",\\"name\\":\\"Changelog\\",\\"description\\":\\"Developer-facing Lightsage CLI and public API changes.\",\"url\":\"https://lightsage.com/docs/changelog\\",\\"mainEntityOfPage\\":{\\"@id\\":\\"https://lightsage.com/docs/changelog#webpage\\"},\\"dateModified\\":\\"2026-10-27T04:44:43.741Z\\",\\"publisher\\":{\\"@id\\":\\"https://lightsage.com/#organization\\"},\\"isPartOf\\":{\\"@id\\":\\"https://lightsage.com/docs#website\\"}}\]}\\u003c/script>\\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\\",\\"@type\\":\\"WebSite\\",\\"name\\":\\"Lightsage\\",\\"creator\\":{\\"@type\\":\\"Organization\\",\\"name\\":\\"Mintlify\\",\\"url\\":\\"https://mintlify.com\\"}}\\u003c/script>","siteName":"Lightsage","nav":{"global":null,"tabs":\[{"tab":"Documentation","pages":\[{"title":"Documentation","href":""}\]},{"tab":"CLI Reference","pages":[{"title":"CLI Reference","href":"/cli-reference"}]},{"tab":"MCP Reference","pages":[{"title":"MCP Reference","href":"/mcp-reference"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"tab":"Changelog","pages":[{"title":"Changelog","icon":"clock-rotate-left","href":"/changelog"}]}]},"title":"Changelog - Lightsage","buildId":"dpl_GvhK4qVXq51DpfYJLCtPpYNN4YHN","deploymentId":"dpl_GvhK4qVXq51DpfYJLCtPpYNN4YHN","dynamics":[],"chunks":[]}