wave-agent-sdk 0.6.4 → 0.7.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/dist/agent.d.ts +8 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +49 -240
- package/dist/constants/tools.d.ts +0 -2
- package/dist/constants/tools.d.ts.map +1 -1
- package/dist/constants/tools.js +0 -2
- package/dist/core/plugin.d.ts +86 -0
- package/dist/core/plugin.d.ts.map +1 -0
- package/dist/core/plugin.js +164 -0
- package/dist/index.d.ts +1 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -5
- package/dist/managers/MemoryRuleManager.d.ts +3 -1
- package/dist/managers/MemoryRuleManager.d.ts.map +1 -1
- package/dist/managers/MemoryRuleManager.js +2 -1
- package/dist/managers/aiManager.d.ts +13 -23
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +59 -32
- package/dist/managers/backgroundTaskManager.d.ts +3 -1
- package/dist/managers/backgroundTaskManager.d.ts.map +1 -1
- package/dist/managers/backgroundTaskManager.js +2 -1
- package/dist/managers/bashManager.d.ts +4 -4
- package/dist/managers/bashManager.d.ts.map +1 -1
- package/dist/managers/bashManager.js +5 -2
- package/dist/managers/foregroundTaskManager.d.ts +3 -0
- package/dist/managers/foregroundTaskManager.d.ts.map +1 -1
- package/dist/managers/foregroundTaskManager.js +2 -1
- package/dist/managers/hookManager.d.ts +3 -3
- package/dist/managers/hookManager.d.ts.map +1 -1
- package/dist/managers/hookManager.js +20 -19
- package/dist/managers/liveConfigManager.d.ts +6 -13
- package/dist/managers/liveConfigManager.d.ts.map +1 -1
- package/dist/managers/liveConfigManager.js +50 -45
- package/dist/managers/lspManager.d.ts +4 -5
- package/dist/managers/lspManager.d.ts.map +1 -1
- package/dist/managers/lspManager.js +13 -12
- package/dist/managers/mcpManager.d.ts +3 -2
- package/dist/managers/mcpManager.d.ts.map +1 -1
- package/dist/managers/mcpManager.js +16 -15
- package/dist/managers/messageManager.d.ts +5 -7
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageManager.js +12 -7
- package/dist/managers/permissionManager.d.ts +6 -4
- package/dist/managers/permissionManager.d.ts.map +1 -1
- package/dist/managers/permissionManager.js +39 -63
- package/dist/managers/planManager.d.ts +4 -6
- package/dist/managers/planManager.d.ts.map +1 -1
- package/dist/managers/planManager.js +18 -4
- package/dist/managers/pluginManager.d.ts +10 -22
- package/dist/managers/pluginManager.d.ts.map +1 -1
- package/dist/managers/pluginManager.js +27 -14
- package/dist/managers/reversionManager.d.ts +4 -3
- package/dist/managers/reversionManager.d.ts.map +1 -1
- package/dist/managers/reversionManager.js +5 -2
- package/dist/managers/skillManager.d.ts +3 -2
- package/dist/managers/skillManager.d.ts.map +1 -1
- package/dist/managers/skillManager.js +15 -14
- package/dist/managers/slashCommandManager.d.ts +9 -16
- package/dist/managers/slashCommandManager.d.ts.map +1 -1
- package/dist/managers/slashCommandManager.js +21 -10
- package/dist/managers/subagentManager.d.ts +7 -17
- package/dist/managers/subagentManager.d.ts.map +1 -1
- package/dist/managers/subagentManager.js +41 -34
- package/dist/managers/toolManager.d.ts +15 -38
- package/dist/managers/toolManager.d.ts.map +1 -1
- package/dist/managers/toolManager.js +66 -56
- package/dist/prompts/index.d.ts +6 -3
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +8 -16
- package/dist/services/MarketplaceService.d.ts.map +1 -1
- package/dist/services/MarketplaceService.js +13 -0
- package/dist/services/aiService.d.ts +4 -0
- package/dist/services/aiService.d.ts.map +1 -1
- package/dist/services/aiService.js +47 -7
- package/dist/services/configurationService.d.ts.map +1 -1
- package/dist/services/configurationService.js +30 -11
- package/dist/services/taskManager.d.ts +3 -1
- package/dist/services/taskManager.d.ts.map +1 -1
- package/dist/services/taskManager.js +2 -1
- package/dist/tools/bashTool.js +2 -2
- package/dist/tools/editTool.d.ts.map +1 -1
- package/dist/tools/editTool.js +9 -1
- package/dist/tools/readTool.d.ts.map +1 -1
- package/dist/tools/readTool.js +2 -2
- package/dist/tools/skillTool.d.ts +2 -4
- package/dist/tools/skillTool.d.ts.map +1 -1
- package/dist/tools/skillTool.js +61 -61
- package/dist/tools/taskOutputTool.js +1 -1
- package/dist/tools/taskTool.d.ts +2 -4
- package/dist/tools/taskTool.d.ts.map +1 -1
- package/dist/tools/taskTool.js +192 -187
- package/dist/tools/types.d.ts +11 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/writeTool.d.ts.map +1 -1
- package/dist/tools/writeTool.js +4 -2
- package/dist/types/marketplace.d.ts +8 -0
- package/dist/types/marketplace.d.ts.map +1 -1
- package/dist/types/permissions.d.ts +1 -1
- package/dist/types/permissions.d.ts.map +1 -1
- package/dist/types/permissions.js +1 -3
- package/dist/types/skills.d.ts +0 -2
- package/dist/types/skills.d.ts.map +1 -1
- package/dist/types/tools.d.ts +0 -15
- package/dist/types/tools.d.ts.map +1 -1
- package/dist/utils/container.d.ts +31 -0
- package/dist/utils/container.d.ts.map +1 -0
- package/dist/utils/container.js +79 -0
- package/dist/utils/containerSetup.d.ts +26 -0
- package/dist/utils/containerSetup.d.ts.map +1 -0
- package/dist/utils/containerSetup.js +165 -0
- package/dist/utils/editUtils.d.ts +0 -3
- package/dist/utils/editUtils.d.ts.map +1 -1
- package/dist/utils/editUtils.js +4 -3
- package/dist/utils/hookMatcher.d.ts +1 -1
- package/dist/utils/hookMatcher.d.ts.map +1 -1
- package/dist/utils/hookMatcher.js +2 -2
- package/dist/utils/openaiClient.js +2 -2
- package/dist/utils/stringUtils.d.ts +6 -0
- package/dist/utils/stringUtils.d.ts.map +1 -1
- package/dist/utils/stringUtils.js +8 -0
- package/package.json +1 -1
- package/src/agent.ts +60 -282
- package/src/constants/tools.ts +0 -2
- package/src/core/plugin.ts +224 -0
- package/src/index.ts +1 -6
- package/src/managers/MemoryRuleManager.ts +6 -1
- package/src/managers/aiManager.ts +83 -58
- package/src/managers/backgroundTaskManager.ts +5 -1
- package/src/managers/bashManager.ts +9 -4
- package/src/managers/foregroundTaskManager.ts +3 -0
- package/src/managers/hookManager.ts +21 -23
- package/src/managers/liveConfigManager.ts +57 -53
- package/src/managers/lspManager.ts +14 -19
- package/src/managers/mcpManager.ts +20 -20
- package/src/managers/messageManager.ts +19 -12
- package/src/managers/permissionManager.ts +45 -70
- package/src/managers/planManager.ts +26 -7
- package/src/managers/pluginManager.ts +37 -33
- package/src/managers/reversionManager.ts +5 -3
- package/src/managers/skillManager.ts +19 -20
- package/src/managers/slashCommandManager.ts +30 -25
- package/src/managers/subagentManager.ts +53 -53
- package/src/managers/toolManager.ts +91 -90
- package/src/prompts/index.ts +12 -24
- package/src/services/MarketplaceService.ts +13 -0
- package/src/services/aiService.ts +61 -15
- package/src/services/configurationService.ts +34 -13
- package/src/services/taskManager.ts +5 -1
- package/src/tools/bashTool.ts +2 -2
- package/src/tools/editTool.ts +9 -1
- package/src/tools/readTool.ts +2 -2
- package/src/tools/skillTool.ts +75 -71
- package/src/tools/taskOutputTool.ts +1 -1
- package/src/tools/taskTool.ts +224 -225
- package/src/tools/types.ts +12 -1
- package/src/tools/writeTool.ts +4 -2
- package/src/types/marketplace.ts +9 -0
- package/src/types/permissions.ts +0 -4
- package/src/types/skills.ts +0 -3
- package/src/types/tools.ts +0 -17
- package/src/utils/container.ts +92 -0
- package/src/utils/containerSetup.ts +256 -0
- package/src/utils/editUtils.ts +4 -3
- package/src/utils/hookMatcher.ts +2 -2
- package/src/utils/openaiClient.ts +2 -2
- package/src/utils/stringUtils.ts +9 -0
- package/dist/tools/deleteFileTool.d.ts +0 -6
- package/dist/tools/deleteFileTool.d.ts.map +0 -1
- package/dist/tools/deleteFileTool.js +0 -100
- package/dist/tools/multiEditTool.d.ts +0 -6
- package/dist/tools/multiEditTool.d.ts.map +0 -1
- package/dist/tools/multiEditTool.js +0 -246
- package/src/tools/deleteFileTool.ts +0 -127
- package/src/tools/multiEditTool.ts +0 -306
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Container } from "../utils/container.js";
|
|
2
2
|
export interface BashManagerOptions {
|
|
3
|
-
messageManager: MessageManager;
|
|
4
3
|
workdir: string;
|
|
5
4
|
}
|
|
6
5
|
export interface CommandExecutionResult {
|
|
@@ -8,11 +7,12 @@ export interface CommandExecutionResult {
|
|
|
8
7
|
output: string;
|
|
9
8
|
}
|
|
10
9
|
export declare class BashManager {
|
|
10
|
+
private container;
|
|
11
11
|
private workdir;
|
|
12
|
-
private messageManager;
|
|
13
12
|
isCommandRunning: boolean;
|
|
14
13
|
private currentProcess;
|
|
15
|
-
constructor(options: BashManagerOptions);
|
|
14
|
+
constructor(container: Container, options: BashManagerOptions);
|
|
15
|
+
private get messageManager();
|
|
16
16
|
private setCommandRunning;
|
|
17
17
|
executeCommand(command: string): Promise<number>;
|
|
18
18
|
abortCommand(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bashManager.d.ts","sourceRoot":"","sources":["../../src/managers/bashManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bashManager.d.ts","sourceRoot":"","sources":["../../src/managers/bashManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,WAAW;IAMpB,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,OAAO,CAAS;IACjB,gBAAgB,UAAS;IAChC,OAAO,CAAC,cAAc,CAA6B;gBAGzC,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,kBAAkB;IAK7B,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,CAAC,iBAAiB;IAIZ,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAyDtD,YAAY,IAAI,IAAI;CAO5B"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { spawn } from "child_process";
|
|
2
2
|
export class BashManager {
|
|
3
|
-
constructor(options) {
|
|
3
|
+
constructor(container, options) {
|
|
4
|
+
this.container = container;
|
|
4
5
|
this.isCommandRunning = false;
|
|
5
6
|
this.currentProcess = null;
|
|
6
7
|
this.workdir = options.workdir;
|
|
7
|
-
|
|
8
|
+
}
|
|
9
|
+
get messageManager() {
|
|
10
|
+
return this.container.get("MessageManager");
|
|
8
11
|
}
|
|
9
12
|
setCommandRunning(isRunning) {
|
|
10
13
|
this.isCommandRunning = isRunning;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { ForegroundTask, IForegroundTaskManager } from "../types/processes.js";
|
|
2
|
+
import { Container } from "../utils/container.js";
|
|
2
3
|
export declare class ForegroundTaskManager implements IForegroundTaskManager {
|
|
4
|
+
private container;
|
|
3
5
|
private activeForegroundTasks;
|
|
6
|
+
constructor(container: Container);
|
|
4
7
|
registerForegroundTask(task: ForegroundTask): void;
|
|
5
8
|
unregisterForegroundTask(id: string): void;
|
|
6
9
|
backgroundCurrentTask(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foregroundTaskManager.d.ts","sourceRoot":"","sources":["../../src/managers/foregroundTaskManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"foregroundTaskManager.d.ts","sourceRoot":"","sources":["../../src/managers/foregroundTaskManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,qBAAa,qBAAsB,YAAW,sBAAsB;IAGtD,OAAO,CAAC,SAAS;IAF7B,OAAO,CAAC,qBAAqB,CAAwB;gBAEjC,SAAS,EAAE,SAAS;IAEjC,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIlD,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMpC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5C,cAAc,IAAI,OAAO;CAGjC"}
|
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
import { type HookEvent, type HookExecutionContext, type ExtendedHookExecutionContext, type HookExecutionResult, type HookValidationResult } from "../types/hooks.js";
|
|
8
8
|
import type { WaveConfiguration, PartialHookConfiguration } from "../types/configuration.js";
|
|
9
9
|
import { HookMatcher } from "../utils/hookMatcher.js";
|
|
10
|
-
import type { Logger } from "../types/index.js";
|
|
11
10
|
import type { MessageManager } from "./messageManager.js";
|
|
11
|
+
import { Container } from "../utils/container.js";
|
|
12
12
|
export declare class HookManager {
|
|
13
|
+
private container;
|
|
13
14
|
private configuration;
|
|
14
15
|
private readonly matcher;
|
|
15
|
-
private readonly logger?;
|
|
16
16
|
private readonly workdir;
|
|
17
|
-
constructor(workdir: string, matcher?: HookMatcher
|
|
17
|
+
constructor(container: Container, workdir: string, matcher?: HookMatcher);
|
|
18
18
|
/**
|
|
19
19
|
* Load and merge hook configurations from user and project settings
|
|
20
20
|
* Project settings take precedence over user settings
|
|
@@ -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;
|
|
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;IAqC3E;;OAEG;IACG,YAAY,CAChB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,oBAAoB,GAAG,4BAA4B,GAC3D,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAuHjC;;;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;IAsE3B;;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;IAsDhC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA8BhC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;OAEG;IACH,OAAO,CAAC,aAAa;IAiCrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA2C3B;;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;IAgDD;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI;CAW3D"}
|
|
@@ -8,11 +8,12 @@ import { HookConfigurationError, isValidHookEvent, isValidHookEventConfig, } fro
|
|
|
8
8
|
import { HookMatcher } from "../utils/hookMatcher.js";
|
|
9
9
|
import { executeCommand, isCommandSafe } from "../services/hook.js";
|
|
10
10
|
import { MessageSource } from "../types/index.js";
|
|
11
|
+
import { logger } from "../utils/globalLogger.js";
|
|
11
12
|
export class HookManager {
|
|
12
|
-
constructor(workdir, matcher = new HookMatcher()
|
|
13
|
+
constructor(container, workdir, matcher = new HookMatcher()) {
|
|
14
|
+
this.container = container;
|
|
13
15
|
this.workdir = workdir;
|
|
14
16
|
this.matcher = matcher;
|
|
15
|
-
this.logger = logger;
|
|
16
17
|
}
|
|
17
18
|
/**
|
|
18
19
|
* Load and merge hook configurations from user and project settings
|
|
@@ -41,7 +42,7 @@ export class HookManager {
|
|
|
41
42
|
*/
|
|
42
43
|
loadConfigurationFromWaveConfig(waveConfig) {
|
|
43
44
|
try {
|
|
44
|
-
|
|
45
|
+
logger?.debug(`[HookManager] Loading hooks configuration from pre-loaded config...`);
|
|
45
46
|
this.configuration = waveConfig?.hooks || undefined;
|
|
46
47
|
// Validate the loaded configuration if it exists
|
|
47
48
|
if (waveConfig?.hooks) {
|
|
@@ -50,7 +51,7 @@ export class HookManager {
|
|
|
50
51
|
throw new HookConfigurationError("provided configuration", validation.errors);
|
|
51
52
|
}
|
|
52
53
|
}
|
|
53
|
-
|
|
54
|
+
logger?.debug(`[HookManager] Hooks configuration loaded successfully with ${Object.keys(waveConfig?.hooks || {}).length} event types`);
|
|
54
55
|
}
|
|
55
56
|
catch (error) {
|
|
56
57
|
// If loading fails, start with undefined configuration (no hooks)
|
|
@@ -60,7 +61,7 @@ export class HookManager {
|
|
|
60
61
|
throw error;
|
|
61
62
|
}
|
|
62
63
|
else {
|
|
63
|
-
|
|
64
|
+
logger?.warn(`[HookManager] Failed to load configuration, continuing with no hooks: ${error.message}`);
|
|
64
65
|
}
|
|
65
66
|
}
|
|
66
67
|
}
|
|
@@ -71,7 +72,7 @@ export class HookManager {
|
|
|
71
72
|
// Validate execution context
|
|
72
73
|
const contextValidation = this.validateExecutionContext(event, context);
|
|
73
74
|
if (!contextValidation.valid) {
|
|
74
|
-
|
|
75
|
+
logger?.error(`[HookManager] Invalid execution context for ${event}: ${contextValidation.errors.join(", ")}`);
|
|
75
76
|
return [
|
|
76
77
|
{
|
|
77
78
|
success: false,
|
|
@@ -82,38 +83,38 @@ export class HookManager {
|
|
|
82
83
|
];
|
|
83
84
|
}
|
|
84
85
|
if (!this.configuration) {
|
|
85
|
-
|
|
86
|
+
logger?.debug(`[HookManager] No configuration loaded, skipping ${event} hooks`);
|
|
86
87
|
return [];
|
|
87
88
|
}
|
|
88
89
|
const eventConfigs = this.configuration[event];
|
|
89
90
|
if (!eventConfigs || eventConfigs.length === 0) {
|
|
90
|
-
|
|
91
|
+
logger?.debug(`[HookManager] No hooks configured for ${event} event`);
|
|
91
92
|
return [];
|
|
92
93
|
}
|
|
93
|
-
|
|
94
|
+
logger?.debug(`[HookManager] Starting ${event} hook execution with ${eventConfigs.length} configurations`);
|
|
94
95
|
const results = [];
|
|
95
96
|
const startTime = Date.now();
|
|
96
97
|
for (let configIndex = 0; configIndex < eventConfigs.length; configIndex++) {
|
|
97
98
|
const config = eventConfigs[configIndex];
|
|
98
99
|
// Check if this config applies to the current context
|
|
99
100
|
if (!this.configApplies(config, event, context.toolName)) {
|
|
100
|
-
|
|
101
|
+
logger?.debug(`[HookManager] Skipping configuration ${configIndex + 1}: matcher '${config.matcher}' does not match tool '${context.toolName}'`);
|
|
101
102
|
continue;
|
|
102
103
|
}
|
|
103
|
-
|
|
104
|
+
logger?.debug(`[HookManager] Executing configuration ${configIndex + 1} with ${config.hooks.length} commands (matcher: ${config.matcher || "any"})`);
|
|
104
105
|
// Execute all commands for this configuration
|
|
105
106
|
for (let commandIndex = 0; commandIndex < config.hooks.length; commandIndex++) {
|
|
106
107
|
const hookCommand = config.hooks[commandIndex];
|
|
107
108
|
try {
|
|
108
|
-
|
|
109
|
+
logger?.debug(`[HookManager] Executing command ${commandIndex + 1}/${config.hooks.length} in configuration ${configIndex + 1}`);
|
|
109
110
|
const result = await executeCommand(hookCommand.command, context, undefined);
|
|
110
111
|
results.push(result);
|
|
111
112
|
// Report individual command result
|
|
112
113
|
if (result.success) {
|
|
113
|
-
|
|
114
|
+
logger?.debug(`[HookManager] Command ${commandIndex + 1} completed successfully in ${result.duration}ms`);
|
|
114
115
|
}
|
|
115
116
|
else {
|
|
116
|
-
|
|
117
|
+
logger?.debug(`[HookManager] Command ${commandIndex + 1} failed in ${result.duration}ms (exit code: ${result.exitCode}, timed out: ${result.timedOut})`);
|
|
117
118
|
}
|
|
118
119
|
// Continue with next command even if this one fails
|
|
119
120
|
// This allows for non-critical hooks to fail without stopping the workflow
|
|
@@ -121,7 +122,7 @@ export class HookManager {
|
|
|
121
122
|
catch (error) {
|
|
122
123
|
// This should be rare as executor handles most errors
|
|
123
124
|
const errorMessage = error instanceof Error ? error.message : "Unknown execution error";
|
|
124
|
-
|
|
125
|
+
logger?.error(`[HookManager] Unexpected error in command ${commandIndex + 1}: ${errorMessage}`);
|
|
125
126
|
results.push({
|
|
126
127
|
success: false,
|
|
127
128
|
stderr: errorMessage,
|
|
@@ -134,7 +135,7 @@ export class HookManager {
|
|
|
134
135
|
// Generate execution summary
|
|
135
136
|
const totalDuration = Date.now() - startTime;
|
|
136
137
|
const summary = this.generateExecutionSummary(event, results, totalDuration);
|
|
137
|
-
|
|
138
|
+
logger?.debug(`[HookManager] ${event} execution summary: ${summary}`);
|
|
138
139
|
return results;
|
|
139
140
|
}
|
|
140
141
|
/**
|
|
@@ -367,7 +368,7 @@ export class HookManager {
|
|
|
367
368
|
}
|
|
368
369
|
// Warn about event mismatch but don't fail validation
|
|
369
370
|
if (context.event !== event) {
|
|
370
|
-
|
|
371
|
+
logger?.warn(`[HookManager] Context event '${context.event}' does not match requested event '${event}'`);
|
|
371
372
|
}
|
|
372
373
|
// Validate project directory
|
|
373
374
|
if (!context.projectDir || typeof context.projectDir !== "string") {
|
|
@@ -389,7 +390,7 @@ export class HookManager {
|
|
|
389
390
|
event === "Notification" ||
|
|
390
391
|
event === "SubagentStop") &&
|
|
391
392
|
context.toolName !== undefined) {
|
|
392
|
-
|
|
393
|
+
logger?.warn(`[HookManager] ${event} event has unexpected toolName in context: ${context.toolName}`);
|
|
393
394
|
}
|
|
394
395
|
return {
|
|
395
396
|
valid: errors.length === 0,
|
|
@@ -537,6 +538,6 @@ export class HookManager {
|
|
|
537
538
|
this.configuration = {};
|
|
538
539
|
}
|
|
539
540
|
this.mergeHooksConfiguration(this.configuration, hooks);
|
|
540
|
-
|
|
541
|
+
logger?.debug(`Registered plugin hooks. Total event types: ${Object.keys(this.configuration).length}`);
|
|
541
542
|
}
|
|
542
543
|
}
|
|
@@ -6,25 +6,15 @@
|
|
|
6
6
|
* - Configuration file watching for settings.json files
|
|
7
7
|
* - Coordination between file watchers and configuration updates
|
|
8
8
|
*/
|
|
9
|
-
import
|
|
10
|
-
import type { HookManager } from "./hookManager.js";
|
|
11
|
-
import type { PermissionManager } from "./permissionManager.js";
|
|
12
|
-
import { ConfigurationService } from "../services/configurationService.js";
|
|
9
|
+
import { Container } from "../utils/container.js";
|
|
13
10
|
import type { WaveConfiguration } from "../types/configuration.js";
|
|
14
11
|
export interface LiveConfigManagerOptions {
|
|
15
12
|
workdir: string;
|
|
16
|
-
logger?: Logger;
|
|
17
|
-
hookManager?: HookManager;
|
|
18
|
-
permissionManager?: PermissionManager;
|
|
19
|
-
configurationService?: ConfigurationService;
|
|
20
13
|
}
|
|
21
14
|
export declare class LiveConfigManager {
|
|
15
|
+
private container;
|
|
22
16
|
private readonly workdir;
|
|
23
|
-
private readonly logger?;
|
|
24
|
-
private readonly hookManager?;
|
|
25
|
-
private readonly permissionManager?;
|
|
26
17
|
private isInitialized;
|
|
27
|
-
private readonly configurationService;
|
|
28
18
|
private currentConfiguration;
|
|
29
19
|
private lastValidConfiguration;
|
|
30
20
|
private fileWatcher;
|
|
@@ -32,7 +22,10 @@ export declare class LiveConfigManager {
|
|
|
32
22
|
private projectConfigPaths?;
|
|
33
23
|
private isWatching;
|
|
34
24
|
private reloadInProgress;
|
|
35
|
-
constructor(options: LiveConfigManagerOptions);
|
|
25
|
+
constructor(container: Container, options: LiveConfigManagerOptions);
|
|
26
|
+
private get hookManager();
|
|
27
|
+
private get permissionManager();
|
|
28
|
+
private get configurationService();
|
|
36
29
|
/**
|
|
37
30
|
* Initialize configuration watching
|
|
38
31
|
* Maps to FR-004: System MUST watch settings.json files
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"liveConfigManager.d.ts","sourceRoot":"","sources":["../../src/managers/liveConfigManager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
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;IA6DhC;;OAEG;IACH,uBAAuB,IAAI,iBAAiB,GAAG,IAAI;IAInD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBjC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB/B;;;OAGG;YACW,mBAAmB;IAwNjC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAK1C;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;OAEG;IACH,gBAAgB;;;;;;;;;;;;IAgBhB,OAAO,CAAC,sBAAsB;YAMhB,gBAAgB;IA8C9B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA4F7B,OAAO,CAAC,aAAa;IAuDrB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;CAQ9B"}
|
|
@@ -10,10 +10,11 @@ import { existsSync } from "fs";
|
|
|
10
10
|
import { FileWatcherService, } from "../services/fileWatcher.js";
|
|
11
11
|
import { getProjectConfigPaths, getUserConfigPaths, } from "../utils/configPaths.js";
|
|
12
12
|
import { isValidHookEvent, isValidHookEventConfig } from "../types/hooks.js";
|
|
13
|
-
import { ConfigurationService } from "../services/configurationService.js";
|
|
14
13
|
import { ensureGlobalGitIgnore } from "../utils/fileUtils.js";
|
|
14
|
+
import { logger } from "../utils/globalLogger.js";
|
|
15
15
|
export class LiveConfigManager {
|
|
16
|
-
constructor(options) {
|
|
16
|
+
constructor(container, options) {
|
|
17
|
+
this.container = container;
|
|
17
18
|
this.isInitialized = false;
|
|
18
19
|
// Configuration state
|
|
19
20
|
this.currentConfiguration = null;
|
|
@@ -21,14 +22,18 @@ export class LiveConfigManager {
|
|
|
21
22
|
this.isWatching = false;
|
|
22
23
|
this.reloadInProgress = false;
|
|
23
24
|
this.workdir = options.workdir;
|
|
24
|
-
this.
|
|
25
|
-
this.hookManager = options.hookManager;
|
|
26
|
-
this.permissionManager = options.permissionManager;
|
|
27
|
-
this.configurationService =
|
|
28
|
-
options.configurationService || new ConfigurationService();
|
|
29
|
-
this.fileWatcher = new FileWatcherService(this.logger);
|
|
25
|
+
this.fileWatcher = new FileWatcherService(logger);
|
|
30
26
|
this.setupFileWatcherEvents();
|
|
31
27
|
}
|
|
28
|
+
get hookManager() {
|
|
29
|
+
return this.container.get("HookManager");
|
|
30
|
+
}
|
|
31
|
+
get permissionManager() {
|
|
32
|
+
return this.container.get("PermissionManager");
|
|
33
|
+
}
|
|
34
|
+
get configurationService() {
|
|
35
|
+
return this.container.get("ConfigurationService");
|
|
36
|
+
}
|
|
32
37
|
/**
|
|
33
38
|
* Initialize configuration watching
|
|
34
39
|
* Maps to FR-004: System MUST watch settings.json files
|
|
@@ -36,7 +41,7 @@ export class LiveConfigManager {
|
|
|
36
41
|
*/
|
|
37
42
|
async initializeWatching(userPaths, projectPaths) {
|
|
38
43
|
try {
|
|
39
|
-
|
|
44
|
+
logger?.debug("Live Config: Initializing configuration watching...");
|
|
40
45
|
this.userConfigPaths = userPaths;
|
|
41
46
|
this.projectConfigPaths = projectPaths;
|
|
42
47
|
// Load initial configuration
|
|
@@ -44,11 +49,11 @@ export class LiveConfigManager {
|
|
|
44
49
|
// Start watching user configs that exist
|
|
45
50
|
for (const userPath of userPaths) {
|
|
46
51
|
if (existsSync(userPath)) {
|
|
47
|
-
|
|
52
|
+
logger?.debug(`Live Config: Starting to watch user config: ${userPath}`);
|
|
48
53
|
await this.fileWatcher.watchFile(userPath, (event) => this.handleFileChange(event, "user"));
|
|
49
54
|
}
|
|
50
55
|
else {
|
|
51
|
-
|
|
56
|
+
logger?.debug(`Live Config: User config file does not exist: ${userPath}`);
|
|
52
57
|
}
|
|
53
58
|
}
|
|
54
59
|
// Start watching project configs that exist
|
|
@@ -58,20 +63,20 @@ export class LiveConfigManager {
|
|
|
58
63
|
if (projectPath.endsWith("settings.local.json")) {
|
|
59
64
|
await ensureGlobalGitIgnore("**/.wave/settings.local.json");
|
|
60
65
|
}
|
|
61
|
-
|
|
66
|
+
logger?.debug(`Live Config: Starting to watch project config: ${projectPath}`);
|
|
62
67
|
await this.fileWatcher.watchFile(projectPath, (event) => this.handleFileChange(event, "project"));
|
|
63
68
|
}
|
|
64
69
|
else {
|
|
65
|
-
|
|
70
|
+
logger?.debug(`Live Config: Project config file does not exist: ${projectPath}`);
|
|
66
71
|
}
|
|
67
72
|
}
|
|
68
73
|
}
|
|
69
74
|
this.isWatching = true;
|
|
70
|
-
|
|
75
|
+
logger?.debug("Live Config: Configuration watching initialized successfully");
|
|
71
76
|
}
|
|
72
77
|
catch (error) {
|
|
73
78
|
const errorMessage = `Failed to initialize configuration watching: ${error.message}`;
|
|
74
|
-
|
|
79
|
+
logger?.error(`Live Config: ${errorMessage}`);
|
|
75
80
|
throw new Error(errorMessage);
|
|
76
81
|
}
|
|
77
82
|
}
|
|
@@ -86,7 +91,7 @@ export class LiveConfigManager {
|
|
|
86
91
|
*/
|
|
87
92
|
async initialize() {
|
|
88
93
|
if (this.isInitialized) {
|
|
89
|
-
|
|
94
|
+
logger?.debug("Already initialized");
|
|
90
95
|
return;
|
|
91
96
|
}
|
|
92
97
|
try {
|
|
@@ -95,10 +100,10 @@ export class LiveConfigManager {
|
|
|
95
100
|
// Initialize configuration watching
|
|
96
101
|
await this.initializeWatching(userPaths, projectPaths);
|
|
97
102
|
this.isInitialized = true;
|
|
98
|
-
|
|
103
|
+
logger?.debug("Live configuration management initialized with file watching");
|
|
99
104
|
}
|
|
100
105
|
catch (error) {
|
|
101
|
-
|
|
106
|
+
logger?.error(`Failed to initialize: ${error.message}`);
|
|
102
107
|
throw error;
|
|
103
108
|
}
|
|
104
109
|
}
|
|
@@ -110,7 +115,7 @@ export class LiveConfigManager {
|
|
|
110
115
|
return;
|
|
111
116
|
}
|
|
112
117
|
try {
|
|
113
|
-
|
|
118
|
+
logger?.debug("Live Config: Shutting down configuration manager...");
|
|
114
119
|
this.isWatching = false;
|
|
115
120
|
// Cleanup file watcher
|
|
116
121
|
await this.fileWatcher.cleanup();
|
|
@@ -118,10 +123,10 @@ export class LiveConfigManager {
|
|
|
118
123
|
this.currentConfiguration = null;
|
|
119
124
|
this.lastValidConfiguration = null;
|
|
120
125
|
this.isInitialized = false;
|
|
121
|
-
|
|
126
|
+
logger?.debug("Live configuration management shutdown completed");
|
|
122
127
|
}
|
|
123
128
|
catch (error) {
|
|
124
|
-
|
|
129
|
+
logger?.error(`Error during shutdown: ${error.message}`);
|
|
125
130
|
throw error;
|
|
126
131
|
}
|
|
127
132
|
}
|
|
@@ -131,26 +136,26 @@ export class LiveConfigManager {
|
|
|
131
136
|
*/
|
|
132
137
|
async reloadConfiguration() {
|
|
133
138
|
if (this.reloadInProgress) {
|
|
134
|
-
|
|
139
|
+
logger?.debug("Live Config: Reload already in progress, skipping");
|
|
135
140
|
return this.currentConfiguration || {};
|
|
136
141
|
}
|
|
137
142
|
this.reloadInProgress = true;
|
|
138
143
|
try {
|
|
139
|
-
|
|
144
|
+
logger?.debug("Live Config: Reloading configuration from files...");
|
|
140
145
|
// Load merged configuration using ConfigurationService
|
|
141
146
|
const loadResult = await this.configurationService.loadMergedConfiguration(this.workdir);
|
|
142
147
|
const newConfig = loadResult.configuration;
|
|
143
148
|
// Check for errors during loading
|
|
144
149
|
if (!loadResult.success) {
|
|
145
150
|
const errorMessage = loadResult.error || "Configuration loading failed with unknown error";
|
|
146
|
-
|
|
151
|
+
logger?.error(`Live Config: Configuration loading failed: ${errorMessage}`);
|
|
147
152
|
// Log warnings if any
|
|
148
153
|
if (loadResult.warnings && loadResult.warnings.length > 0) {
|
|
149
|
-
|
|
154
|
+
logger?.warn(`Live Config: Configuration warnings: ${loadResult.warnings.join("; ")}`);
|
|
150
155
|
}
|
|
151
156
|
// Use fallback configuration if available
|
|
152
157
|
if (this.lastValidConfiguration) {
|
|
153
|
-
|
|
158
|
+
logger?.debug("Live Config: Using previous valid configuration due to loading errors");
|
|
154
159
|
this.currentConfiguration = this.lastValidConfiguration;
|
|
155
160
|
// Apply environment variables to configuration service if configured
|
|
156
161
|
if (this.lastValidConfiguration.env) {
|
|
@@ -163,35 +168,35 @@ export class LiveConfigManager {
|
|
|
163
168
|
return this.currentConfiguration;
|
|
164
169
|
}
|
|
165
170
|
else {
|
|
166
|
-
|
|
171
|
+
logger?.warn("Live Config: No previous valid configuration available, using empty config");
|
|
167
172
|
this.currentConfiguration = {};
|
|
168
173
|
return this.currentConfiguration;
|
|
169
174
|
}
|
|
170
175
|
}
|
|
171
176
|
// Log success with detailed information
|
|
172
177
|
if (newConfig) {
|
|
173
|
-
|
|
178
|
+
logger?.debug(`Live Config: Configuration loaded successfully from ${loadResult.sourcePath || "merged sources"}`);
|
|
174
179
|
// Log detailed configuration info
|
|
175
180
|
const hookCount = Object.keys(newConfig.hooks || {}).length;
|
|
176
181
|
const envCount = Object.keys(newConfig.env || {}).length;
|
|
177
|
-
|
|
182
|
+
logger?.debug(`Live Config: Loaded ${hookCount} hook events and ${envCount} environment variables`);
|
|
178
183
|
}
|
|
179
184
|
else {
|
|
180
|
-
|
|
185
|
+
logger?.debug("Live Config: No configuration found (using empty configuration)");
|
|
181
186
|
}
|
|
182
187
|
// Log warnings from successful loading
|
|
183
188
|
if (loadResult.warnings && loadResult.warnings.length > 0) {
|
|
184
|
-
|
|
189
|
+
logger?.warn(`Live Config: Configuration warnings: ${loadResult.warnings.join("; ")}`);
|
|
185
190
|
}
|
|
186
191
|
// Validate new configuration if it exists
|
|
187
192
|
if (newConfig) {
|
|
188
193
|
const validation = this.validateConfiguration(newConfig);
|
|
189
194
|
if (!validation.valid) {
|
|
190
195
|
const errorMessage = `Configuration validation failed: ${validation.errors.join(", ")}`;
|
|
191
|
-
|
|
196
|
+
logger?.error(`Live Config: ${errorMessage}`);
|
|
192
197
|
// Use previous valid configuration for error recovery
|
|
193
198
|
if (this.lastValidConfiguration) {
|
|
194
|
-
|
|
199
|
+
logger?.debug("Live Config: Using previous valid configuration due to validation errors");
|
|
195
200
|
this.currentConfiguration = this.lastValidConfiguration;
|
|
196
201
|
// Apply environment variables to configuration service if configured
|
|
197
202
|
if (this.lastValidConfiguration.env) {
|
|
@@ -204,7 +209,7 @@ export class LiveConfigManager {
|
|
|
204
209
|
return this.currentConfiguration;
|
|
205
210
|
}
|
|
206
211
|
else {
|
|
207
|
-
|
|
212
|
+
logger?.warn("Live Config: No previous valid configuration available, using empty config");
|
|
208
213
|
this.currentConfiguration = {};
|
|
209
214
|
return this.currentConfiguration;
|
|
210
215
|
}
|
|
@@ -217,7 +222,7 @@ export class LiveConfigManager {
|
|
|
217
222
|
// Save as last valid configuration if it's valid and not empty
|
|
218
223
|
if (newConfig && (newConfig.hooks || newConfig.env)) {
|
|
219
224
|
this.lastValidConfiguration = { ...newConfig };
|
|
220
|
-
|
|
225
|
+
logger?.debug("Live Config: Saved current configuration as last valid backup");
|
|
221
226
|
}
|
|
222
227
|
// Note: Environment variables are already applied by loadMergedConfiguration()
|
|
223
228
|
// No need to set them again here as currentConfiguration === newConfig
|
|
@@ -240,15 +245,15 @@ export class LiveConfigManager {
|
|
|
240
245
|
this.permissionManager.updateAdditionalDirectories(this.currentConfiguration.permissions.additionalDirectories);
|
|
241
246
|
}
|
|
242
247
|
}
|
|
243
|
-
|
|
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`);
|
|
244
249
|
return this.currentConfiguration;
|
|
245
250
|
}
|
|
246
251
|
catch (error) {
|
|
247
252
|
const errorMessage = `Configuration reload failed with exception: ${error.message}`;
|
|
248
|
-
|
|
253
|
+
logger?.error(`Live Config: ${errorMessage}`);
|
|
249
254
|
// Use previous valid configuration for error recovery
|
|
250
255
|
if (this.lastValidConfiguration) {
|
|
251
|
-
|
|
256
|
+
logger?.debug("Live Config: Using previous valid configuration due to reload exception");
|
|
252
257
|
this.currentConfiguration = this.lastValidConfiguration;
|
|
253
258
|
// Apply environment variables to configuration service if configured
|
|
254
259
|
if (this.lastValidConfiguration.env) {
|
|
@@ -260,7 +265,7 @@ export class LiveConfigManager {
|
|
|
260
265
|
}
|
|
261
266
|
}
|
|
262
267
|
else {
|
|
263
|
-
|
|
268
|
+
logger?.warn("Live Config: No previous valid configuration available, using empty config");
|
|
264
269
|
this.currentConfiguration = {};
|
|
265
270
|
}
|
|
266
271
|
return this.currentConfiguration;
|
|
@@ -273,7 +278,7 @@ export class LiveConfigManager {
|
|
|
273
278
|
* Reload configuration from files (public method)
|
|
274
279
|
*/
|
|
275
280
|
async reload() {
|
|
276
|
-
|
|
281
|
+
logger?.debug("Manually reloading configuration...");
|
|
277
282
|
return await this.reloadConfiguration();
|
|
278
283
|
}
|
|
279
284
|
/**
|
|
@@ -302,22 +307,22 @@ export class LiveConfigManager {
|
|
|
302
307
|
}
|
|
303
308
|
setupFileWatcherEvents() {
|
|
304
309
|
this.fileWatcher.on("watcherError", (error) => {
|
|
305
|
-
|
|
310
|
+
logger?.error(`Live Config: File watcher error: ${error.message}`);
|
|
306
311
|
});
|
|
307
312
|
}
|
|
308
313
|
async handleFileChange(event, source) {
|
|
309
|
-
|
|
314
|
+
logger?.debug(`Live Config: File ${event.type} detected for ${source} config: ${event.path}`);
|
|
310
315
|
try {
|
|
311
316
|
// Handle file deletion
|
|
312
317
|
if (event.type === "delete") {
|
|
313
|
-
|
|
318
|
+
logger?.debug(`Live Config: ${source} config file deleted: ${event.path}`);
|
|
314
319
|
// Reload configuration without the deleted file
|
|
315
320
|
await this.reloadConfiguration();
|
|
316
321
|
return;
|
|
317
322
|
}
|
|
318
323
|
// Handle file creation or modification
|
|
319
324
|
if (event.type === "change" || event.type === "create") {
|
|
320
|
-
|
|
325
|
+
logger?.debug(`Live Config: ${source} config file ${event.type}: ${event.path}`);
|
|
321
326
|
if (source === "project" &&
|
|
322
327
|
event.path.endsWith("settings.local.json") &&
|
|
323
328
|
event.type === "create") {
|
|
@@ -330,7 +335,7 @@ export class LiveConfigManager {
|
|
|
330
335
|
}
|
|
331
336
|
}
|
|
332
337
|
catch (error) {
|
|
333
|
-
|
|
338
|
+
logger?.error(`Live Config: Error handling file change for ${source} config: ${error.message}`);
|
|
334
339
|
}
|
|
335
340
|
}
|
|
336
341
|
/**
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ChildProcess } from "child_process";
|
|
2
|
-
import {
|
|
2
|
+
import { LspServerConfig, ILspManager } from "../types/index.js";
|
|
3
|
+
import { Container } from "../utils/container.js";
|
|
3
4
|
interface LspProcess {
|
|
4
5
|
process: ChildProcess;
|
|
5
6
|
config: LspServerConfig;
|
|
@@ -13,13 +14,11 @@ interface LspProcess {
|
|
|
13
14
|
openedFiles: Set<string>;
|
|
14
15
|
}
|
|
15
16
|
export declare class LspManager implements ILspManager {
|
|
17
|
+
private container;
|
|
16
18
|
private processes;
|
|
17
19
|
private workdir;
|
|
18
|
-
private logger?;
|
|
19
20
|
private config;
|
|
20
|
-
constructor(
|
|
21
|
-
logger?: Logger;
|
|
22
|
-
});
|
|
21
|
+
constructor(container: Container);
|
|
23
22
|
initialize(workdir: string): Promise<void>;
|
|
24
23
|
registerServer(language: string, config: LspServerConfig): void;
|
|
25
24
|
private loadConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lspManager.d.ts","sourceRoot":"","sources":["../../src/managers/lspManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAS,MAAM,eAAe,CAAC;AACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"lspManager.d.ts","sourceRoot":"","sources":["../../src/managers/lspManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAS,MAAM,eAAe,CAAC;AACpD,OAAO,EAEL,eAAe,EACf,WAAW,EAEZ,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,UAAU,UAAU;IAClB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,GAAG,CAClB,MAAM,EACN;QAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;QAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAC1E,CAAC;IACF,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B;AAID,qBAAa,UAAW,YAAW,WAAW;IAKhC,OAAO,CAAC,SAAS;IAJ7B,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAiB;gBAEX,SAAS,EAAE,SAAS;IAElC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;YAKjD,UAAU;IAclB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;YA0BvD,WAAW;IAgGzB,OAAO,CAAC,aAAa;YAiBP,WAAW;YA0CX,gBAAgB;IAgBxB,OAAO,CAAC,IAAI,EAAE;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAoJ5C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAuB/B"}
|