oh-my-claudecode 0.2.4 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/README.md +103 -4
  2. package/commands/necronomicon-bind.md +45 -82
  3. package/dist/agents/builtin-agents.d.ts.map +1 -1
  4. package/dist/agents/builtin-agents.js +8 -0
  5. package/dist/agents/builtin-agents.js.map +1 -1
  6. package/dist/agents/cthulhu.d.ts.map +1 -1
  7. package/dist/agents/cthulhu.js +11 -0
  8. package/dist/agents/cthulhu.js.map +1 -1
  9. package/dist/agents/dagon.d.ts.map +1 -1
  10. package/dist/agents/dagon.js +13 -0
  11. package/dist/agents/dagon.js.map +1 -1
  12. package/dist/agents/nodens-advanced.d.ts +182 -0
  13. package/dist/agents/nodens-advanced.d.ts.map +1 -0
  14. package/dist/agents/nodens-advanced.js +297 -0
  15. package/dist/agents/nodens-advanced.js.map +1 -0
  16. package/dist/agents/nodens.d.ts +42 -0
  17. package/dist/agents/nodens.d.ts.map +1 -0
  18. package/dist/agents/nodens.js +147 -0
  19. package/dist/agents/nodens.js.map +1 -0
  20. package/dist/agents/shoggoth.d.ts.map +1 -1
  21. package/dist/agents/shoggoth.js +11 -1
  22. package/dist/agents/shoggoth.js.map +1 -1
  23. package/dist/cli/bind.d.ts +24 -0
  24. package/dist/cli/bind.d.ts.map +1 -1
  25. package/dist/cli/bind.js +92 -25
  26. package/dist/cli/bind.js.map +1 -1
  27. package/dist/cli/doctor.d.ts.map +1 -1
  28. package/dist/cli/doctor.js +7 -5
  29. package/dist/cli/doctor.js.map +1 -1
  30. package/dist/cli/index.js +54 -4
  31. package/dist/cli/index.js.map +1 -1
  32. package/dist/cli/version.d.ts +2 -0
  33. package/dist/cli/version.d.ts.map +1 -0
  34. package/dist/cli/version.js +28 -0
  35. package/dist/cli/version.js.map +1 -0
  36. package/dist/config/schema.d.ts +648 -17
  37. package/dist/config/schema.d.ts.map +1 -1
  38. package/dist/config/schema.js +21 -2
  39. package/dist/config/schema.js.map +1 -1
  40. package/dist/features/web-research-background/advanced-patterns.d.ts +44 -0
  41. package/dist/features/web-research-background/advanced-patterns.d.ts.map +1 -0
  42. package/dist/features/web-research-background/advanced-patterns.js +139 -0
  43. package/dist/features/web-research-background/advanced-patterns.js.map +1 -0
  44. package/dist/features/web-research-background/index.d.ts +73 -0
  45. package/dist/features/web-research-background/index.d.ts.map +1 -0
  46. package/dist/features/web-research-background/index.js +131 -0
  47. package/dist/features/web-research-background/index.js.map +1 -0
  48. package/dist/features/yith-archive/functions/opencode-import.d.ts.map +1 -1
  49. package/dist/features/yith-archive/functions/opencode-import.js +129 -90
  50. package/dist/features/yith-archive/functions/opencode-import.js.map +1 -1
  51. package/dist/features/yith-archive/index.d.ts +8 -0
  52. package/dist/features/yith-archive/index.d.ts.map +1 -1
  53. package/dist/features/yith-archive/index.js +1 -0
  54. package/dist/features/yith-archive/index.js.map +1 -1
  55. package/dist/features/yith-archive/types.d.ts +15 -0
  56. package/dist/features/yith-archive/types.d.ts.map +1 -1
  57. package/dist/hooks/design-detector-hook.d.ts +12 -0
  58. package/dist/hooks/design-detector-hook.d.ts.map +1 -0
  59. package/dist/hooks/design-detector-hook.js +42 -0
  60. package/dist/hooks/design-detector-hook.js.map +1 -0
  61. package/dist/hooks/design-detector.d.ts +47 -0
  62. package/dist/hooks/design-detector.d.ts.map +1 -0
  63. package/dist/hooks/design-detector.js +251 -0
  64. package/dist/hooks/design-detector.js.map +1 -0
  65. package/dist/hooks/index.d.ts +3 -0
  66. package/dist/hooks/index.d.ts.map +1 -1
  67. package/dist/hooks/index.js +27 -0
  68. package/dist/hooks/index.js.map +1 -1
  69. package/dist/hooks/web-research-detector.d.ts +58 -0
  70. package/dist/hooks/web-research-detector.d.ts.map +1 -0
  71. package/dist/hooks/web-research-detector.js +205 -0
  72. package/dist/hooks/web-research-detector.js.map +1 -0
  73. package/dist/hooks/web-research-hook.d.ts +12 -0
  74. package/dist/hooks/web-research-hook.d.ts.map +1 -0
  75. package/dist/hooks/web-research-hook.js +43 -0
  76. package/dist/hooks/web-research-hook.js.map +1 -0
  77. package/dist/hooks/yith-capture.d.ts +35 -0
  78. package/dist/hooks/yith-capture.d.ts.map +1 -0
  79. package/dist/hooks/yith-capture.js +113 -0
  80. package/dist/hooks/yith-capture.js.map +1 -0
  81. package/dist/linters/type-safety-ast.d.ts +108 -0
  82. package/dist/linters/type-safety-ast.d.ts.map +1 -0
  83. package/dist/linters/type-safety-ast.js +293 -0
  84. package/dist/linters/type-safety-ast.js.map +1 -0
  85. package/dist/linters/type-safety-linter.d.ts +66 -0
  86. package/dist/linters/type-safety-linter.d.ts.map +1 -0
  87. package/dist/linters/type-safety-linter.js +317 -0
  88. package/dist/linters/type-safety-linter.js.map +1 -0
  89. package/package.json +1 -1
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Design Task Detector
3
+ *
4
+ * Detects when a user message indicates a frontend/design task.
5
+ * Used to route messages to Nodens subagent.
6
+ */
7
+ /**
8
+ * HIGH confidence design keywords — strongly indicate design tasks
9
+ */
10
+ const HIGH_CONFIDENCE_KEYWORDS = [
11
+ // Component/UI terms
12
+ "component",
13
+ "ui",
14
+ "interface",
15
+ "design",
16
+ "button",
17
+ "card",
18
+ "form",
19
+ "modal",
20
+ "dialog",
21
+ "sidebar",
22
+ "navbar",
23
+ "menu",
24
+ "dropdown",
25
+ "tooltip",
26
+ "popover",
27
+ "accordion",
28
+ "tab",
29
+ "carousel",
30
+ // Layout/styling
31
+ "layout",
32
+ "responsive",
33
+ "mobile-first",
34
+ "breakpoint",
35
+ "css",
36
+ "tailwind",
37
+ "style",
38
+ "theme",
39
+ "dark mode",
40
+ "flexbox",
41
+ "grid",
42
+ // Accessibility
43
+ "accessibility",
44
+ "wcag",
45
+ "aria",
46
+ "semantic html",
47
+ "keyboard navigation",
48
+ "screen reader",
49
+ // Design system
50
+ "design system",
51
+ "design tokens",
52
+ "component library",
53
+ "storybook",
54
+ ];
55
+ /**
56
+ * MEDIUM confidence design keywords — suggest design tasks
57
+ */
58
+ const MEDIUM_CONFIDENCE_KEYWORDS = [
59
+ // Framework/library specific
60
+ "react",
61
+ "vue",
62
+ "svelte",
63
+ "angular",
64
+ "next.js",
65
+ "nuxt",
66
+ "astro",
67
+ "solid",
68
+ // UI libraries
69
+ "shadcn",
70
+ "material-ui",
71
+ "chakra",
72
+ "radix",
73
+ "ant-design",
74
+ "storybook",
75
+ // General design
76
+ "color",
77
+ "typography",
78
+ "animation",
79
+ "transition",
80
+ "interaction",
81
+ "user experience",
82
+ "ux",
83
+ "ui/ux",
84
+ "mockup",
85
+ "prototype",
86
+ "wireframe",
87
+ "styling",
88
+ "style",
89
+ // Styling tools
90
+ "sass",
91
+ "less",
92
+ "postcss",
93
+ "emotion",
94
+ "styled-components",
95
+ "css-in-js",
96
+ ];
97
+ /**
98
+ * LOW confidence design keywords — weak signal for design tasks
99
+ * Used as fallback when other keywords are present
100
+ */
101
+ const LOW_CONFIDENCE_KEYWORDS = [
102
+ "design",
103
+ "build",
104
+ "create",
105
+ "make",
106
+ "implement",
107
+ "polish",
108
+ "refine",
109
+ "improve",
110
+ "visual",
111
+ "appearance",
112
+ ];
113
+ /**
114
+ * Negative patterns — indicate this is NOT a design task
115
+ */
116
+ const NEGATIVE_PATTERNS = [
117
+ /\bdesign\s+(pattern|doc|document|spec)\b/i, // "design document", "design spec"
118
+ /\bsystem\s+design\b/i, // "system design" (infrastructure)
119
+ /\b(database|schema|architecture|algorithm|data|api|network)\s+design\b/i, // Non-UI design
120
+ /\bdesign\s+(system|database|schema|architecture|algorithm|data|api|network|relational|query)\b/i, // "design system", "design database"
121
+ /\bdesign\s+a\s+(relational\s+)?(database|system|algorithm|schema|api|network|backend|server)\b/i, // "design a database"
122
+ ];
123
+ /**
124
+ * Detects if a user message indicates a design task.
125
+ *
126
+ * Strategy:
127
+ * 1. Check for HIGH confidence keywords (component, ui, interface, etc.)
128
+ * 2. If not found, check MEDIUM confidence keywords (react, vue, animation, etc.)
129
+ * 3. If not found, check LOW confidence keywords
130
+ * 4. Verify no negative patterns are present
131
+ * 5. Return confidence level and matched keywords
132
+ *
133
+ * @param userMessage - The user's input message
134
+ * @returns Detection result with confidence and matched keywords
135
+ */
136
+ export function detectDesignTask(userMessage) {
137
+ const message = userMessage.toLowerCase().trim();
138
+ // Very short messages unlikely to be design tasks
139
+ if (message.length < 8) {
140
+ return {
141
+ isDesignTask: false,
142
+ confidence: "low",
143
+ keywords: [],
144
+ reason: "Message too short to detect design task",
145
+ };
146
+ }
147
+ // Check for negative patterns first (filter out false positives)
148
+ for (const pattern of NEGATIVE_PATTERNS) {
149
+ if (pattern.test(message)) {
150
+ return {
151
+ isDesignTask: false,
152
+ confidence: "low",
153
+ keywords: [],
154
+ reason: `Matched negative pattern: ${pattern.source}`,
155
+ };
156
+ }
157
+ }
158
+ // Check HIGH confidence keywords
159
+ const highMatches = findMatchingKeywords(message, HIGH_CONFIDENCE_KEYWORDS);
160
+ if (highMatches.length > 0) {
161
+ return {
162
+ isDesignTask: true,
163
+ confidence: "high",
164
+ keywords: highMatches,
165
+ reason: `Found high-confidence design keywords: ${highMatches.join(", ")}`,
166
+ };
167
+ }
168
+ // Check MEDIUM confidence keywords
169
+ const mediumMatches = findMatchingKeywords(message, MEDIUM_CONFIDENCE_KEYWORDS);
170
+ if (mediumMatches.length >= 2) {
171
+ // Require at least 2 medium keywords
172
+ return {
173
+ isDesignTask: true,
174
+ confidence: "medium",
175
+ keywords: mediumMatches,
176
+ reason: `Found multiple medium-confidence keywords: ${mediumMatches.join(", ")}`,
177
+ };
178
+ }
179
+ // Check if there's a high context for design (e.g., specific frameworks + design intent)
180
+ if (mediumMatches.length === 1) {
181
+ const frameworks = ["react", "vue", "svelte", "angular", "next.js", "nuxt", "astro"];
182
+ const isFramework = frameworks.some(fw => message.includes(fw));
183
+ const designIntents = [
184
+ "build",
185
+ "create",
186
+ "make",
187
+ "design",
188
+ "style",
189
+ "implement",
190
+ "component",
191
+ ];
192
+ const hasDesignIntent = designIntents.some(intent => message.includes(intent));
193
+ if (isFramework && hasDesignIntent) {
194
+ return {
195
+ isDesignTask: true,
196
+ confidence: "medium",
197
+ keywords: mediumMatches,
198
+ reason: `Framework + design intent detected: ${mediumMatches.join(", ")}`,
199
+ };
200
+ }
201
+ }
202
+ // Check LOW confidence keywords as last resort
203
+ const lowMatches = findMatchingKeywords(message, LOW_CONFIDENCE_KEYWORDS);
204
+ if (lowMatches.length >= 2) {
205
+ return {
206
+ isDesignTask: true,
207
+ confidence: "low",
208
+ keywords: lowMatches,
209
+ reason: `Found low-confidence design keywords: ${lowMatches.join(", ")}`,
210
+ };
211
+ }
212
+ // No design task detected
213
+ return {
214
+ isDesignTask: false,
215
+ confidence: "low",
216
+ keywords: [],
217
+ reason: "No design keywords or patterns detected",
218
+ };
219
+ }
220
+ /**
221
+ * Finds matching keywords in a message
222
+ * @param message - The message to search in
223
+ * @param keywords - The keywords to match
224
+ * @returns Array of matched keywords (unique)
225
+ */
226
+ function findMatchingKeywords(message, keywords) {
227
+ const matched = new Set();
228
+ for (const keyword of keywords) {
229
+ // Use word boundaries to avoid partial matches
230
+ // "component" should match "component" but not "decompose"
231
+ const pattern = new RegExp(`\\b${keyword}\\b`, "i");
232
+ if (pattern.test(message)) {
233
+ matched.add(keyword);
234
+ }
235
+ }
236
+ return Array.from(matched);
237
+ }
238
+ /**
239
+ * Export for testing
240
+ * Finds keywords in message without case sensitivity
241
+ */
242
+ export function findDesignKeywords(message) {
243
+ const highMatches = findMatchingKeywords(message, HIGH_CONFIDENCE_KEYWORDS);
244
+ if (highMatches.length > 0)
245
+ return highMatches;
246
+ const mediumMatches = findMatchingKeywords(message, MEDIUM_CONFIDENCE_KEYWORDS);
247
+ if (mediumMatches.length > 0)
248
+ return mediumMatches;
249
+ return findMatchingKeywords(message, LOW_CONFIDENCE_KEYWORDS);
250
+ }
251
+ //# sourceMappingURL=design-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-detector.js","sourceRoot":"","sources":["../../src/hooks/design-detector.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,9 @@ export { RULES_INJECTOR_HOOK_SCRIPT, getRulesInjectorHookConfig } from "./rules-
6
6
  export { WRITE_GUARD_HOOK_SCRIPT, getWriteGuardHookConfig } from "./write-guard.js";
