mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-11-14 02:29:33 +01:00
feat(settings): the codeman agent skill is on by default
agentSkillEnabled now reads an absent key as ON, the way workspaceHooksEnabled does: only an explicit false turns it off. A new session therefore finds the codeman skill in its folder without a setting first, and with it the verbs that hand work to other CLIs and to the local model on this Mac. Settings shows the switch on for the same absent key. The injection itself is unchanged: add-only, marker-owned, never through a symlink, never for remote sessions or a plain shell. Turning the setting off still removes nothing already written. The quick-start test now pins the new default (injected on an absent key, nothing after an explicit false), and the docs that said "default off" say when that changed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
91ca7e54de
commit
0aa34da80f
12 files changed
+51
-47
No files matched your search
+32
-32
@@ -353,32 +353,21 @@ describe('Agent skill injection (agentSkillEnabled)', () => {
|
||||
}
|
||||
});
|
||||
|
||||
it('does not inject by default, accepts the setting via PUT, then injects on quick-start', async () => {
|
||||
// 1. Default OFF: a claude quick-start creates the case without the skill.
|
||||
const offCase = 'test-skill-off-' + Date.now();
|
||||
createdCases.push(offCase);
|
||||
const offResponse = await fetch(`${baseUrl}/api/quick-start`, {
|
||||
it('does not inject for shell-mode quick-start even when enabled', async () => {
|
||||
const shellCase = 'test-skill-shell-' + Date.now();
|
||||
createdCases.push(shellCase);
|
||||
const response = await fetch(`${baseUrl}/api/quick-start`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ caseName: offCase }),
|
||||
body: JSON.stringify({ caseName: shellCase, mode: 'shell' }),
|
||||
});
|
||||
const offData = await offResponse.json();
|
||||
expect(offData.success).toBe(true);
|
||||
expect(existsSync(join(CASES_DIR, offCase, '.claude', 'skills', 'codeman'))).toBe(false);
|
||||
const data = await response.json();
|
||||
expect(data.success).toBe(true);
|
||||
expect(existsSync(join(CASES_DIR, shellCase, '.claude', 'skills', 'codeman'))).toBe(false);
|
||||
});
|
||||
|
||||
// 2. The `.strict()` settings schema accepts the new synced key.
|
||||
const putResponse = await fetch(`${baseUrl}/api/settings`, {
|
||||
method: 'PUT',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ agentSkillEnabled: true }),
|
||||
});
|
||||
const putData = await putResponse.json();
|
||||
expect(putData.success).toBe(true);
|
||||
|
||||
// 3. The server's settings read is cached ~2s; outwait it so the create sees the toggle.
|
||||
await new Promise((resolve) => setTimeout(resolve, 2100));
|
||||
|
||||
// 4. Quick-start now injects the marker-carrying skill into the new case.
|
||||
it('injects by default, accepts the setting via PUT, then stops injecting on quick-start', async () => {
|
||||
// 1. Default ON: a claude quick-start writes the marker-carrying skill into the new case.
|
||||
const onCase = 'test-skill-on-' + Date.now();
|
||||
createdCases.push(onCase);
|
||||
const onResponse = await fetch(`${baseUrl}/api/quick-start`, {
|
||||
@@ -396,18 +385,29 @@ describe('Agent skill injection (agentSkillEnabled)', () => {
|
||||
expect(skillMd).toContain('<!-- codeman-managed-agent-skill');
|
||||
expect(existsSync(join(skillDir, 'reference', 'endpoints.md'))).toBe(true);
|
||||
expect(existsSync(join(skillDir, 'reference', 'recipes.md'))).toBe(true);
|
||||
}, 30000);
|
||||
|
||||
it('does not inject for shell-mode quick-start even when enabled', async () => {
|
||||
const shellCase = 'test-skill-shell-' + Date.now();
|
||||
createdCases.push(shellCase);
|
||||
const response = await fetch(`${baseUrl}/api/quick-start`, {
|
||||
// 2. The `.strict()` settings schema accepts the synced key, and an explicit false is OFF.
|
||||
const putResponse = await fetch(`${baseUrl}/api/settings`, {
|
||||
method: 'PUT',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ agentSkillEnabled: false }),
|
||||
});
|
||||
const putData = await putResponse.json();
|
||||
expect(putData.success).toBe(true);
|
||||
|
||||
// 3. The server's settings read is cached ~2s; outwait it so the create sees the toggle.
|
||||
await new Promise((resolve) => setTimeout(resolve, 2100));
|
||||
|
||||
// 4. Quick-start now creates the case without the skill.
|
||||
const offCase = 'test-skill-off-' + Date.now();
|
||||
createdCases.push(offCase);
|
||||
const offResponse = await fetch(`${baseUrl}/api/quick-start`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ caseName: shellCase, mode: 'shell' }),
|
||||
body: JSON.stringify({ caseName: offCase }),
|
||||
});
|
||||
const data = await response.json();
|
||||
expect(data.success).toBe(true);
|
||||
expect(existsSync(join(CASES_DIR, shellCase, '.claude', 'skills', 'codeman'))).toBe(false);
|
||||
});
|
||||
const offData = await offResponse.json();
|
||||
expect(offData.success).toBe(true);
|
||||
expect(existsSync(join(CASES_DIR, offCase, '.claude', 'skills', 'codeman'))).toBe(false);
|
||||
}, 30000);
|
||||
});
|
||||
Reference in new issue
Block a user