feat(sdk): make checkAgentsInstalled runtime-aware (#2402) (#2413)

This commit is contained in:
Tom Boucher
2026-04-18 12:22:36 -04:00
committed by GitHub
parent 8ac02084be
commit 381c138534
6 changed files with 368 additions and 20 deletions

View File

@@ -27,7 +27,7 @@ import { loadConfig } from '../config.js';
import { resolveModel, MODEL_PROFILES } from './config-query.js';
import { findPhase } from './phase.js';
import { roadmapGetPhase, getMilestoneInfo } from './roadmap.js';
import { planningPaths, normalizePhaseName, toPosixPath, resolveAgentsDir } from './helpers.js';
import { planningPaths, normalizePhaseName, toPosixPath, resolveAgentsDir, detectRuntime } from './helpers.js';
import type { QueryHandler } from './utils.js';
// ─── Internal helpers ──────────────────────────────────────────────────────
@@ -79,10 +79,16 @@ function getLatestCompletedMilestone(projectDir: string): { version: string; nam
/**
* Check which GSD agents are installed on disk.
*
* Runtime-aware per issue #2402: detects the invoking runtime
* (`GSD_RUNTIME` → `config.runtime` → 'claude') and probes that runtime's
* canonical `agents/` directory. `GSD_AGENTS_DIR` still short-circuits.
*
* Port of checkAgentsInstalled from core.cjs lines 1274-1306.
*/
function checkAgentsInstalled(): { agents_installed: boolean; missing_agents: string[] } {
const agentsDir = resolveAgentsDir();
function checkAgentsInstalled(config?: { runtime?: unknown }): { agents_installed: boolean; missing_agents: string[] } {
const runtime = detectRuntime(config);
const agentsDir = resolveAgentsDir(runtime);
const expectedAgents = Object.keys(MODEL_PROFILES);
if (!existsSync(agentsDir)) {
@@ -171,7 +177,7 @@ export function withProjectRoot(
): Record<string, unknown> {
result.project_root = projectDir;
const agentStatus = checkAgentsInstalled();
const agentStatus = checkAgentsInstalled(config);
result.agents_installed = agentStatus.agents_installed;
result.missing_agents = agentStatus.missing_agents;