Files
pbakaus_impeccable/cli/lib/download-providers.js
T
Forgeandplamb 5ce4a5c6b5 Add Hermes Agent as a supported provider
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).
2026-08-06 00:03:12 -07:00

35 lines
1000 B
JavaScript

// Nothing in this repo imports this module. Its consumers are the Cloudflare
// Pages Functions in the private impeccable-site repo (functions/api/download/
// bundle/[provider].js and [type]/[provider]/[id].js), which share cli/lib/.
// Do not remove it as dead code; keep the provider list in sync with the
// harness dirs the build emits.
export const FILE_DOWNLOAD_PROVIDER_CONFIG_DIRS = Object.freeze({
cursor: '.cursor',
'claude-code': '.claude',
gemini: '.gemini',
codex: '.codex',
agents: '.agents',
antigravity: '.agent',
github: '.github',
grok: '.grok',
hermes: '.hermes',
kiro: '.kiro',
opencode: '.opencode',
pi: '.pi',
qoder: '.qoder',
vibe: '.vibe',
});
export const FILE_DOWNLOAD_PROVIDERS = Object.freeze(
Object.keys(FILE_DOWNLOAD_PROVIDER_CONFIG_DIRS)
);
export const BUNDLE_DOWNLOAD_PROVIDERS = Object.freeze([
'universal',
]);
export const DOWNLOAD_PROVIDERS = Object.freeze([
...FILE_DOWNLOAD_PROVIDERS,
...BUNDLE_DOWNLOAD_PROVIDERS,
]);