wave-agent-sdk 0.0.15 → 0.0.17-alpha.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 +11 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +71 -11
- package/dist/constants/prompts.d.ts +14 -0
- package/dist/constants/prompts.d.ts.map +1 -0
- package/dist/constants/prompts.js +61 -0
- package/dist/constants/tools.d.ts +18 -0
- package/dist/constants/tools.d.ts.map +1 -0
- package/dist/constants/tools.js +17 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/managers/aiManager.d.ts +8 -2
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +52 -16
- package/dist/managers/hookManager.d.ts +7 -2
- package/dist/managers/hookManager.d.ts.map +1 -1
- package/dist/managers/hookManager.js +10 -0
- package/dist/managers/liveConfigManager.d.ts +1 -1
- package/dist/managers/liveConfigManager.d.ts.map +1 -1
- package/dist/managers/liveConfigManager.js +43 -22
- package/dist/managers/permissionManager.d.ts +50 -1
- package/dist/managers/permissionManager.d.ts.map +1 -1
- package/dist/managers/permissionManager.js +289 -58
- package/dist/managers/planManager.d.ts +21 -0
- package/dist/managers/planManager.d.ts.map +1 -0
- package/dist/managers/planManager.js +35 -0
- package/dist/managers/pluginManager.d.ts +57 -0
- package/dist/managers/pluginManager.d.ts.map +1 -0
- package/dist/managers/pluginManager.js +124 -0
- package/dist/managers/pluginScopeManager.d.ts +35 -0
- package/dist/managers/pluginScopeManager.d.ts.map +1 -0
- package/dist/managers/pluginScopeManager.js +39 -0
- package/dist/managers/skillManager.d.ts +4 -0
- package/dist/managers/skillManager.d.ts.map +1 -1
- package/dist/managers/skillManager.js +15 -0
- package/dist/managers/slashCommandManager.d.ts +4 -0
- package/dist/managers/slashCommandManager.d.ts.map +1 -1
- package/dist/managers/slashCommandManager.js +45 -3
- package/dist/managers/subagentManager.d.ts.map +1 -1
- package/dist/managers/subagentManager.js +3 -1
- package/dist/managers/toolManager.d.ts +4 -0
- package/dist/managers/toolManager.d.ts.map +1 -1
- package/dist/managers/toolManager.js +24 -1
- package/dist/services/GitService.d.ts +16 -0
- package/dist/services/GitService.d.ts.map +1 -0
- package/dist/services/GitService.js +75 -0
- package/dist/services/MarketplaceService.d.ts +62 -0
- package/dist/services/MarketplaceService.d.ts.map +1 -0
- package/dist/services/MarketplaceService.js +320 -0
- package/dist/services/aiService.d.ts +1 -0
- package/dist/services/aiService.d.ts.map +1 -1
- package/dist/services/aiService.js +11 -11
- package/dist/services/configurationService.d.ts +11 -4
- package/dist/services/configurationService.d.ts.map +1 -1
- package/dist/services/configurationService.js +211 -67
- package/dist/services/fileWatcher.js +3 -3
- package/dist/services/hook.js +1 -1
- package/dist/services/pluginLoader.d.ts +35 -0
- package/dist/services/pluginLoader.d.ts.map +1 -0
- package/dist/services/pluginLoader.js +149 -0
- package/dist/tools/askUserQuestion.d.ts +3 -0
- package/dist/tools/askUserQuestion.d.ts.map +1 -0
- package/dist/tools/askUserQuestion.js +109 -0
- package/dist/tools/bashTool.d.ts.map +1 -1
- package/dist/tools/bashTool.js +37 -40
- package/dist/tools/deleteFileTool.d.ts.map +1 -1
- package/dist/tools/deleteFileTool.js +17 -19
- package/dist/tools/editTool.d.ts.map +1 -1
- package/dist/tools/editTool.js +29 -36
- package/dist/tools/exitPlanMode.d.ts +6 -0
- package/dist/tools/exitPlanMode.d.ts.map +1 -0
- package/dist/tools/exitPlanMode.js +76 -0
- package/dist/tools/globTool.d.ts.map +1 -1
- package/dist/tools/globTool.js +4 -3
- package/dist/tools/grepTool.d.ts.map +1 -1
- package/dist/tools/grepTool.js +5 -4
- package/dist/tools/lsTool.d.ts.map +1 -1
- package/dist/tools/lsTool.js +16 -3
- package/dist/tools/lspTool.d.ts.map +1 -1
- package/dist/tools/lspTool.js +3 -2
- package/dist/tools/multiEditTool.d.ts.map +1 -1
- package/dist/tools/multiEditTool.js +24 -31
- package/dist/tools/readTool.d.ts.map +1 -1
- package/dist/tools/readTool.js +16 -3
- package/dist/tools/skillTool.d.ts.map +1 -1
- package/dist/tools/skillTool.js +30 -27
- package/dist/tools/taskTool.d.ts.map +1 -1
- package/dist/tools/taskTool.js +36 -31
- package/dist/tools/todoWriteTool.d.ts.map +1 -1
- package/dist/tools/todoWriteTool.js +3 -2
- package/dist/tools/writeTool.d.ts.map +1 -1
- package/dist/tools/writeTool.js +13 -17
- package/dist/types/commands.d.ts +1 -0
- package/dist/types/commands.d.ts.map +1 -1
- package/dist/types/config.d.ts +2 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/configuration.d.ts +36 -1
- package/dist/types/configuration.d.ts.map +1 -1
- package/dist/types/hooks.d.ts +2 -15
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -0
- package/dist/types/marketplace.d.ts +43 -0
- package/dist/types/marketplace.d.ts.map +1 -0
- package/dist/types/marketplace.js +1 -0
- package/dist/types/permissions.d.ts +4 -2
- package/dist/types/permissions.d.ts.map +1 -1
- package/dist/types/permissions.js +8 -5
- package/dist/types/plugins.d.ts +35 -0
- package/dist/types/plugins.d.ts.map +1 -0
- package/dist/types/plugins.js +1 -0
- package/dist/types/tools.d.ts +17 -0
- package/dist/types/tools.d.ts.map +1 -1
- package/dist/utils/bashHistory.d.ts +3 -3
- package/dist/utils/bashHistory.d.ts.map +1 -1
- package/dist/utils/bashHistory.js +10 -8
- package/dist/utils/bashParser.d.ts.map +1 -1
- package/dist/utils/bashParser.js +63 -20
- package/dist/utils/configPaths.d.ts +4 -0
- package/dist/utils/configPaths.d.ts.map +1 -1
- package/dist/utils/configPaths.js +6 -0
- package/dist/utils/constants.d.ts +4 -0
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +4 -0
- package/dist/utils/convertMessagesForAPI.d.ts.map +1 -1
- package/dist/utils/convertMessagesForAPI.js +4 -2
- package/dist/utils/customCommands.d.ts +6 -0
- package/dist/utils/customCommands.d.ts.map +1 -1
- package/dist/utils/customCommands.js +1 -1
- package/dist/utils/editUtils.d.ts +17 -0
- package/dist/utils/editUtils.d.ts.map +1 -0
- package/dist/utils/editUtils.js +69 -0
- package/dist/utils/markdownParser.d.ts.map +1 -1
- package/dist/utils/markdownParser.js +25 -1
- package/dist/utils/messageOperations.d.ts.map +1 -1
- package/dist/utils/messageOperations.js +2 -1
- package/dist/utils/nameGenerator.d.ts +8 -0
- package/dist/utils/nameGenerator.d.ts.map +1 -0
- package/dist/utils/nameGenerator.js +75 -0
- package/dist/utils/openaiClient.d.ts.map +1 -1
- package/dist/utils/openaiClient.js +14 -2
- package/dist/utils/pathSafety.d.ts.map +1 -1
- package/dist/utils/pathSafety.js +17 -2
- package/package.json +6 -1
- package/src/agent.ts +95 -10
- package/src/constants/prompts.ts +93 -0
- package/src/constants/tools.ts +17 -0
- package/src/index.ts +8 -0
- package/src/managers/aiManager.ts +86 -18
- package/src/managers/hookManager.ts +23 -6
- package/src/managers/liveConfigManager.ts +56 -29
- package/src/managers/permissionManager.ts +361 -61
- package/src/managers/planManager.ts +45 -0
- package/src/managers/pluginManager.ts +182 -0
- package/src/managers/pluginScopeManager.ts +75 -0
- package/src/managers/skillManager.ts +18 -0
- package/src/managers/slashCommandManager.ts +67 -5
- package/src/managers/subagentManager.ts +3 -1
- package/src/managers/toolManager.ts +25 -3
- package/src/services/GitService.ts +97 -0
- package/src/services/MarketplaceService.ts +428 -0
- package/src/services/aiService.ts +33 -16
- package/src/services/configurationService.ts +244 -86
- package/src/services/fileWatcher.ts +3 -3
- package/src/services/hook.ts +1 -1
- package/src/services/pluginLoader.ts +181 -0
- package/src/tools/askUserQuestion.ts +128 -0
- package/src/tools/bashTool.ts +52 -49
- package/src/tools/deleteFileTool.ts +22 -28
- package/src/tools/editTool.ts +42 -48
- package/src/tools/exitPlanMode.ts +93 -0
- package/src/tools/globTool.ts +4 -4
- package/src/tools/grepTool.ts +9 -5
- package/src/tools/lsTool.ts +27 -4
- package/src/tools/lspTool.ts +3 -2
- package/src/tools/multiEditTool.ts +40 -42
- package/src/tools/readTool.ts +23 -4
- package/src/tools/skillTool.ts +35 -30
- package/src/tools/taskTool.ts +39 -33
- package/src/tools/todoWriteTool.ts +3 -2
- package/src/tools/writeTool.ts +19 -27
- package/src/types/commands.ts +1 -0
- package/src/types/config.ts +2 -0
- package/src/types/configuration.ts +42 -1
- package/src/types/hooks.ts +8 -25
- package/src/types/index.ts +3 -0
- package/src/types/marketplace.ts +52 -0
- package/src/types/permissions.ts +29 -6
- package/src/types/plugins.ts +37 -0
- package/src/types/tools.ts +20 -0
- package/src/utils/bashHistory.ts +9 -16
- package/src/utils/bashParser.ts +97 -46
- package/src/utils/configPaths.ts +7 -0
- package/src/utils/constants.ts +5 -0
- package/src/utils/convertMessagesForAPI.ts +4 -2
- package/src/utils/customCommands.ts +1 -1
- package/src/utils/editUtils.ts +82 -0
- package/src/utils/markdownParser.ts +28 -1
- package/src/utils/messageOperations.ts +2 -1
- package/src/utils/nameGenerator.ts +78 -0
- package/src/utils/openaiClient.ts +14 -2
- package/src/utils/pathSafety.ts +16 -2
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { PluginLoader } from "../services/pluginLoader.js";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import { MarketplaceService } from "../services/MarketplaceService.js";
|
|
4
|
+
export class PluginManager {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this.plugins = new Map();
|
|
7
|
+
this.workdir = options.workdir;
|
|
8
|
+
this.logger = options.logger;
|
|
9
|
+
this.skillManager = options.skillManager;
|
|
10
|
+
this.hookManager = options.hookManager;
|
|
11
|
+
this.lspManager = options.lspManager;
|
|
12
|
+
this.mcpManager = options.mcpManager;
|
|
13
|
+
this.slashCommandManager = options.slashCommandManager;
|
|
14
|
+
this.enabledPlugins = options.enabledPlugins || {};
|
|
15
|
+
this.configurationService = options.configurationService;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Update enabled plugins configuration
|
|
19
|
+
*/
|
|
20
|
+
updateEnabledPlugins(enabledPlugins) {
|
|
21
|
+
this.enabledPlugins = enabledPlugins;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Load plugins installed via marketplace
|
|
25
|
+
*/
|
|
26
|
+
async loadInstalledPlugins() {
|
|
27
|
+
try {
|
|
28
|
+
// If configurationService is provided, use it to get the latest merged enabled plugins
|
|
29
|
+
if (this.configurationService) {
|
|
30
|
+
this.enabledPlugins = this.configurationService.getMergedEnabledPlugins(this.workdir);
|
|
31
|
+
}
|
|
32
|
+
const marketplaceService = new MarketplaceService();
|
|
33
|
+
const installedRegistry = await marketplaceService.getInstalledPlugins();
|
|
34
|
+
for (const p of installedRegistry.plugins) {
|
|
35
|
+
const pluginId = `${p.name}@${p.marketplace}`;
|
|
36
|
+
if (this.enabledPlugins[pluginId] !== true) {
|
|
37
|
+
this.logger?.info(`Plugin ${pluginId} is not enabled via configuration`);
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
await this.loadSinglePlugin(p.cachePath);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
this.logger?.error("Failed to load installed plugins:", error);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Load a single plugin from an absolute path
|
|
49
|
+
*/
|
|
50
|
+
async loadSinglePlugin(absolutePath) {
|
|
51
|
+
try {
|
|
52
|
+
const manifest = await PluginLoader.loadManifest(absolutePath);
|
|
53
|
+
if (this.plugins.has(manifest.name)) {
|
|
54
|
+
// If already loaded (e.g. via explicit config), skip
|
|
55
|
+
this.logger?.warn(`Plugin with name '${manifest.name}' is already loaded`);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const plugin = {
|
|
59
|
+
...manifest,
|
|
60
|
+
path: absolutePath,
|
|
61
|
+
commands: PluginLoader.loadCommands(absolutePath),
|
|
62
|
+
skills: await PluginLoader.loadSkills(absolutePath),
|
|
63
|
+
lspConfig: await PluginLoader.loadLspConfig(absolutePath),
|
|
64
|
+
mcpConfig: await PluginLoader.loadMcpConfig(absolutePath),
|
|
65
|
+
hooksConfig: await PluginLoader.loadHooksConfig(absolutePath),
|
|
66
|
+
};
|
|
67
|
+
// Register components with managers
|
|
68
|
+
if (this.slashCommandManager && plugin.commands.length > 0) {
|
|
69
|
+
this.slashCommandManager.registerPluginCommands(plugin.name, plugin.commands);
|
|
70
|
+
}
|
|
71
|
+
if (this.skillManager && plugin.skills.length > 0) {
|
|
72
|
+
this.skillManager.registerPluginSkills(plugin.skills);
|
|
73
|
+
}
|
|
74
|
+
if (this.lspManager && plugin.lspConfig) {
|
|
75
|
+
for (const [language, config] of Object.entries(plugin.lspConfig)) {
|
|
76
|
+
this.lspManager.registerServer(language, config);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (this.mcpManager && plugin.mcpConfig) {
|
|
80
|
+
for (const [name, config] of Object.entries(plugin.mcpConfig.mcpServers)) {
|
|
81
|
+
this.mcpManager.addServer(name, config);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (this.hookManager && plugin.hooksConfig) {
|
|
85
|
+
this.hookManager.registerPluginHooks(plugin.hooksConfig);
|
|
86
|
+
}
|
|
87
|
+
this.plugins.set(manifest.name, plugin);
|
|
88
|
+
this.logger?.info(`Loaded plugin: ${manifest.name} v${manifest.version}`);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
this.logger?.error(`Failed to load plugin from ${absolutePath}`, error);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Load plugins from configuration
|
|
96
|
+
* @param configs Array of plugin configurations
|
|
97
|
+
*/
|
|
98
|
+
async loadPlugins(configs) {
|
|
99
|
+
// Load installed plugins from marketplace first
|
|
100
|
+
await this.loadInstalledPlugins();
|
|
101
|
+
for (const config of configs) {
|
|
102
|
+
if (config.type !== "local") {
|
|
103
|
+
this.logger?.warn(`Unsupported plugin type: ${config.type}`);
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const absolutePath = path.isAbsolute(config.path)
|
|
107
|
+
? config.path
|
|
108
|
+
: path.resolve(this.workdir, config.path);
|
|
109
|
+
await this.loadSinglePlugin(absolutePath);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Get all loaded plugins
|
|
114
|
+
*/
|
|
115
|
+
getPlugins() {
|
|
116
|
+
return Array.from(this.plugins.values());
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get a plugin by name
|
|
120
|
+
*/
|
|
121
|
+
getPlugin(name) {
|
|
122
|
+
return this.plugins.get(name);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ConfigurationService } from "../services/configurationService.js";
|
|
2
|
+
import { PluginManager } from "./pluginManager.js";
|
|
3
|
+
import { Logger } from "../types/index.js";
|
|
4
|
+
export interface PluginScopeManagerOptions {
|
|
5
|
+
workdir: string;
|
|
6
|
+
configurationService: ConfigurationService;
|
|
7
|
+
pluginManager: PluginManager;
|
|
8
|
+
logger?: Logger;
|
|
9
|
+
}
|
|
10
|
+
export declare class PluginScopeManager {
|
|
11
|
+
private workdir;
|
|
12
|
+
private configurationService;
|
|
13
|
+
private pluginManager;
|
|
14
|
+
private logger?;
|
|
15
|
+
constructor(options: PluginScopeManagerOptions);
|
|
16
|
+
/**
|
|
17
|
+
* Enable a plugin in the specified scope
|
|
18
|
+
*/
|
|
19
|
+
enablePlugin(scope: "user" | "project" | "local", pluginId: string): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Disable a plugin in the specified scope
|
|
22
|
+
*/
|
|
23
|
+
disablePlugin(scope: "user" | "project" | "local", pluginId: string): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Get the merged enabled state of all plugins
|
|
26
|
+
*/
|
|
27
|
+
getMergedEnabledPlugins(): Record<string, boolean>;
|
|
28
|
+
/**
|
|
29
|
+
* Refresh the plugin manager with the latest configuration
|
|
30
|
+
* Note: This only updates the configuration, it doesn't reload plugins.
|
|
31
|
+
* Reloading plugins might require a more complex logic (unloading/loading).
|
|
32
|
+
*/
|
|
33
|
+
private refreshPluginManager;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=pluginScopeManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginScopeManager.d.ts","sourceRoot":"","sources":["../../src/managers/pluginScopeManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,EAAE,yBAAyB;IAO9C;;OAEG;IACG,YAAY,CAChB,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,EACnC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAWhB;;OAEG;IACG,aAAa,CACjB,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,EACnC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAWhB;;OAEG;IACH,uBAAuB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIlD;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;CAI7B"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export class PluginScopeManager {
|
|
2
|
+
constructor(options) {
|
|
3
|
+
this.workdir = options.workdir;
|
|
4
|
+
this.configurationService = options.configurationService;
|
|
5
|
+
this.pluginManager = options.pluginManager;
|
|
6
|
+
this.logger = options.logger;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Enable a plugin in the specified scope
|
|
10
|
+
*/
|
|
11
|
+
async enablePlugin(scope, pluginId) {
|
|
12
|
+
await this.configurationService.updateEnabledPlugin(this.workdir, scope, pluginId, true);
|
|
13
|
+
this.logger?.info(`Enabled plugin ${pluginId} in ${scope} scope`);
|
|
14
|
+
this.refreshPluginManager();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Disable a plugin in the specified scope
|
|
18
|
+
*/
|
|
19
|
+
async disablePlugin(scope, pluginId) {
|
|
20
|
+
await this.configurationService.updateEnabledPlugin(this.workdir, scope, pluginId, false);
|
|
21
|
+
this.logger?.info(`Disabled plugin ${pluginId} in ${scope} scope`);
|
|
22
|
+
this.refreshPluginManager();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get the merged enabled state of all plugins
|
|
26
|
+
*/
|
|
27
|
+
getMergedEnabledPlugins() {
|
|
28
|
+
return this.configurationService.getMergedEnabledPlugins(this.workdir);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Refresh the plugin manager with the latest configuration
|
|
32
|
+
* Note: This only updates the configuration, it doesn't reload plugins.
|
|
33
|
+
* Reloading plugins might require a more complex logic (unloading/loading).
|
|
34
|
+
*/
|
|
35
|
+
refreshPluginManager() {
|
|
36
|
+
const enabledPlugins = this.getMergedEnabledPlugins();
|
|
37
|
+
this.pluginManager.updateEnabledPlugins(enabledPlugins);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -55,5 +55,9 @@ export declare class SkillManager {
|
|
|
55
55
|
* Format available skills list for error messages
|
|
56
56
|
*/
|
|
57
57
|
private formatAvailableSkills;
|
|
58
|
+
/**
|
|
59
|
+
* Register skills provided by a plugin
|
|
60
|
+
*/
|
|
61
|
+
registerPluginSkills(skills: Skill[]): void;
|
|
58
62
|
}
|
|
59
63
|
//# sourceMappingURL=skillManager.d.ts.map
|
|
@@ -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,EAEvB,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,GAAE,mBAAwB;IAQ7C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCjC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,kBAAkB,IAAI,aAAa,EAAE;IAQrC;;;OAGG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAgBzD;;OAEG;YACW,cAAc;IAkB5B;;OAEG;YACW,uBAAuB;IAiFrC;;OAEG;YACW,oBAAoB;IAkBlC;;OAEG;IACG,YAAY,CAChB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,sBAAsB,CAAA;KAAE,CAAC;IAqCjE;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;
|
|
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,EAEvB,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,GAAE,mBAAwB;IAQ7C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCjC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,kBAAkB,IAAI,aAAa,EAAE;IAQrC;;;OAGG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAgBzD;;OAEG;YACW,cAAc;IAkB5B;;OAEG;YACW,uBAAuB;IAiFrC;;OAEG;YACW,oBAAoB;IAkBlC;;OAEG;IACG,YAAY,CAChB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,sBAAsB,CAAA;KAAE,CAAC;IAqCjE;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;CAc5C"}
|
|
@@ -239,4 +239,19 @@ export class SkillManager {
|
|
|
239
239
|
.map((skill) => `• **${skill.name}** (${skill.type}): ${skill.description}`)
|
|
240
240
|
.join("\n");
|
|
241
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Register skills provided by a plugin
|
|
244
|
+
*/
|
|
245
|
+
registerPluginSkills(skills) {
|
|
246
|
+
for (const skill of skills) {
|
|
247
|
+
this.skillMetadata.set(skill.name, {
|
|
248
|
+
name: skill.name,
|
|
249
|
+
description: skill.description,
|
|
250
|
+
type: skill.type,
|
|
251
|
+
skillPath: skill.skillPath,
|
|
252
|
+
});
|
|
253
|
+
this.skillContent.set(skill.name, skill);
|
|
254
|
+
}
|
|
255
|
+
this.logger?.debug(`Registered ${skills.length} plugin skills. Total skills: ${this.skillMetadata.size}`);
|
|
256
|
+
}
|
|
242
257
|
}
|
|
@@ -20,6 +20,10 @@ export declare class SlashCommandManager {
|
|
|
20
20
|
* Load custom commands from filesystem
|
|
21
21
|
*/
|
|
22
22
|
private loadCustomCommands;
|
|
23
|
+
/**
|
|
24
|
+
* Register commands from a plugin with namespacing
|
|
25
|
+
*/
|
|
26
|
+
registerPluginCommands(pluginName: string, commands: CustomSlashCommand[]): void;
|
|
23
27
|
/**
|
|
24
28
|
* Reload custom commands (useful for development)
|
|
25
29
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slashCommandManager.d.ts","sourceRoot":"","sources":["../../src/managers/slashCommandManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,MAAM,EACP,MAAM,mBAAmB,CAAC;AAkB3B,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,EAAE,0BAA0B;IAU/C,OAAO,CAAC,yBAAyB;IAejC;;OAEG;IACH,OAAO,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"slashCommandManager.d.ts","sourceRoot":"","sources":["../../src/managers/slashCommandManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,MAAM,EACP,MAAM,mBAAmB,CAAC;AAkB3B,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,EAAE,0BAA0B;IAU/C,OAAO,CAAC,yBAAyB;IAejC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgD1B;;OAEG;IACI,sBAAsB,CAC3B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,IAAI;IA+CP;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAWnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACI,WAAW,IAAI,YAAY,EAAE;IAIpC;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI9D;;OAEG;IACU,cAAc,CACzB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC;IAenB;;;OAGG;IACI,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG;QAClD,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf;IAeD;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI7C;;OAEG;IACI,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI1E;;OAEG;IACI,iBAAiB,IAAI,kBAAkB,EAAE;IAIhD;;OAEG;YACW,+BAA+B;IA0E7C;;OAEG;IACI,mBAAmB,IAAI,IAAI;CAInC"}
|
|
@@ -47,9 +47,16 @@ export class SlashCommandManager {
|
|
|
47
47
|
description,
|
|
48
48
|
handler: async (args) => {
|
|
49
49
|
// Substitute parameters in the command content
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
let processedContent = command.content;
|
|
51
|
+
if (args) {
|
|
52
|
+
if (hasParameterPlaceholders(command.content)) {
|
|
53
|
+
processedContent = substituteCommandParameters(command.content, args);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// If no placeholders, append arguments to the content
|
|
57
|
+
processedContent = `${command.content.trim()} ${args}`;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
53
60
|
await this.executeCustomCommandInMainAgent(command.name, processedContent, command.config, args);
|
|
54
61
|
},
|
|
55
62
|
});
|
|
@@ -60,6 +67,40 @@ export class SlashCommandManager {
|
|
|
60
67
|
this.logger?.warn("Failed to load custom commands:", error);
|
|
61
68
|
}
|
|
62
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Register commands from a plugin with namespacing
|
|
72
|
+
*/
|
|
73
|
+
registerPluginCommands(pluginName, commands) {
|
|
74
|
+
for (const command of commands) {
|
|
75
|
+
const namespacedId = `${pluginName}:${command.id}`;
|
|
76
|
+
const namespacedName = `${pluginName}:${command.name}`;
|
|
77
|
+
this.customCommands.set(namespacedId, command);
|
|
78
|
+
// Generate description: prioritize custom description, otherwise use default description
|
|
79
|
+
const description = command.description ||
|
|
80
|
+
`Plugin command: ${namespacedName}${hasParameterPlaceholders(command.content) ? " (supports parameters)" : ""}`;
|
|
81
|
+
// Register as a regular command with a handler that executes the custom command
|
|
82
|
+
this.registerCommand({
|
|
83
|
+
id: namespacedId,
|
|
84
|
+
name: namespacedName,
|
|
85
|
+
description,
|
|
86
|
+
handler: async (args) => {
|
|
87
|
+
// Substitute parameters in the command content
|
|
88
|
+
let processedContent = command.content;
|
|
89
|
+
if (args) {
|
|
90
|
+
if (hasParameterPlaceholders(command.content)) {
|
|
91
|
+
processedContent = substituteCommandParameters(command.content, args);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// If no placeholders, append arguments to the content
|
|
95
|
+
processedContent = `${command.content.trim()} ${args}`;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
await this.executeCustomCommandInMainAgent(namespacedName, processedContent, command.config, args);
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
this.logger?.debug(`Registered ${commands.length} commands from plugin '${pluginName}'`);
|
|
103
|
+
}
|
|
63
104
|
/**
|
|
64
105
|
* Reload custom commands (useful for development)
|
|
65
106
|
*/
|
|
@@ -195,6 +236,7 @@ export class SlashCommandManager {
|
|
|
195
236
|
// Execute the AI conversation with custom configuration
|
|
196
237
|
await this.aiManager.sendAIMessage({
|
|
197
238
|
model: config?.model,
|
|
239
|
+
allowedRules: config?.allowedTools,
|
|
198
240
|
});
|
|
199
241
|
}
|
|
200
242
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagentManager.d.ts","sourceRoot":"","sources":["../../src/managers/subagentManager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"subagentManager.d.ts","sourceRoot":"","sources":["../../src/managers/subagentManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -77,6 +77,7 @@ export class SubagentManager {
|
|
|
77
77
|
systemPrompt: configuration.systemPrompt,
|
|
78
78
|
subagentType: parameters.subagent_type, // Pass subagent type for hook context
|
|
79
79
|
hookManager: this.hookManager,
|
|
80
|
+
permissionManager: this.parentToolManager.getPermissionManager(),
|
|
80
81
|
getGatewayConfig: this.getGatewayConfig,
|
|
81
82
|
getModelConfig: () => {
|
|
82
83
|
// Determine model dynamically each time
|
|
@@ -184,7 +185,7 @@ export class SubagentManager {
|
|
|
184
185
|
}
|
|
185
186
|
// For "inherit" or undefined, resolvedModel remains undefined (uses AIManager default)
|
|
186
187
|
const executeAI = instance.aiManager.sendAIMessage({
|
|
187
|
-
allowedTools,
|
|
188
|
+
tools: allowedTools,
|
|
188
189
|
model: resolvedModel,
|
|
189
190
|
});
|
|
190
191
|
try {
|
|
@@ -320,6 +321,7 @@ export class SubagentManager {
|
|
|
320
321
|
systemPrompt: configuration.systemPrompt,
|
|
321
322
|
subagentType: configuration.name, // Use configuration name as subagent type for restored instances
|
|
322
323
|
hookManager: this.hookManager,
|
|
324
|
+
permissionManager: this.parentToolManager.getPermissionManager(),
|
|
323
325
|
getGatewayConfig: this.getGatewayConfig,
|
|
324
326
|
getModelConfig: () => ({
|
|
325
327
|
...parentModelConfig,
|
|
@@ -87,6 +87,10 @@ declare class ToolManager {
|
|
|
87
87
|
* @param mode - The new permission mode
|
|
88
88
|
*/
|
|
89
89
|
setPermissionMode(mode: PermissionMode): void;
|
|
90
|
+
/**
|
|
91
|
+
* Get the permission manager
|
|
92
|
+
*/
|
|
93
|
+
getPermissionManager(): PermissionManager | undefined;
|
|
90
94
|
}
|
|
91
95
|
export { ToolManager };
|
|
92
96
|
//# sourceMappingURL=toolManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolManager.d.ts","sourceRoot":"","sources":["../../src/managers/toolManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"toolManager.d.ts","sourceRoot":"","sources":["../../src/managers/toolManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAiB7E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EACV,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,iEAAiE;IACjE,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gDAAgD;IAChD,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAED;;;;;GAKG;AACH,cAAM,WAAW;IACf,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAc;IACjC,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,kBAAkB,CAAC,CAAqB;gBAEpC,OAAO,EAAE,kBAAkB;IAUvC;;OAEG;IACI,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIvC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACI,sBAAsB,CAAC,IAAI,CAAC,EAAE;QACnC,eAAe,CAAC,EAAE,eAAe,CAAC;QAClC,YAAY,CAAC,EAAE,YAAY,CAAC;KAC7B,GAAG,IAAI;IAmCR;;;;;;;;;;;;OAYG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC;IA2DtB,IAAI,IAAI,UAAU,EAAE;IAMpB,cAAc,IAAI,0BAA0B,EAAE;IAmB9C;;OAEG;IACI,iBAAiB,IAAI,cAAc;IAS1C;;;OAGG;IACI,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIpD;;OAEG;IACI,oBAAoB,IAAI,iBAAiB,GAAG,SAAS;CAG7D;AAGD,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -3,6 +3,8 @@ import { deleteFileTool } from "../tools/deleteFileTool.js";
|
|
|
3
3
|
import { editTool } from "../tools/editTool.js";
|
|
4
4
|
import { multiEditTool } from "../tools/multiEditTool.js";
|
|
5
5
|
import { writeTool } from "../tools/writeTool.js";
|
|
6
|
+
import { exitPlanModeTool } from "../tools/exitPlanMode.js";
|
|
7
|
+
import { askUserQuestionTool } from "../tools/askUserQuestion.js";
|
|
6
8
|
// New tools
|
|
7
9
|
import { globTool } from "../tools/globTool.js";
|
|
8
10
|
import { grepTool } from "../tools/grepTool.js";
|
|
@@ -67,6 +69,8 @@ class ToolManager {
|
|
|
67
69
|
editTool,
|
|
68
70
|
multiEditTool,
|
|
69
71
|
writeTool,
|
|
72
|
+
exitPlanModeTool,
|
|
73
|
+
askUserQuestionTool,
|
|
70
74
|
globTool,
|
|
71
75
|
grepTool,
|
|
72
76
|
lsTool,
|
|
@@ -156,7 +160,20 @@ class ToolManager {
|
|
|
156
160
|
return [...builtInTools, ...mcpTools];
|
|
157
161
|
}
|
|
158
162
|
getToolsConfig() {
|
|
159
|
-
const
|
|
163
|
+
const effectivePermissionMode = this.getPermissionMode();
|
|
164
|
+
const builtInToolsConfig = Array.from(this.tools.values())
|
|
165
|
+
.filter((tool) => {
|
|
166
|
+
if (effectivePermissionMode === "bypassPermissions") {
|
|
167
|
+
if (tool.name === "ExitPlanMode" || tool.name === "AskUserQuestion") {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (tool.name === "ExitPlanMode") {
|
|
172
|
+
return effectivePermissionMode === "plan";
|
|
173
|
+
}
|
|
174
|
+
return true;
|
|
175
|
+
})
|
|
176
|
+
.map((tool) => tool.config);
|
|
160
177
|
const mcpToolsConfig = this.mcpManager.getMcpToolsConfig();
|
|
161
178
|
return [...builtInToolsConfig, ...mcpToolsConfig];
|
|
162
179
|
}
|
|
@@ -176,6 +193,12 @@ class ToolManager {
|
|
|
176
193
|
setPermissionMode(mode) {
|
|
177
194
|
this.permissionMode = mode;
|
|
178
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* Get the permission manager
|
|
198
|
+
*/
|
|
199
|
+
getPermissionManager() {
|
|
200
|
+
return this.permissionManager;
|
|
201
|
+
}
|
|
179
202
|
}
|
|
180
203
|
// Export tool registry class and types
|
|
181
204
|
export { ToolManager };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare class GitService {
|
|
2
|
+
/**
|
|
3
|
+
* Checks if git is installed and available in the system path
|
|
4
|
+
*/
|
|
5
|
+
isGitAvailable(): Promise<boolean>;
|
|
6
|
+
/**
|
|
7
|
+
* Clones a Git repository to a local path
|
|
8
|
+
*/
|
|
9
|
+
clone(urlOrRepo: string, targetPath: string, ref?: string): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Pulls the latest changes in a local repository
|
|
12
|
+
*/
|
|
13
|
+
pull(targetPath: string): Promise<void>;
|
|
14
|
+
private handleGitError;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=GitService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GitService.d.ts","sourceRoot":"","sources":["../../src/services/GitService.ts"],"names":[],"mappings":"AAKA,qBAAa,UAAU;IACrB;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IASxC;;OAEG;IACG,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC;IA0BhB;;OAEG;IACG,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa7C,OAAO,CAAC,cAAc;CA6BvB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { exec } from "child_process";
|
|
2
|
+
import { promisify } from "util";
|
|
3
|
+
const execAsync = promisify(exec);
|
|
4
|
+
export class GitService {
|
|
5
|
+
/**
|
|
6
|
+
* Checks if git is installed and available in the system path
|
|
7
|
+
*/
|
|
8
|
+
async isGitAvailable() {
|
|
9
|
+
try {
|
|
10
|
+
await execAsync("git --version");
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Clones a Git repository to a local path
|
|
19
|
+
*/
|
|
20
|
+
async clone(urlOrRepo, targetPath, ref) {
|
|
21
|
+
if (!(await this.isGitAvailable())) {
|
|
22
|
+
throw new Error("Git is not installed or not found in PATH. Please install Git to use Git/GitHub marketplaces.");
|
|
23
|
+
}
|
|
24
|
+
let url = urlOrRepo;
|
|
25
|
+
if (!urlOrRepo.startsWith("http://") &&
|
|
26
|
+
!urlOrRepo.startsWith("https://") &&
|
|
27
|
+
!urlOrRepo.startsWith("git@") &&
|
|
28
|
+
!urlOrRepo.startsWith("ssh://")) {
|
|
29
|
+
// Assume GitHub repo format: owner/repo
|
|
30
|
+
url = `https://github.com/${urlOrRepo}.git`;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const refArgs = ref ? `-b "${ref}"` : "--depth 1";
|
|
34
|
+
await execAsync(`LC_ALL=C git clone ${refArgs} "${url}" "${targetPath}"`);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
throw this.handleGitError(urlOrRepo, error);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Pulls the latest changes in a local repository
|
|
42
|
+
*/
|
|
43
|
+
async pull(targetPath) {
|
|
44
|
+
if (!(await this.isGitAvailable())) {
|
|
45
|
+
throw new Error("Git is not installed or not found in PATH. Please install Git to use Git/GitHub marketplaces.");
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
await execAsync(`LC_ALL=C git -C "${targetPath}" pull`);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
throw this.handleGitError(targetPath, error);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
handleGitError(context, error) {
|
|
55
|
+
const stderr = error?.stderr || "";
|
|
56
|
+
const message = error?.message || String(error);
|
|
57
|
+
if (stderr.includes("Repository not found") ||
|
|
58
|
+
stderr.includes("not found")) {
|
|
59
|
+
return new Error(`Repository "${context}" not found. It might be private or doesn't exist.`);
|
|
60
|
+
}
|
|
61
|
+
if (stderr.includes("Could not read from remote repository")) {
|
|
62
|
+
return new Error(`Could not access repository "${context}". Please check your internet connection and permissions.`);
|
|
63
|
+
}
|
|
64
|
+
if (stderr.includes("Authentication failed")) {
|
|
65
|
+
return new Error(`Authentication failed for repository "${context}".`);
|
|
66
|
+
}
|
|
67
|
+
if (stderr.includes("rate limit")) {
|
|
68
|
+
return new Error(`GitHub rate limit exceeded. Please try again later.`);
|
|
69
|
+
}
|
|
70
|
+
if (stderr.includes("not a git repository")) {
|
|
71
|
+
return new Error(`The path "${context}" is not a valid git repository.`);
|
|
72
|
+
}
|
|
73
|
+
return new Error(`Git operation failed for "${context}": ${message}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { KnownMarketplace, KnownMarketplacesRegistry, InstalledPlugin, InstalledPluginsRegistry, MarketplaceManifest } from "../types/marketplace.js";
|
|
2
|
+
/**
|
|
3
|
+
* Marketplace Service
|
|
4
|
+
*
|
|
5
|
+
* Handles local plugin marketplace registration, plugin installation,
|
|
6
|
+
* and state management for installed plugins.
|
|
7
|
+
*/
|
|
8
|
+
export declare class MarketplaceService {
|
|
9
|
+
private pluginsDir;
|
|
10
|
+
private knownMarketplacesPath;
|
|
11
|
+
private installedPluginsPath;
|
|
12
|
+
private tmpDir;
|
|
13
|
+
private cacheDir;
|
|
14
|
+
private marketplacesDir;
|
|
15
|
+
private gitService;
|
|
16
|
+
constructor();
|
|
17
|
+
/**
|
|
18
|
+
* Ensures the required directory structure exists in ~/.wave/plugins
|
|
19
|
+
*/
|
|
20
|
+
private ensureDirectoryStructure;
|
|
21
|
+
/**
|
|
22
|
+
* Loads the known marketplaces registry
|
|
23
|
+
*/
|
|
24
|
+
getKnownMarketplaces(): Promise<KnownMarketplacesRegistry>;
|
|
25
|
+
/**
|
|
26
|
+
* Loads the installed plugins registry
|
|
27
|
+
*/
|
|
28
|
+
getInstalledPlugins(): Promise<InstalledPluginsRegistry>;
|
|
29
|
+
/**
|
|
30
|
+
* Saves the known marketplaces registry
|
|
31
|
+
*/
|
|
32
|
+
saveKnownMarketplaces(registry: KnownMarketplacesRegistry): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Saves the installed plugins registry
|
|
35
|
+
*/
|
|
36
|
+
saveInstalledPlugins(registry: InstalledPluginsRegistry): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Loads a marketplace manifest from a local path
|
|
39
|
+
*/
|
|
40
|
+
loadMarketplaceManifest(marketplacePath: string): Promise<MarketplaceManifest>;
|
|
41
|
+
/**
|
|
42
|
+
* Resolves the local path for a marketplace
|
|
43
|
+
*/
|
|
44
|
+
getMarketplacePath(marketplace: KnownMarketplace): string;
|
|
45
|
+
/**
|
|
46
|
+
* Adds a new marketplace (local directory, GitHub repo, or Git URL)
|
|
47
|
+
*/
|
|
48
|
+
addMarketplace(input: string): Promise<KnownMarketplace>;
|
|
49
|
+
/**
|
|
50
|
+
* Lists all registered marketplaces
|
|
51
|
+
*/
|
|
52
|
+
listMarketplaces(): Promise<KnownMarketplace[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Updates a specific marketplace or all marketplaces
|
|
55
|
+
*/
|
|
56
|
+
updateMarketplace(name?: string): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Installs a plugin from a marketplace
|
|
59
|
+
*/
|
|
60
|
+
installPlugin(pluginAtMarketplace: string): Promise<InstalledPlugin>;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=MarketplaceService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarketplaceService.d.ts","sourceRoot":"","sources":["../../src/services/MarketplaceService.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,eAAe,EACf,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAGjC;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,UAAU,CAAa;;IAoB/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,yBAAyB,CAAC;IAahE;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAa9D;;OAEG;IACG,qBAAqB,CACzB,QAAQ,EAAE,yBAAyB,GAClC,OAAO,CAAC,IAAI,CAAC;IAOhB;;OAEG;IACG,oBAAoB,CACxB,QAAQ,EAAE,wBAAwB,GACjC,OAAO,CAAC,IAAI,CAAC;IAOhB;;OAEG;IACG,uBAAuB,CAC3B,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,mBAAmB,CAAC;IAwB/B;;OAEG;IACI,kBAAkB,CAAC,WAAW,EAAE,gBAAgB,GAAG,MAAM;IAehE;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsF9D;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAKrD;;OAEG;IACG,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6CrD;;OAEG;IACG,aAAa,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;CAqH3E"}
|