Skip to content

Commit 80f257a

Browse files
committed
fix(cli): only include skills in the update object when there are successfulSkills
1 parent f6bf040 commit 80f257a

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

packages/cli/src/__tests__/services/install/install.service.test.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,22 @@ describe('install service', () => {
145145
expect(report.phases.installed).toBe(1);
146146
});
147147

148+
it('does not add skills field to config when no skills are in the install config (issue #64)', async () => {
149+
const configWithoutSkills = {
150+
environments: ['codex' as const],
151+
phases: ['requirements' as const],
152+
skills: [],
153+
mcpServers: {}
154+
};
155+
156+
const report = await reconcileAndInstall(configWithoutSkills, {});
157+
158+
expect(report.skills.installed).toBe(0);
159+
expect(mockConfigManager.update).toHaveBeenCalledWith(
160+
expect.not.objectContaining({ skills: expect.anything() })
161+
);
162+
});
163+
148164
it('reports skill failures as warnings and continues', async () => {
149165
mockSkillManager.addSkill.mockRejectedValue(new Error('network down'));
150166

packages/cli/src/services/install/install.service.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,10 @@ export async function reconcileAndInstall(
133133
const updates: Record<string, unknown> = {
134134
environments: successfulEnvironments,
135135
phases: successfulPhases,
136-
skills: successfulSkills,
137136
};
137+
if (successfulSkills.length > 0) {
138+
updates.skills = successfulSkills;
139+
}
138140
if (config.mcpServers && Object.keys(config.mcpServers).length > 0) {
139141
updates.mcpServers = config.mcpServers;
140142
}

0 commit comments

Comments
 (0)