UNPKG

aiwg

Version:

Deployment tool and support utility for AI context. Copies agents, skills, commands, rules, and behaviors into the paths each AI platform reads (Claude Code, Codex, Copilot, Cursor, Warp, OpenClaw, and 6 more) so one source of truth works across 10 platfo

74 lines 3.05 kB
/** * hook-bridge — cross-provider hook translation per ADR-3. * * Public API: bridgeAll(sources, providers, opts) translates every source * for every provider, returning a flat list of TranslateResult. Per ADR-3 * §7 autoInstall policy, the orchestrator passes the explicitly-enabled * providers (operator opts in via --enable-cross-provider-hooks plus per- * provider flags); this module doesn't make that policy decision itself. * * @module smiths/hook-bridge */ import { translateForCodex } from './codex-translator.js'; import { translateForCopilot } from './copilot-translator.js'; import { translateForFactory } from './factory-translator.js'; import { translateForHermes } from './hermes-translator.js'; export { AIWG_ENV_VARS, NATIVE_ENV_VAR_MAP } from './types.js'; export { substituteEnvVars, generateShimBash, EXIT_CODE_MAP } from './shim.js'; export { translateForCodex, renderCodexHookToml, injectHookBlock as injectCodexHookBlock } from './codex-translator.js'; export { translateForCopilot } from './copilot-translator.js'; export { translateForFactory } from './factory-translator.js'; export { translateForHermes } from './hermes-translator.js'; export { loadHookSources } from './loader.js'; /** * Provider id → translator function. Adding a new provider requires: * 1. New file `<provider>-translator.ts` exporting a ProviderTranslator * 2. Entry below * 3. Native env var entry in types.ts NATIVE_ENV_VAR_MAP * 4. Native exit code entry in shim.ts EXIT_CODE_MAP * 5. Native event mapping in the per-provider file */ export const TRANSLATORS = { codex: translateForCodex, copilot: translateForCopilot, factory: translateForFactory, hermes: translateForHermes, }; /** * Translate one source across an explicit list of providers. Per-provider * failures are captured as TranslateResult entries (skipped=true with * reason); they do not throw to the caller. */ export async function bridgeAll(sources, providers, options) { const results = []; for (const source of sources) { for (const providerId of providers) { const translator = TRANSLATORS[providerId]; if (!translator) { results.push({ provider: providerId, emittedPaths: [], warnings: [], skipped: true, skipReason: 'no translator registered', }); continue; } try { const r = await translator(source, options); results.push(r); } catch (err) { results.push({ provider: providerId, emittedPaths: [], warnings: [`translator threw: ${err instanceof Error ? err.message : String(err)}`], skipped: true, skipReason: 'translator error', }); } } } return results; } //# sourceMappingURL=index.js.map