Download apps/shared/src/skill-scaffold.test.ts from SaylorTwift/hermes-agent: direct link, hf CLI and curl.
- Browser
- Download file 2.22 kB
-
https://huggingface.co/SaylorTwift/hermes-agent/resolve/main/apps/shared/src/skill-scaffold.test.ts
- Command line
-
hf download hf://SaylorTwift/hermes-agent/apps/shared/src/skill-scaffold.test.ts
-
curl -L -o skill-scaffold.test.ts https://huggingface.co/SaylorTwift/hermes-agent/resolve/main/apps/shared/src/skill-scaffold.test.ts
2.22 kB
| import { describe, expect, it } from 'vitest' | |
| import { skillInvocationText } from './skill-scaffold' | |
| // Byte-identical to what agent/skill_commands.py emits — a desktop/TUI talking | |
| // to an older gateway sees exactly these strings. | |
| const BODY = 'SPIN UP A WORKTREE. Never edit the primary checkout.\n'.repeat(20) | |
| const singleSkill = (instruction?: string) => | |
| [ | |
| '[IMPORTANT: The user has invoked the "work" skill, indicating they want you to follow its instructions.', | |
| 'The full skill content is loaded below.]', | |
| '', | |
| BODY, | |
| '', | |
| '[Skill directory: /Users/x/skills/work]', | |
| ...(instruction | |
| ? ['', `The user has provided the following instruction alongside the skill invocation: ${instruction}`] | |
| : []) | |
| ].join('\n') | |
| const bundle = (instruction?: string) => | |
| [ | |
| '[IMPORTANT: The user has invoked the "/clean /work" stacked skill bundle, loading 2 skills together.]', | |
| '', | |
| 'Skills loaded: clean, work', | |
| ...(instruction ? ['', `User instruction: ${instruction}`] : []), | |
| '', | |
| '[Loaded as part of the stacked skill invocation "clean".]', | |
| '', | |
| BODY | |
| ].join('\n') | |
| describe('skillInvocationText', () => { | |
| it('renders a single-skill turn as the invocation, never the body', () => { | |
| const projected = skillInvocationText(singleSkill('fix the title leak')) | |
| expect(projected).toBe('/work fix the title leak') | |
| expect(projected).not.toContain('WORKTREE') | |
| }) | |
| it('renders a bare invocation as just the command', () => { | |
| expect(skillInvocationText(singleSkill())).toBe('/work') | |
| }) | |
| it('renders a bundle turn as the typed keys plus the instruction', () => { | |
| const projected = skillInvocationText(bundle('ship it')) | |
| expect(projected).toBe('/clean /work ship it') | |
| expect(projected).not.toContain('WORKTREE') | |
| }) | |
| it('collapses newlines in a multi-line instruction so the bubble stays one line', () => { | |
| expect(skillInvocationText(singleSkill('fix the leak\n\nthen ship'))).toBe('/work fix the leak then ship') | |
| }) | |
| it('leaves ordinary user prose alone', () => { | |
| expect(skillInvocationText('just a normal message')).toBeNull() | |
| expect(skillInvocationText('[IMPORTANT: read the docs]')).toBeNull() | |
| }) | |
| }) | |