Skip to content

Commit 2f68ae2

Browse files
committed
Activate coding skill when entering code mode
1 parent 3e87f23 commit 2f68ae2

File tree

3 files changed

+49
-5
lines changed

3 files changed

+49
-5
lines changed

Diff for: packages/host/app/services/matrix-service.ts

+15
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ import type RealmService from './realm';
9696
import type RealmServerService from './realm-server';
9797
import type ResetService from './reset';
9898
import type * as MatrixSDK from 'matrix-js-sdk';
99+
import AddSkillsToRoomCommand from '../commands/add-skills-to-room';
99100

100101
const { matrixURL } = ENV;
101102
const MAX_CARD_SIZE_KB = 60;
@@ -1379,6 +1380,20 @@ export default class MatrixService extends Service {
13791380
}
13801381
}
13811382

1383+
async activateCodingSkill() {
1384+
if (!this.currentRoomId) {
1385+
return;
1386+
}
1387+
1388+
let addSkillsToRoomCommand = new AddSkillsToRoomCommand(
1389+
this.commandService.commandContext,
1390+
);
1391+
await addSkillsToRoomCommand.execute({
1392+
roomId: this.currentRoomId,
1393+
skills: await this.loadDefaultSkills('code'),
1394+
});
1395+
}
1396+
13821397
async setLLMForCodeMode() {
13831398
this.setLLMModel('anthropic/claude-3.5-sonnet');
13841399
}

Diff for: packages/host/app/services/operator-mode-state-service.ts

+1
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@ export default class OperatorModeStateService extends Service {
318318

319319
if (submode === Submodes.Code) {
320320
this.matrixService.setLLMForCodeMode();
321+
this.matrixService.activateCodingSkill();
321322
}
322323
}
323324

Diff for: packages/matrix/tests/skills.spec.ts

+33-5
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ test.describe('Skills', () => {
6666
).toHaveClass('switch checked');
6767
}
6868

69-
const defaultSkillCard = `https://cardstack.com/base/SkillCard/card-editing`;
69+
const defaultSkillCardForInteractMode = `https://cardstack.com/base/SkillCard/card-editing`;
70+
const defaultSkillCardForCodeMode = `https://cardstack.com/base/SkillCard/code-module-editing`;
7071
const skillCard1 = `${appURL}/skill-pirate-speak`;
7172
const skillCard2 = `${appURL}/skill-seo`;
7273
const skillCard3 = `${appURL}/skill-card-title-editing`;
@@ -111,10 +112,14 @@ test.describe('Skills', () => {
111112
).toHaveText('Hide');
112113
await expect(page.locator('[data-test-pill-menu-item]')).toHaveCount(1);
113114
await expect(
114-
page.locator(`[data-test-pill-menu-item="${defaultSkillCard}"]`),
115+
page.locator(
116+
`[data-test-pill-menu-item="${defaultSkillCardForInteractMode}"]`,
117+
),
115118
).toHaveCount(1);
116119
await expect(
117-
page.locator(`[data-test-card-pill-toggle="${defaultSkillCard}-on"]`),
120+
page.locator(
121+
`[data-test-card-pill-toggle="${defaultSkillCardForInteractMode}-on"]`,
122+
),
118123
).toHaveCount(1);
119124
await expect(page.locator('[data-test-pill-menu-add-button]')).toHaveCount(
120125
1,
@@ -172,6 +177,25 @@ test.describe('Skills', () => {
172177
);
173178
});
174179

180+
test('it will attach code editing skill in code mode by default', async ({
181+
page,
182+
}) => {
183+
await login(page, 'user1', 'pass', { url: appURL });
184+
// await getRoomId(page);
185+
// await expect(page.locator('[data-test-new-session]')).toHaveCount(1);
186+
// await expect(page.locator('[data-test-skill-menu]')).toHaveCount(1);
187+
188+
await page.locator('[data-test-submode-switcher] button').click();
189+
await page.locator('[data-test-boxel-menu-item-text="Code"]').click();
190+
await page.locator('[data-test-skill-menu]').hover();
191+
await page.locator('[data-test-pill-menu-header-button]').click();
192+
await expect(
193+
page.locator(
194+
`[data-test-attached-card="${defaultSkillCardForCodeMode}"]`,
195+
),
196+
).toHaveCount(1);
197+
});
198+
175199
test(`room skills state does not leak when switching rooms`, async ({
176200
page,
177201
}) => {
@@ -255,7 +279,9 @@ test.describe('Skills', () => {
255279
await page.locator('[data-test-skill-menu]').hover();
256280
await page.locator('[data-test-pill-menu-header-button]').click();
257281
await page
258-
.locator(`[data-test-card-pill-toggle="${defaultSkillCard}-on"]`)
282+
.locator(
283+
`[data-test-card-pill-toggle="${defaultSkillCardForInteractMode}-on"]`,
284+
)
259285
.click(); // toggle off default skill card
260286
await page
261287
.locator(`[data-test-card-pill-toggle="${skillCard1}-on"]`)
@@ -264,7 +290,9 @@ test.describe('Skills', () => {
264290
.locator(`[data-test-card-pill-toggle="${skillCard2}-on"]`)
265291
.click(); // toggle off skill 2
266292
await expect(
267-
page.locator(`[data-test-card-pill-toggle="${defaultSkillCard}-off"]`),
293+
page.locator(
294+
`[data-test-card-pill-toggle="${defaultSkillCardForInteractMode}-off"]`,
295+
),
268296
).toHaveCount(1);
269297
await expect(
270298
page.locator(`[data-test-card-pill-toggle="${skillCard1}-off"]`),

0 commit comments

Comments
 (0)