cmp-memory-system 1.0.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 (161) hide show
  1. package/README.md +541 -0
  2. package/dist/analytics/index.d.ts +5 -0
  3. package/dist/analytics/index.d.ts.map +1 -0
  4. package/dist/analytics/index.js +5 -0
  5. package/dist/analytics/index.js.map +1 -0
  6. package/dist/analytics/tracker.d.ts +107 -0
  7. package/dist/analytics/tracker.d.ts.map +1 -0
  8. package/dist/analytics/tracker.js +333 -0
  9. package/dist/analytics/tracker.js.map +1 -0
  10. package/dist/auto-improve/eslint-generator.d.ts +36 -0
  11. package/dist/auto-improve/eslint-generator.d.ts.map +1 -0
  12. package/dist/auto-improve/eslint-generator.js +280 -0
  13. package/dist/auto-improve/eslint-generator.js.map +1 -0
  14. package/dist/auto-improve/index.d.ts +6 -0
  15. package/dist/auto-improve/index.d.ts.map +1 -0
  16. package/dist/auto-improve/index.js +6 -0
  17. package/dist/auto-improve/index.js.map +1 -0
  18. package/dist/auto-improve/pattern-detector.d.ts +92 -0
  19. package/dist/auto-improve/pattern-detector.d.ts.map +1 -0
  20. package/dist/auto-improve/pattern-detector.js +231 -0
  21. package/dist/auto-improve/pattern-detector.js.map +1 -0
  22. package/dist/cli/index.d.ts +16 -0
  23. package/dist/cli/index.d.ts.map +1 -0
  24. package/dist/cli/index.js +636 -0
  25. package/dist/cli/index.js.map +1 -0
  26. package/dist/dashboard/index.d.ts +6 -0
  27. package/dist/dashboard/index.d.ts.map +1 -0
  28. package/dist/dashboard/index.js +6 -0
  29. package/dist/dashboard/index.js.map +1 -0
  30. package/dist/dashboard/server.d.ts +15 -0
  31. package/dist/dashboard/server.d.ts.map +1 -0
  32. package/dist/dashboard/server.js +373 -0
  33. package/dist/dashboard/server.js.map +1 -0
  34. package/dist/dashboard/ui.d.ts +9 -0
  35. package/dist/dashboard/ui.d.ts.map +1 -0
  36. package/dist/dashboard/ui.js +530 -0
  37. package/dist/dashboard/ui.js.map +1 -0
  38. package/dist/db/client.d.ts +66 -0
  39. package/dist/db/client.d.ts.map +1 -0
  40. package/dist/db/client.js +159 -0
  41. package/dist/db/client.js.map +1 -0
  42. package/dist/db/drizzle-client.d.ts +302 -0
  43. package/dist/db/drizzle-client.d.ts.map +1 -0
  44. package/dist/db/drizzle-client.js +404 -0
  45. package/dist/db/drizzle-client.js.map +1 -0
  46. package/dist/db/index.d.ts +5 -0
  47. package/dist/db/index.d.ts.map +1 -0
  48. package/dist/db/index.js +5 -0
  49. package/dist/db/index.js.map +1 -0
  50. package/dist/feedback/collector.d.ts +74 -0
  51. package/dist/feedback/collector.d.ts.map +1 -0
  52. package/dist/feedback/collector.js +231 -0
  53. package/dist/feedback/collector.js.map +1 -0
  54. package/dist/feedback/index.d.ts +5 -0
  55. package/dist/feedback/index.d.ts.map +1 -0
  56. package/dist/feedback/index.js +5 -0
  57. package/dist/feedback/index.js.map +1 -0
  58. package/dist/hooks/index.d.ts +8 -0
  59. package/dist/hooks/index.d.ts.map +1 -0
  60. package/dist/hooks/index.js +8 -0
  61. package/dist/hooks/index.js.map +1 -0
  62. package/dist/hooks/memory-checkpoint.d.ts +43 -0
  63. package/dist/hooks/memory-checkpoint.d.ts.map +1 -0
  64. package/dist/hooks/memory-checkpoint.js +257 -0
  65. package/dist/hooks/memory-checkpoint.js.map +1 -0
  66. package/dist/hooks/post-tool-use.d.ts +61 -0
  67. package/dist/hooks/post-tool-use.d.ts.map +1 -0
  68. package/dist/hooks/post-tool-use.js +262 -0
  69. package/dist/hooks/post-tool-use.js.map +1 -0
  70. package/dist/hooks/pre-tool-use.d.ts +34 -0
  71. package/dist/hooks/pre-tool-use.d.ts.map +1 -0
  72. package/dist/hooks/pre-tool-use.js +358 -0
  73. package/dist/hooks/pre-tool-use.js.map +1 -0
  74. package/dist/hooks/session-start.d.ts +38 -0
  75. package/dist/hooks/session-start.d.ts.map +1 -0
  76. package/dist/hooks/session-start.js +274 -0
  77. package/dist/hooks/session-start.js.map +1 -0
  78. package/dist/index.d.ts +29 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +39 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/mcp/index.d.ts +5 -0
  83. package/dist/mcp/index.d.ts.map +1 -0
  84. package/dist/mcp/index.js +5 -0
  85. package/dist/mcp/index.js.map +1 -0
  86. package/dist/mcp/server.d.ts +42 -0
  87. package/dist/mcp/server.d.ts.map +1 -0
  88. package/dist/mcp/server.js +599 -0
  89. package/dist/mcp/server.js.map +1 -0
  90. package/dist/registry/embeddings.d.ts +38 -0
  91. package/dist/registry/embeddings.d.ts.map +1 -0
  92. package/dist/registry/embeddings.js +110 -0
  93. package/dist/registry/embeddings.js.map +1 -0
  94. package/dist/registry/generator.d.ts +41 -0
  95. package/dist/registry/generator.d.ts.map +1 -0
  96. package/dist/registry/generator.js +323 -0
  97. package/dist/registry/generator.js.map +1 -0
  98. package/dist/registry/index.d.ts +6 -0
  99. package/dist/registry/index.d.ts.map +1 -0
  100. package/dist/registry/index.js +6 -0
  101. package/dist/registry/index.js.map +1 -0
  102. package/dist/services/IdeaCollector.d.ts +103 -0
  103. package/dist/services/IdeaCollector.d.ts.map +1 -0
  104. package/dist/services/IdeaCollector.js +371 -0
  105. package/dist/services/IdeaCollector.js.map +1 -0
  106. package/dist/services/TaskTracker.d.ts +89 -0
  107. package/dist/services/TaskTracker.d.ts.map +1 -0
  108. package/dist/services/TaskTracker.js +324 -0
  109. package/dist/services/TaskTracker.js.map +1 -0
  110. package/dist/services/WorkPlanManager.d.ts +107 -0
  111. package/dist/services/WorkPlanManager.d.ts.map +1 -0
  112. package/dist/services/WorkPlanManager.js +440 -0
  113. package/dist/services/WorkPlanManager.js.map +1 -0
  114. package/dist/services/auto-inject.d.ts +77 -0
  115. package/dist/services/auto-inject.d.ts.map +1 -0
  116. package/dist/services/auto-inject.js +289 -0
  117. package/dist/services/auto-inject.js.map +1 -0
  118. package/dist/services/auto-tag.d.ts +61 -0
  119. package/dist/services/auto-tag.d.ts.map +1 -0
  120. package/dist/services/auto-tag.js +203 -0
  121. package/dist/services/auto-tag.js.map +1 -0
  122. package/dist/services/cross-project-sync.d.ts +76 -0
  123. package/dist/services/cross-project-sync.d.ts.map +1 -0
  124. package/dist/services/cross-project-sync.js +235 -0
  125. package/dist/services/cross-project-sync.js.map +1 -0
  126. package/dist/services/index.d.ts +15 -0
  127. package/dist/services/index.d.ts.map +1 -0
  128. package/dist/services/index.js +18 -0
  129. package/dist/services/index.js.map +1 -0
  130. package/dist/services/memory-consolidation.d.ts +77 -0
  131. package/dist/services/memory-consolidation.d.ts.map +1 -0
  132. package/dist/services/memory-consolidation.js +298 -0
  133. package/dist/services/memory-consolidation.js.map +1 -0
  134. package/dist/services/semantic-search.d.ts +93 -0
  135. package/dist/services/semantic-search.d.ts.map +1 -0
  136. package/dist/services/semantic-search.js +278 -0
  137. package/dist/services/semantic-search.js.map +1 -0
  138. package/dist/services/weekly-digest.d.ts +105 -0
  139. package/dist/services/weekly-digest.d.ts.map +1 -0
  140. package/dist/services/weekly-digest.js +292 -0
  141. package/dist/services/weekly-digest.js.map +1 -0
  142. package/dist/types/index.d.ts +274 -0
  143. package/dist/types/index.d.ts.map +1 -0
  144. package/dist/types/index.js +84 -0
  145. package/dist/types/index.js.map +1 -0
  146. package/dist/utils/config.d.ts +21 -0
  147. package/dist/utils/config.d.ts.map +1 -0
  148. package/dist/utils/config.js +89 -0
  149. package/dist/utils/config.js.map +1 -0
  150. package/dist/utils/index.d.ts +6 -0
  151. package/dist/utils/index.d.ts.map +1 -0
  152. package/dist/utils/index.js +6 -0
  153. package/dist/utils/index.js.map +1 -0
  154. package/dist/utils/paths.d.ts +28 -0
  155. package/dist/utils/paths.d.ts.map +1 -0
  156. package/dist/utils/paths.js +80 -0
  157. package/dist/utils/paths.js.map +1 -0
  158. package/package.json +89 -0
  159. package/templates/memory-config.json +82 -0
  160. package/templates/memory-config.schema.json +212 -0
  161. package/templates/settings.json +58 -0
