oh-my-claude-sisyphus 3.7.2 → 3.7.4

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 (114) hide show
  1. package/agents/build-fixer-low.md +2 -2
  2. package/agents/build-fixer.md +74 -19
  3. package/agents/code-reviewer.md +7 -7
  4. package/agents/designer-high.md +2 -2
  5. package/agents/designer-low.md +1 -1
  6. package/agents/designer.md +17 -2
  7. package/agents/security-reviewer.md +86 -17
  8. package/agents/tdd-guide.md +151 -12
  9. package/dist/__tests__/compatibility-security.test.d.ts +13 -0
  10. package/dist/__tests__/compatibility-security.test.d.ts.map +1 -0
  11. package/dist/__tests__/compatibility-security.test.js +403 -0
  12. package/dist/__tests__/compatibility-security.test.js.map +1 -0
  13. package/dist/__tests__/compatibility.test.d.ts +7 -0
  14. package/dist/__tests__/compatibility.test.d.ts.map +1 -0
  15. package/dist/__tests__/compatibility.test.js +484 -0
  16. package/dist/__tests__/compatibility.test.js.map +1 -0
  17. package/dist/__tests__/hud/analytics-display.test.js +4 -0
  18. package/dist/__tests__/hud/analytics-display.test.js.map +1 -1
  19. package/dist/__tests__/installer.test.js +1 -1
  20. package/dist/__tests__/skills.test.js +6 -5
  21. package/dist/__tests__/skills.test.js.map +1 -1
  22. package/dist/agents/definitions.js +1 -1
  23. package/dist/agents/definitions.js.map +1 -1
  24. package/dist/compatibility/discovery.d.ts +58 -0
  25. package/dist/compatibility/discovery.d.ts.map +1 -0
  26. package/dist/compatibility/discovery.js +621 -0
  27. package/dist/compatibility/discovery.js.map +1 -0
  28. package/dist/compatibility/index.d.ts +51 -0
  29. package/dist/compatibility/index.d.ts.map +1 -0
  30. package/dist/compatibility/index.js +72 -0
  31. package/dist/compatibility/index.js.map +1 -0
  32. package/dist/compatibility/mcp-bridge.d.ts +138 -0
  33. package/dist/compatibility/mcp-bridge.d.ts.map +1 -0
  34. package/dist/compatibility/mcp-bridge.js +524 -0
  35. package/dist/compatibility/mcp-bridge.js.map +1 -0
  36. package/dist/compatibility/permission-adapter.d.ts +79 -0
  37. package/dist/compatibility/permission-adapter.d.ts.map +1 -0
  38. package/dist/compatibility/permission-adapter.js +369 -0
  39. package/dist/compatibility/permission-adapter.js.map +1 -0
  40. package/dist/compatibility/registry.d.ts +161 -0
  41. package/dist/compatibility/registry.d.ts.map +1 -0
  42. package/dist/compatibility/registry.js +389 -0
  43. package/dist/compatibility/registry.js.map +1 -0
  44. package/dist/compatibility/types.d.ts +249 -0
  45. package/dist/compatibility/types.d.ts.map +1 -0
  46. package/dist/compatibility/types.js +8 -0
  47. package/dist/compatibility/types.js.map +1 -0
  48. package/dist/features/rate-limit-wait/daemon.d.ts.map +1 -1
  49. package/dist/features/rate-limit-wait/daemon.js +3 -0
  50. package/dist/features/rate-limit-wait/daemon.js.map +1 -1
  51. package/dist/hooks/autopilot/prompts.d.ts.map +1 -1
  52. package/dist/hooks/autopilot/prompts.js +17 -3
  53. package/dist/hooks/autopilot/prompts.js.map +1 -1
  54. package/dist/hooks/github-auto-responder/classifier.d.ts +43 -0
  55. package/dist/hooks/github-auto-responder/classifier.d.ts.map +1 -0
  56. package/dist/hooks/github-auto-responder/classifier.js +150 -0
  57. package/dist/hooks/github-auto-responder/classifier.js.map +1 -0
  58. package/dist/hooks/github-auto-responder/config.d.ts +109 -0
  59. package/dist/hooks/github-auto-responder/config.d.ts.map +1 -0
  60. package/dist/hooks/github-auto-responder/config.js +69 -0
  61. package/dist/hooks/github-auto-responder/config.js.map +1 -0
  62. package/dist/hooks/github-auto-responder/constants.d.ts +45 -0
  63. package/dist/hooks/github-auto-responder/constants.d.ts.map +1 -0
  64. package/dist/hooks/github-auto-responder/constants.js +60 -0
  65. package/dist/hooks/github-auto-responder/constants.js.map +1 -0
  66. package/dist/hooks/github-auto-responder/filters.d.ts +95 -0
  67. package/dist/hooks/github-auto-responder/filters.d.ts.map +1 -0
  68. package/dist/hooks/github-auto-responder/filters.js +174 -0
  69. package/dist/hooks/github-auto-responder/filters.js.map +1 -0
  70. package/dist/hooks/github-auto-responder/github-client.d.ts +65 -0
  71. package/dist/hooks/github-auto-responder/github-client.d.ts.map +1 -0
  72. package/dist/hooks/github-auto-responder/github-client.js +128 -0
  73. package/dist/hooks/github-auto-responder/github-client.js.map +1 -0
  74. package/dist/hooks/github-auto-responder/idempotency.d.ts +68 -0
  75. package/dist/hooks/github-auto-responder/idempotency.d.ts.map +1 -0
  76. package/dist/hooks/github-auto-responder/idempotency.js +147 -0
  77. package/dist/hooks/github-auto-responder/idempotency.js.map +1 -0
  78. package/dist/hooks/github-auto-responder/index.d.ts +140 -0
  79. package/dist/hooks/github-auto-responder/index.d.ts.map +1 -0
  80. package/dist/hooks/github-auto-responder/index.js +145 -0
  81. package/dist/hooks/github-auto-responder/index.js.map +1 -0
  82. package/dist/hooks/github-auto-responder/persona.d.ts +40 -0
  83. package/dist/hooks/github-auto-responder/persona.d.ts.map +1 -0
  84. package/dist/hooks/github-auto-responder/persona.js +99 -0
  85. package/dist/hooks/github-auto-responder/persona.js.map +1 -0
  86. package/dist/hooks/github-auto-responder/responder.d.ts +122 -0
  87. package/dist/hooks/github-auto-responder/responder.d.ts.map +1 -0
  88. package/dist/hooks/github-auto-responder/responder.js +264 -0
  89. package/dist/hooks/github-auto-responder/responder.js.map +1 -0
  90. package/dist/hooks/github-auto-responder/server.d.ts +140 -0
  91. package/dist/hooks/github-auto-responder/server.d.ts.map +1 -0
  92. package/dist/hooks/github-auto-responder/server.js +301 -0
  93. package/dist/hooks/github-auto-responder/server.js.map +1 -0
  94. package/dist/hooks/github-auto-responder/signature.d.ts +34 -0
  95. package/dist/hooks/github-auto-responder/signature.d.ts.map +1 -0
  96. package/dist/hooks/github-auto-responder/signature.js +79 -0
  97. package/dist/hooks/github-auto-responder/signature.js.map +1 -0
  98. package/dist/hooks/github-auto-responder/templates.d.ts +16 -0
  99. package/dist/hooks/github-auto-responder/templates.d.ts.map +1 -0
  100. package/dist/hooks/github-auto-responder/templates.js +93 -0
  101. package/dist/hooks/github-auto-responder/templates.js.map +1 -0
  102. package/dist/hooks/github-auto-responder/types.d.ts +246 -0
  103. package/dist/hooks/github-auto-responder/types.d.ts.map +1 -0
  104. package/dist/hooks/github-auto-responder/types.js +7 -0
  105. package/dist/hooks/github-auto-responder/types.js.map +1 -0
  106. package/dist/hud/analytics-display.d.ts +1 -1
  107. package/dist/hud/analytics-display.d.ts.map +1 -1
  108. package/dist/hud/analytics-display.js +24 -7
  109. package/dist/hud/analytics-display.js.map +1 -1
  110. package/dist/installer/index.d.ts +1 -1
  111. package/dist/installer/index.js +1 -1
  112. package/docs/COMPATIBILITY.md +1051 -0
  113. package/package.json +3 -1
  114. package/scripts/github-webhook-server.ts +141 -0
