/** * adapters/vscode-copilot/hooks — VS Code Copilot hook definitions and matchers. * * Defines the hook types, matchers, and registration format specific to * VS Code Copilot's hook system. This module is used by: * - CLI setup/upgrade commands (to configure hooks) * - Doctor command (to validate hook configuration) * - Hook config generation * * VS Code Copilot hook system reference: * - Hooks are registered in .github/hooks/*.json * - Hook names: PreToolUse, PostToolUse, PreCompact, SessionStart (PascalCase) * - CRITICAL: matchers are parsed but IGNORED (all hooks fire on all tools) * - Input: JSON on stdin * - Output: JSON on stdout (or empty for passthrough) * - Preview status — API may change */ /** VS Code Copilot hook types. */ export declare const HOOK_TYPES: { readonly PRE_TOOL_USE: "PreToolUse"; readonly POST_TOOL_USE: "PostToolUse"; readonly PRE_COMPACT: "PreCompact"; readonly SESSION_START: "SessionStart"; }; export type HookType = (typeof HOOK_TYPES)[keyof typeof HOOK_TYPES]; /** Map of hook types to their script file names. */ export declare const HOOK_SCRIPTS: Record; /** Required hooks that must be configured for context-mode to function. */ export declare const REQUIRED_HOOKS: HookType[]; /** Optional hooks that enhance functionality but aren't critical. */ export declare const OPTIONAL_HOOKS: HookType[]; /** * Check if a hook entry points to a context-mode hook script. * Matches both legacy format (node .../pretooluse.mjs) and * CLI dispatcher format (context-mode hook vscode-copilot pretooluse). */ export declare function isContextModeHook(entry: { hooks?: Array<{ command?: string; }>; }, hookType: HookType): boolean; /** * Build the hook command string for a given hook type. * * Always emits the CLI dispatcher form * (`context-mode hook vscode-copilot `) — the `pluginRoot` argument * is accepted for API compatibility but intentionally ignored. * * Why the dispatcher form is mandatory here (Issue #613 — Tier C contract): * `.github/hooks/context-mode.json` is a **workspace-committed** file * (upstream: refs/platforms/vscode-copilot/assets/prompts/skills/ * agent-customization/references/hooks.md line 7 — "Workspace * (team-shared)"). It lands in every teammate's `git status`. Embedding * `process.execPath` or any absolute pluginRoot path here: * - Leaks PII (username, `C:/Users//...` paths). * - Breaks cross-machine portability (fnm/nvm/volta/brew shims are * per-shell-session ephemeral; the path goes stale immediately on * Windows + fnm). * * Commit `f5c9d02` (2026-03-06) added an absolute-path branch when a * pluginRoot was passed. It solved a real PATH-availability bug on * Brew/nvm setups by going too far — the CLI then always passes * pluginRoot, so the portable form became unreachable in production * and every `/ctx-upgrade` baked a non-portable command into the * committed config. This reverts to the pre-`f5c9d02` shape. * * For users without a global install, the recovery path is the same as * every other CLI-dispatcher adapter (cursor, codex): * `npm install -g context-mode` */ export declare function buildHookCommand(hookType: HookType, _pluginRoot?: string): string;