wave-agent-sdk 0.8.1 → 0.8.3
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/dist/managers/hookManager.d.ts.map +1 -1
- package/dist/managers/hookManager.js +0 -21
- package/dist/managers/liveConfigManager.d.ts.map +1 -1
- package/dist/managers/liveConfigManager.js +0 -36
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageManager.js +2 -1
- package/dist/managers/permissionManager.d.ts.map +1 -1
- package/dist/managers/permissionManager.js +47 -29
- package/dist/managers/pluginManager.d.ts.map +1 -1
- package/dist/managers/pluginManager.js +28 -1
- package/dist/managers/skillManager.d.ts.map +1 -1
- package/dist/managers/skillManager.js +8 -2
- package/dist/services/aiService.d.ts.map +1 -1
- package/dist/services/aiService.js +2 -0
- package/dist/services/fileWatcher.d.ts.map +1 -1
- package/dist/services/fileWatcher.js +0 -4
- package/dist/services/initializationService.d.ts.map +1 -1
- package/dist/services/initializationService.js +2 -10
- package/dist/services/pluginLoader.d.ts.map +1 -1
- package/dist/services/pluginLoader.js +1 -3
- package/dist/services/taskManager.d.ts +2 -0
- package/dist/services/taskManager.d.ts.map +1 -1
- package/dist/services/taskManager.js +48 -0
- package/dist/tools/taskManagementTools.d.ts.map +1 -1
- package/dist/tools/taskManagementTools.js +58 -0
- package/dist/tools/taskTool.d.ts.map +1 -1
- package/dist/tools/taskTool.js +60 -50
- package/dist/utils/bashParser.d.ts +4 -0
- package/dist/utils/bashParser.d.ts.map +1 -1
- package/dist/utils/bashParser.js +39 -2
- package/dist/utils/containerSetup.d.ts.map +1 -1
- package/dist/utils/containerSetup.js +3 -0
- package/dist/utils/messageOperations.d.ts +1 -0
- package/dist/utils/messageOperations.d.ts.map +1 -1
- package/dist/utils/messageOperations.js +6 -2
- package/dist/utils/openaiClient.d.ts.map +1 -1
- package/dist/utils/openaiClient.js +3 -1
- package/package.json +2 -5
- package/src/managers/hookManager.ts +0 -52
- package/src/managers/liveConfigManager.ts +0 -75
- package/src/managers/messageManager.ts +2 -0
- package/src/managers/permissionManager.ts +60 -37
- package/src/managers/pluginManager.ts +39 -1
- package/src/managers/skillManager.ts +8 -2
- package/src/services/aiService.ts +2 -0
- package/src/services/fileWatcher.ts +0 -8
- package/src/services/initializationService.ts +2 -19
- package/src/services/pluginLoader.ts +1 -3
- package/src/services/taskManager.ts +51 -0
- package/src/tools/taskManagementTools.ts +77 -0
- package/src/tools/taskTool.ts +70 -61
- package/src/utils/bashParser.ts +50 -2
- package/src/utils/containerSetup.ts +3 -0
- package/src/utils/messageOperations.ts +7 -2
- package/src/utils/openaiClient.ts +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hookManager.d.ts","sourceRoot":"","sources":["../../src/managers/hookManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EACjC,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAI1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,qBAAa,WAAW;IAMpB,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,aAAa,CAAuC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAGvB,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,WAA+B;IAM1C;;;OAGG;IACH,iBAAiB,CACf,SAAS,CAAC,EAAE,wBAAwB,EACpC,YAAY,CAAC,EAAE,wBAAwB,GACtC,IAAI;IAyBP;;;OAGG;IACH,+BAA+B,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"hookManager.d.ts","sourceRoot":"","sources":["../../src/managers/hookManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EACjC,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAI1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,qBAAa,WAAW;IAMpB,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,aAAa,CAAuC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAGvB,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,WAA+B;IAM1C;;;OAGG;IACH,iBAAiB,CACf,SAAS,CAAC,EAAE,wBAAwB,EACpC,YAAY,CAAC,EAAE,wBAAwB,GACtC,IAAI;IAyBP;;;OAGG;IACH,+BAA+B,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,GAAG,IAAI;IA6B3E;;OAEG;IACG,YAAY,CAChB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,oBAAoB,GAAG,4BAA4B,GAC3D,OAAO,CAAC,mBAAmB,EAAE,CAAC;IA+EjC;;;OAGG;IACH,kBAAkB,CAChB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,mBAAmB,EAAE,EAC9B,cAAc,CAAC,EAAE,cAAc,EAC/B,MAAM,CAAC,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,MAAM,GACtB;QACD,WAAW,EAAE,OAAO,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB;IAuCD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA2E3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAQ9B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO;IAWtD;;OAEG;IACH,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,oBAAoB;IA8DtE;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAyCpC;;OAEG;IACH,gBAAgB,IAAI,wBAAwB,GAAG,SAAS;IAOxD;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAuDhC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA8BhC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;OAEG;IACH,OAAO,CAAC,aAAa;IAkCrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA4C3B;;OAEG;IACH,qBAAqB,IAAI;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;KAC3C;IAkDD;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI;CAO3D"}
|
|
@@ -42,7 +42,6 @@ export class HookManager {
|
|
|
42
42
|
*/
|
|
43
43
|
loadConfigurationFromWaveConfig(waveConfig) {
|
|
44
44
|
try {
|
|
45
|
-
logger?.debug(`[HookManager] Loading hooks configuration from pre-loaded config...`);
|
|
46
45
|
this.configuration = waveConfig?.hooks || undefined;
|
|
47
46
|
// Validate the loaded configuration if it exists
|
|
48
47
|
if (waveConfig?.hooks) {
|
|
@@ -51,7 +50,6 @@ export class HookManager {
|
|
|
51
50
|
throw new HookConfigurationError("provided configuration", validation.errors);
|
|
52
51
|
}
|
|
53
52
|
}
|
|
54
|
-
logger?.debug(`[HookManager] Hooks configuration loaded successfully with ${Object.keys(waveConfig?.hooks || {}).length} event types`);
|
|
55
53
|
}
|
|
56
54
|
catch (error) {
|
|
57
55
|
// If loading fails, start with undefined configuration (no hooks)
|
|
@@ -83,39 +81,25 @@ export class HookManager {
|
|
|
83
81
|
];
|
|
84
82
|
}
|
|
85
83
|
if (!this.configuration) {
|
|
86
|
-
logger?.debug(`[HookManager] No configuration loaded, skipping ${event} hooks`);
|
|
87
84
|
return [];
|
|
88
85
|
}
|
|
89
86
|
const eventConfigs = this.configuration[event];
|
|
90
87
|
if (!eventConfigs || eventConfigs.length === 0) {
|
|
91
|
-
logger?.debug(`[HookManager] No hooks configured for ${event} event`);
|
|
92
88
|
return [];
|
|
93
89
|
}
|
|
94
|
-
logger?.debug(`[HookManager] Starting ${event} hook execution with ${eventConfigs.length} configurations`);
|
|
95
90
|
const results = [];
|
|
96
|
-
const startTime = Date.now();
|
|
97
91
|
for (let configIndex = 0; configIndex < eventConfigs.length; configIndex++) {
|
|
98
92
|
const config = eventConfigs[configIndex];
|
|
99
93
|
// Check if this config applies to the current context
|
|
100
94
|
if (!this.configApplies(config, event, context.toolName)) {
|
|
101
|
-
logger?.debug(`[HookManager] Skipping configuration ${configIndex + 1}: matcher '${config.matcher}' does not match tool '${context.toolName}'`);
|
|
102
95
|
continue;
|
|
103
96
|
}
|
|
104
|
-
logger?.debug(`[HookManager] Executing configuration ${configIndex + 1} with ${config.hooks.length} commands (matcher: ${config.matcher || "any"})`);
|
|
105
97
|
// Execute all commands for this configuration
|
|
106
98
|
for (let commandIndex = 0; commandIndex < config.hooks.length; commandIndex++) {
|
|
107
99
|
const hookCommand = config.hooks[commandIndex];
|
|
108
100
|
try {
|
|
109
|
-
logger?.debug(`[HookManager] Executing command ${commandIndex + 1}/${config.hooks.length} in configuration ${configIndex + 1}`);
|
|
110
101
|
const result = await executeCommand(hookCommand.command, context, undefined);
|
|
111
102
|
results.push(result);
|
|
112
|
-
// Report individual command result
|
|
113
|
-
if (result.success) {
|
|
114
|
-
logger?.debug(`[HookManager] Command ${commandIndex + 1} completed successfully in ${result.duration}ms`);
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
logger?.debug(`[HookManager] Command ${commandIndex + 1} failed in ${result.duration}ms (exit code: ${result.exitCode}, timed out: ${result.timedOut})`);
|
|
118
|
-
}
|
|
119
103
|
// Continue with next command even if this one fails
|
|
120
104
|
// This allows for non-critical hooks to fail without stopping the workflow
|
|
121
105
|
}
|
|
@@ -132,10 +116,6 @@ export class HookManager {
|
|
|
132
116
|
}
|
|
133
117
|
}
|
|
134
118
|
}
|
|
135
|
-
// Generate execution summary
|
|
136
|
-
const totalDuration = Date.now() - startTime;
|
|
137
|
-
const summary = this.generateExecutionSummary(event, results, totalDuration);
|
|
138
|
-
logger?.debug(`[HookManager] ${event} execution summary: ${summary}`);
|
|
139
119
|
return results;
|
|
140
120
|
}
|
|
141
121
|
/**
|
|
@@ -547,6 +527,5 @@ export class HookManager {
|
|
|
547
527
|
this.configuration = {};
|
|
548
528
|
}
|
|
549
529
|
this.mergeHooksConfiguration(this.configuration, hooks);
|
|
550
|
-
logger?.debug(`Registered plugin hooks. Total event types: ${Object.keys(this.configuration).length}`);
|
|
551
530
|
}
|
|
552
531
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"liveConfigManager.d.ts","sourceRoot":"","sources":["../../src/managers/liveConfigManager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AAInC,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,iBAAiB;IAgB1B,OAAO,CAAC,SAAS;IAfnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,aAAa,CAAkB;IAGvC,OAAO,CAAC,oBAAoB,CAAkC;IAC9D,OAAO,CAAC,sBAAsB,CAAkC;IAGhE,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,eAAe,CAAC,CAAW;IACnC,OAAO,CAAC,kBAAkB,CAAC,CAAW;IACtC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,gBAAgB,CAAkB;gBAGhC,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,wBAAwB;IAOnC,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,iBAAiB,GAE5B;IAED,OAAO,KAAK,oBAAoB,GAE/B;IAED;;;;OAIG;YACW,kBAAkB;
|
|
1
|
+
{"version":3,"file":"liveConfigManager.d.ts","sourceRoot":"","sources":["../../src/managers/liveConfigManager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AAInC,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,iBAAiB;IAgB1B,OAAO,CAAC,SAAS;IAfnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,aAAa,CAAkB;IAGvC,OAAO,CAAC,oBAAoB,CAAkC;IAC9D,OAAO,CAAC,sBAAsB,CAAkC;IAGhE,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,eAAe,CAAC,CAAW;IACnC,OAAO,CAAC,kBAAkB,CAAC,CAAW;IACtC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,gBAAgB,CAAkB;gBAGhC,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,wBAAwB;IAOnC,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,iBAAiB,GAE5B;IAED,OAAO,KAAK,oBAAoB,GAE/B;IAED;;;;OAIG;YACW,kBAAkB;IA0ChC;;OAEG;IACH,uBAAuB,IAAI,iBAAiB,GAAG,IAAI;IAInD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBjC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB/B;;;OAGG;YACW,mBAAmB;IAmLjC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAI1C;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;OAEG;IACH,gBAAgB;;;;;;;;;;;;IAgBhB,OAAO,CAAC,sBAAsB;YAMhB,gBAAgB;IAmC9B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA4F7B,OAAO,CAAC,aAAa;IAuDrB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;CAQ9B"}
|
|
@@ -41,7 +41,6 @@ export class LiveConfigManager {
|
|
|
41
41
|
*/
|
|
42
42
|
async initializeWatching(userPaths, projectPaths) {
|
|
43
43
|
try {
|
|
44
|
-
logger?.debug("Live Config: Initializing configuration watching...");
|
|
45
44
|
this.userConfigPaths = userPaths;
|
|
46
45
|
this.projectConfigPaths = projectPaths;
|
|
47
46
|
// Load initial configuration
|
|
@@ -49,12 +48,8 @@ export class LiveConfigManager {
|
|
|
49
48
|
// Start watching user configs that exist
|
|
50
49
|
for (const userPath of userPaths) {
|
|
51
50
|
if (existsSync(userPath)) {
|
|
52
|
-
logger?.debug(`Live Config: Starting to watch user config: ${userPath}`);
|
|
53
51
|
await this.fileWatcher.watchFile(userPath, (event) => this.handleFileChange(event, "user"));
|
|
54
52
|
}
|
|
55
|
-
else {
|
|
56
|
-
logger?.debug(`Live Config: User config file does not exist: ${userPath}`);
|
|
57
|
-
}
|
|
58
53
|
}
|
|
59
54
|
// Start watching project configs that exist
|
|
60
55
|
if (projectPaths) {
|
|
@@ -63,16 +58,11 @@ export class LiveConfigManager {
|
|
|
63
58
|
if (projectPath.endsWith("settings.local.json")) {
|
|
64
59
|
await ensureGlobalGitIgnore("**/.wave/settings.local.json");
|
|
65
60
|
}
|
|
66
|
-
logger?.debug(`Live Config: Starting to watch project config: ${projectPath}`);
|
|
67
61
|
await this.fileWatcher.watchFile(projectPath, (event) => this.handleFileChange(event, "project"));
|
|
68
62
|
}
|
|
69
|
-
else {
|
|
70
|
-
logger?.debug(`Live Config: Project config file does not exist: ${projectPath}`);
|
|
71
|
-
}
|
|
72
63
|
}
|
|
73
64
|
}
|
|
74
65
|
this.isWatching = true;
|
|
75
|
-
logger?.debug("Live Config: Configuration watching initialized successfully");
|
|
76
66
|
}
|
|
77
67
|
catch (error) {
|
|
78
68
|
const errorMessage = `Failed to initialize configuration watching: ${error.message}`;
|
|
@@ -91,7 +81,6 @@ export class LiveConfigManager {
|
|
|
91
81
|
*/
|
|
92
82
|
async initialize() {
|
|
93
83
|
if (this.isInitialized) {
|
|
94
|
-
logger?.debug("Already initialized");
|
|
95
84
|
return;
|
|
96
85
|
}
|
|
97
86
|
try {
|
|
@@ -100,7 +89,6 @@ export class LiveConfigManager {
|
|
|
100
89
|
// Initialize configuration watching
|
|
101
90
|
await this.initializeWatching(userPaths, projectPaths);
|
|
102
91
|
this.isInitialized = true;
|
|
103
|
-
logger?.debug("Live configuration management initialized with file watching");
|
|
104
92
|
}
|
|
105
93
|
catch (error) {
|
|
106
94
|
logger?.error(`Failed to initialize: ${error.message}`);
|
|
@@ -115,7 +103,6 @@ export class LiveConfigManager {
|
|
|
115
103
|
return;
|
|
116
104
|
}
|
|
117
105
|
try {
|
|
118
|
-
logger?.debug("Live Config: Shutting down configuration manager...");
|
|
119
106
|
this.isWatching = false;
|
|
120
107
|
// Cleanup file watcher
|
|
121
108
|
await this.fileWatcher.cleanup();
|
|
@@ -123,7 +110,6 @@ export class LiveConfigManager {
|
|
|
123
110
|
this.currentConfiguration = null;
|
|
124
111
|
this.lastValidConfiguration = null;
|
|
125
112
|
this.isInitialized = false;
|
|
126
|
-
logger?.debug("Live configuration management shutdown completed");
|
|
127
113
|
}
|
|
128
114
|
catch (error) {
|
|
129
115
|
logger?.error(`Error during shutdown: ${error.message}`);
|
|
@@ -136,12 +122,10 @@ export class LiveConfigManager {
|
|
|
136
122
|
*/
|
|
137
123
|
async reloadConfiguration() {
|
|
138
124
|
if (this.reloadInProgress) {
|
|
139
|
-
logger?.debug("Live Config: Reload already in progress, skipping");
|
|
140
125
|
return this.currentConfiguration || {};
|
|
141
126
|
}
|
|
142
127
|
this.reloadInProgress = true;
|
|
143
128
|
try {
|
|
144
|
-
logger?.debug("Live Config: Reloading configuration from files...");
|
|
145
129
|
// Load merged configuration using ConfigurationService
|
|
146
130
|
const loadResult = await this.configurationService.loadMergedConfiguration(this.workdir);
|
|
147
131
|
const newConfig = loadResult.configuration;
|
|
@@ -155,7 +139,6 @@ export class LiveConfigManager {
|
|
|
155
139
|
}
|
|
156
140
|
// Use fallback configuration if available
|
|
157
141
|
if (this.lastValidConfiguration) {
|
|
158
|
-
logger?.debug("Live Config: Using previous valid configuration due to loading errors");
|
|
159
142
|
this.currentConfiguration = this.lastValidConfiguration;
|
|
160
143
|
// Apply environment variables to configuration service if configured
|
|
161
144
|
if (this.lastValidConfiguration.env) {
|
|
@@ -173,17 +156,6 @@ export class LiveConfigManager {
|
|
|
173
156
|
return this.currentConfiguration;
|
|
174
157
|
}
|
|
175
158
|
}
|
|
176
|
-
// Log success with detailed information
|
|
177
|
-
if (newConfig) {
|
|
178
|
-
logger?.debug(`Live Config: Configuration loaded successfully from ${loadResult.sourcePath || "merged sources"}`);
|
|
179
|
-
// Log detailed configuration info
|
|
180
|
-
const hookCount = Object.keys(newConfig.hooks || {}).length;
|
|
181
|
-
const envCount = Object.keys(newConfig.env || {}).length;
|
|
182
|
-
logger?.debug(`Live Config: Loaded ${hookCount} hook events and ${envCount} environment variables`);
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
logger?.debug("Live Config: No configuration found (using empty configuration)");
|
|
186
|
-
}
|
|
187
159
|
// Log warnings from successful loading
|
|
188
160
|
if (loadResult.warnings && loadResult.warnings.length > 0) {
|
|
189
161
|
logger?.warn(`Live Config: Configuration warnings: ${loadResult.warnings.join("; ")}`);
|
|
@@ -196,7 +168,6 @@ export class LiveConfigManager {
|
|
|
196
168
|
logger?.error(`Live Config: ${errorMessage}`);
|
|
197
169
|
// Use previous valid configuration for error recovery
|
|
198
170
|
if (this.lastValidConfiguration) {
|
|
199
|
-
logger?.debug("Live Config: Using previous valid configuration due to validation errors");
|
|
200
171
|
this.currentConfiguration = this.lastValidConfiguration;
|
|
201
172
|
// Apply environment variables to configuration service if configured
|
|
202
173
|
if (this.lastValidConfiguration.env) {
|
|
@@ -222,7 +193,6 @@ export class LiveConfigManager {
|
|
|
222
193
|
// Save as last valid configuration if it's valid and not empty
|
|
223
194
|
if (newConfig && (newConfig.hooks || newConfig.env)) {
|
|
224
195
|
this.lastValidConfiguration = { ...newConfig };
|
|
225
|
-
logger?.debug("Live Config: Saved current configuration as last valid backup");
|
|
226
196
|
}
|
|
227
197
|
// Note: Environment variables are already applied by loadMergedConfiguration()
|
|
228
198
|
// No need to set them again here as currentConfiguration === newConfig
|
|
@@ -245,7 +215,6 @@ export class LiveConfigManager {
|
|
|
245
215
|
this.permissionManager.updateAdditionalDirectories(this.currentConfiguration.permissions.additionalDirectories);
|
|
246
216
|
}
|
|
247
217
|
}
|
|
248
|
-
logger?.debug(`Live Config: Configuration reload completed successfully with ${Object.keys(newConfig?.hooks || {}).length} event types and ${Object.keys(newConfig?.env || {}).length} environment variables`);
|
|
249
218
|
return this.currentConfiguration;
|
|
250
219
|
}
|
|
251
220
|
catch (error) {
|
|
@@ -253,7 +222,6 @@ export class LiveConfigManager {
|
|
|
253
222
|
logger?.error(`Live Config: ${errorMessage}`);
|
|
254
223
|
// Use previous valid configuration for error recovery
|
|
255
224
|
if (this.lastValidConfiguration) {
|
|
256
|
-
logger?.debug("Live Config: Using previous valid configuration due to reload exception");
|
|
257
225
|
this.currentConfiguration = this.lastValidConfiguration;
|
|
258
226
|
// Apply environment variables to configuration service if configured
|
|
259
227
|
if (this.lastValidConfiguration.env) {
|
|
@@ -278,7 +246,6 @@ export class LiveConfigManager {
|
|
|
278
246
|
* Reload configuration from files (public method)
|
|
279
247
|
*/
|
|
280
248
|
async reload() {
|
|
281
|
-
logger?.debug("Manually reloading configuration...");
|
|
282
249
|
return await this.reloadConfiguration();
|
|
283
250
|
}
|
|
284
251
|
/**
|
|
@@ -311,18 +278,15 @@ export class LiveConfigManager {
|
|
|
311
278
|
});
|
|
312
279
|
}
|
|
313
280
|
async handleFileChange(event, source) {
|
|
314
|
-
logger?.debug(`Live Config: File ${event.type} detected for ${source} config: ${event.path}`);
|
|
315
281
|
try {
|
|
316
282
|
// Handle file deletion
|
|
317
283
|
if (event.type === "delete") {
|
|
318
|
-
logger?.debug(`Live Config: ${source} config file deleted: ${event.path}`);
|
|
319
284
|
// Reload configuration without the deleted file
|
|
320
285
|
await this.reloadConfiguration();
|
|
321
286
|
return;
|
|
322
287
|
}
|
|
323
288
|
// Handle file creation or modification
|
|
324
289
|
if (event.type === "change" || event.type === "create") {
|
|
325
|
-
logger?.debug(`Live Config: ${source} config file ${event.type}: ${event.path}`);
|
|
326
290
|
if (source === "project" &&
|
|
327
291
|
event.path.endsWith("settings.local.json") &&
|
|
328
292
|
event.type === "create") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,iBAAiB,EACjB,KAAK,0BAA0B,
|
|
1
|
+
{"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { addAssistantMessageToMessages, updateToolBlockInMessage, addErrorBlockToMessage, addUserMessageToMessages, addBangMessage, updateBangInMessage, completeBangInMessage, removeLastUserMessage, } from "../utils/messageOperations.js";
|
|
1
|
+
import { addAssistantMessageToMessages, updateToolBlockInMessage, addErrorBlockToMessage, addUserMessageToMessages, addBangMessage, updateBangInMessage, completeBangInMessage, removeLastUserMessage, generateMessageId, } from "../utils/messageOperations.js";
|
|
2
2
|
import { join } from "path";
|
|
3
3
|
import { appendMessages, createSession, generateSessionId, SESSION_DIR, } from "../services/session.js";
|
|
4
4
|
import { pathEncoder } from "../utils/pathEncoder.js";
|
|
@@ -264,6 +264,7 @@ export class MessageManager {
|
|
|
264
264
|
const lastThreeMessages = this.messages.slice(-3);
|
|
265
265
|
// Create compressed message
|
|
266
266
|
const compressMessage = {
|
|
267
|
+
id: generateMessageId(),
|
|
267
268
|
role: "assistant",
|
|
268
269
|
blocks: [
|
|
269
270
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissionManager.d.ts","sourceRoot":"","sources":["../../src/managers/permissionManager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"permissionManager.d.ts","sourceRoot":"","sources":["../../src/managers/permissionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import path from "node:path";
|
|
9
9
|
import { minimatch } from "minimatch";
|
|
10
10
|
import { RESTRICTED_TOOLS } from "../types/permissions.js";
|
|
11
|
-
import { splitBashCommand, stripEnvVars, stripRedirections, getSmartPrefix, DANGEROUS_COMMANDS, } from "../utils/bashParser.js";
|
|
11
|
+
import { splitBashCommand, stripEnvVars, stripRedirections, hasWriteRedirections, getSmartPrefix, DANGEROUS_COMMANDS, } from "../utils/bashParser.js";
|
|
12
12
|
import { isPathInside } from "../utils/pathSafety.js";
|
|
13
13
|
import { BASH_TOOL_NAME, EDIT_TOOL_NAME, WRITE_TOOL_NAME, READ_TOOL_NAME, LS_TOOL_NAME, } from "../constants/tools.js";
|
|
14
14
|
const SAFE_COMMANDS = ["cd", "ls", "pwd", "true", "false"];
|
|
@@ -343,6 +343,9 @@ export class PermissionManager {
|
|
|
343
343
|
const workdir = toolInput.workdir;
|
|
344
344
|
const parts = splitBashCommand(command);
|
|
345
345
|
const isDangerous = parts.some((part) => {
|
|
346
|
+
if (hasWriteRedirections(part)) {
|
|
347
|
+
return true;
|
|
348
|
+
}
|
|
346
349
|
const processedPart = stripRedirections(stripEnvVars(part));
|
|
347
350
|
const commandMatch = processedPart.match(/^(\w+)(\s+.*)?$/);
|
|
348
351
|
if (commandMatch) {
|
|
@@ -390,7 +393,15 @@ export class PermissionManager {
|
|
|
390
393
|
// Handle Bash command rules
|
|
391
394
|
if (toolName === BASH_TOOL_NAME) {
|
|
392
395
|
const command = String(context.toolInput?.command || "");
|
|
393
|
-
const
|
|
396
|
+
const hasWriteInPattern = hasWriteRedirections(pattern);
|
|
397
|
+
const hasWriteInCommand = hasWriteRedirections(command);
|
|
398
|
+
// If the command has write redirections, it must match a pattern that also has write redirections
|
|
399
|
+
if (hasWriteInCommand && !hasWriteInPattern) {
|
|
400
|
+
return false;
|
|
401
|
+
}
|
|
402
|
+
const processedPart = hasWriteInPattern
|
|
403
|
+
? stripEnvVars(command)
|
|
404
|
+
: stripRedirections(stripEnvVars(command));
|
|
394
405
|
// For Bash commands, we want '*' to match everything including slashes and spaces
|
|
395
406
|
// minimatch's default behavior for '*' is to not match across directory separators
|
|
396
407
|
// We use a regex to replace '*' with '.*' (match anything)
|
|
@@ -421,7 +432,7 @@ export class PermissionManager {
|
|
|
421
432
|
* Check if a tool call is allowed by persistent or temporary rules
|
|
422
433
|
*/
|
|
423
434
|
isAllowedByRule(context) {
|
|
424
|
-
const isAllowedByRuleList = (ctx, rules) => {
|
|
435
|
+
const isAllowedByRuleList = (ctx, rules, isDefaultRules = false) => {
|
|
425
436
|
if (ctx.toolName === BASH_TOOL_NAME && ctx.toolInput?.command) {
|
|
426
437
|
const command = String(ctx.toolInput.command);
|
|
427
438
|
const parts = splitBashCommand(command);
|
|
@@ -429,40 +440,46 @@ export class PermissionManager {
|
|
|
429
440
|
return false;
|
|
430
441
|
const workdir = ctx.toolInput?.workdir;
|
|
431
442
|
return parts.every((part) => {
|
|
443
|
+
const hasWrite = hasWriteRedirections(part);
|
|
432
444
|
const processedPart = stripRedirections(stripEnvVars(part));
|
|
433
445
|
// Check for safe commands
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
if (cmd
|
|
440
|
-
|
|
441
|
-
}
|
|
442
|
-
if (workdir) {
|
|
443
|
-
// For cd and ls, check paths
|
|
444
|
-
const pathArgs = (args.match(/(?:[^\s"']+|"[^"]*"|'[^']*')+/g) || []).filter((arg) => !arg.startsWith("-")) || [];
|
|
445
|
-
if (pathArgs.length === 0) {
|
|
446
|
-
// cd or ls without arguments operates on current dir (workdir)
|
|
446
|
+
if (!hasWrite) {
|
|
447
|
+
const commandMatch = processedPart.match(/^(\w+)(\s+.*)?$/);
|
|
448
|
+
if (commandMatch) {
|
|
449
|
+
const cmd = commandMatch[1];
|
|
450
|
+
const args = commandMatch[2]?.trim() || "";
|
|
451
|
+
if (SAFE_COMMANDS.includes(cmd)) {
|
|
452
|
+
if (cmd === "pwd" || cmd === "true" || cmd === "false") {
|
|
447
453
|
return true;
|
|
448
454
|
}
|
|
449
|
-
|
|
450
|
-
//
|
|
451
|
-
const
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
455
|
+
if (workdir) {
|
|
456
|
+
// For cd and ls, check paths
|
|
457
|
+
const pathArgs = (args.match(/(?:[^\s"']+|"[^"]*"|'[^']*')+/g) || []).filter((arg) => !arg.startsWith("-")) || [];
|
|
458
|
+
if (pathArgs.length === 0) {
|
|
459
|
+
// cd or ls without arguments operates on current dir (workdir)
|
|
460
|
+
return true;
|
|
461
|
+
}
|
|
462
|
+
const allPathsSafe = pathArgs.every((pathArg) => {
|
|
463
|
+
// Remove quotes if present
|
|
464
|
+
const cleanPath = pathArg.replace(/^['"](.*)['"]$/, "$1");
|
|
465
|
+
const { isInside } = this.isInsideSafeZone(cleanPath, workdir);
|
|
466
|
+
return isInside;
|
|
467
|
+
});
|
|
468
|
+
if (allPathsSafe) {
|
|
469
|
+
return true;
|
|
470
|
+
}
|
|
457
471
|
}
|
|
458
472
|
}
|
|
459
473
|
}
|
|
460
474
|
}
|
|
461
475
|
// Check if this specific part is allowed by any rule
|
|
476
|
+
if (hasWrite && isDefaultRules) {
|
|
477
|
+
return false;
|
|
478
|
+
}
|
|
462
479
|
// We create a temporary context with just this part of the command
|
|
463
480
|
const partContext = {
|
|
464
481
|
...ctx,
|
|
465
|
-
toolInput: { ...ctx.toolInput, command:
|
|
482
|
+
toolInput: { ...ctx.toolInput, command: part },
|
|
466
483
|
};
|
|
467
484
|
const allowedByRule = rules.some((rule) => {
|
|
468
485
|
return this.matchesRule(partContext, rule);
|
|
@@ -484,7 +501,7 @@ export class PermissionManager {
|
|
|
484
501
|
return true;
|
|
485
502
|
}
|
|
486
503
|
// Check default allowed rules
|
|
487
|
-
return isAllowedByRuleList(context, DEFAULT_ALLOWED_RULES);
|
|
504
|
+
return isAllowedByRuleList(context, DEFAULT_ALLOWED_RULES, true);
|
|
488
505
|
}
|
|
489
506
|
/**
|
|
490
507
|
* Expand a bash command into individual permission rules, filtering out safe commands.
|
|
@@ -498,11 +515,12 @@ export class PermissionManager {
|
|
|
498
515
|
const parts = splitBashCommand(command);
|
|
499
516
|
const rules = [];
|
|
500
517
|
for (const part of parts) {
|
|
518
|
+
const hasWrite = hasWriteRedirections(part);
|
|
501
519
|
const processedPart = stripRedirections(stripEnvVars(part));
|
|
502
520
|
// Check for safe commands
|
|
503
521
|
const commandMatch = processedPart.match(/^(\w+)(\s+.*)?$/);
|
|
504
522
|
let isSafe = false;
|
|
505
|
-
if (commandMatch) {
|
|
523
|
+
if (commandMatch && !hasWrite) {
|
|
506
524
|
const cmd = commandMatch[1];
|
|
507
525
|
const args = commandMatch[2]?.trim() || "";
|
|
508
526
|
if (SAFE_COMMANDS.includes(cmd)) {
|
|
@@ -549,12 +567,12 @@ export class PermissionManager {
|
|
|
549
567
|
}
|
|
550
568
|
}
|
|
551
569
|
}
|
|
552
|
-
const smartPrefix = getSmartPrefix(processedPart);
|
|
570
|
+
const smartPrefix = hasWrite ? null : getSmartPrefix(processedPart);
|
|
553
571
|
if (smartPrefix) {
|
|
554
572
|
rules.push(`Bash(${smartPrefix}*)`);
|
|
555
573
|
}
|
|
556
574
|
else {
|
|
557
|
-
rules.push(`Bash(${processedPart})`);
|
|
575
|
+
rules.push(`Bash(${hasWrite ? stripEnvVars(part) : processedPart})`);
|
|
558
576
|
}
|
|
559
577
|
}
|
|
560
578
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pluginManager.d.ts","sourceRoot":"","sources":["../../src/managers/pluginManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAUzD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,qBAAa,aAAa;IAMtB,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAA0B;gBAGtC,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,oBAAoB;IAM/B,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,mBAAmB,GAE9B;IAED,OAAO,KAAK,oBAAoB,GAE/B;IAED;;OAEG;IACH,oBAAoB,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAInE;;OAEG;YACW,oBAAoB;
|
|
1
|
+
{"version":3,"file":"pluginManager.d.ts","sourceRoot":"","sources":["../../src/managers/pluginManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAUzD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,qBAAa,aAAa;IAMtB,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAA0B;gBAGtC,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,oBAAoB;IAM/B,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,mBAAmB,GAE9B;IAED,OAAO,KAAK,oBAAoB,GAE/B;IAED;;OAEG;IACH,oBAAoB,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAInE;;OAEG;YACW,oBAAoB;IA+DlC;;OAEG;YACW,gBAAgB;IAyD9B;;;OAGG;IACG,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBzD;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAG5C"}
|
|
@@ -43,7 +43,34 @@ export class PluginManager {
|
|
|
43
43
|
this.enabledPlugins = this.configurationService.getMergedEnabledPlugins(this.workdir);
|
|
44
44
|
}
|
|
45
45
|
const marketplaceService = new MarketplaceService();
|
|
46
|
-
|
|
46
|
+
let installedRegistry = await marketplaceService.getInstalledPlugins();
|
|
47
|
+
const knownMarketplaces = await marketplaceService.listMarketplaces();
|
|
48
|
+
// Identify missing enabled plugins and auto-install them if marketplace is known
|
|
49
|
+
for (const pluginId of Object.keys(this.enabledPlugins)) {
|
|
50
|
+
if (this.enabledPlugins[pluginId] !== true)
|
|
51
|
+
continue;
|
|
52
|
+
const [name, marketplaceName] = pluginId.split("@");
|
|
53
|
+
if (!name || !marketplaceName)
|
|
54
|
+
continue;
|
|
55
|
+
const isInstalled = installedRegistry.plugins.some((p) => p.name === name && p.marketplace === marketplaceName);
|
|
56
|
+
if (!isInstalled) {
|
|
57
|
+
const isMarketplaceKnown = knownMarketplaces.some((m) => m.name === marketplaceName);
|
|
58
|
+
if (isMarketplaceKnown) {
|
|
59
|
+
logger?.info(`Auto-installing missing plugin: ${pluginId}`);
|
|
60
|
+
try {
|
|
61
|
+
await marketplaceService.installPlugin(pluginId);
|
|
62
|
+
}
|
|
63
|
+
catch (installError) {
|
|
64
|
+
logger?.error(`Failed to auto-install plugin ${pluginId}:`, installError);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
logger?.warn(`Plugin ${pluginId} is enabled but marketplace ${marketplaceName} is unknown. Skipping auto-install.`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Refresh registry after potential auto-installs
|
|
73
|
+
installedRegistry = await marketplaceService.getInstalledPlugins();
|
|
47
74
|
for (const p of installedRegistry.plugins) {
|
|
48
75
|
const pluginId = `${p.name}@${p.marketplace}`;
|
|
49
76
|
if (this.enabledPlugins[pluginId] !== true) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skillManager.d.ts","sourceRoot":"","sources":["../../src/managers/skillManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,KAAK,EAGL,aAAa,EACb,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAS3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD;;GAEG;AACH,qBAAa,YAAY;IAUrB,OAAO,CAAC,SAAS;IATnB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,WAAW,CAAS;gBAGlB,SAAS,EAAE,SAAS,EAC5B,OAAO,GAAE,mBAAwB;IAQnC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoCjC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,kBAAkB,IAAI,aAAa,EAAE;IAQrC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAQzD;;;OAGG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAgBzD;;OAEG;YACW,cAAc;IAkB5B;;OAEG;YACW,uBAAuB;IA8ErC;;OAEG;YACW,oBAAoB;IAkBlC;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;QAC/C,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,sBAAsB,CAAC;QACjC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IA4CF;;OAEG;YACW,mBAAmB;IAyBjC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"skillManager.d.ts","sourceRoot":"","sources":["../../src/managers/skillManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,KAAK,EAGL,aAAa,EACb,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAS3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD;;GAEG;AACH,qBAAa,YAAY;IAUrB,OAAO,CAAC,SAAS;IATnB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,WAAW,CAAS;gBAGlB,SAAS,EAAE,SAAS,EAC5B,OAAO,GAAE,mBAAwB;IAQnC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoCjC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,kBAAkB,IAAI,aAAa,EAAE;IAQrC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAQzD;;;OAGG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAgBzD;;OAEG;YACW,cAAc;IAkB5B;;OAEG;YACW,uBAAuB;IA8ErC;;OAEG;YACW,oBAAoB;IAkBlC;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;QAC/C,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,sBAAsB,CAAC;QACjC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IA4CF;;OAEG;YACW,mBAAmB;IAyBjC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;CAqB5C"}
|
|
@@ -264,13 +264,19 @@ export class SkillManager {
|
|
|
264
264
|
*/
|
|
265
265
|
registerPluginSkills(skills) {
|
|
266
266
|
for (const skill of skills) {
|
|
267
|
-
|
|
267
|
+
const metadata = {
|
|
268
268
|
name: skill.name,
|
|
269
269
|
description: skill.description,
|
|
270
270
|
type: skill.type,
|
|
271
271
|
skillPath: skill.skillPath,
|
|
272
272
|
allowedTools: skill.allowedTools,
|
|
273
|
-
|
|
273
|
+
context: skill.context,
|
|
274
|
+
agent: skill.agent,
|
|
275
|
+
model: skill.model,
|
|
276
|
+
disableModelInvocation: skill.disableModelInvocation,
|
|
277
|
+
userInvocable: skill.userInvocable,
|
|
278
|
+
};
|
|
279
|
+
this.skillMetadata.set(skill.name, metadata);
|
|
274
280
|
this.skillContent.set(skill.name, skill);
|
|
275
281
|
}
|
|
276
282
|
logger?.debug(`Registered ${skills.length} plugin skills. Total skills: ${this.skillMetadata.size}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiService.d.ts","sourceRoot":"","sources":["../../src/services/aiService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAGL,0BAA0B,EAC1B,0BAA0B,EAE3B,MAAM,qBAAqB,CAAC;AAI7B,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AA4DvC;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AA2DD,MAAM,WAAW,gBAAgB;IAE/B,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IAGzB,QAAQ,EAAE,0BAA0B,EAAE,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,0BAA0B,EAAE,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE;QACxB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC;KACnD,KAAK,IAAI,CAAC;IACX,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,6BAA6B,EAAE,CAAC;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,aAAa,CAAC,EACV,MAAM,GACN,QAAQ,GACR,YAAY,GACZ,gBAAgB,GAChB,eAAe,GACf,IAAI,CAAC;IACT,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"aiService.d.ts","sourceRoot":"","sources":["../../src/services/aiService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAGL,0BAA0B,EAC1B,0BAA0B,EAE3B,MAAM,qBAAqB,CAAC;AAI7B,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AA4DvC;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AA2DD,MAAM,WAAW,gBAAgB;IAE/B,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IAGzB,QAAQ,EAAE,0BAA0B,EAAE,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,0BAA0B,EAAE,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE;QACxB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC;KACnD,KAAK,IAAI,CAAC;IACX,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,6BAA6B,EAAE,CAAC;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,aAAa,CAAC,EACV,MAAM,GACN,QAAQ,GACR,YAAY,GACZ,gBAAgB,GAChB,eAAe,GACf,IAAI,CAAC;IACT,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CAwT1B;AA4OD,MAAM,WAAW,uBAAuB;IAEtC,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IAGzB,QAAQ,EAAE,0BAA0B,EAAE,CAAC;IACvC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,sBAAsB,CAAC,CAyEjC"}
|
|
@@ -198,6 +198,7 @@ export async function callAgent(options) {
|
|
|
198
198
|
}
|
|
199
199
|
catch (error) {
|
|
200
200
|
if (error.name === "AbortError") {
|
|
201
|
+
logger.info("OpenAI request aborted");
|
|
201
202
|
throw new Error("Request was aborted");
|
|
202
203
|
}
|
|
203
204
|
// Check if it's a 400 error and save messages to temp directory
|
|
@@ -495,6 +496,7 @@ export async function compressMessages(options) {
|
|
|
495
496
|
}
|
|
496
497
|
catch (error) {
|
|
497
498
|
if (error.name === "AbortError") {
|
|
499
|
+
logger.info("Compression request was aborted");
|
|
498
500
|
throw new Error("Compression request was aborted");
|
|
499
501
|
}
|
|
500
502
|
logger.error("Failed to compress messages:", error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileWatcher.d.ts","sourceRoot":"","sources":["../../src/services/fileWatcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,cAAc,CAAC;CAC5B;AAaD,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAahE;;;OAGG;IACG,SAAS,CACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GACxC,OAAO,CAAC,IAAI,CAAC;IA+BhB;;;OAGG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"fileWatcher.d.ts","sourceRoot":"","sources":["../../src/services/fileWatcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,cAAc,CAAC;CAC5B;AAaD,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAahE;;;OAGG;IACG,SAAS,CACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GACxC,OAAO,CAAC,IAAI,CAAC;IA+BhB;;;OAGG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB9C;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IA0BxD;;;OAGG;IACH,qBAAqB,IAAI,iBAAiB,EAAE;IAM5C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAUhB,iBAAiB;IA6C/B,OAAO,CAAC,wBAAwB;IA4BhC,OAAO,CAAC,eAAe;CA4BxB"}
|
|
@@ -65,7 +65,6 @@ export class FileWatcherService extends EventEmitter {
|
|
|
65
65
|
entry.watcher.unwatch(path);
|
|
66
66
|
}
|
|
67
67
|
this.watchers.delete(path);
|
|
68
|
-
this.logger?.debug(`Live Config: Stopped watching file: ${path}`);
|
|
69
68
|
}
|
|
70
69
|
catch (error) {
|
|
71
70
|
this.logger?.warn(`Live Config: Error unwatching file ${path}: ${error.message}`);
|
|
@@ -139,7 +138,6 @@ export class FileWatcherService extends EventEmitter {
|
|
|
139
138
|
entry.watcher = this.globalWatcher;
|
|
140
139
|
entry.isActive = true;
|
|
141
140
|
entry.errorCount = 0;
|
|
142
|
-
this.logger?.debug(`Live Config: Started watching file: ${entry.path}`);
|
|
143
141
|
}
|
|
144
142
|
catch (error) {
|
|
145
143
|
entry.errorCount++;
|
|
@@ -149,7 +147,6 @@ export class FileWatcherService extends EventEmitter {
|
|
|
149
147
|
// Try fallback polling if not already using it
|
|
150
148
|
if (!entry.config.fallbackPolling &&
|
|
151
149
|
entry.errorCount < entry.config.maxRetries) {
|
|
152
|
-
this.logger?.debug(`Live Config: Attempting polling fallback for ${entry.path}`);
|
|
153
150
|
entry.config.fallbackPolling = true;
|
|
154
151
|
await this.initializeWatcher(entry);
|
|
155
152
|
}
|
|
@@ -196,6 +193,5 @@ export class FileWatcherService extends EventEmitter {
|
|
|
196
193
|
this.logger?.error(`Live Config: Error in file watch callback for ${filePath}: ${error.message}`);
|
|
197
194
|
}
|
|
198
195
|
}
|
|
199
|
-
this.logger?.debug(`Live Config: File ${type} event for ${filePath}`);
|
|
200
196
|
}
|
|
201
197
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initializationService.d.ts","sourceRoot":"","sources":["../../src/services/initializationService.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EACN,YAAY,EACZ,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,WAAW,CAAC;IACxB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,wBAAwB,EAAE,MAAM,IAAI,CAAC;CACtC;AAED,qBAAa,qBAAqB;WACZ,UAAU,CAC5B,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE;QACR,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;KACtB,GACA,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"initializationService.d.ts","sourceRoot":"","sources":["../../src/services/initializationService.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EACN,YAAY,EACZ,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,WAAW,CAAC;IACxB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,wBAAwB,EAAE,MAAM,IAAI,CAAC;CACtC;AAED,qBAAa,qBAAqB;WACZ,UAAU,CAC5B,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE;QACR,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;KACtB,GACA,OAAO,CAAC,IAAI,CAAC;CAuNjB"}
|