dino-spec 17.4.2 → 17.5.0

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 (195) hide show
  1. package/dist/commands/init.d.ts.map +1 -1
  2. package/dist/commands/init.js +10 -0
  3. package/dist/commands/init.js.map +1 -1
  4. package/dist/core/agents/__tests__/confidence-gate.test.d.ts +5 -0
  5. package/dist/core/agents/__tests__/confidence-gate.test.d.ts.map +1 -0
  6. package/dist/core/agents/__tests__/confidence-gate.test.js +329 -0
  7. package/dist/core/agents/__tests__/confidence-gate.test.js.map +1 -0
  8. package/dist/core/agents/__tests__/gap-detector.test.d.ts +5 -0
  9. package/dist/core/agents/__tests__/gap-detector.test.d.ts.map +1 -0
  10. package/dist/core/agents/__tests__/gap-detector.test.js +609 -0
  11. package/dist/core/agents/__tests__/gap-detector.test.js.map +1 -0
  12. package/dist/core/agents/__tests__/learning-loop.test.d.ts +5 -0
  13. package/dist/core/agents/__tests__/learning-loop.test.d.ts.map +1 -0
  14. package/dist/core/agents/__tests__/learning-loop.test.js +663 -0
  15. package/dist/core/agents/__tests__/learning-loop.test.js.map +1 -0
  16. package/dist/core/agents/__tests__/parallel-executor.test.d.ts +5 -0
  17. package/dist/core/agents/__tests__/parallel-executor.test.d.ts.map +1 -0
  18. package/dist/core/agents/__tests__/parallel-executor.test.js +610 -0
  19. package/dist/core/agents/__tests__/parallel-executor.test.js.map +1 -0
  20. package/dist/core/agents/__tests__/research-validator.test.js +5 -5
  21. package/dist/core/agents/__tests__/research-validator.test.js.map +1 -1
  22. package/dist/core/agents/__tests__/skill-creator.test.d.ts +5 -0
  23. package/dist/core/agents/__tests__/skill-creator.test.d.ts.map +1 -0
  24. package/dist/core/agents/__tests__/skill-creator.test.js +443 -0
  25. package/dist/core/agents/__tests__/skill-creator.test.js.map +1 -0
  26. package/dist/core/agents/__tests__/state-persistence.test.d.ts +2 -0
  27. package/dist/core/agents/__tests__/state-persistence.test.d.ts.map +1 -0
  28. package/dist/core/agents/__tests__/state-persistence.test.js +270 -0
  29. package/dist/core/agents/__tests__/state-persistence.test.js.map +1 -0
  30. package/dist/core/agents/__tests__/validation-cache.test.d.ts +2 -0
  31. package/dist/core/agents/__tests__/validation-cache.test.d.ts.map +1 -0
  32. package/dist/core/agents/__tests__/validation-cache.test.js +181 -0
  33. package/dist/core/agents/__tests__/validation-cache.test.js.map +1 -0
  34. package/dist/core/agents/blackboard.d.ts +22 -3
  35. package/dist/core/agents/blackboard.d.ts.map +1 -1
  36. package/dist/core/agents/blackboard.js +52 -2
  37. package/dist/core/agents/blackboard.js.map +1 -1
  38. package/dist/core/agents/circuit-breaker.d.ts +79 -1
  39. package/dist/core/agents/circuit-breaker.d.ts.map +1 -1
  40. package/dist/core/agents/circuit-breaker.js +175 -1
  41. package/dist/core/agents/circuit-breaker.js.map +1 -1
  42. package/dist/core/agents/clarification-phase.d.ts +128 -0
  43. package/dist/core/agents/clarification-phase.d.ts.map +1 -0
  44. package/dist/core/agents/clarification-phase.js +375 -0
  45. package/dist/core/agents/clarification-phase.js.map +1 -0
  46. package/dist/core/agents/confidence-gate.d.ts +116 -3
  47. package/dist/core/agents/confidence-gate.d.ts.map +1 -1
  48. package/dist/core/agents/confidence-gate.js +363 -3
  49. package/dist/core/agents/confidence-gate.js.map +1 -1
  50. package/dist/core/agents/correction-tracker.d.ts +197 -0
  51. package/dist/core/agents/correction-tracker.d.ts.map +1 -0
  52. package/dist/core/agents/correction-tracker.js +366 -0
  53. package/dist/core/agents/correction-tracker.js.map +1 -0
  54. package/dist/core/agents/dependency-graph.d.ts +193 -0
  55. package/dist/core/agents/dependency-graph.d.ts.map +1 -0
  56. package/dist/core/agents/dependency-graph.js +462 -0
  57. package/dist/core/agents/dependency-graph.js.map +1 -0
  58. package/dist/core/agents/gap-detector.d.ts +277 -0
  59. package/dist/core/agents/gap-detector.d.ts.map +1 -0
  60. package/dist/core/agents/gap-detector.js +540 -0
  61. package/dist/core/agents/gap-detector.js.map +1 -0
  62. package/dist/core/agents/index.d.ts +14 -1
  63. package/dist/core/agents/index.d.ts.map +1 -1
  64. package/dist/core/agents/index.js +26 -1
  65. package/dist/core/agents/index.js.map +1 -1
  66. package/dist/core/agents/message-protocol.d.ts +13 -2
  67. package/dist/core/agents/message-protocol.d.ts.map +1 -1
  68. package/dist/core/agents/message-protocol.js +20 -1
  69. package/dist/core/agents/message-protocol.js.map +1 -1
  70. package/dist/core/agents/parallel-executor.d.ts +182 -0
  71. package/dist/core/agents/parallel-executor.d.ts.map +1 -0
  72. package/dist/core/agents/parallel-executor.js +474 -0
  73. package/dist/core/agents/parallel-executor.js.map +1 -0
  74. package/dist/core/agents/pattern-detector.d.ts +157 -0
  75. package/dist/core/agents/pattern-detector.d.ts.map +1 -0
  76. package/dist/core/agents/pattern-detector.js +370 -0
  77. package/dist/core/agents/pattern-detector.js.map +1 -0
  78. package/dist/core/agents/registry-client.d.ts +6 -0
  79. package/dist/core/agents/registry-client.d.ts.map +1 -1
  80. package/dist/core/agents/registry-client.js +3 -0
  81. package/dist/core/agents/registry-client.js.map +1 -1
  82. package/dist/core/agents/research-phase.d.ts +114 -0
  83. package/dist/core/agents/research-phase.d.ts.map +1 -0
  84. package/dist/core/agents/research-phase.js +355 -0
  85. package/dist/core/agents/research-phase.js.map +1 -0
  86. package/dist/core/agents/research-validator.d.ts +13 -2
  87. package/dist/core/agents/research-validator.d.ts.map +1 -1
  88. package/dist/core/agents/research-validator.js +63 -31
  89. package/dist/core/agents/research-validator.js.map +1 -1
  90. package/dist/core/agents/skill-creator.d.ts +174 -0
  91. package/dist/core/agents/skill-creator.d.ts.map +1 -0
  92. package/dist/core/agents/skill-creator.js +570 -0
  93. package/dist/core/agents/skill-creator.js.map +1 -0
  94. package/dist/core/agents/state-persistence.d.ts +184 -0
  95. package/dist/core/agents/state-persistence.d.ts.map +1 -0
  96. package/dist/core/agents/state-persistence.js +394 -0
  97. package/dist/core/agents/state-persistence.js.map +1 -0
  98. package/dist/core/agents/validation-cache.d.ts +122 -0
  99. package/dist/core/agents/validation-cache.d.ts.map +1 -0
  100. package/dist/core/agents/validation-cache.js +280 -0
  101. package/dist/core/agents/validation-cache.js.map +1 -0
  102. package/dist/core/agents/validators/__tests__/validators.test.d.ts +5 -0
  103. package/dist/core/agents/validators/__tests__/validators.test.d.ts.map +1 -0
  104. package/dist/core/agents/validators/__tests__/validators.test.js +321 -0
  105. package/dist/core/agents/validators/__tests__/validators.test.js.map +1 -0
  106. package/dist/core/agents/validators/base-validator.d.ts +191 -0
  107. package/dist/core/agents/validators/base-validator.d.ts.map +1 -0
  108. package/dist/core/agents/validators/base-validator.js +192 -0
  109. package/dist/core/agents/validators/base-validator.js.map +1 -0
  110. package/dist/core/agents/validators/index.d.ts +7 -0
  111. package/dist/core/agents/validators/index.d.ts.map +1 -0
  112. package/dist/core/agents/validators/index.js +7 -0
  113. package/dist/core/agents/validators/index.js.map +1 -0
  114. package/dist/core/agents/validators/npm-validator.d.ts +50 -0
  115. package/dist/core/agents/validators/npm-validator.d.ts.map +1 -0
  116. package/dist/core/agents/validators/npm-validator.js +211 -0
  117. package/dist/core/agents/validators/npm-validator.js.map +1 -0
  118. package/dist/core/agents/validators/pip-validator.d.ts +49 -0
  119. package/dist/core/agents/validators/pip-validator.d.ts.map +1 -0
  120. package/dist/core/agents/validators/pip-validator.js +191 -0
  121. package/dist/core/agents/validators/pip-validator.js.map +1 -0
  122. package/dist/core/agents/validators/validator-registry.d.ts +122 -0
  123. package/dist/core/agents/validators/validator-registry.d.ts.map +1 -0
  124. package/dist/core/agents/validators/validator-registry.js +321 -0
  125. package/dist/core/agents/validators/validator-registry.js.map +1 -0
  126. package/dist/core/context-repl/types.d.ts +4 -4
  127. package/dist/core/memory/index.d.ts +1 -0
  128. package/dist/core/memory/index.d.ts.map +1 -1
  129. package/dist/core/memory/index.js +2 -0
  130. package/dist/core/memory/index.js.map +1 -1
  131. package/dist/core/memory/learning-store.d.ts +222 -0
  132. package/dist/core/memory/learning-store.d.ts.map +1 -0
  133. package/dist/core/memory/learning-store.js +477 -0
  134. package/dist/core/memory/learning-store.js.map +1 -0
  135. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts +5 -0
  136. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts.map +1 -0
  137. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js +401 -0
  138. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js.map +1 -0
  139. package/dist/core/spec-analyzer/ambiguity-detector.d.ts +99 -0
  140. package/dist/core/spec-analyzer/ambiguity-detector.d.ts.map +1 -0
  141. package/dist/core/spec-analyzer/ambiguity-detector.js +250 -0
  142. package/dist/core/spec-analyzer/ambiguity-detector.js.map +1 -0
  143. package/dist/core/spec-analyzer/clarification-generator.d.ts +76 -0
  144. package/dist/core/spec-analyzer/clarification-generator.d.ts.map +1 -0
  145. package/dist/core/spec-analyzer/clarification-generator.js +257 -0
  146. package/dist/core/spec-analyzer/clarification-generator.js.map +1 -0
  147. package/dist/core/spec-analyzer/index.d.ts +10 -1
  148. package/dist/core/spec-analyzer/index.d.ts.map +1 -1
  149. package/dist/core/spec-analyzer/index.js +13 -1
  150. package/dist/core/spec-analyzer/index.js.map +1 -1
  151. package/dist/core/spec-analyzer/patterns.d.ts +73 -0
  152. package/dist/core/spec-analyzer/patterns.d.ts.map +1 -0
  153. package/dist/core/spec-analyzer/patterns.js +412 -0
  154. package/dist/core/spec-analyzer/patterns.js.map +1 -0
  155. package/dist/hooks/__tests__/dynamic-generator.test.d.ts +5 -0
  156. package/dist/hooks/__tests__/dynamic-generator.test.d.ts.map +1 -0
  157. package/dist/hooks/__tests__/dynamic-generator.test.js +425 -0
  158. package/dist/hooks/__tests__/dynamic-generator.test.js.map +1 -0
  159. package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts +5 -0
  160. package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts.map +1 -0
  161. package/dist/hooks/__tests__/hook-agent-bridge.test.js +315 -0
  162. package/dist/hooks/__tests__/hook-agent-bridge.test.js.map +1 -0
  163. package/dist/hooks/dynamic-generator.d.ts +158 -0
  164. package/dist/hooks/dynamic-generator.d.ts.map +1 -0
  165. package/dist/hooks/dynamic-generator.js +448 -0
  166. package/dist/hooks/dynamic-generator.js.map +1 -0
  167. package/dist/hooks/hook-agent-bridge.d.ts +252 -0
  168. package/dist/hooks/hook-agent-bridge.d.ts.map +1 -0
  169. package/dist/hooks/hook-agent-bridge.js +489 -0
  170. package/dist/hooks/hook-agent-bridge.js.map +1 -0
  171. package/dist/hooks/index.d.ts +3 -1
  172. package/dist/hooks/index.d.ts.map +1 -1
  173. package/dist/hooks/index.js +5 -1
  174. package/dist/hooks/index.js.map +1 -1
  175. package/dist/mcp/tool-catalog.d.ts.map +1 -1
  176. package/dist/mcp/tool-catalog.js +47 -0
  177. package/dist/mcp/tool-catalog.js.map +1 -1
  178. package/dist/mcp/tool-tiers.d.ts.map +1 -1
  179. package/dist/mcp/tool-tiers.js +4 -0
  180. package/dist/mcp/tool-tiers.js.map +1 -1
  181. package/dist/mcp/tools/index.d.ts +2 -1
  182. package/dist/mcp/tools/index.d.ts.map +1 -1
  183. package/dist/mcp/tools/index.js +15 -1
  184. package/dist/mcp/tools/index.js.map +1 -1
  185. package/dist/mcp/tools/learning-store.d.ts +30 -0
  186. package/dist/mcp/tools/learning-store.d.ts.map +1 -0
  187. package/dist/mcp/tools/learning-store.js +286 -0
  188. package/dist/mcp/tools/learning-store.js.map +1 -0
  189. package/dist/rules/index.d.ts.map +1 -1
  190. package/dist/rules/index.js +2 -47
  191. package/dist/rules/index.js.map +1 -1
  192. package/dist/skills/index.d.ts.map +1 -1
  193. package/dist/skills/index.js +159 -38
  194. package/dist/skills/index.js.map +1 -1
  195. package/package.json +1 -1
