Skip to content

Commit a919c47

Browse files
committed
fix: no environments defined when running skill add
1 parent afb847a commit a919c47

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

packages/cli/src/__tests__/lib/SkillManager.test.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,7 @@ describe("SkillManager", () => {
549549
});
550550

551551
it("should create config if missing", async () => {
552+
jest.spyOn(skillManager as any, 'isInteractiveTerminal').mockReturnValue(true);
552553
mockConfigManager.read.mockResolvedValue(null);
553554
mockConfigManager.create.mockResolvedValue({
554555
environments: [],
@@ -569,6 +570,7 @@ describe("SkillManager", () => {
569570
});
570571

571572
it("should select environments when config exists but has no environments", async () => {
573+
jest.spyOn(skillManager as any, 'isInteractiveTerminal').mockReturnValue(true);
572574
mockConfigManager.read.mockResolvedValue({
573575
environments: [],
574576
} as any);
@@ -585,6 +587,17 @@ describe("SkillManager", () => {
585587
});
586588
});
587589

590+
it("should throw in non-interactive mode when no environments configured", async () => {
591+
jest.spyOn(skillManager as any, 'isInteractiveTerminal').mockReturnValue(false);
592+
mockConfigManager.read.mockResolvedValue({
593+
environments: [],
594+
} as any);
595+
596+
await expect(
597+
skillManager.addSkill(mockRegistryId, mockSkillName),
598+
).rejects.toThrow('No environments configured. Run "ai-devkit init" or add "environments" in .ai-devkit.json.');
599+
});
600+
588601
it("should throw error if no skill-capable environments configured", async () => {
589602
mockConfigManager.read.mockResolvedValue({
590603
environments: ["windsurf", "gemini"],

packages/cli/src/lib/SkillManager.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,11 @@ export class SkillManager {
131131
config = await this.configManager.create();
132132
}
133133

134-
if (config.environments.length === 0) {
134+
if (!config.environments || config.environments.length === 0) {
135+
if (!this.isInteractiveTerminal()) {
136+
throw new Error('No environments configured. Run "ai-devkit init" or add "environments" in .ai-devkit.json.');
137+
}
138+
135139
const selectedEnvs = await this.environmentSelector.selectSkillEnvironments();
136140
config.environments = selectedEnvs;
137141
await this.configManager.update({ environments: selectedEnvs });
@@ -175,7 +179,7 @@ export class SkillManager {
175179
const seenSkills = new Set<string>();
176180

177181
const config = await this.configManager.read();
178-
if (!config || config.environments.length === 0) {
182+
if (!config || !config.environments || config.environments.length === 0) {
179183
ui.warning('No .ai-devkit.json found or no environments configured.');
180184
return [];
181185
}
@@ -234,7 +238,7 @@ export class SkillManager {
234238
validateSkillName(skillName);
235239

236240
const config = await this.configManager.read();
237-
if (!config || config.environments.length === 0) {
241+
if (!config || !config.environments || config.environments.length === 0) {
238242
throw new Error('No .ai-devkit.json found. Run: ai-devkit init');
239243
}
240244

0 commit comments

Comments
 (0)