7
7
  export { CTHULHU_AUTO_HOOK_SCRIPT, getCthulhuAutoHookConfig } from "./cthulhu-auto.js";
8
8
  export { MEMORY_OVERRIDE_HOOK_SCRIPT, getMemoryOverrideHookConfig } from "./memory-override.js";
9
+ export { YITH_CAPTURE_HOOK_SCRIPT, getYithCaptureHookConfig } from "./yith-capture.js";
10
+ export { WEB_RESEARCH_DETECTOR_HOOK_SCRIPT, getWebResearchDetectorHookConfig } from "./web-research-hook.js";
11
+ export { DESIGN_DETECTOR_HOOK_SCRIPT, getDesignDetectorHookConfig } from "./design-detector-hook.js";
9
12
  export interface HookDefinition {
10
13
  name: HookName;
11
14
  event: "PreToolUse" | "PostToolUse" | "Stop" | "Notification" | "SessionStart";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAEzE,OAAO,EAAE,6BAA6B,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAA;AACrG,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAChF,OAAO,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAA;AAC/F,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAA;AAC5F,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AACnF,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AACtF,OAAO,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAA;AAE/F,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAA;IACd,KAAK,EAAE,YAAY,GAAG,aAAa,GAAG,MAAM,GAAG,cAAc,GAAG,cAAc,CAAA;IAC9E,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;CACf;AA+BD,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB,EAAE,cAAc,EAkDhD,CAAA;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,cAAc,EAAE,CAG9E;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAqBzF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAEzE,OAAO,EAAE,6BAA6B,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAA;AACrG,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAChF,OAAO,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAA;AAC/F,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAA;AAC5F,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AACnF,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AACtF,OAAO,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAA;AAC/F,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AACtF,OAAO,EAAE,iCAAiC,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAA;AAC5G,OAAO,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AAEpG,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAA;IACd,KAAK,EAAE,YAAY,GAAG,aAAa,GAAG,MAAM,GAAG,cAAc,GAAG,cAAc,CAAA;IAC9E,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;CACf;AA2CD,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB,EAAE,cAAc,EAuEhD,CAAA;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,cAAc,EAAE,CAG9E;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAqBzF"}
@@ -5,6 +5,9 @@ export { RULES_INJECTOR_HOOK_SCRIPT, getRulesInjectorHookConfig } from "./rules-
5
5
  export { WRITE_GUARD_HOOK_SCRIPT, getWriteGuardHookConfig } from "./write-guard.js";
6
6
  export { CTHULHU_AUTO_HOOK_SCRIPT, getCthulhuAutoHookConfig } from "./cthulhu-auto.js";
7
7
  export { MEMORY_OVERRIDE_HOOK_SCRIPT, getMemoryOverrideHookConfig } from "./memory-override.js";
8
+ export { YITH_CAPTURE_HOOK_SCRIPT, getYithCaptureHookConfig } from "./yith-capture.js";
9
+ export { WEB_RESEARCH_DETECTOR_HOOK_SCRIPT, getWebResearchDetectorHookConfig } from "./web-research-hook.js";
10
+ export { DESIGN_DETECTOR_HOOK_SCRIPT, getDesignDetectorHookConfig } from "./design-detector-hook.js";
8
11
  import { TODO_CONTINUATION_HOOK_SCRIPT, getTodoContinuationHookConfig, } from "./todo-continuation.js";
9
12
  import { ELDER_LOOP_HOOK_SCRIPT, getElderLoopHookConfig, } from "./elder-loop.js";
10
13
  import { COMMENT_CHECKER_HOOK_SCRIPT, getCommentCheckerHookConfig, } from "./comment-checker.js";
@@ -12,6 +15,9 @@ import { RULES_INJECTOR_HOOK_SCRIPT, getRulesInjectorHookConfig, } from "./rules
12
15
  import { WRITE_GUARD_HOOK_SCRIPT, getWriteGuardHookConfig, } from "./write-guard.js";
13
16
  import { CTHULHU_AUTO_HOOK_SCRIPT, getCthulhuAutoHookConfig, } from "./cthulhu-auto.js";
14
17
  import { MEMORY_OVERRIDE_HOOK_SCRIPT, getMemoryOverrideHookConfig, } from "./memory-override.js";
18
+ import { YITH_CAPTURE_HOOK_SCRIPT, getYithCaptureHookConfig, } from "./yith-capture.js";
19
+ import { WEB_RESEARCH_DETECTOR_HOOK_SCRIPT, getWebResearchDetectorHookConfig, } from "./web-research-hook.js";
20
+ import { DESIGN_DETECTOR_HOOK_SCRIPT, getDesignDetectorHookConfig, } from "./design-detector-hook.js";
15
21
  /** All hook definitions for the plugin */
16
22
  export const ALL_HOOK_DEFINITIONS = [
17
23
  {
@@ -63,6 +69,27 @@ export const ALL_HOOK_DEFINITIONS = [
63
69
  scriptContent: MEMORY_OVERRIDE_HOOK_SCRIPT,
64
70
  config: getMemoryOverrideHookConfig(),
65
71
  },
72
+ {
73
+ name: "yith-capture",
74
+ event: "Stop",
75
+ scriptPath: "~/.claude/hooks/yith-capture.sh",
76
+ scriptContent: YITH_CAPTURE_HOOK_SCRIPT,
77
+ config: getYithCaptureHookConfig(),
78
+ },
79
+ {
80
+ name: "web-research-detector",
81
+ event: "PreToolUse",
82
+ scriptPath: "~/.claude/hooks/web-research-detector.sh",
83
+ scriptContent: WEB_RESEARCH_DETECTOR_HOOK_SCRIPT,
84
+ config: getWebResearchDetectorHookConfig(),
85
+ },
86
+ {
87
+ name: "design-detector",
88
+ event: "PreToolUse",
89
+ scriptPath: "~/.claude/hooks/design-detector.sh",
90
+ scriptContent: DESIGN_DETECTOR_HOOK_SCRIPT,
91
+ config: getDesignDetectorHookConfig(),
92
+ },
66
93
  ];
67
94
  /** Get hooks that should be installed, respecting disabled_hooks config */
68
95
  export function getEnabledHooks(config) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Web Research Detector
3
+ *
4
+ * Identifies when user messages indicate a need for web research.
5
+ * Used by web-research hook and agent prompts to enforce current knowledge.
6
+ */
7
+ /**
8
+ * Categories of web research triggers
9
+ */
10
+ export declare enum WebResearchTriggerType {
11
+ VERSION_CHECK = "version_check",// "latest", "v3.5", "2024", version numbers
12
+ FRAMEWORK_SPECIFIC = "framework",// React, Vue, Next.js, etc.
13
+ DATE_SENSITIVE = "date_sensitive",// "what's new", "breaking changes", "deprecation"
14
+ LIBRARY_UPDATE = "library_update",// "npm updates", "package releases"
15
+ BEST_PRACTICES = "best_practices",// "best practice for X in 2024", "modern approach"
16
+ CURRENT_STATUS = "current_status"
17
+ }
18
+ /**
19
+ * A detected web research trigger
20
+ */
21
+ export interface WebResearchTrigger {
22
+ type: WebResearchTriggerType;
23
+ pattern: string;
24
+ context?: string;
25
+ }
26
+ /**
27
+ * Confidence levels for web research need
28
+ */
29
+ export type ResearchConfidence = "must" | "should" | "maybe";
30
+ /**
31
+ * Result of web research detection
32
+ */
33
+ export interface WebResearchDetectionResult {
34
+ trigger: WebResearchTrigger | null;
35
+ confidence: ResearchConfidence;
36
+ reason?: string;
37
+ }
38
+ /**
39
+ * Configuration for web research detector
40
+ */
41
+ export interface WebResearchDetectorConfig {
42
+ enabled: boolean;
43
+ min_confidence?: "must" | "should" | "maybe";
44
+ trigger_types?: WebResearchTriggerType[];
45
+ }
46
+ /**
47
+ * Detects if a user message indicates web research is needed.
48
+ *
49
+ * Strategy:
50
+ * 1. Check for "MUST" confidence triggers first (version checks, breaking changes)
51
+ * 2. If not found, check "SHOULD" triggers (frameworks, best practices)
52
+ * 3. If not found, return "MAYBE" or null
53
+ *
54
+ * @param userMessage - The user's input message
55
+ * @returns Detection result with trigger and confidence level
56
+ */
57
+ export declare function detectWebResearchNeeded(userMessage: string): WebResearchDetectionResult;
58
+ //# sourceMappingURL=web-research-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-research-detector.d.ts","sourceRoot":"","sources":["../../src/hooks/web-research-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,oBAAY,sBAAsB;IAChC,aAAa,kBAAkB,CAAO,4CAA4C;IAClF,kBAAkB,cAAc,CAAM,4BAA4B;IAClE,cAAc,mBAAmB,CAAK,kDAAkD;IACxF,cAAc,mBAAmB,CAAK,oCAAoC;IAC1E,cAAc,mBAAmB,CAAK,mDAAmD;IACzF,cAAc,mBAAmB;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,sBAAsB,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE5D;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAA;IAClC,UAAU,EAAE,kBAAkB,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;IAC5C,aAAa,CAAC,EAAE,sBAAsB,EAAE,CAAA;CACzC;AA4GD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,0BAA0B,CAuEvF"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Web Research Detector
3
+ *
4
+ * Identifies when user messages indicate a need for web research.
5
+ * Used by web-research hook and agent prompts to enforce current knowledge.
6
+ */
7
+ /**
8
+ * Categories of web research triggers
9
+ */
10
+ export var WebResearchTriggerType;
11
+ (function (WebResearchTriggerType) {
12
+ WebResearchTriggerType["VERSION_CHECK"] = "version_check";
13
+ WebResearchTriggerType["FRAMEWORK_SPECIFIC"] = "framework";
14
+ WebResearchTriggerType["DATE_SENSITIVE"] = "date_sensitive";
15
+ WebResearchTriggerType["LIBRARY_UPDATE"] = "library_update";
16
+ WebResearchTriggerType["BEST_PRACTICES"] = "best_practices";
17
+ WebResearchTriggerType["CURRENT_STATUS"] = "current_status";
18
+ })(WebResearchTriggerType || (WebResearchTriggerType = {}));
19
+ /**
20
+ * Pattern definitions for web research detection
21
+ * Each pattern has: regex, trigger type, confidence level
22
+ */
23
+ const TRIGGER_PATTERNS = [
24
+ // ─── VERSION CHECKS (MUST confidence) ─────────────────────────────────────
25
+ // Explicit v-prefix version numbers like "v3.5", "v18", "v2.3.0"
26
+ {
27
+ pattern: /\bv\d+(?:\.\d+)?(?:\.\d+)?(?:-\w+)?/,
28
+ trigger: WebResearchTriggerType.VERSION_CHECK,
29
+ confidence: "must",
30
+ },
31
+ // Semantic versioning patterns "2.3.0", "3.5", "18.0"
32
+ {
33
+ pattern: /\b(\d+\.\d+(?:\.\d+)?)\b/,
34
+ trigger: WebResearchTriggerType.VERSION_CHECK,
35
+ confidence: "must",
36
+ },
37
+ // "latest version", "latest update", "latest release"
38
+ {
39
+ pattern: /\b(latest\s+(version|release|update|api))\b/i,
40
+ trigger: WebResearchTriggerType.VERSION_CHECK,
41
+ confidence: "must",
42
+ },
43
+ // Years (2023, 2024, 2025)
44
+ {
45
+ pattern: /\b(202[3-9])\b/,
46
+ trigger: WebResearchTriggerType.VERSION_CHECK,
47
+ confidence: "should",
48
+ },
49
+ // ─── FRAMEWORK-SPECIFIC (SHOULD confidence) ─────────────────────────────────
50
+ // Major frameworks: React, Vue, Angular, Svelte, Next.js, Nuxt, etc.
51
+ {
52
+ pattern: /\b(React|Vue|Angular|Svelte|Next\.js|Nuxt|Ember\.js|Astro|Remix|SolidJS)\b/i,
53
+ trigger: WebResearchTriggerType.FRAMEWORK_SPECIFIC,
54
+ confidence: "should",
55
+ },
56
+ // Node.js, Python, Go, Rust version references
57
+ {
58
+ pattern: /\b(Node\.js|Python|Go|Rust|Java|C#)\s+(\d+|LTS|latest)\b/i,
59
+ trigger: WebResearchTriggerType.FRAMEWORK_SPECIFIC,
60
+ confidence: "should",
61
+ },
62
+ // Popular packages: TypeScript, Webpack, Vitest, Playwright, etc.
63
+ {
64
+ pattern: /\b(TypeScript|Webpack|Vite|Turbopack|Playwright|Cypress|Jest|Vitest|ESLint|Prettier)\b/i,
65
+ trigger: WebResearchTriggerType.FRAMEWORK_SPECIFIC,
66
+ confidence: "should",
67
+ },
68
+ // ─── DATE-SENSITIVE QUERIES (MUST confidence) ─────────────────────────────
69
+ // "breaking changes", "what changed", "deprecat*"
70
+ {
71
+ pattern: /\b(breaking\s+changes|what\s+changed|deprecat\w+|removed\s+in)\b/i,
72
+ trigger: WebResearchTriggerType.DATE_SENSITIVE,
73
+ confidence: "must",
74
+ },
75
+ // "what's new", "what's the latest", "anything new"
76
+ {
77
+ pattern: /\b(what'?s\s+new|what'?s\s+the\s+latest|anything\s+new)\b/i,
78
+ trigger: WebResearchTriggerType.DATE_SENSITIVE,
79
+ confidence: "must",
80
+ },
81
+ // "current best practice", "modern approach", "in 2024"
82
+ {
83
+ pattern: /\b(current\s+best\s+practice|modern\s+approach|modern\s+way|best\s+way\s+to)\b/i,
84
+ trigger: WebResearchTriggerType.DATE_SENSITIVE,
85
+ confidence: "should",
86
+ },
87
+ // ─── LIBRARY/PACKAGE UPDATES (SHOULD confidence) ──────────────────────────
88
+ // "npm", "package.json", "dependencies", "updates"
89
+ {
90
+ pattern: /\b(npm\s+update|package\s+update|latest\s+version|new\s+release)\b/i,
91
+ trigger: WebResearchTriggerType.LIBRARY_UPDATE,
92
+ confidence: "should",
93
+ },
94
+ // ─── BEST PRACTICES (SHOULD confidence) ────────────────────────────────────
95
+ // "best practice for X", "recommended way to"
96
+ {
97
+ pattern: /\b(best\s+practice|best\s+way|recommended\s+way|recommended\s+approach)\b/i,
98
+ trigger: WebResearchTriggerType.BEST_PRACTICES,
99
+ confidence: "should",
100
+ },
101
+ // ─── CURRENT STATUS (SHOULD confidence) ────────────────────────────────────
102
+ // "is X still maintained", "is X still supported", "does X still work"
103
+ {
104
+ pattern: /\b(is\s+.*\s+(still\s+)?(maintained|supported|used|working|active))\b/i,
105
+ trigger: WebResearchTriggerType.CURRENT_STATUS,
106
+ confidence: "should",
107
+ },
108
+ // "dead project", "abandoned", "no longer maintained"
109
+ {
110
+ pattern: /\b(dead\s+project|abandoned|no\s+longer\s+maintained|unmaintained)\b/i,
111
+ trigger: WebResearchTriggerType.CURRENT_STATUS,
112
+ confidence: "should",
113
+ },
114
+ ];
115
+ /**
116
+ * Detects if a user message indicates web research is needed.
117
+ *
118
+ * Strategy:
119
+ * 1. Check for "MUST" confidence triggers first (version checks, breaking changes)
120
+ * 2. If not found, check "SHOULD" triggers (frameworks, best practices)
121
+ * 3. If not found, return "MAYBE" or null
122
+ *
123
+ * @param userMessage - The user's input message
124
+ * @returns Detection result with trigger and confidence level
125
+ */
126
+ export function detectWebResearchNeeded(userMessage) {
127
+ // Normalize the input
128
+ const message = userMessage.toLowerCase().trim();
129
+ // Avoid obvious false positives
130
+ // "my latest project" should not trigger on "latest"
131
+ // "design document" should not trigger as "design"
132
+ const isFalsePositive = (text) => {
133
+ // Very short messages probably don't need web research
134
+ if (text.length < 10)
135
+ return true;
136
+ // Avoid false positives from common phrases
137
+ const falsePositivePhrases = [
138
+ /\bmy\s+latest\s+/i, // "my latest project"
139
+ /\bthe\s+latest\s+trends\b/i, // "the latest trends"
140
+ /\bliterally\s+/i, // "literally latest"
141
+ ];
142
+ return falsePositivePhrases.some(phrase => phrase.test(text));
143
+ };
144
+ if (isFalsePositive(message)) {
145
+ return { trigger: null, confidence: "maybe" };
146
+ }
147
+ // Collect all matches with their confidence levels
148
+ let bestMatch = null;
149
+ let bestConfidenceLevel = 0; // must = 3, should = 2, maybe = 1
150
+ const confidenceLevels = { must: 3, should: 2, maybe: 1 };
151
+ for (const { pattern, trigger, confidence } of TRIGGER_PATTERNS) {
152
+ if (pattern.test(message)) {
153
+ const match = message.match(pattern);
154
+ const confidenceValue = confidenceLevels[confidence];
155
+ // Keep the match with the highest confidence level
156
+ if (confidenceValue > bestConfidenceLevel) {
157
+ bestConfidenceLevel = confidenceValue;
158
+ bestMatch = {
159
+ trigger: {
160
+ type: trigger,
161
+ pattern: match?.[0] || "",
162
+ context: extractContext(message, match?.[0]),
163
+ },
164
+ confidence,
165
+ };
166
+ }
167
+ }
168
+ }
169
+ if (bestMatch) {
170
+ return {
171
+ ...bestMatch,
172
+ reason: bestMatch.confidence === "must"
173
+ ? `Found strong indicator: "${bestMatch.trigger.pattern}"`
174
+ : `Found indicator: "${bestMatch.trigger.pattern}"`,
175
+ };
176
+ }
177
+ // No triggers found, but check if message is asking about current/new information
178
+ // This gives us a low "maybe" confidence for general queries
179
+ if (/\b(how|what|why|when|where|which)\b/i.test(message)) {
180
+ return {
181
+ trigger: null,
182
+ confidence: "maybe",
183
+ reason: "Generic question detected",
184
+ };
185
+ }
186
+ return { trigger: null, confidence: "maybe" };
187
+ }
188
+ /**
189
+ * Extracts context around a matched pattern for informational purposes.
190
+ * @param text - The full text
191
+ * @param pattern - The matched pattern
192
+ * @returns A substring with context (up to 80 chars)
193
+ */
194
+ function extractContext(text, pattern) {
195
+ if (!pattern)
196
+ return undefined;
197
+ const index = text.indexOf(pattern);
198
+ if (index === -1)
199
+ return undefined;
200
+ const start = Math.max(0, index - 20);
201
+ const end = Math.min(text.length, index + pattern.length + 20);
202
+ const context = text.substring(start, end).trim();
203
+ return context.length <= 80 ? context : context.substring(0, 77) + "...";
204
+ }
205
+ //# sourceMappingURL=web-research-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-research-detector.js","sourceRoot":"","sources":["../../src/hooks/web-research-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Web Research Detector Hook
3
+ *
4
+ * PreToolUse hook that detects when user messages indicate a need for web research.
5
+ * Injects system context reminding agents about enforcing current knowledge.
6
+ *
7
+ * When triggered, it warns the agent that web research may be needed and suggests
8
+ * searching for current information before providing answers.
9
+ */
10
+ export declare const WEB_RESEARCH_DETECTOR_HOOK_SCRIPT = "#!/usr/bin/env bash\n# oh-my-claudecode: Web Research Detector PreToolUse Hook\n# Fires on tool use to detect web research needs and inject enforcement context.\n\nset -euo pipefail\n\nCLAUDE_API_PROMPT=\"${CLAUDE_API_PROMPT:-}\"\n\n# Extract a simple heuristic from the prompt: look for version patterns or date-sensitive keywords\n# This is a bash-level heuristic that doesn't need the full TypeScript detector\n\n# Check for version patterns: v1.0, 2024, latest, etc.\nif echo \"$CLAUDE_API_PROMPT\" | grep -qiE '\\b(v[0-9]+\\.[0-9]+|20[0-9]{2}|latest\\s+(version|release|update)|breaking\\s+changes|what.?s\\s+new)\\b'; then\n echo \"[WEB RESEARCH ENFORCEMENT]\"\n echo \"Detected request that may require current knowledge (version check, date-sensitive info).\"\n echo \"If you don't have current information available, consider:\"\n echo \" 1. Using WebSearch to find the latest information\"\n echo \" 2. Checking official documentation for the most recent updates\"\n echo \" 3. Being explicit about knowledge cutoff limitations\"\n echo \"\"\nfi\n";
11
+ export declare function getWebResearchDetectorHookConfig(): object;
12
+ //# sourceMappingURL=web-research-hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-research-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/web-research-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,iCAAiC,gjCAqB7C,CAAA;AAED,wBAAgB,gCAAgC,IAAI,MAAM,CAUzD"}