mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-11 21:57:14 +03:00
Impeccable now ships a Hermes-compatible bundle under dist/hermes/.hermes/skills/. Hermes reads the Agent Skills spec as-is, so the bundle uses the four spec frontmatter fields (name, description, version, license) plus metadata/compatibility and drops the Claude/Codex-specific extensions Hermes would silently ignore. The .hermes/skills/ tracked root and the regenerated pin.mjs mirrors will be produced by .github/workflows/sync-generated-output.yml after this lands; per AGENTS.md, generated harness churn stays out of feature PRs. What a Hermes user gets: - npx impeccable install --providers=hermes --scope=project writes .hermes/skills/impeccable/ into the cwd. - npx impeccable install --providers=hermes --scope=user honors $HERMES_HOME, so a profile-scoped install (HERMES_HOME=~/.hermes/profiles/forge) lands in the active profile's skills dir, not the default ~/.hermes/. Cross-home HERMES_HOME inheritance is ignored so test isolation holds. - /impeccable registers as a Hermes slash command and routes sub-commands via the Commands table in the skill body, since user-invocable / argument-hint are not honored by Hermes' skill loader. What a Hermes user does NOT get, and why: - No hook surface. Impeccable's PostToolUse/Stop anti-pattern detector on Claude/Codex/Cursor/Grok/GitHub does not translate to Hermes, which has no equivalent tool event lifecycle. The skill body still ships. - No writeOpenAIMetadata, agentFormat, or emitHooks. Hermes has no per-skill tool ACL, no subagent on-disk format, and no hooks.json equivalent. Verified end-to-end with hermes-agent v0.18.2: /impeccable polish and /impeccable critique both load reference/<command>.md and return the documented first step. parse_frontmatter accepts the generated SKILL.md, scan_skill_commands registers /impeccable, and the full default test suite passes (267/267 in the critical files; 0 fail across all suites).
24 lines
1.4 KiB
JavaScript
24 lines
1.4 KiB
JavaScript
import { createTransformer } from './factory.js';
|
|
import { PROVIDERS } from './providers.js';
|
|
|
|
// Named exports exist primarily as stable spy targets for the test suite
|
|
// (build.test.js uses spyOn(transformers, 'transformCursor') etc.). build.js
|
|
// itself uses createTransformer + PROVIDERS directly, not these.
|
|
export const transformCursor = createTransformer(PROVIDERS.cursor);
|
|
export const transformClaudeCode = createTransformer(PROVIDERS['claude-code']);
|
|
export const transformGemini = createTransformer(PROVIDERS.gemini);
|
|
export const transformCodex = createTransformer(PROVIDERS.codex);
|
|
export const transformAgents = createTransformer(PROVIDERS.agents);
|
|
export const transformGitHub = createTransformer(PROVIDERS.github);
|
|
export const transformKiro = createTransformer(PROVIDERS.kiro);
|
|
export const transformOpenCode = createTransformer(PROVIDERS.opencode);
|
|
export const transformPi = createTransformer(PROVIDERS.pi);
|
|
export const transformQoder = createTransformer(PROVIDERS.qoder);
|
|
export const transformRovoDev = createTransformer(PROVIDERS['rovo-dev']);
|
|
export const transformVibe = createTransformer(PROVIDERS.vibe);
|
|
export const transformGrok = createTransformer(PROVIDERS.grok);
|
|
export const transformAntigravity = createTransformer(PROVIDERS.antigravity);
|
|
export const transformHermes = createTransformer(PROVIDERS.hermes);
|
|
|
|
export { createTransformer, PROVIDERS };
|