@@ -0,0 +1,61 @@
1
+ /**
2
+ * PostToolUse Hook - Executable
3
+ *
4
+ * Records what was actually changed after Edit/Write completes.
5
+ * Creates memory entries for significant changes.
6
+ */
7
+ import type { HookResult } from '../types/index.js';
8
+ export interface PostToolUseEvent {
9
+ tool_name: string;
10
+ parameters: Record<string, unknown>;
11
+ result: {
12
+ success: boolean;
13
+ output?: string;
14
+ error?: string;
15
+ };
16
+ }
17
+ interface ChangeRecord {
18
+ file: string;
19
+ type: 'edit' | 'write' | 'delete';
20
+ linesChanged?: number;
21
+ summary?: string;
22
+ }
23
+ export declare class PostToolUseHook {
24
+ private config;
25
+ private projectRoot;
26
+ private client;
27
+ private sessionChanges;
28
+ /**
29
+ * Initialize the hook
30
+ */
31
+ init(projectRoot?: string): Promise<void>;
32
+ /**
33
+ * Execute the hook after a tool completes
34
+ */
35
+ execute(event: PostToolUseEvent): Promise<HookResult>;
36
+ /**
37
+ * Record a significant change to memory
38
+ */
39
+ private recordChange;
40
+ /**
41
+ * Generate description for change
42
+ */
43
+ private generateChangeDescription;
44
+ /**
45
+ * Get all changes recorded this session
46
+ */
47
+ getSessionChanges(): ChangeRecord[];
48
+ /**
49
+ * Create session summary
50
+ */
51
+ createSessionSummary(): Promise<{
52
+ id: string;
53
+ } | null>;
54
+ /**
55
+ * Clear session changes
56
+ */
57
+ clearSession(): void;
58
+ }
59
+ export declare function runPostToolUseHook(eventJson: string): Promise<void>;
60
+ export {};
61
+ //# sourceMappingURL=post-tool-use.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-tool-use.d.ts","sourceRoot":"","sources":["../../src/hooks/post-tool-use.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAA+B,MAAM,mBAAmB,CAAA;AAShF,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,MAAM,EAAE;QACN,OAAO,EAAE,OAAO,CAAA;QAChB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;CACF;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;IACjC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AA0GD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,cAAc,CAAqB;IAE3C;;OAEG;IACG,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY/C;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IA0C3D;;OAEG;YACW,YAAY;IA4B1B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAkBjC;;OAEG;IACH,iBAAiB,IAAI,YAAY,EAAE;IAInC;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IA6C5D;;OAEG;IACH,YAAY,IAAI,IAAI;CAGrB;AAMD,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKzE"}
@@ -0,0 +1,262 @@
1
+ /**
2
+ * PostToolUse Hook - Executable
3
+ *
4
+ * Records what was actually changed after Edit/Write completes.
5
+ * Creates memory entries for significant changes.
6
+ */
7
+ import { loadConfig } from '../utils/config.js';
8
+ import { getProjectRoot, matchesPattern } from '../utils/paths.js';
9
+ import { createDrizzleClient } from '../db/drizzle-client.js';
10
+ // =============================================================================
11
+ // CHANGE ANALYSIS
12
+ // =============================================================================
13
+ /**
14
+ * Analyze what was changed
15
+ */
16
+ function analyzeChange(event) {
17
+ const { tool_name, parameters, result } = event;
18
+ if (!result.success) {
19
+ return null;
20
+ }
21
+ switch (tool_name) {
22
+ case 'Edit': {
23
+ const filePath = parameters.file_path;
24
+ const oldString = parameters.old_string;
25
+ const newString = parameters.new_string;
26
+ if (!filePath)
27
+ return null;
28
+ const linesChanged = Math.abs((newString?.split('\n').length ?? 0) - (oldString?.split('\n').length ?? 0));
29
+ return {
30
+ file: filePath,
31
+ type: 'edit',
32
+ linesChanged,
33
+ summary: `Edited ${filePath.split('/').pop()}`,
34
+ };
35
+ }
36
+ case 'Write': {
37
+ const filePath = parameters.file_path;
38
+ const content = parameters.content;
39
+ if (!filePath)
40
+ return null;
41
+ return {
42
+ file: filePath,
43
+ type: 'write',
44
+ linesChanged: content?.split('\n').length ?? 0,
45
+ summary: `Created ${filePath.split('/').pop()}`,
46
+ };
47
+ }
48
+ default:
49
+ return null;
50
+ }
51
+ }
52
+ /**
53
+ * Determine if change is significant enough to record
54
+ */
55
+ function isSignificantChange(change, config) {
56
+ // Critical paths are always significant
57
+ if (matchesPattern(change.file, config.checkpoint.criticalPaths)) {
58
+ return true;
59
+ }
60
+ // Check minimum lines changed
61
+ if (change.linesChanged && change.linesChanged >= config.checkpoint.minLinesChanged) {
62
+ return true;
63
+ }
64
+ // New files are significant
65
+ if (change.type === 'write') {
66
+ return true;
67
+ }
68
+ return false;
69
+ }
70
+ /**
71
+ * Extract domain from file path
72
+ */
73
+ function extractDomain(filePath, domains) {
74
+ const pathLower = filePath.toLowerCase();
75
+ for (const domain of domains) {
76
+ if (pathLower.includes(domain.replace(/-/g, '/')) ||
77
+ pathLower.includes(domain.replace(/-/g, '_'))) {
78
+ return domain;
79
+ }
80
+ }
81
+ // Fallback detection
82
+ if (pathLower.includes('/schema/'))
83
+ return 'schema';
84
+ if (pathLower.includes('/api/') || pathLower.includes('/routers/'))
85
+ return 'api';
86
+ if (pathLower.includes('/components/'))
87
+ return 'components';
88
+ if (pathLower.includes('/hooks/'))
89
+ return 'hooks';
90
+ return 'general';
91
+ }
92
+ // =============================================================================
93
+ // MAIN HOOK CLASS
94
+ // =============================================================================
95
+ export class PostToolUseHook {
96
+ config = null;
97
+ projectRoot = null;
98
+ client = null;
99
+ sessionChanges = [];
100
+ /**
101
+ * Initialize the hook
102
+ */
103
+ async init(projectRoot) {
104
+ this.projectRoot = projectRoot ?? await getProjectRoot();
105
+ this.config = await loadConfig(this.projectRoot);
106
+ try {
107
+ this.client = createDrizzleClient(this.config.system);
108
+ }
109
+ catch {
110
+ // DB not available, will log locally
111
+ console.warn('[PostToolUse] Database not available, recording changes locally');
112
+ }
113
+ }
114
+ /**
115
+ * Execute the hook after a tool completes
116
+ */
117
+ async execute(event) {
118
+ if (!this.config || !this.projectRoot) {
119
+ await this.init();
120
+ }
121
+ const config = this.config;
122
+ // Skip if checkpointing disabled
123
+ if (!config.checkpoint.enabled) {
124
+ return { mode: 'proceed' };
125
+ }
126
+ // Analyze the change
127
+ const change = analyzeChange(event);
128
+ if (!change) {
129
+ return { mode: 'proceed' };
130
+ }
131
+ // Check if excluded
132
+ if (matchesPattern(change.file, config.checkpoint.excludePaths)) {
133
+ return { mode: 'proceed' };
134
+ }
135
+ // Track the change
136
+ this.sessionChanges.push(change);
137
+ // Check if significant
138
+ if (!isSignificantChange(change, config)) {
139
+ return { mode: 'proceed' };
140
+ }
141
+ // Record significant change
142
+ try {
143
+ await this.recordChange(change, config);
144
+ }
145
+ catch (error) {
146
+ console.error('[PostToolUse] Failed to record change:', error);
147
+ }
148
+ return { mode: 'proceed' };
149
+ }
150
+ /**
151
+ * Record a significant change to memory
152
+ */
153
+ async recordChange(change, config) {
154
+ const domain = extractDomain(change.file, config.domains);
155
+ const content = {
156
+ title: change.summary ?? `Change to ${change.file}`,
157
+ body: this.generateChangeDescription(change),
158
+ domain,
159
+ source: 'checkpoint',
160
+ relatedFiles: [change.file],
161
+ };
162
+ if (this.client) {
163
+ // Save to database
164
+ await this.client.createMemory(content, [
165
+ 'auto-checkpoint',
166
+ domain,
167
+ change.type,
168
+ ]);
169
+ console.log(`📝 [PostToolUse] Recorded: ${content.title}`);
170
+ }
171
+ else {
172
+ // Log locally
173
+ console.log(`📝 [PostToolUse] Change recorded (local): ${content.title}`);
174
+ }
175
+ }
176
+ /**
177
+ * Generate description for change
178
+ */
179
+ generateChangeDescription(change) {
180
+ const lines = [];
181
+ lines.push(`## Change Details`);
182
+ lines.push('');
183
+ lines.push(`- **File**: ${change.file}`);
184
+ lines.push(`- **Type**: ${change.type}`);
185
+ if (change.linesChanged) {
186
+ lines.push(`- **Lines changed**: ${change.linesChanged}`);
187
+ }
188
+ lines.push('');
189
+ lines.push(`*Recorded at ${new Date().toISOString()}*`);
190
+ return lines.join('\n');
191
+ }
192
+ /**
193
+ * Get all changes recorded this session
194
+ */
195
+ getSessionChanges() {
196
+ return [...this.sessionChanges];
197
+ }
198
+ /**
199
+ * Create session summary
200
+ */
201
+ async createSessionSummary() {
202
+ if (this.sessionChanges.length === 0) {
203
+ return null;
204
+ }
205
+ const config = this.config;
206
+ const changes = this.sessionChanges;
207
+ // Group by domain
208
+ const byDomain = new Map();
209
+ for (const change of changes) {
210
+ const domain = extractDomain(change.file, config.domains);
211
+ const existing = byDomain.get(domain) ?? [];
212
+ existing.push(change);
213
+ byDomain.set(domain, existing);
214
+ }
215
+ // Generate summary
216
+ const lines = ['## Session Summary', ''];
217
+ for (const [domain, domainChanges] of byDomain) {
218
+ lines.push(`### ${domain}`);
219
+ for (const change of domainChanges) {
220
+ lines.push(`- ${change.type}: ${change.file.split('/').pop()}`);
221
+ }
222
+ lines.push('');
223
+ }
224
+ lines.push(`**Total changes**: ${changes.length}`);
225
+ lines.push(`**Domains affected**: ${byDomain.size}`);
226
+ const content = {
227
+ title: `Session Summary: ${changes.length} changes`,
228
+ body: lines.join('\n'),
229
+ source: 'checkpoint',
230
+ relatedFiles: changes.map(c => c.file),
231
+ };
232
+ if (this.client) {
233
+ return this.client.createMemory(content, ['session-summary']);
234
+ }
235
+ return null;
236
+ }
237
+ /**
238
+ * Clear session changes
239
+ */
240
+ clearSession() {
241
+ this.sessionChanges = [];
242
+ }
243
+ }
244
+ // =============================================================================
245
+ // STANDALONE EXECUTION
246
+ // =============================================================================
247
+ export async function runPostToolUseHook(eventJson) {
248
+ const event = JSON.parse(eventJson);
249
+ const hook = new PostToolUseHook();
250
+ const result = await hook.execute(event);
251
+ console.log(JSON.stringify(result));
252
+ }
253
+ if (import.meta.url === `file://${process.argv[1]}`) {
254
+ const eventJson = process.argv[2];
255
+ if (eventJson) {
256
+ runPostToolUseHook(eventJson).catch(console.error);
257
+ }
258
+ else {
259
+ console.error('Usage: node post-tool-use.js <event-json>');
260
+ }
261
+ }
262
+ //# sourceMappingURL=post-tool-use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-tool-use.js","sourceRoot":"","sources":["../../src/hooks/post-tool-use.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * PreToolUse Hook - Executable
3
+ *
4
+ * Validates tool calls against configured guards:
5
+ * 1. Schema protection (block modifications to protected files)
6
+ * 2. Pattern validation (warn about bad patterns)
7
+ * 3. Embedding injection (inject relevant knowledge for Task tool)
8
+ */
9
+ import type { HookResult, PreToolUseEvent } from '../types/index.js';
10
+ export declare class PreToolUseHook {
11
+ private config;
12
+ private projectRoot;
13
+ /**
14
+ * Initialize the hook
15
+ */
16
+ init(projectRoot?: string): Promise<void>;
17
+ /**
18
+ * Execute the hook for a tool call
19
+ */
20
+ execute(event: PreToolUseEvent): Promise<HookResult>;
21
+ /**
22
+ * Handle Edit/Write tool calls - run guards
23
+ */
24
+ private handleFileOperation;
25
+ /**
26
+ * Handle Task tool calls - inject knowledge
27
+ */
28
+ private handleTaskTool;
29
+ }
30
+ /**
31
+ * Run hook as standalone script (reads event from stdin)
32
+ */
33
+ export declare function runPreToolUseHook(): Promise<void>;
34
+ //# sourceMappingURL=pre-tool-use.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pre-tool-use.d.ts","sourceRoot":"","sources":["../../src/hooks/pre-tool-use.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAEV,UAAU,EACV,eAAe,EAMhB,MAAM,mBAAmB,CAAA;AAwQ1B,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,WAAW,CAAsB;IAEzC;;OAEG;IACG,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/C;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAuB1D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiD3B;;OAEG;YACW,cAAc;CA6C7B;AAMD;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuBvD"}