@@ -0,0 +1,369 @@
1
+ /**
2
+ * Permission Adapter for External Tools
3
+ *
4
+ * Integrates external plugins and MCP tools with OMC's permission system.
5
+ * Provides:
6
+ * - Safe command pattern registration from plugins
7
+ * - Permission inheritance for known-safe tools
8
+ * - Delegation-aware routing to avoid conflicts
9
+ */
10
+ import safeRegex from 'safe-regex';
11
+ import { getRegistry } from './registry.js';
12
+ /**
13
+ * Built-in safe patterns for known external tools
14
+ */
15
+ const BUILTIN_SAFE_PATTERNS = [
16
+ // Context7 MCP - documentation lookup (read-only)
17
+ {
18
+ tool: 'mcp__context7__resolve-library-id',
19
+ pattern: /.*/,
20
+ description: 'Context7 library resolution (read-only)',
21
+ source: 'builtin',
22
+ },
23
+ {
24
+ tool: 'mcp__context7__query-docs',
25
+ pattern: /.*/,
26
+ description: 'Context7 documentation query (read-only)',
27
+ source: 'builtin',
28
+ },
29
+ // Filesystem MCP - read operations only
30
+ {
31
+ tool: 'mcp__filesystem__read_file',
32
+ pattern: /.*/,
33
+ description: 'Filesystem read (read-only)',
34
+ source: 'builtin',
35
+ },
36
+ {
37
+ tool: 'mcp__filesystem__read_text_file',
38
+ pattern: /.*/,
39
+ description: 'Filesystem text read (read-only)',
40
+ source: 'builtin',
41
+ },
42
+ {
43
+ tool: 'mcp__filesystem__list_directory',
44
+ pattern: /.*/,
45
+ description: 'Directory listing (read-only)',
46
+ source: 'builtin',
47
+ },
48
+ {
49
+ tool: 'mcp__filesystem__search_files',
50
+ pattern: /.*/,
51
+ description: 'File search (read-only)',
52
+ source: 'builtin',
53
+ },
54
+ {
55
+ tool: 'mcp__filesystem__get_file_info',
56
+ pattern: /.*/,
57
+ description: 'File info (read-only)',
58
+ source: 'builtin',
59
+ },
60
+ {
61
+ tool: 'mcp__filesystem__directory_tree',
62
+ pattern: /.*/,
63
+ description: 'Directory tree (read-only)',
64
+ source: 'builtin',
65
+ },
66
+ // Exa MCP - web search (read-only, external)
67
+ {
68
+ tool: 'mcp__exa__search',
69
+ pattern: /.*/,
70
+ description: 'Exa web search (read-only)',
71
+ source: 'builtin',
72
+ },
73
+ ];
74
+ /**
75
+ * Patterns that require explicit permission
76
+ */
77
+ const REQUIRES_PERMISSION_PATTERNS = [
78
+ // Filesystem write operations
79
+ /mcp__filesystem__write/,
80
+ /mcp__filesystem__edit/,
81
+ /mcp__filesystem__create/,
82
+ /mcp__filesystem__move/,
83
+ /mcp__filesystem__delete/,
84
+ // Playwright browser operations (can interact with external sites)
85
+ /mcp__playwright/,
86
+ // Any bash/command execution
87
+ /bash/i,
88
+ /exec/i,
89
+ /run/i,
90
+ /command/i,
91
+ ];
92
+ /**
93
+ * Registry of safe patterns (including plugin-contributed ones)
94
+ */
95
+ const safePatterns = [...BUILTIN_SAFE_PATTERNS];
96
+ /**
97
+ * Cache of permission decisions
98
+ */
99
+ const permissionCache = new Map();
100
+ /**
101
+ * Security Error for permission adapter operations
102
+ */
103
+ export class PermissionSecurityError extends Error {
104
+ constructor(message) {
105
+ super(message);
106
+ this.name = 'PermissionSecurityError';
107
+ }
108
+ }
109
+ /**
110
+ * Validate a regex pattern for ReDoS safety
111
+ * @returns true if the pattern is safe, false if it could cause ReDoS
112
+ */
113
+ function isRegexSafe(pattern) {
114
+ try {
115
+ // First check if it's valid regex
116
+ new RegExp(pattern);
117
+ // Then check if it's safe from ReDoS
118
+ return safeRegex(pattern);
119
+ }
120
+ catch {
121
+ return false;
122
+ }
123
+ }
124
+ /**
125
+ * Register safe patterns from a plugin
126
+ */
127
+ export function registerPluginSafePatterns(plugin) {
128
+ if (!plugin.manifest.permissions)
129
+ return;
130
+ for (const permission of plugin.manifest.permissions) {
131
+ if (permission.scope === 'read' && permission.patterns) {
132
+ for (const pattern of permission.patterns) {
133
+ // SECURITY: Validate regex pattern before creating RegExp
134
+ if (!isRegexSafe(pattern)) {
135
+ console.warn(`[Security] Skipping unsafe regex pattern from plugin ${plugin.name}: ${pattern}`);
136
+ continue;
137
+ }
138
+ safePatterns.push({
139
+ tool: permission.tool,
140
+ pattern: new RegExp(pattern),
141
+ description: permission.reason || `Safe pattern from ${plugin.name}`,
142
+ source: plugin.name,
143
+ });
144
+ }
145
+ }
146
+ }
147
+ }
148
+ /**
149
+ * Check if a tool/action is allowed without prompting user
150
+ */
151
+ export function checkPermission(toolName, input) {
152
+ // Check cache first
153
+ const cacheKey = `${toolName}:${JSON.stringify(input)}`;
154
+ const cached = permissionCache.get(cacheKey);
155
+ if (cached) {
156
+ return cached;
157
+ }
158
+ // Check if tool matches safe patterns
159
+ for (const pattern of safePatterns) {
160
+ if (toolName === pattern.tool || toolName.includes(pattern.tool)) {
161
+ const result = {
162
+ allowed: true,
163
+ reason: pattern.description,
164
+ };
165
+ permissionCache.set(cacheKey, result);
166
+ return result;
167
+ }
168
+ }
169
+ // Check if tool requires explicit permission
170
+ for (const pattern of REQUIRES_PERMISSION_PATTERNS) {
171
+ if (pattern.test(toolName)) {
172
+ const result = {
173
+ allowed: false,
174
+ reason: `Tool ${toolName} requires explicit permission`,
175
+ askUser: true,
176
+ };
177
+ permissionCache.set(cacheKey, result);
178
+ return result;
179
+ }
180
+ }
181
+ // Check tool capabilities from registry
182
+ const registry = getRegistry();
183
+ const tool = registry.getTool(toolName);
184
+ if (tool) {
185
+ // Read-only and search tools are generally safe
186
+ const safeCapabilities = ['read', 'search', 'analyze'];
187
+ const isSafe = tool.capabilities?.every(c => safeCapabilities.includes(c)) ?? false;
188
+ if (isSafe) {
189
+ const result = {
190
+ allowed: true,
191
+ reason: `Tool ${toolName} has safe capabilities: ${tool.capabilities?.join(', ')}`,
192
+ };
193
+ permissionCache.set(cacheKey, result);
194
+ return result;
195
+ }
196
+ // Has dangerous capabilities
197
+ const result = {
198
+ allowed: false,
199
+ reason: `Tool ${toolName} has capabilities requiring permission: ${tool.capabilities?.join(', ')}`,
200
+ askUser: true,
201
+ };
202
+ permissionCache.set(cacheKey, result);
203
+ return result;
204
+ }
205
+ // Unknown tool - ask user
206
+ return {
207
+ allowed: false,
208
+ reason: `Unknown tool: ${toolName}`,
209
+ askUser: true,
210
+ };
211
+ }
212
+ /**
213
+ * Grant permission for a tool (cache the decision)
214
+ */
215
+ export function grantPermission(toolName, input) {
216
+ const cacheKey = `${toolName}:${JSON.stringify(input)}`;
217
+ permissionCache.set(cacheKey, {
218
+ allowed: true,
219
+ reason: 'User granted permission',
220
+ });
221
+ }
222
+ /**
223
+ * Deny permission for a tool (cache the decision)
224
+ */
225
+ export function denyPermission(toolName, input) {
226
+ const cacheKey = `${toolName}:${JSON.stringify(input)}`;
227
+ permissionCache.set(cacheKey, {
228
+ allowed: false,
229
+ reason: 'User denied permission',
230
+ });
231
+ }
232
+ /**
233
+ * Clear permission cache
234
+ */
235
+ export function clearPermissionCache() {
236
+ permissionCache.clear();
237
+ }
238
+ /**
239
+ * Get all registered safe patterns
240
+ */
241
+ export function getSafePatterns() {
242
+ return [...safePatterns];
243
+ }
244
+ /**
245
+ * Add a custom safe pattern
246
+ */
247
+ export function addSafePattern(pattern) {
248
+ safePatterns.push(pattern);
249
+ }
250
+ /**
251
+ * Remove safe patterns from a specific source
252
+ */
253
+ export function removeSafePatternsFromSource(source) {
254
+ const toRemove = safePatterns.filter(p => p.source === source);
255
+ for (const pattern of toRemove) {
256
+ const index = safePatterns.indexOf(pattern);
257
+ if (index >= 0) {
258
+ safePatterns.splice(index, 1);
259
+ }
260
+ }
261
+ }
262
+ /**
263
+ * Check if tool should be delegated (not handled directly by OMC)
264
+ */
265
+ export function shouldDelegate(toolName) {
266
+ const registry = getRegistry();
267
+ const tool = registry.getTool(toolName);
268
+ if (!tool) {
269
+ return false;
270
+ }
271
+ // External plugins should handle their own tools
272
+ if (tool.type === 'plugin') {
273
+ return true;
274
+ }
275
+ // MCP tools are handled by MCP bridge
276
+ if (tool.type === 'mcp') {
277
+ return true;
278
+ }
279
+ // Skills and agents from external plugins
280
+ if ((tool.type === 'skill' || tool.type === 'agent') && tool.source !== 'oh-my-claudecode') {
281
+ return true;
282
+ }
283
+ return false;
284
+ }
285
+ /**
286
+ * Get delegation target for a tool
287
+ */
288
+ export function getDelegationTarget(toolName) {
289
+ const registry = getRegistry();
290
+ const tool = registry.getTool(toolName);
291
+ if (!tool) {
292
+ return null;
293
+ }
294
+ if (tool.type === 'plugin' || tool.type === 'skill' || tool.type === 'agent') {
295
+ return {
296
+ type: 'plugin',
297
+ target: tool.source,
298
+ };
299
+ }
300
+ if (tool.type === 'mcp') {
301
+ return {
302
+ type: 'mcp',
303
+ target: tool.source,
304
+ };
305
+ }
306
+ return {
307
+ type: 'internal',
308
+ target: 'oh-my-claudecode',
309
+ };
310
+ }
311
+ /**
312
+ * Integrate permission adapter with OMC's permission system
313
+ * Call this during initialization to register patterns from discovered plugins
314
+ */
315
+ export function integrateWithPermissionSystem() {
316
+ const registry = getRegistry();
317
+ // Register safe patterns from all discovered plugins
318
+ for (const plugin of registry.getAllPlugins()) {
319
+ registerPluginSafePatterns(plugin);
320
+ }
321
+ // Register MCP tools as safe if they're read-only
322
+ for (const server of registry.getAllMcpServers()) {
323
+ for (const tool of server.tools) {
324
+ if (tool.capabilities?.every(c => c === 'read' || c === 'search')) {
325
+ safePatterns.push({
326
+ tool: tool.name,
327
+ pattern: /.*/,
328
+ description: `Read-only MCP tool from ${server.name}`,
329
+ source: server.name,
330
+ });
331
+ }
332
+ }
333
+ }
334
+ }
335
+ /**
336
+ * Process a permission request from hook system
337
+ * Returns hook-compatible output
338
+ */
339
+ export function processExternalToolPermission(toolName, toolInput) {
340
+ const result = checkPermission(toolName, toolInput);
341
+ if (result.allowed) {
342
+ return {
343
+ continue: true,
344
+ hookSpecificOutput: {
345
+ hookEventName: 'PermissionRequest',
346
+ decision: {
347
+ behavior: 'allow',
348
+ reason: result.reason,
349
+ },
350
+ },
351
+ };
352
+ }
353
+ if (result.askUser) {
354
+ return {
355
+ continue: true, // Let normal permission flow handle it
356
+ };
357
+ }
358
+ return {
359
+ continue: true,
360
+ hookSpecificOutput: {
361
+ hookEventName: 'PermissionRequest',
362
+ decision: {
363
+ behavior: 'deny',
364
+ reason: result.reason,
365
+ },
366
+ },
367
+ };
368
+ }
369
+ //# sourceMappingURL=permission-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-adapter.js","sourceRoot":"","sources":["../../src/compatibility/permission-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Tool Registry and Router
3
+ *
4
+ * Central registry for all external tools, plugins, and MCP servers.
5
+ * Handles tool registration, conflict resolution, and command routing.
6
+ */
7
+ import type { ExternalTool, DiscoveredPlugin, DiscoveredMcpServer, ToolRoute, ToolConflict, RegistryState, RegistryEventListener, DiscoveryOptions } from './types.js';
8
+ import { type DiscoveryResult } from './discovery.js';
9
+ /**
10
+ * Tool Registry - Central hub for all external tools
11
+ */
12
+ export declare class ToolRegistry {
13
+ private plugins;
14
+ private mcpServers;
15
+ private tools;
16
+ private conflicts;
17
+ private listeners;
18
+ private lastDiscovery;
19
+ private discoveryCache;
20
+ /**
21
+ * Get the singleton registry instance
22
+ */
23
+ static getInstance(): ToolRegistry;
24
+ /**
25
+ * Reset the registry (for testing)
26
+ */
27
+ static resetInstance(): void;
28
+ /**
29
+ * Initialize the registry by discovering all external resources
30
+ */
31
+ initialize(options?: DiscoveryOptions): Promise<void>;
32
+ /**
33
+ * Register a discovered plugin
34
+ */
35
+ registerPlugin(plugin: DiscoveredPlugin): void;
36
+ /**
37
+ * Register a discovered MCP server
38
+ */
39
+ registerMcpServer(server: DiscoveredMcpServer): void;
40
+ /**
41
+ * Register a single tool
42
+ */
43
+ registerTool(tool: ExternalTool): void;
44
+ /**
45
+ * Handle tool name conflict
46
+ */
47
+ private handleConflict;
48
+ /**
49
+ * Get a tool by name (supports both namespaced and short names)
50
+ */
51
+ getTool(name: string): ExternalTool | undefined;
52
+ /**
53
+ * Get all tools from a specific source
54
+ */
55
+ getToolsBySource(source: string): ExternalTool[];
56
+ /**
57
+ * Get all tools of a specific type
58
+ */
59
+ getToolsByType(type: ExternalTool['type']): ExternalTool[];
60
+ /**
61
+ * Get all registered tools
62
+ */
63
+ getAllTools(): ExternalTool[];
64
+ /**
65
+ * Get all registered plugins
66
+ */
67
+ getAllPlugins(): DiscoveredPlugin[];
68
+ /**
69
+ * Get all registered MCP servers
70
+ */
71
+ getAllMcpServers(): DiscoveredMcpServer[];
72
+ /**
73
+ * Get all conflicts
74
+ */
75
+ getConflicts(): ToolConflict[];
76
+ /**
77
+ * Route a command to the appropriate tool handler
78
+ */
79
+ route(command: string): ToolRoute | null;
80
+ /**
81
+ * Enable or disable a tool
82
+ */
83
+ setToolEnabled(name: string, enabled: boolean): boolean;
84
+ /**
85
+ * Check if a tool is enabled
86
+ */
87
+ isToolEnabled(name: string): boolean;
88
+ /**
89
+ * Get plugin by name
90
+ */
91
+ getPlugin(name: string): DiscoveredPlugin | undefined;
92
+ /**
93
+ * Get MCP server by name
94
+ */
95
+ getMcpServer(name: string): DiscoveredMcpServer | undefined;
96
+ /**
97
+ * Update MCP server connection status and tools
98
+ */
99
+ updateMcpServer(name: string, updates: Partial<Pick<DiscoveredMcpServer, 'connected' | 'tools' | 'error'>>): void;
100
+ /**
101
+ * Get current registry state snapshot
102
+ */
103
+ getState(): RegistryState;
104
+ /**
105
+ * Search tools by keyword
106
+ */
107
+ searchTools(query: string): ExternalTool[];
108
+ /**
109
+ * Add event listener
110
+ */
111
+ addEventListener(listener: RegistryEventListener): void;
112
+ /**
113
+ * Remove event listener
114
+ */
115
+ removeEventListener(listener: RegistryEventListener): void;
116
+ /**
117
+ * Emit event to all listeners
118
+ */
119
+ private emit;
120
+ /**
121
+ * Clear all registered resources
122
+ */
123
+ clear(): void;
124
+ /**
125
+ * Re-run discovery and update registry
126
+ */
127
+ refresh(options?: DiscoveryOptions): Promise<void>;
128
+ /**
129
+ * Get discovery cache if available
130
+ */
131
+ getDiscoveryCache(): DiscoveryResult | null;
132
+ }
133
+ /**
134
+ * Get the global registry instance
135
+ */
136
+ export declare function getRegistry(): ToolRegistry;
137
+ /**
138
+ * Initialize the global registry
139
+ */
140
+ export declare function initializeRegistry(options?: DiscoveryOptions): Promise<ToolRegistry>;
141
+ /**
142
+ * Quick access to route a command
143
+ */
144
+ export declare function routeCommand(command: string): ToolRoute | null;
145
+ /**
146
+ * Quick access to get a tool
147
+ */
148
+ export declare function getExternalTool(name: string): ExternalTool | undefined;
149
+ /**
150
+ * List all available external tools
151
+ */
152
+ export declare function listExternalTools(): ExternalTool[];
153
+ /**
154
+ * Check if any external plugins are installed
155
+ */
156
+ export declare function hasExternalPlugins(): boolean;
157
+ /**
158
+ * Check if any MCP servers are configured
159
+ */
160
+ export declare function hasMcpServers(): boolean;
161
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/compatibility/registry.ts"],"names":[],"mappings":"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"}