@@ -0,0 +1,315 @@
1
+ /**
2
+ * Tests for hook-agent-bridge module (v17.5.0)
3
+ */
4
+ import { beforeEach, describe, expect, it } from 'vitest';
5
+ import { DEFAULT_BRIDGE_CONFIG, decideHandler, formatAssessment, HookAgentBridge, shouldEscalate, } from '../hook-agent-bridge.js';
6
+ describe('HookAgentBridge', () => {
7
+ let bridge;
8
+ beforeEach(() => {
9
+ bridge = new HookAgentBridge();
10
+ });
11
+ describe('configuration', () => {
12
+ it('should use default configuration', () => {
13
+ expect(DEFAULT_BRIDGE_CONFIG.escalationThreshold).toBe(50);
14
+ expect(DEFAULT_BRIDGE_CONFIG.maxHookTimeMs).toBe(100);
15
+ expect(DEFAULT_BRIDGE_CONFIG.maxAgentTimeMs).toBe(30000);
16
+ expect(DEFAULT_BRIDGE_CONFIG.enableSharedCache).toBe(true);
17
+ });
18
+ it('should accept custom configuration', () => {
19
+ const custom = new HookAgentBridge({ escalationThreshold: 75 });
20
+ expect(custom).toBeDefined();
21
+ });
22
+ });
23
+ describe('assessComplexity', () => {
24
+ it('should return low score for simple operations', () => {
25
+ const assessment = bridge.assessComplexity('read', {});
26
+ expect(assessment.score).toBeLessThan(50);
27
+ expect(assessment.handler).toBe('hook');
28
+ });
29
+ it('should detect multi-file complexity', () => {
30
+ const assessment = bridge.assessComplexity('edit', {
31
+ files: ['file1.ts', 'file2.ts', 'file3.ts'],
32
+ });
33
+ expect(assessment.factors.some((f) => f.name === 'multiFile')).toBe(true);
34
+ });
35
+ it('should detect reasoning requirements', () => {
36
+ const assessment = bridge.assessComplexity('analyze', {
37
+ text: 'Complex code analysis needed',
38
+ });
39
+ expect(assessment.factors.some((f) => f.name === 'reasoning')).toBe(true);
40
+ });
41
+ it('should detect external API calls', () => {
42
+ const assessment = bridge.assessComplexity('fetch', {
43
+ urls: ['https://api.example.com'],
44
+ });
45
+ expect(assessment.factors.some((f) => f.name === 'external')).toBe(true);
46
+ });
47
+ it('should detect security-sensitive operations', () => {
48
+ const assessment = bridge.assessComplexity('auth', {
49
+ files: ['.env', 'credentials.json'],
50
+ });
51
+ expect(assessment.factors.some((f) => f.name === 'security')).toBe(true);
52
+ expect(assessment.handler).toBe('agent');
53
+ });
54
+ it('should detect async operations', () => {
55
+ const assessment = bridge.assessComplexity('install', {});
56
+ expect(assessment.factors.some((f) => f.name === 'async')).toBe(true);
57
+ });
58
+ it('should provide reason for decision', () => {
59
+ const assessment = bridge.assessComplexity('read', {});
60
+ expect(assessment.reason).toBeDefined();
61
+ expect(assessment.reason.length).toBeGreaterThan(0);
62
+ });
63
+ it('should estimate processing time', () => {
64
+ const hookAssessment = bridge.assessComplexity('read', {});
65
+ expect(hookAssessment.estimatedTimeMs).toBeLessThan(100);
66
+ const agentAssessment = bridge.assessComplexity('analyze', {
67
+ text: 'maybe unclear perhaps',
68
+ });
69
+ expect(agentAssessment.estimatedTimeMs).toBeGreaterThan(1000);
70
+ });
71
+ });
72
+ describe('handler decision', () => {
73
+ it('should return hook for simple operations', () => {
74
+ const assessment = bridge.assessComplexity('read', {});
75
+ expect(assessment.handler).toBe('hook');
76
+ });
77
+ it('should return agent for complex operations', () => {
78
+ const assessment = bridge.assessComplexity('analyze-security-credentials', {
79
+ files: ['auth.ts', '.env'],
80
+ });
81
+ expect(assessment.handler).toBe('agent');
82
+ });
83
+ it('should return both for moderate complexity with reasoning', () => {
84
+ const assessment = bridge.assessComplexity('validate', {
85
+ text: 'maybe some issue',
86
+ });
87
+ // May be 'both' or 'agent' depending on score
88
+ expect(['agent', 'both', 'hook']).toContain(assessment.handler);
89
+ });
90
+ });
91
+ describe('temporary hooks', () => {
92
+ it('should register temporary hook', () => {
93
+ const hookId = bridge.registerTemporaryHook({
94
+ agentId: 'test-agent',
95
+ event: 'PostToolUse',
96
+ handler: async () => ({ proceed: true }),
97
+ blocking: false,
98
+ priority: 10,
99
+ });
100
+ expect(hookId).toBeDefined();
101
+ expect(hookId).toContain('temp-hook');
102
+ });
103
+ it('should get hooks for event', () => {
104
+ bridge.registerTemporaryHook({
105
+ agentId: 'test-agent',
106
+ event: 'PostToolUse',
107
+ handler: async () => ({ proceed: true }),
108
+ blocking: false,
109
+ priority: 10,
110
+ });
111
+ bridge.registerTemporaryHook({
112
+ agentId: 'test-agent',
113
+ event: 'PreToolUse',
114
+ handler: async () => ({ proceed: true }),
115
+ blocking: false,
116
+ priority: 5,
117
+ });
118
+ const postHooks = bridge.getTemporaryHooksForEvent('PostToolUse');
119
+ expect(postHooks).toHaveLength(1);
120
+ const preHooks = bridge.getTemporaryHooksForEvent('PreToolUse');
121
+ expect(preHooks).toHaveLength(1);
122
+ });
123
+ it('should sort hooks by priority', () => {
124
+ bridge.registerTemporaryHook({
125
+ agentId: 'agent-1',
126
+ event: 'PostToolUse',
127
+ handler: async () => ({ proceed: true }),
128
+ blocking: false,
129
+ priority: 5,
130
+ });
131
+ bridge.registerTemporaryHook({
132
+ agentId: 'agent-2',
133
+ event: 'PostToolUse',
134
+ handler: async () => ({ proceed: true }),
135
+ blocking: false,
136
+ priority: 10,
137
+ });
138
+ const hooks = bridge.getTemporaryHooksForEvent('PostToolUse');
139
+ expect(hooks[0].priority).toBe(10);
140
+ expect(hooks[1].priority).toBe(5);
141
+ });
142
+ it('should unregister hook', () => {
143
+ const hookId = bridge.registerTemporaryHook({
144
+ agentId: 'test-agent',
145
+ event: 'PostToolUse',
146
+ handler: async () => ({ proceed: true }),
147
+ blocking: false,
148
+ priority: 10,
149
+ });
150
+ expect(bridge.unregisterTemporaryHook(hookId)).toBe(true);
151
+ expect(bridge.getTemporaryHooksForEvent('PostToolUse')).toHaveLength(0);
152
+ });
153
+ it('should execute temporary hooks', async () => {
154
+ let executed = false;
155
+ bridge.registerTemporaryHook({
156
+ agentId: 'test-agent',
157
+ event: 'PostToolUse',
158
+ handler: async () => {
159
+ executed = true;
160
+ return { proceed: true };
161
+ },
162
+ blocking: false,
163
+ priority: 10,
164
+ });
165
+ const result = await bridge.executeTemporaryHooks('PostToolUse', {});
166
+ expect(executed).toBe(true);
167
+ expect(result.proceed).toBe(true);
168
+ });
169
+ it('should stop on blocking hook that returns false', async () => {
170
+ bridge.registerTemporaryHook({
171
+ agentId: 'blocker',
172
+ event: 'PreToolUse',
173
+ handler: async () => ({ proceed: false, message: 'Blocked!' }),
174
+ blocking: true,
175
+ priority: 10,
176
+ });
177
+ const result = await bridge.executeTemporaryHooks('PreToolUse', {});
178
+ expect(result.proceed).toBe(false);
179
+ expect(result.message).toBe('Blocked!');
180
+ });
181
+ it('should apply matcher pattern', async () => {
182
+ let editExecuted = false;
183
+ let bashExecuted = false;
184
+ bridge.registerTemporaryHook({
185
+ agentId: 'edit-hook',
186
+ event: 'PostToolUse',
187
+ matcher: 'Edit|Write',
188
+ handler: async () => {
189
+ editExecuted = true;
190
+ return { proceed: true };
191
+ },
192
+ blocking: false,
193
+ priority: 10,
194
+ });
195
+ bridge.registerTemporaryHook({
196
+ agentId: 'bash-hook',
197
+ event: 'PostToolUse',
198
+ matcher: 'Bash',
199
+ handler: async () => {
200
+ bashExecuted = true;
201
+ return { proceed: true };
202
+ },
203
+ blocking: false,
204
+ priority: 5,
205
+ });
206
+ await bridge.executeTemporaryHooks('PostToolUse', { tool: 'Edit' });
207
+ expect(editExecuted).toBe(true);
208
+ expect(bashExecuted).toBe(false);
209
+ });
210
+ });
211
+ describe('shared cache', () => {
212
+ it('should provide shared cache access', () => {
213
+ const cache = bridge.getSharedCache();
214
+ expect(cache).toBeDefined();
215
+ });
216
+ it('should set and get cached values', () => {
217
+ bridge.setCached('test-key', { value: 42 });
218
+ const cached = bridge.getCached('test-key');
219
+ expect(cached?.value).toBe(42);
220
+ });
221
+ });
222
+ describe('statistics', () => {
223
+ it('should return stats', () => {
224
+ bridge.registerTemporaryHook({
225
+ agentId: 'test',
226
+ event: 'PostToolUse',
227
+ handler: async () => ({ proceed: true }),
228
+ blocking: false,
229
+ priority: 1,
230
+ });
231
+ const stats = bridge.getStats();
232
+ expect(stats.activeTemporaryHooks).toBe(1);
233
+ expect(stats.pendingEscalations).toBe(0);
234
+ expect(stats.cacheStats).toBeDefined();
235
+ });
236
+ });
237
+ describe('clear', () => {
238
+ it('should clear all state', () => {
239
+ bridge.registerTemporaryHook({
240
+ agentId: 'test',
241
+ event: 'PostToolUse',
242
+ handler: async () => ({ proceed: true }),
243
+ blocking: false,
244
+ priority: 1,
245
+ });
246
+ bridge.setCached('key', 'value');
247
+ bridge.clear();
248
+ const stats = bridge.getStats();
249
+ expect(stats.activeTemporaryHooks).toBe(0);
250
+ });
251
+ });
252
+ });
253
+ describe('decideHandler', () => {
254
+ it('should return hook for simple operations', () => {
255
+ expect(decideHandler('read', {})).toBe('hook');
256
+ });
257
+ it('should return agent for security operations', () => {
258
+ expect(decideHandler('auth-check', { files: ['.env'] })).toBe('agent');
259
+ });
260
+ });
261
+ describe('shouldEscalate', () => {
262
+ it('should return false for simple operations', () => {
263
+ expect(shouldEscalate('read', {})).toBe(false);
264
+ });
265
+ it('should return true for complex operations', () => {
266
+ expect(shouldEscalate('analyze-security', { files: ['auth.ts'] })).toBe(true);
267
+ });
268
+ });
269
+ describe('formatAssessment', () => {
270
+ it('should format assessment as markdown', () => {
271
+ const bridge = new HookAgentBridge();
272
+ const assessment = bridge.assessComplexity('analyze', {
273
+ files: ['file1.ts', 'file2.ts'],
274
+ });
275
+ const markdown = formatAssessment(assessment);
276
+ expect(markdown).toContain('## Complexity Assessment');
277
+ expect(markdown).toContain('**Score:**');
278
+ expect(markdown).toContain('**Handler:**');
279
+ });
280
+ });
281
+ describe('Integration: Hook and Agent Decision Matrix', () => {
282
+ it('should follow decision matrix for deterministic operations (<2s)', () => {
283
+ const bridge = new HookAgentBridge();
284
+ // Simple read - hook
285
+ const read = bridge.assessComplexity('read', {});
286
+ expect(read.handler).toBe('hook');
287
+ expect(read.estimatedTimeMs).toBeLessThan(2000);
288
+ // Simple write - hook
289
+ const write = bridge.assessComplexity('write', { files: ['single.ts'] });
290
+ expect(write.estimatedTimeMs).toBeLessThan(2000);
291
+ });
292
+ it('should follow decision matrix for reasoning operations (>2s)', () => {
293
+ const bridge = new HookAgentBridge();
294
+ // Complex analysis - agent
295
+ const analyze = bridge.assessComplexity('analyze-architecture', {
296
+ files: ['src/core/a.ts', 'src/core/b.ts', 'src/core/c.ts'],
297
+ text: 'Review and suggest improvements',
298
+ });
299
+ // Should escalate to agent
300
+ expect(['agent', 'both']).toContain(analyze.handler);
301
+ });
302
+ it('should meet performance targets', () => {
303
+ const bridge = new HookAgentBridge();
304
+ // Hook operations should be <100ms estimated
305
+ const hook = bridge.assessComplexity('read', {});
306
+ expect(hook.estimatedTimeMs).toBeLessThanOrEqual(100);
307
+ // Agent operations should be 2-30s estimated
308
+ const agent = bridge.assessComplexity('security-review', {
309
+ files: ['.env', 'credentials.json'],
310
+ });
311
+ expect(agent.estimatedTimeMs).toBeGreaterThanOrEqual(2000);
312
+ expect(agent.estimatedTimeMs).toBeLessThanOrEqual(30000);
313
+ });
314
+ });
315
+ //# sourceMappingURL=hook-agent-bridge.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-agent-bridge.test.js","sourceRoot":"","sources":["../../../src/hooks/__tests__/hook-agent-bridge.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Dynamic Hook Generator - v17.5.0
3
+ *
4
+ * Generates hooks dynamically based on:
5
+ * - Project type detection (TypeScript, Python, Rust, etc.)
6
+ * - Learned patterns from corrections
7
+ * - Custom rules and preferences
8
+ * - Plugin-based hook registration
9
+ *
10
+ * Features:
11
+ * - Project-aware hook generation
12
+ * - Pattern-based hook templates
13
+ * - Runtime hook configuration
14
+ * - Integration with learning store
15
+ *
16
+ * @module dynamic-generator
17
+ */
18
+ import type { LearnedPattern } from '../core/memory/learning-store.js';
19
+ /**
20
+ * Supported project types
21
+ */
22
+ export type ProjectType = 'typescript' | 'javascript' | 'python' | 'rust' | 'go' | 'java' | 'dotnet' | 'ruby' | 'unknown';
23
+ /**
24
+ * Hook event types
25
+ */
26
+ export type HookEvent = 'SessionStart' | 'SessionEnd' | 'PostToolUse' | 'PreToolUse' | 'PreCompact' | 'SubagentStart' | 'SubagentStop' | 'UserPromptSubmit';
27
+ /**
28
+ * Tool matcher for PostToolUse/PreToolUse hooks
29
+ */
30
+ export type ToolMatcher = 'Edit' | 'Write' | 'Bash' | 'Edit|Write' | 'Edit|Write|Bash' | string;
31
+ /**
32
+ * A hook definition
33
+ */
34
+ export interface HookDefinition {
35
+ id: string;
36
+ event: HookEvent;
37
+ matcher?: ToolMatcher;
38
+ command: string;
39
+ description: string;
40
+ priority: number;
41
+ enabled: boolean;
42
+ source: 'builtin' | 'project' | 'learned' | 'custom';
43
+ }
44
+ /**
45
+ * Hook template for common patterns
46
+ */
47
+ export interface HookTemplate {
48
+ id: string;
49
+ name: string;
50
+ description: string;
51
+ event: HookEvent;
52
+ matcher?: ToolMatcher;
53
+ commandTemplate: string;
54
+ variables: string[];
55
+ projectTypes: ProjectType[];
56
+ }
57
+ /**
58
+ * Dynamic generator configuration
59
+ */
60
+ export interface DynamicGeneratorConfig {
61
+ /** Project root directory */
62
+ projectDir: string;
63
+ /** Platform (win32, linux, darwin) */
64
+ platform: 'win32' | 'linux' | 'darwin';
65
+ /** Whether to include learned patterns */
66
+ includeLearnedPatterns: boolean;
67
+ /** Custom hooks to add */
68
+ customHooks: HookDefinition[];
69
+ /** Disabled hook IDs */
70
+ disabledHooks: string[];
71
+ }
72
+ /**
73
+ * Generated hooks result
74
+ */
75
+ export interface GeneratedHooks {
76
+ projectType: ProjectType;
77
+ hooks: HookDefinition[];
78
+ settingsJson: object;
79
+ }
80
+ export declare const DEFAULT_GENERATOR_CONFIG: DynamicGeneratorConfig;
81
+ /**
82
+ * Built-in hook templates
83
+ */
84
+ export declare const HOOK_TEMPLATES: HookTemplate[];
85
+ /**
86
+ * Generates hooks dynamically based on project context
87
+ */
88
+ export declare class DynamicHookGenerator {
89
+ private config;
90
+ private registeredHooks;
91
+ private templates;
92
+ constructor(config?: Partial<DynamicGeneratorConfig>);
93
+ /**
94
+ * Detect project type from file indicators
95
+ */
96
+ detectProjectType(): ProjectType;
97
+ /**
98
+ * Detect package manager
99
+ */
100
+ detectPackageManager(): string;
101
+ /**
102
+ * Register a custom hook
103
+ */
104
+ registerHook(hook: HookDefinition): void;
105
+ /**
106
+ * Unregister a hook
107
+ */
108
+ unregisterHook(hookId: string): boolean;
109
+ /**
110
+ * Register a custom template
111
+ */
112
+ registerTemplate(template: HookTemplate): void;
113
+ /**
114
+ * Generate hooks for the current project
115
+ */
116
+ generate(learnedPatterns?: LearnedPattern[]): GeneratedHooks;
117
+ /**
118
+ * Generate hooks from learned patterns
119
+ */
120
+ private generateFromPatterns;
121
+ /**
122
+ * Instantiate a template with variables
123
+ */
124
+ private instantiateTemplate;
125
+ /**
126
+ * Generate Claude Code settings.json hook structure
127
+ */
128
+ private generateSettingsJson;
129
+ /**
130
+ * Get available templates
131
+ */
132
+ getTemplates(): HookTemplate[];
133
+ /**
134
+ * Get templates for a project type
135
+ */
136
+ getTemplatesForProject(projectType: ProjectType): HookTemplate[];
137
+ }
138
+ /**
139
+ * Get the default generator instance
140
+ */
141
+ export declare function getHookGenerator(config?: Partial<DynamicGeneratorConfig>): DynamicHookGenerator;
142
+ /**
143
+ * Generate hooks for a project
144
+ */
145
+ export declare function generateHooksForProject(projectDir: string, learnedPatterns?: LearnedPattern[]): GeneratedHooks;
146
+ /**
147
+ * Format hooks for display
148
+ */
149
+ export declare function formatHooks(hooks: HookDefinition[]): string;
150
+ /**
151
+ * Format generated result
152
+ */
153
+ export declare function formatGeneratedResult(result: GeneratedHooks): string;
154
+ /**
155
+ * Merge generated hooks with existing settings
156
+ */
157
+ export declare function mergeWithExistingSettings(existingSettings: object, generatedHooks: object): object;
158
+ //# sourceMappingURL=dynamic-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-generator.d.ts","sourceRoot":"","sources":["../../src/hooks/dynamic-generator.ts"],"names":[],"mappings":"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"}