*/
export function extractHookCommandsFromItem(
workspaceRootUri: URI | undefined,
userHome: string
): IHookCommand[] {
if (!item || typeof item !== 'object') {
return [];
}
Frontier kind: Code frontier
unlabeled · c_16e783ceafd4
39 tests · 14588 LOC · 56 files · introduces 0 tests · 6 LOC · 1 file
The orange circle is the focus. Violet and green circles are every ancestor and descendant, broader and narrower, at any distance; blue squares and pink diamonds are the introduced files and exact introduced tests of every visible concept, not only the focus's. Arrows point from broader to narrower concepts and bridge only concepts omitted from this view. Undirected links show source or test introduction. Concept and file size follows LOC; exact test nodes use test-count units.
Introduced files, introduced tests, and structurally relevant concept specialization
In the embedded map, ordinary wheel input scrolls the page; use the visible controls to zoom and drag to pan. Open the full-screen map for canvas navigation: wheel pans, Ctrl/Command plus wheel zooms, and arrow keys pan when this region is focused. On touch screens, open the full-screen map to pan or pinch. If JavaScript or WebGL is unavailable, use the native relationship evidence on this page.
Graph controls are ready.
Interactive rendering requires JavaScript and WebGL. Use the native relationship evidence on this page while the interactive map is unavailable.
Every exact file and test below is linked only from the concept that introduces it.
mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookSchema.test|title=HookSchema parseSubagentHooksFromYaml handles command without type field|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookSchema.test|title=HookSchema parseSubagentHooksFromYaml parses direct command format (without matcher)|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookCompatibility.test|title=HookCompatibility parseHooksFromFile disableAllHooks is ignored for Copilot format|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookCompatibility.test|title=HookCompatibility parseHooksFromFile uses Copilot format for .github/hooks/*.json files|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat parseClaudeHooks basic parsing parses multiple commands for same hook type|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat parseClaudeHooks basic parsing parses multiple hook types|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat parseClaudeHooks basic parsing parses simple hook with command|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat parseClaudeHooks cwd and env resolution preserves env variables|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat parseClaudeHooks cwd and env resolution preserves timeout|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat parseClaudeHooks cwd and env resolution supports Claude timeout alias|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat parseClaudeHooks disableAllHooks parses hooks normally when disableAllHooks is false|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat parseClaudeHooks disableAllHooks parses hooks normally when disableAllHooks is not present|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat parseClaudeHooks nested hooks with matchers parses multiple matchers for same hook type|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat parseClaudeHooks nested hooks with matchers parses multiple nested hooks within one matcher|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat parseClaudeHooks nested hooks with matchers parses nested hooks with matcher|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookCompatibility.test|title=HookCompatibility parseCopilotHooks Claude-style matcher compatibility handles Claude-style hook without type field|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookCompatibility.test|title=HookCompatibility parseCopilotHooks basic parsing parses simple hook with command|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookCompatibility.test|title=HookCompatibility parseCopilotHooks Claude-style matcher compatibility parses Claude-style nested matcher structure|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookCompatibility.test|title=HookCompatibility parseCopilotHooks Claude-style matcher compatibility parses Claude-style nested matcher with multiple hooks|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat extractHookCommandsFromItem extracts direct command object|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat extractHookCommandsFromItem handles command without type field (Claude format)|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat extractHookCommandsFromItem extracts from nested matcher structure|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat extractHookCommandsFromItem extracts multiple hooks from matcher structure|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat extractHookCommandsFromItem handles nested command without type field|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat extractHookCommandsFromItem returns empty array for null item|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/chat/test/common/promptSyntax/hookClaudeCompat.test|title=HookClaudeCompat extractHookCommandsFromItem returns empty array for undefined item|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/charCode.test|title=CharCode has good values|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/path.test|title=Paths (Node Implementation) path|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/uri.test|title=URI File paths containing apostrophes break URI parsing and cannot be opened #276075|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/uri.test|title=URI URI#file, win-speciale|occurrence=1Every collected test enters the hierarchy at exactly one concept.
No tests are introduced at this concept. Its intent tests are introduced by other concepts.
Every collected source range enters the hierarchy at exactly one concept.
1 file ranked by introduced lines: 6 introduced LOC across 2 ranges. Expand a file to inspect source; the > gutter marks introduced lines.
*/
export function extractHookCommandsFromItem(
workspaceRootUri: URI | undefined,
userHome: string
): IHookCommand[] {
if (!item || typeof item !== 'object') {
return [];
}
// Check for nested hooks with matcher (Claude style): { matcher: "...", hooks: [...] }
const nestedHooks = itemObj.hooks;
for (const nestedHook of nestedHooks) {
if (!nestedHook || typeof nestedHook !== 'object') {