sdd-mcp-server 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.
- package/LICENSE +21 -0
- package/README.md +256 -0
- package/dist/__tests__/setup.d.ts +44 -0
- package/dist/__tests__/setup.js +178 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/__tests__/test-helpers/mock-factories.d.ts +26 -0
- package/dist/__tests__/test-helpers/mock-factories.js +466 -0
- package/dist/__tests__/test-helpers/mock-factories.js.map +1 -0
- package/dist/adapters/cli/SDDToolAdapter.d.ts +26 -0
- package/dist/adapters/cli/SDDToolAdapter.js +273 -0
- package/dist/adapters/cli/SDDToolAdapter.js.map +1 -0
- package/dist/application/services/CodebaseAnalysisService.d.ts +38 -0
- package/dist/application/services/CodebaseAnalysisService.js +737 -0
- package/dist/application/services/CodebaseAnalysisService.js.map +1 -0
- package/dist/application/services/LocalizationService.d.ts +184 -0
- package/dist/application/services/LocalizationService.js +536 -0
- package/dist/application/services/LocalizationService.js.map +1 -0
- package/dist/application/services/ProjectContextService.d.ts +61 -0
- package/dist/application/services/ProjectContextService.js +550 -0
- package/dist/application/services/ProjectContextService.js.map +1 -0
- package/dist/application/services/ProjectInitializationService.d.ts +57 -0
- package/dist/application/services/ProjectInitializationService.js +485 -0
- package/dist/application/services/ProjectInitializationService.js.map +1 -0
- package/dist/application/services/ProjectService.d.ts +19 -0
- package/dist/application/services/ProjectService.js +159 -0
- package/dist/application/services/ProjectService.js.map +1 -0
- package/dist/application/services/QualityGateService.d.ts +62 -0
- package/dist/application/services/QualityGateService.js +428 -0
- package/dist/application/services/QualityGateService.js.map +1 -0
- package/dist/application/services/QualityService.d.ts +43 -0
- package/dist/application/services/QualityService.js +245 -0
- package/dist/application/services/QualityService.js.map +1 -0
- package/dist/application/services/SteeringDocumentService.d.ts +62 -0
- package/dist/application/services/SteeringDocumentService.js +694 -0
- package/dist/application/services/SteeringDocumentService.js.map +1 -0
- package/dist/application/services/TemplateService.d.ts +47 -0
- package/dist/application/services/TemplateService.js +438 -0
- package/dist/application/services/TemplateService.js.map +1 -0
- package/dist/application/services/WorkflowEngineService.d.ts +56 -0
- package/dist/application/services/WorkflowEngineService.js +348 -0
- package/dist/application/services/WorkflowEngineService.js.map +1 -0
- package/dist/application/services/WorkflowService.d.ts +22 -0
- package/dist/application/services/WorkflowService.js +147 -0
- package/dist/application/services/WorkflowService.js.map +1 -0
- package/dist/application/services/WorkflowValidationService.d.ts +51 -0
- package/dist/application/services/WorkflowValidationService.js +665 -0
- package/dist/application/services/WorkflowValidationService.js.map +1 -0
- package/dist/domain/context/ProjectContext.d.ts +350 -0
- package/dist/domain/context/ProjectContext.js +138 -0
- package/dist/domain/context/ProjectContext.js.map +1 -0
- package/dist/domain/i18n/index.d.ts +286 -0
- package/dist/domain/i18n/index.js +97 -0
- package/dist/domain/i18n/index.js.map +1 -0
- package/dist/domain/plugins/index.d.ts +498 -0
- package/dist/domain/plugins/index.js +157 -0
- package/dist/domain/plugins/index.js.map +1 -0
- package/dist/domain/ports.d.ts +54 -0
- package/dist/domain/ports.js +3 -0
- package/dist/domain/ports.js.map +1 -0
- package/dist/domain/quality/index.d.ts +361 -0
- package/dist/domain/quality/index.js +113 -0
- package/dist/domain/quality/index.js.map +1 -0
- package/dist/domain/services/DomainService.d.ts +18 -0
- package/dist/domain/services/DomainService.js +71 -0
- package/dist/domain/services/DomainService.js.map +1 -0
- package/dist/domain/templates/index.d.ts +158 -0
- package/dist/domain/templates/index.js +22 -0
- package/dist/domain/templates/index.js.map +1 -0
- package/dist/domain/types.d.ts +115 -0
- package/dist/domain/types.js +37 -0
- package/dist/domain/types.js.map +1 -0
- package/dist/domain/workflow/WorkflowStateMachine.d.ts +62 -0
- package/dist/domain/workflow/WorkflowStateMachine.js +286 -0
- package/dist/domain/workflow/WorkflowStateMachine.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +97 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/adapters/AjvValidationAdapter.d.ts +7 -0
- package/dist/infrastructure/adapters/AjvValidationAdapter.js +37 -0
- package/dist/infrastructure/adapters/AjvValidationAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/ConsoleLoggerAdapter.d.ts +8 -0
- package/dist/infrastructure/adapters/ConsoleLoggerAdapter.js +41 -0
- package/dist/infrastructure/adapters/ConsoleLoggerAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/FileBasedTaskTracker.d.ts +9 -0
- package/dist/infrastructure/adapters/FileBasedTaskTracker.js +41 -0
- package/dist/infrastructure/adapters/FileBasedTaskTracker.js.map +1 -0
- package/dist/infrastructure/adapters/HandlebarsTemplateEngine.d.ts +8 -0
- package/dist/infrastructure/adapters/HandlebarsTemplateEngine.js +38 -0
- package/dist/infrastructure/adapters/HandlebarsTemplateEngine.js.map +1 -0
- package/dist/infrastructure/adapters/JsonConfigurationAdapter.d.ts +7 -0
- package/dist/infrastructure/adapters/JsonConfigurationAdapter.js +24 -0
- package/dist/infrastructure/adapters/JsonConfigurationAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/LinusQualityAnalyzer.d.ts +9 -0
- package/dist/infrastructure/adapters/LinusQualityAnalyzer.js +75 -0
- package/dist/infrastructure/adapters/LinusQualityAnalyzer.js.map +1 -0
- package/dist/infrastructure/adapters/NodeFileSystemAdapter.d.ts +12 -0
- package/dist/infrastructure/adapters/NodeFileSystemAdapter.js +39 -0
- package/dist/infrastructure/adapters/NodeFileSystemAdapter.js.map +1 -0
- package/dist/infrastructure/di/container.d.ts +3 -0
- package/dist/infrastructure/di/container.js +98 -0
- package/dist/infrastructure/di/container.js.map +1 -0
- package/dist/infrastructure/di/types.d.ts +39 -0
- package/dist/infrastructure/di/types.js +45 -0
- package/dist/infrastructure/di/types.js.map +1 -0
- package/dist/infrastructure/i18n/I18nextService.d.ts +27 -0
- package/dist/infrastructure/i18n/I18nextService.js +357 -0
- package/dist/infrastructure/i18n/I18nextService.js.map +1 -0
- package/dist/infrastructure/mcp/CapabilityNegotiator.d.ts +21 -0
- package/dist/infrastructure/mcp/CapabilityNegotiator.js +75 -0
- package/dist/infrastructure/mcp/CapabilityNegotiator.js.map +1 -0
- package/dist/infrastructure/mcp/ErrorHandler.d.ts +29 -0
- package/dist/infrastructure/mcp/ErrorHandler.js +101 -0
- package/dist/infrastructure/mcp/ErrorHandler.js.map +1 -0
- package/dist/infrastructure/mcp/MCPServer.d.ts +25 -0
- package/dist/infrastructure/mcp/MCPServer.js +246 -0
- package/dist/infrastructure/mcp/MCPServer.js.map +1 -0
- package/dist/infrastructure/mcp/PromptManager.d.ts +18 -0
- package/dist/infrastructure/mcp/PromptManager.js +373 -0
- package/dist/infrastructure/mcp/PromptManager.js.map +1 -0
- package/dist/infrastructure/mcp/ResourceManager.d.ts +15 -0
- package/dist/infrastructure/mcp/ResourceManager.js +229 -0
- package/dist/infrastructure/mcp/ResourceManager.js.map +1 -0
- package/dist/infrastructure/mcp/SessionManager.d.ts +64 -0
- package/dist/infrastructure/mcp/SessionManager.js +221 -0
- package/dist/infrastructure/mcp/SessionManager.js.map +1 -0
- package/dist/infrastructure/mcp/ToolRegistry.d.ts +48 -0
- package/dist/infrastructure/mcp/ToolRegistry.js +235 -0
- package/dist/infrastructure/mcp/ToolRegistry.js.map +1 -0
- package/dist/infrastructure/platform/PlatformAdapter.d.ts +46 -0
- package/dist/infrastructure/platform/PlatformAdapter.js +355 -0
- package/dist/infrastructure/platform/PlatformAdapter.js.map +1 -0
- package/dist/infrastructure/plugins/HookSystem.d.ts +40 -0
- package/dist/infrastructure/plugins/HookSystem.js +415 -0
- package/dist/infrastructure/plugins/HookSystem.js.map +1 -0
- package/dist/infrastructure/plugins/PluginManager.d.ts +51 -0
- package/dist/infrastructure/plugins/PluginManager.js +650 -0
- package/dist/infrastructure/plugins/PluginManager.js.map +1 -0
- package/dist/infrastructure/plugins/PluginSteeringRegistry.d.ts +63 -0
- package/dist/infrastructure/plugins/PluginSteeringRegistry.js +439 -0
- package/dist/infrastructure/plugins/PluginSteeringRegistry.js.map +1 -0
- package/dist/infrastructure/plugins/PluginToolRegistry.d.ts +54 -0
- package/dist/infrastructure/plugins/PluginToolRegistry.js +490 -0
- package/dist/infrastructure/plugins/PluginToolRegistry.js.map +1 -0
- package/dist/infrastructure/quality/ASTAnalyzer.d.ts +65 -0
- package/dist/infrastructure/quality/ASTAnalyzer.js +439 -0
- package/dist/infrastructure/quality/ASTAnalyzer.js.map +1 -0
- package/dist/infrastructure/quality/LinusCodeReviewer.d.ts +52 -0
- package/dist/infrastructure/quality/LinusCodeReviewer.js +551 -0
- package/dist/infrastructure/quality/LinusCodeReviewer.js.map +1 -0
- package/dist/infrastructure/repositories/InMemoryProjectRepository.d.ts +10 -0
- package/dist/infrastructure/repositories/InMemoryProjectRepository.js +35 -0
- package/dist/infrastructure/repositories/InMemoryProjectRepository.js.map +1 -0
- package/dist/infrastructure/schemas/project.schema.d.ts +192 -0
- package/dist/infrastructure/schemas/project.schema.js +114 -0
- package/dist/infrastructure/schemas/project.schema.js.map +1 -0
- package/dist/infrastructure/templates/FileGenerator.d.ts +15 -0
- package/dist/infrastructure/templates/FileGenerator.js +385 -0
- package/dist/infrastructure/templates/FileGenerator.js.map +1 -0
- package/dist/infrastructure/templates/HandlebarsRenderer.d.ts +16 -0
- package/dist/infrastructure/templates/HandlebarsRenderer.js +252 -0
- package/dist/infrastructure/templates/HandlebarsRenderer.js.map +1 -0
- package/dist/infrastructure/templates/TemplateManager.d.ts +36 -0
- package/dist/infrastructure/templates/TemplateManager.js +777 -0
- package/dist/infrastructure/templates/TemplateManager.js.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
// Hook system implementation for plugin extensibility
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
import { injectable, inject } from 'inversify';
|
|
15
|
+
import { EventEmitter } from 'events';
|
|
16
|
+
import { TYPES } from '../di/types.js';
|
|
17
|
+
class CancellationTokenImpl {
|
|
18
|
+
_isCancelled = false;
|
|
19
|
+
callbacks = [];
|
|
20
|
+
get isCancelled() {
|
|
21
|
+
return this._isCancelled;
|
|
22
|
+
}
|
|
23
|
+
cancel() {
|
|
24
|
+
if (!this._isCancelled) {
|
|
25
|
+
this._isCancelled = true;
|
|
26
|
+
this.callbacks.forEach(callback => {
|
|
27
|
+
try {
|
|
28
|
+
callback();
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
// Ignore callback errors
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
onCancelled(callback) {
|
|
37
|
+
if (this._isCancelled) {
|
|
38
|
+
callback();
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.callbacks.push(callback);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
let HookSystem = class HookSystem {
|
|
46
|
+
logger;
|
|
47
|
+
hooks = new Map();
|
|
48
|
+
eventEmitter = new EventEmitter();
|
|
49
|
+
metrics = [];
|
|
50
|
+
maxMetricsHistory = 1000;
|
|
51
|
+
constructor(logger) {
|
|
52
|
+
this.logger = logger;
|
|
53
|
+
this.eventEmitter.setMaxListeners(100); // Increase for plugin hooks
|
|
54
|
+
}
|
|
55
|
+
async register(pluginId, hook) {
|
|
56
|
+
const hookName = hook.name;
|
|
57
|
+
if (!this.hooks.has(hookName)) {
|
|
58
|
+
this.hooks.set(hookName, []);
|
|
59
|
+
}
|
|
60
|
+
const existingHooks = this.hooks.get(hookName);
|
|
61
|
+
// Check for duplicate registration
|
|
62
|
+
const existingIndex = existingHooks.findIndex(h => h.pluginId === pluginId && h.name === hookName);
|
|
63
|
+
if (existingIndex >= 0) {
|
|
64
|
+
this.logger.warn('Hook already registered, replacing', {
|
|
65
|
+
hookName,
|
|
66
|
+
pluginId,
|
|
67
|
+
type: hook.type,
|
|
68
|
+
phase: hook.phase
|
|
69
|
+
});
|
|
70
|
+
existingHooks.splice(existingIndex, 1);
|
|
71
|
+
}
|
|
72
|
+
const internalHook = {
|
|
73
|
+
...hook,
|
|
74
|
+
registeredAt: new Date(),
|
|
75
|
+
executionCount: 0,
|
|
76
|
+
successCount: 0,
|
|
77
|
+
errorCount: 0
|
|
78
|
+
};
|
|
79
|
+
existingHooks.push(internalHook);
|
|
80
|
+
// Sort by priority (higher priority first)
|
|
81
|
+
existingHooks.sort((a, b) => b.priority - a.priority);
|
|
82
|
+
this.logger.info('Hook registered successfully', {
|
|
83
|
+
hookName,
|
|
84
|
+
pluginId,
|
|
85
|
+
type: hook.type,
|
|
86
|
+
phase: hook.phase,
|
|
87
|
+
priority: hook.priority,
|
|
88
|
+
totalHooks: existingHooks.length
|
|
89
|
+
});
|
|
90
|
+
this.eventEmitter.emit('hook-registered', { hookName, pluginId, hook });
|
|
91
|
+
}
|
|
92
|
+
async unregister(pluginId, hookName) {
|
|
93
|
+
const hooks = this.hooks.get(hookName);
|
|
94
|
+
if (!hooks) {
|
|
95
|
+
this.logger.warn('No hooks found for unregistration', { hookName, pluginId });
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const initialLength = hooks.length;
|
|
99
|
+
const filteredHooks = hooks.filter(h => !(h.pluginId === pluginId && h.name === hookName));
|
|
100
|
+
if (filteredHooks.length === initialLength) {
|
|
101
|
+
this.logger.warn('Hook not found for unregistration', { hookName, pluginId });
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (filteredHooks.length === 0) {
|
|
105
|
+
this.hooks.delete(hookName);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
this.hooks.set(hookName, filteredHooks);
|
|
109
|
+
}
|
|
110
|
+
this.logger.info('Hook unregistered successfully', {
|
|
111
|
+
hookName,
|
|
112
|
+
pluginId,
|
|
113
|
+
remainingHooks: filteredHooks.length
|
|
114
|
+
});
|
|
115
|
+
this.eventEmitter.emit('hook-unregistered', { hookName, pluginId });
|
|
116
|
+
}
|
|
117
|
+
async execute(hookName, context) {
|
|
118
|
+
const hooks = this.hooks.get(hookName);
|
|
119
|
+
if (!hooks || hooks.length === 0) {
|
|
120
|
+
this.logger.debug('No hooks registered for execution', { hookName });
|
|
121
|
+
return { success: true, data: context.data };
|
|
122
|
+
}
|
|
123
|
+
const startTime = Date.now();
|
|
124
|
+
const cancellationToken = new CancellationTokenImpl();
|
|
125
|
+
const executionContext = {
|
|
126
|
+
...context,
|
|
127
|
+
cancellationToken
|
|
128
|
+
};
|
|
129
|
+
this.logger.debug('Executing hooks', {
|
|
130
|
+
hookName,
|
|
131
|
+
phase: context.phase,
|
|
132
|
+
hooksCount: hooks.length
|
|
133
|
+
});
|
|
134
|
+
let aggregatedData = { ...context.data };
|
|
135
|
+
let stopPropagation = false;
|
|
136
|
+
const errors = [];
|
|
137
|
+
try {
|
|
138
|
+
for (const hook of hooks) {
|
|
139
|
+
if (cancellationToken.isCancelled || stopPropagation) {
|
|
140
|
+
this.logger.debug('Hook execution stopped', {
|
|
141
|
+
hookName,
|
|
142
|
+
pluginId: hook.pluginId,
|
|
143
|
+
reason: cancellationToken.isCancelled ? 'cancelled' : 'stop-propagation'
|
|
144
|
+
});
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
// Check hook conditions
|
|
148
|
+
if (!this.evaluateConditions(hook.conditions || [], executionContext)) {
|
|
149
|
+
this.logger.debug('Hook conditions not met, skipping', {
|
|
150
|
+
hookName,
|
|
151
|
+
pluginId: hook.pluginId
|
|
152
|
+
});
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
const hookStartTime = Date.now();
|
|
156
|
+
let success = true;
|
|
157
|
+
let error;
|
|
158
|
+
try {
|
|
159
|
+
// Update execution context with current data
|
|
160
|
+
const currentContext = {
|
|
161
|
+
...executionContext,
|
|
162
|
+
data: aggregatedData
|
|
163
|
+
};
|
|
164
|
+
const result = await hook.handler(currentContext);
|
|
165
|
+
// Update internal metrics
|
|
166
|
+
hook.executionCount++;
|
|
167
|
+
hook.lastExecuted = new Date();
|
|
168
|
+
hook.successCount++;
|
|
169
|
+
if (result.success) {
|
|
170
|
+
// Merge result data
|
|
171
|
+
if (result.data) {
|
|
172
|
+
aggregatedData = this.mergeHookData(aggregatedData, result.data, hook.type);
|
|
173
|
+
}
|
|
174
|
+
// Check for stop propagation
|
|
175
|
+
if (result.stopPropagation) {
|
|
176
|
+
stopPropagation = true;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
success = false;
|
|
181
|
+
error = result.error;
|
|
182
|
+
if (result.error) {
|
|
183
|
+
errors.push(result.error);
|
|
184
|
+
hook.errorCount++;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
this.logger.debug('Hook executed successfully', {
|
|
188
|
+
hookName,
|
|
189
|
+
pluginId: hook.pluginId,
|
|
190
|
+
executionTime: Date.now() - hookStartTime,
|
|
191
|
+
success: result.success,
|
|
192
|
+
stopPropagation: result.stopPropagation
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
catch (executionError) {
|
|
196
|
+
success = false;
|
|
197
|
+
error = executionError instanceof Error ? executionError : new Error(String(executionError));
|
|
198
|
+
errors.push(error);
|
|
199
|
+
hook.executionCount++;
|
|
200
|
+
hook.errorCount++;
|
|
201
|
+
this.logger.error('Hook execution failed', {
|
|
202
|
+
hookName,
|
|
203
|
+
pluginId: hook.pluginId,
|
|
204
|
+
error: error.message
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
// Record metrics
|
|
208
|
+
this.recordMetrics({
|
|
209
|
+
hookName,
|
|
210
|
+
pluginId: hook.pluginId,
|
|
211
|
+
executionTime: Date.now() - hookStartTime,
|
|
212
|
+
success,
|
|
213
|
+
error
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
const totalExecutionTime = Date.now() - startTime;
|
|
217
|
+
const overallSuccess = errors.length === 0;
|
|
218
|
+
this.logger.info('Hook execution completed', {
|
|
219
|
+
hookName,
|
|
220
|
+
phase: context.phase,
|
|
221
|
+
hooksExecuted: hooks.length,
|
|
222
|
+
totalTime: totalExecutionTime,
|
|
223
|
+
success: overallSuccess,
|
|
224
|
+
errorsCount: errors.length
|
|
225
|
+
});
|
|
226
|
+
return {
|
|
227
|
+
success: overallSuccess,
|
|
228
|
+
data: aggregatedData,
|
|
229
|
+
error: errors.length > 0 ? errors[0] : undefined,
|
|
230
|
+
metadata: {
|
|
231
|
+
executionTime: totalExecutionTime,
|
|
232
|
+
hooksExecuted: hooks.length,
|
|
233
|
+
errorCount: errors.length,
|
|
234
|
+
stopPropagation
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
this.logger.error('Hook system execution failed', {
|
|
240
|
+
hookName,
|
|
241
|
+
error: error instanceof Error ? error.message : String(error)
|
|
242
|
+
});
|
|
243
|
+
return {
|
|
244
|
+
success: false,
|
|
245
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
246
|
+
metadata: {
|
|
247
|
+
executionTime: Date.now() - startTime,
|
|
248
|
+
hooksExecuted: 0,
|
|
249
|
+
errorCount: 1
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
async getHooks(hookName) {
|
|
255
|
+
const hooks = this.hooks.get(hookName);
|
|
256
|
+
return hooks ? [...hooks] : [];
|
|
257
|
+
}
|
|
258
|
+
async getAllHooks() {
|
|
259
|
+
const result = {};
|
|
260
|
+
for (const [hookName, hooks] of this.hooks.entries()) {
|
|
261
|
+
result[hookName] = [...hooks];
|
|
262
|
+
}
|
|
263
|
+
return result;
|
|
264
|
+
}
|
|
265
|
+
// Utility methods for hook system management
|
|
266
|
+
async getHookMetrics(hookName) {
|
|
267
|
+
if (hookName) {
|
|
268
|
+
return this.metrics.filter(m => m.hookName === hookName);
|
|
269
|
+
}
|
|
270
|
+
return [...this.metrics];
|
|
271
|
+
}
|
|
272
|
+
async getHookStatistics(hookName) {
|
|
273
|
+
const hooks = this.hooks.get(hookName) || [];
|
|
274
|
+
const metrics = this.metrics.filter(m => m.hookName === hookName);
|
|
275
|
+
const totalExecutions = metrics.length;
|
|
276
|
+
const successCount = metrics.filter(m => m.success).length;
|
|
277
|
+
const successRate = totalExecutions > 0 ? successCount / totalExecutions : 0;
|
|
278
|
+
const averageExecutionTime = totalExecutions > 0
|
|
279
|
+
? metrics.reduce((sum, m) => sum + m.executionTime, 0) / totalExecutions
|
|
280
|
+
: 0;
|
|
281
|
+
const errorCount = metrics.filter(m => !m.success).length;
|
|
282
|
+
const pluginStats = {};
|
|
283
|
+
for (const hook of hooks) {
|
|
284
|
+
const internalHook = hook;
|
|
285
|
+
pluginStats[hook.pluginId] = {
|
|
286
|
+
executions: internalHook.executionCount,
|
|
287
|
+
successRate: internalHook.executionCount > 0
|
|
288
|
+
? internalHook.successCount / internalHook.executionCount
|
|
289
|
+
: 0
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
return {
|
|
293
|
+
totalExecutions,
|
|
294
|
+
successRate,
|
|
295
|
+
averageExecutionTime,
|
|
296
|
+
errorCount,
|
|
297
|
+
pluginStats
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
async clearHooks(pluginId) {
|
|
301
|
+
if (pluginId) {
|
|
302
|
+
// Clear all hooks for a specific plugin
|
|
303
|
+
for (const [hookName, hooks] of this.hooks.entries()) {
|
|
304
|
+
const filteredHooks = hooks.filter(h => h.pluginId !== pluginId);
|
|
305
|
+
if (filteredHooks.length === 0) {
|
|
306
|
+
this.hooks.delete(hookName);
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
this.hooks.set(hookName, filteredHooks);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
this.logger.info('Plugin hooks cleared', { pluginId });
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
// Clear all hooks
|
|
316
|
+
this.hooks.clear();
|
|
317
|
+
this.logger.info('All hooks cleared');
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
// Private helper methods
|
|
321
|
+
evaluateConditions(conditions, context) {
|
|
322
|
+
if (conditions.length === 0)
|
|
323
|
+
return true;
|
|
324
|
+
return conditions.every(condition => {
|
|
325
|
+
const contextValue = this.getContextValue(context, condition.type);
|
|
326
|
+
return this.evaluateCondition(contextValue, condition.value, condition.operator);
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
getContextValue(context, path) {
|
|
330
|
+
const parts = path.split('.');
|
|
331
|
+
let value = context;
|
|
332
|
+
for (const part of parts) {
|
|
333
|
+
if (value && typeof value === 'object') {
|
|
334
|
+
value = value[part];
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
return undefined;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return value;
|
|
341
|
+
}
|
|
342
|
+
evaluateCondition(contextValue, conditionValue, operator) {
|
|
343
|
+
switch (operator) {
|
|
344
|
+
case ConditionOperator.EQUALS:
|
|
345
|
+
return contextValue === conditionValue;
|
|
346
|
+
case ConditionOperator.NOT_EQUALS:
|
|
347
|
+
return contextValue !== conditionValue;
|
|
348
|
+
case ConditionOperator.GREATER_THAN:
|
|
349
|
+
return typeof contextValue === 'number' && typeof conditionValue === 'number' && contextValue > conditionValue;
|
|
350
|
+
case ConditionOperator.GREATER_THAN_OR_EQUAL:
|
|
351
|
+
return typeof contextValue === 'number' && typeof conditionValue === 'number' && contextValue >= conditionValue;
|
|
352
|
+
case ConditionOperator.LESS_THAN:
|
|
353
|
+
return typeof contextValue === 'number' && typeof conditionValue === 'number' && contextValue < conditionValue;
|
|
354
|
+
case ConditionOperator.LESS_THAN_OR_EQUAL:
|
|
355
|
+
return typeof contextValue === 'number' && typeof conditionValue === 'number' && contextValue <= conditionValue;
|
|
356
|
+
case ConditionOperator.CONTAINS:
|
|
357
|
+
return typeof contextValue === 'string' && typeof conditionValue === 'string' && contextValue.includes(conditionValue);
|
|
358
|
+
case ConditionOperator.STARTS_WITH:
|
|
359
|
+
return typeof contextValue === 'string' && typeof conditionValue === 'string' && contextValue.startsWith(conditionValue);
|
|
360
|
+
case ConditionOperator.ENDS_WITH:
|
|
361
|
+
return typeof contextValue === 'string' && typeof conditionValue === 'string' && contextValue.endsWith(conditionValue);
|
|
362
|
+
case ConditionOperator.MATCHES:
|
|
363
|
+
try {
|
|
364
|
+
const regex = new RegExp(String(conditionValue));
|
|
365
|
+
return typeof contextValue === 'string' && regex.test(contextValue);
|
|
366
|
+
}
|
|
367
|
+
catch {
|
|
368
|
+
return false;
|
|
369
|
+
}
|
|
370
|
+
case ConditionOperator.IN:
|
|
371
|
+
return Array.isArray(conditionValue) && conditionValue.includes(contextValue);
|
|
372
|
+
case ConditionOperator.NOT_IN:
|
|
373
|
+
return Array.isArray(conditionValue) && !conditionValue.includes(contextValue);
|
|
374
|
+
default:
|
|
375
|
+
return false;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
mergeHookData(currentData, newData, hookType) {
|
|
379
|
+
switch (hookType) {
|
|
380
|
+
case HookType.FILTER:
|
|
381
|
+
// For filter hooks, new data replaces current data
|
|
382
|
+
return { ...currentData, ...newData };
|
|
383
|
+
case HookType.TRANSFORMER:
|
|
384
|
+
// For transformer hooks, new data transforms current data
|
|
385
|
+
return newData;
|
|
386
|
+
case HookType.ACTION:
|
|
387
|
+
case HookType.OBSERVER:
|
|
388
|
+
// For action/observer hooks, merge data without replacement
|
|
389
|
+
return { ...currentData, ...newData };
|
|
390
|
+
case HookType.VALIDATOR:
|
|
391
|
+
// For validator hooks, merge validation results
|
|
392
|
+
return {
|
|
393
|
+
...currentData,
|
|
394
|
+
...newData,
|
|
395
|
+
valid: (currentData.valid !== false) && (newData.valid !== false)
|
|
396
|
+
};
|
|
397
|
+
default:
|
|
398
|
+
return { ...currentData, ...newData };
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
recordMetrics(metrics) {
|
|
402
|
+
this.metrics.push(metrics);
|
|
403
|
+
// Keep only the most recent metrics to prevent memory issues
|
|
404
|
+
if (this.metrics.length > this.maxMetricsHistory) {
|
|
405
|
+
this.metrics.splice(0, this.metrics.length - this.maxMetricsHistory);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
};
|
|
409
|
+
HookSystem = __decorate([
|
|
410
|
+
injectable(),
|
|
411
|
+
__param(0, inject(TYPES.LoggerPort)),
|
|
412
|
+
__metadata("design:paramtypes", [Object])
|
|
413
|
+
], HookSystem);
|
|
414
|
+
export { HookSystem };
|
|
415
|
+
//# sourceMappingURL=HookSystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HookSystem.js","sourceRoot":"","sources":["../../../src/infrastructure/plugins/HookSystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { LoggerPort, FileSystemPort } from '../../domain/ports.js';
|
|
2
|
+
import type { PluginManager as IPluginManager, Plugin, PluginDescriptor, PluginInstance, PluginValidationResult, PluginDependency, HookSystem, ToolRegistry } from '../../domain/plugins/index.js';
|
|
3
|
+
import type { PluginSteeringRegistry } from './PluginSteeringRegistry.js';
|
|
4
|
+
interface PluginManagerConfig {
|
|
5
|
+
readonly pluginsDirectory: string;
|
|
6
|
+
readonly dataDirectory: string;
|
|
7
|
+
readonly maxPlugins: number;
|
|
8
|
+
readonly securityEnabled: boolean;
|
|
9
|
+
readonly autoDiscovery: boolean;
|
|
10
|
+
readonly autoLoad: boolean;
|
|
11
|
+
readonly isolationMode: 'sandbox' | 'process' | 'thread';
|
|
12
|
+
}
|
|
13
|
+
export declare class PluginManager implements IPluginManager {
|
|
14
|
+
private readonly logger;
|
|
15
|
+
private readonly fileSystem;
|
|
16
|
+
private readonly hookSystem;
|
|
17
|
+
private readonly toolRegistry;
|
|
18
|
+
private readonly steeringRegistry;
|
|
19
|
+
private readonly config;
|
|
20
|
+
private readonly plugins;
|
|
21
|
+
private readonly eventEmitter;
|
|
22
|
+
private initialized;
|
|
23
|
+
constructor(logger: LoggerPort, fileSystem: FileSystemPort, hookSystem: HookSystem, toolRegistry: ToolRegistry, steeringRegistry: PluginSteeringRegistry, config?: Partial<PluginManagerConfig>);
|
|
24
|
+
initialize(): Promise<void>;
|
|
25
|
+
discover(directory?: string): Promise<PluginDescriptor[]>;
|
|
26
|
+
install(pluginPath: string): Promise<PluginInstance>;
|
|
27
|
+
uninstall(pluginId: string): Promise<void>;
|
|
28
|
+
enable(pluginId: string): Promise<void>;
|
|
29
|
+
disable(pluginId: string): Promise<void>;
|
|
30
|
+
load(pluginId: string): Promise<PluginInstance>;
|
|
31
|
+
unload(pluginId: string): Promise<void>;
|
|
32
|
+
getPlugin(pluginId: string): Promise<PluginInstance | null>;
|
|
33
|
+
getAllPlugins(): Promise<PluginInstance[]>;
|
|
34
|
+
getEnabledPlugins(): Promise<PluginInstance[]>;
|
|
35
|
+
validatePlugin(plugin: Plugin): Promise<PluginValidationResult>;
|
|
36
|
+
resolveDependencies(plugin: Plugin): Promise<PluginDependency[]>;
|
|
37
|
+
private ensureDirectories;
|
|
38
|
+
private createPluginContext;
|
|
39
|
+
private loadPluginImplementation;
|
|
40
|
+
private createPluginLogger;
|
|
41
|
+
private createPluginServices;
|
|
42
|
+
private createPluginEventEmitter;
|
|
43
|
+
private createPluginFileSystem;
|
|
44
|
+
private createPluginHttpClient;
|
|
45
|
+
private createPluginCrypto;
|
|
46
|
+
private createPluginUtils;
|
|
47
|
+
private performSecurityValidation;
|
|
48
|
+
private performCompatibilityValidation;
|
|
49
|
+
private isVersionCompatible;
|
|
50
|
+
}
|
|
51
|
+
export {};
|