@within-7/minto 0.3.10 → 0.4.1
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/Tool.js.map +2 -2
- package/dist/commands/agents/AgentsCommand.js +2 -2
- package/dist/commands/agents/AgentsCommand.js.map +2 -2
- package/dist/commands/ctx_viz.js +1 -1
- package/dist/commands/effort.js +87 -0
- package/dist/commands/effort.js.map +7 -0
- package/dist/commands/export.js +19 -9
- package/dist/commands/export.js.map +2 -2
- package/dist/commands/ide.js +18 -0
- package/dist/commands/ide.js.map +7 -0
- package/dist/commands/mcp-interactive.js +14 -8
- package/dist/commands/mcp-interactive.js.map +2 -2
- package/dist/commands/memory.js +168 -0
- package/dist/commands/memory.js.map +7 -0
- package/dist/commands/model.js +45 -2
- package/dist/commands/model.js.map +2 -2
- package/dist/commands/outputStyle.js +64 -0
- package/dist/commands/outputStyle.js.map +7 -0
- package/dist/commands/plugin/utils.js +33 -1
- package/dist/commands/plugin/utils.js.map +2 -2
- package/dist/commands/plugin.js +10 -1
- package/dist/commands/plugin.js.map +2 -2
- package/dist/commands/refreshCommands.js +2 -0
- package/dist/commands/refreshCommands.js.map +2 -2
- package/dist/commands/review.js +51 -0
- package/dist/commands/review.js.map +7 -0
- package/dist/commands/terminalSetup.js +6 -0
- package/dist/commands/terminalSetup.js.map +2 -2
- package/dist/commands/undo.js +8 -0
- package/dist/commands/undo.js.map +2 -2
- package/dist/commands/vim.js +22 -0
- package/dist/commands/vim.js.map +7 -0
- package/dist/commands.js +12 -0
- package/dist/commands.js.map +2 -2
- package/dist/components/HighlightedCode.js +1 -0
- package/dist/components/HighlightedCode.js.map +2 -2
- package/dist/components/ModelSelector/ModelSelector.js +250 -143
- package/dist/components/ModelSelector/ModelSelector.js.map +2 -2
- package/dist/components/PromptInput.js +21 -6
- package/dist/components/PromptInput.js.map +2 -2
- package/dist/components/PulseLabel.js +44 -0
- package/dist/components/PulseLabel.js.map +7 -0
- package/dist/components/RequestStatusIndicator.js +1 -1
- package/dist/components/RequestStatusIndicator.js.map +1 -1
- package/dist/components/Spinner.js +12 -42
- package/dist/components/Spinner.js.map +3 -3
- package/dist/components/StartupStatus.js +57 -0
- package/dist/components/StartupStatus.js.map +7 -0
- package/dist/components/SubagentBlock.js +43 -6
- package/dist/components/SubagentBlock.js.map +2 -2
- package/dist/components/TabbedListView/TabBar.js +13 -8
- package/dist/components/TabbedListView/TabBar.js.map +2 -2
- package/dist/components/TabbedListView/TabbedListView.js +1 -1
- package/dist/components/TabbedListView/TabbedListView.js.map +2 -2
- package/dist/components/TodoPanel.js +1 -1
- package/dist/components/TodoPanel.js.map +1 -1
- package/dist/components/ToolUseLoader.js +5 -0
- package/dist/components/ToolUseLoader.js.map +2 -2
- package/dist/components/TrustDialog.js +0 -2
- package/dist/components/TrustDialog.js.map +2 -2
- package/dist/components/messages/TaskInModuleView.js +1 -1
- package/dist/components/messages/TaskInModuleView.js.map +2 -2
- package/dist/components/messages/TaskToolMessage.js +1 -1
- package/dist/components/messages/TaskToolMessage.js.map +2 -2
- package/dist/components/messages/UserPromptMessage.js +6 -1
- package/dist/components/messages/UserPromptMessage.js.map +2 -2
- package/dist/constants/modelCapabilities.js +103 -18
- package/dist/constants/modelCapabilities.js.map +2 -2
- package/dist/constants/product.js +2 -0
- package/dist/constants/product.js.map +2 -2
- package/dist/constants/prompts/agentPrompt.js +30 -0
- package/dist/constants/prompts/agentPrompt.js.map +7 -0
- package/dist/constants/prompts/codeConventions.js +27 -0
- package/dist/constants/prompts/codeConventions.js.map +7 -0
- package/dist/constants/prompts/doingTasks.js +15 -0
- package/dist/constants/prompts/doingTasks.js.map +7 -0
- package/dist/constants/prompts/envInfo.js +17 -0
- package/dist/constants/prompts/envInfo.js.map +7 -0
- package/dist/constants/prompts/executingWithCare.js +17 -0
- package/dist/constants/prompts/executingWithCare.js.map +7 -0
- package/dist/constants/prompts/identity.js +10 -0
- package/dist/constants/prompts/identity.js.map +7 -0
- package/dist/constants/prompts/index.js +78 -0
- package/dist/constants/prompts/index.js.map +7 -0
- package/dist/constants/prompts/taskManagement.js +60 -0
- package/dist/constants/prompts/taskManagement.js.map +7 -0
- package/dist/constants/prompts/toneAndStyle.js +62 -0
- package/dist/constants/prompts/toneAndStyle.js.map +7 -0
- package/dist/constants/prompts/toolUsagePolicy.js +38 -0
- package/dist/constants/prompts/toolUsagePolicy.js.map +7 -0
- package/dist/constants/prompts.js +5 -176
- package/dist/constants/prompts.js.map +2 -2
- package/dist/constants/providerRegistry.js +235 -0
- package/dist/constants/providerRegistry.js.map +7 -0
- package/dist/constants/providers.js +35 -0
- package/dist/constants/providers.js.map +7 -0
- package/dist/context/PermissionContext.js +0 -1
- package/dist/context/PermissionContext.js.map +2 -2
- package/dist/context.js +87 -31
- package/dist/context.js.map +2 -2
- package/dist/core/backupHook.js +2 -2
- package/dist/core/backupHook.js.map +2 -2
- package/dist/core/config/defaults.js +4 -1
- package/dist/core/config/defaults.js.map +2 -2
- package/dist/core/config/schema.js +7 -1
- package/dist/core/config/schema.js.map +2 -2
- package/dist/core/costTracker.js +18 -0
- package/dist/core/costTracker.js.map +2 -2
- package/dist/core/index.js +0 -1
- package/dist/core/index.js.map +2 -2
- package/dist/core/tokenStatsManager.js +22 -4
- package/dist/core/tokenStatsManager.js.map +2 -2
- package/dist/entrypoints/cli.js +65 -84
- package/dist/entrypoints/cli.js.map +2 -2
- package/dist/hooks/useAgentTokenStats.js +1 -1
- package/dist/hooks/useAgentTokenStats.js.map +2 -2
- package/dist/hooks/useAgentTranscripts.js +2 -1
- package/dist/hooks/useAgentTranscripts.js.map +2 -2
- package/dist/hooks/useBackgroundShells.js +29 -0
- package/dist/hooks/useBackgroundShells.js.map +7 -0
- package/dist/hooks/useCanUseTool.js +1 -1
- package/dist/hooks/useCanUseTool.js.map +2 -2
- package/dist/hooks/useDeferredLoading.js +64 -0
- package/dist/hooks/useDeferredLoading.js.map +7 -0
- package/dist/hooks/useHookStatus.js +1 -1
- package/dist/hooks/useHookStatus.js.map +2 -2
- package/dist/hooks/useSessionTracking.js +55 -0
- package/dist/hooks/useSessionTracking.js.map +7 -0
- package/dist/hooks/useTerminalSize.js +21 -0
- package/dist/hooks/useTerminalSize.js.map +2 -2
- package/dist/hooks/useTextInput.js +1 -0
- package/dist/hooks/useTextInput.js.map +2 -2
- package/dist/hooks/useUnifiedCompletion.js +3 -2
- package/dist/hooks/useUnifiedCompletion.js.map +2 -2
- package/dist/i18n/locales/en.js +8 -9
- package/dist/i18n/locales/en.js.map +2 -2
- package/dist/i18n/locales/zh-CN.js +8 -9
- package/dist/i18n/locales/zh-CN.js.map +2 -2
- package/dist/i18n/types.js.map +1 -1
- package/dist/messages.js +41 -17
- package/dist/messages.js.map +2 -2
- package/dist/permissions.js +94 -1
- package/dist/permissions.js.map +2 -2
- package/dist/query.js +27 -19
- package/dist/query.js.map +2 -2
- package/dist/screens/REPL.js +83 -74
- package/dist/screens/REPL.js.map +2 -2
- package/dist/services/adapters/responsesAPI.js +6 -0
- package/dist/services/adapters/responsesAPI.js.map +2 -2
- package/dist/services/agentTeams/index.js +35 -0
- package/dist/services/agentTeams/index.js.map +7 -0
- package/dist/services/agentTeams/mailbox.js +114 -0
- package/dist/services/agentTeams/mailbox.js.map +7 -0
- package/dist/services/agentTeams/teamManager.js +149 -0
- package/dist/services/agentTeams/teamManager.js.map +7 -0
- package/dist/services/agentTeams/teamTaskStore.js +114 -0
- package/dist/services/agentTeams/teamTaskStore.js.map +7 -0
- package/dist/services/agentTeams/teammateSpawner.js +80 -0
- package/dist/services/agentTeams/teammateSpawner.js.map +7 -0
- package/dist/services/checkpointManager.js +16 -3
- package/dist/services/checkpointManager.js.map +2 -2
- package/dist/services/claude.js +19 -1728
- package/dist/services/claude.js.map +3 -3
- package/dist/services/gpt5ConnectionTest.js +4 -2
- package/dist/services/gpt5ConnectionTest.js.map +2 -2
- package/dist/services/hookExecutor.js +411 -127
- package/dist/services/hookExecutor.js.map +2 -2
- package/dist/services/llm/anthropicProvider.js +807 -0
- package/dist/services/llm/anthropicProvider.js.map +7 -0
- package/dist/services/llm/dispatch.js +218 -0
- package/dist/services/llm/dispatch.js.map +7 -0
- package/dist/services/llm/index.js +44 -0
- package/dist/services/llm/index.js.map +7 -0
- package/dist/services/llm/mintoContext.js +69 -0
- package/dist/services/llm/mintoContext.js.map +7 -0
- package/dist/services/llm/openaiProvider.js +622 -0
- package/dist/services/llm/openaiProvider.js.map +7 -0
- package/dist/services/llm/types.js +157 -0
- package/dist/services/llm/types.js.map +7 -0
- package/dist/services/mcpClient.js +183 -33
- package/dist/services/mcpClient.js.map +2 -2
- package/dist/services/notifier.js +14 -0
- package/dist/services/notifier.js.map +2 -2
- package/dist/services/oauth.js +4 -2
- package/dist/services/oauth.js.map +2 -2
- package/dist/services/openai.js +66 -56
- package/dist/services/openai.js.map +3 -3
- package/dist/services/outputStyles.js +102 -21
- package/dist/services/outputStyles.js.map +2 -2
- package/dist/services/plugins/skillMarketplace.js +4 -1
- package/dist/services/plugins/skillMarketplace.js.map +2 -2
- package/dist/services/sentry.js +1 -1
- package/dist/services/sentry.js.map +2 -2
- package/dist/services/sessionMemory.js +16 -3
- package/dist/services/sessionMemory.js.map +2 -2
- package/dist/services/systemReminder.js +350 -3
- package/dist/services/systemReminder.js.map +2 -2
- package/dist/services/taskStore.js +19 -0
- package/dist/services/taskStore.js.map +2 -2
- package/dist/tools/ArchitectTool/ArchitectTool.js.map +1 -1
- package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js.map +1 -1
- package/dist/tools/BashOutputTool/BashOutputTool.js.map +1 -1
- package/dist/tools/BashTool/BashTool.js +28 -0
- package/dist/tools/BashTool/BashTool.js.map +2 -2
- package/dist/tools/FileEditTool/FileEditTool.js +1 -1
- package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
- package/dist/tools/FileReadTool/FileReadTool.js +14 -0
- package/dist/tools/FileReadTool/FileReadTool.js.map +2 -2
- package/dist/tools/FileWriteTool/FileWriteTool.js +3 -1
- package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
- package/dist/tools/GlobTool/GlobTool.js.map +1 -1
- package/dist/tools/GrepTool/GrepTool.js.map +1 -1
- package/dist/tools/KillShellTool/KillShellTool.js.map +1 -1
- package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js.map +2 -2
- package/dist/tools/LspTool/LspTool.js +11 -2
- package/dist/tools/LspTool/LspTool.js.map +2 -2
- package/dist/tools/MCPTool/MCPTool.js.map +1 -1
- package/dist/tools/MemoryReadTool/MemoryReadTool.js +2 -1
- package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +2 -2
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +2 -1
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +2 -2
- package/dist/tools/MultiEditTool/MultiEditTool.js.map +1 -1
- package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +1 -1
- package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +1 -1
- package/dist/tools/PlanModeTool/EnterPlanModeTool.js +8 -2
- package/dist/tools/PlanModeTool/EnterPlanModeTool.js.map +2 -2
- package/dist/tools/PlanModeTool/ExitPlanModeTool.js +2 -0
- package/dist/tools/PlanModeTool/ExitPlanModeTool.js.map +2 -2
- package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js.map +1 -1
- package/dist/tools/SlashCommandTool/SlashCommandTool.js +174 -18
- package/dist/tools/SlashCommandTool/SlashCommandTool.js.map +3 -3
- package/dist/tools/TaskCreateTool/TaskCreateTool.js.map +1 -1
- package/dist/tools/TaskGetTool/TaskGetTool.js.map +1 -1
- package/dist/tools/TaskListTool/TaskListTool.js.map +1 -1
- package/dist/tools/TaskOutputTool/TaskOutputTool.js.map +1 -1
- package/dist/tools/TaskStopTool/TaskStopTool.js.map +1 -1
- package/dist/tools/TaskTool/TaskTool.js +75 -5
- package/dist/tools/TaskTool/TaskTool.js.map +2 -2
- package/dist/tools/TaskTool/prompt.js +12 -6
- package/dist/tools/TaskTool/prompt.js.map +2 -2
- package/dist/tools/TaskUpdateTool/TaskUpdateTool.js.map +1 -1
- package/dist/tools/ThinkTool/ThinkTool.js.map +1 -1
- package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +1 -1
- package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +1 -1
- package/dist/tools/WebSearchTool/WebSearchTool.js.map +1 -1
- package/dist/tools/WebSearchTool/searchProviders.js +2 -1
- package/dist/tools/WebSearchTool/searchProviders.js.map +2 -2
- package/dist/tools/lsTool/lsTool.js.map +2 -2
- package/dist/tools/lsTool/prompt.js.map +1 -1
- package/dist/tools.js +14 -3
- package/dist/tools.js.map +2 -2
- package/dist/types/PermissionMode.js +21 -1
- package/dist/types/PermissionMode.js.map +2 -2
- package/dist/types/agentTeams.js +1 -0
- package/dist/types/agentTeams.js.map +7 -0
- package/dist/types/hooks.js +8 -2
- package/dist/types/hooks.js.map +2 -2
- package/dist/types/plugin.js +1 -1
- package/dist/types/plugin.js.map +2 -2
- package/dist/utils/agentLoader.js +25 -3
- package/dist/utils/agentLoader.js.map +2 -2
- package/dist/utils/animationManager.js +1 -1
- package/dist/utils/animationManager.js.map +2 -2
- package/dist/utils/ask.js +1 -1
- package/dist/utils/async.js +5 -1
- package/dist/utils/async.js.map +2 -2
- package/dist/utils/autoCompactCore.js +60 -0
- package/dist/utils/autoCompactCore.js.map +2 -2
- package/dist/utils/config.js +26 -128
- package/dist/utils/config.js.map +2 -2
- package/dist/utils/configSchema.js +227 -0
- package/dist/utils/configSchema.js.map +7 -0
- package/dist/utils/debugLogger.js.map +2 -2
- package/dist/utils/env.js +4 -3
- package/dist/utils/env.js.map +2 -2
- package/dist/utils/envConfig.js +34 -0
- package/dist/utils/envConfig.js.map +3 -3
- package/dist/utils/gpt5.js +146 -0
- package/dist/utils/gpt5.js.map +7 -0
- package/dist/utils/hookManager.js +374 -140
- package/dist/utils/hookManager.js.map +2 -2
- package/dist/utils/markdown.js +47 -0
- package/dist/utils/markdown.js.map +2 -2
- package/dist/utils/memoizeWithTTL.js +25 -0
- package/dist/utils/memoizeWithTTL.js.map +7 -0
- package/dist/utils/model.js +34 -9
- package/dist/utils/model.js.map +2 -2
- package/dist/utils/pluginInstaller.js +34 -5
- package/dist/utils/pluginInstaller.js.map +2 -2
- package/dist/utils/pluginLoader.js +201 -32
- package/dist/utils/pluginLoader.js.map +2 -2
- package/dist/utils/safeFetch.js +45 -0
- package/dist/utils/safeFetch.js.map +7 -0
- package/dist/utils/skillLoader.js +59 -6
- package/dist/utils/skillLoader.js.map +2 -2
- package/dist/utils/streamingState.js +52 -0
- package/dist/utils/streamingState.js.map +7 -0
- package/dist/utils/style.js +6 -3
- package/dist/utils/style.js.map +2 -2
- package/dist/utils/teamConfig.js +9 -3
- package/dist/utils/teamConfig.js.map +2 -2
- package/dist/utils/toolRiskClassification.js +0 -6
- package/dist/utils/toolRiskClassification.js.map +2 -2
- package/dist/version.js +2 -2
- package/dist/version.js.map +1 -1
- package/package.json +7 -6
|
@@ -5,27 +5,48 @@ import {
|
|
|
5
5
|
statSync,
|
|
6
6
|
writeFileSync
|
|
7
7
|
} from "fs";
|
|
8
|
-
import {
|
|
8
|
+
import { debug as debugLogger } from "./debugLogger.js";
|
|
9
|
+
import { join, resolve, basename } from "path";
|
|
9
10
|
import { homedir } from "os";
|
|
10
11
|
import matter from "gray-matter";
|
|
12
|
+
import { validatePluginDirectory } from "../services/plugins/pluginValidation.js";
|
|
11
13
|
import {
|
|
12
14
|
PluginManifestSchema,
|
|
13
15
|
PluginError,
|
|
14
16
|
PluginErrorCode
|
|
15
17
|
} from "../types/plugin.js";
|
|
16
18
|
import { getCwd } from "./state.js";
|
|
19
|
+
let extraPluginDirs = [];
|
|
20
|
+
function addExtraPluginDir(dir) {
|
|
21
|
+
const resolved = resolve(dir);
|
|
22
|
+
if (!extraPluginDirs.includes(resolved)) {
|
|
23
|
+
extraPluginDirs.push(resolved);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function getManagedPluginsDir() {
|
|
27
|
+
if (process.platform === "darwin") {
|
|
28
|
+
return "/Library/Application Support/Minto/managed-plugins";
|
|
29
|
+
}
|
|
30
|
+
return "/etc/minto/managed-plugins";
|
|
31
|
+
}
|
|
17
32
|
function getPluginDirectories() {
|
|
18
33
|
const cwd = getCwd();
|
|
19
34
|
const home = homedir();
|
|
20
35
|
return [
|
|
36
|
+
getManagedPluginsDir(),
|
|
37
|
+
// Managed (enterprise, read-only, lowest)
|
|
21
38
|
join(home, ".claude", "plugins"),
|
|
22
39
|
// User global (legacy)
|
|
23
40
|
join(home, ".minto", "plugins"),
|
|
24
41
|
// User global
|
|
25
42
|
join(cwd, ".claude", "plugins"),
|
|
26
43
|
// Project (legacy)
|
|
27
|
-
join(cwd, ".minto", "plugins")
|
|
28
|
-
// Project
|
|
44
|
+
join(cwd, ".minto", "plugins"),
|
|
45
|
+
// Project
|
|
46
|
+
join(cwd, ".minto", "plugins.local"),
|
|
47
|
+
// Project local (gitignored)
|
|
48
|
+
...extraPluginDirs
|
|
49
|
+
// CLI --plugin-dir (highest priority)
|
|
29
50
|
];
|
|
30
51
|
}
|
|
31
52
|
function discoverPluginPaths() {
|
|
@@ -95,7 +116,7 @@ function loadAgents(pluginPath, manifest) {
|
|
|
95
116
|
for (const agentPath of manifest.agents || []) {
|
|
96
117
|
const fullPath = join(pluginPath, agentPath);
|
|
97
118
|
if (!existsSync(fullPath)) {
|
|
98
|
-
|
|
119
|
+
debugLogger.warn("PLUGIN_LOADER", `Agent file not found: ${fullPath}`);
|
|
99
120
|
continue;
|
|
100
121
|
}
|
|
101
122
|
try {
|
|
@@ -114,7 +135,10 @@ function loadAgents(pluginPath, manifest) {
|
|
|
114
135
|
pluginName: manifest.name
|
|
115
136
|
});
|
|
116
137
|
} catch (error) {
|
|
117
|
-
|
|
138
|
+
debugLogger.warn(
|
|
139
|
+
"PLUGIN_LOADER",
|
|
140
|
+
`Error loading agent ${agentPath}: ${error instanceof Error ? error.message : String(error)}`
|
|
141
|
+
);
|
|
118
142
|
}
|
|
119
143
|
}
|
|
120
144
|
if (existsSync(agentsDir) && statSync(agentsDir).isDirectory()) {
|
|
@@ -138,7 +162,10 @@ function loadAgents(pluginPath, manifest) {
|
|
|
138
162
|
pluginName: manifest.name
|
|
139
163
|
});
|
|
140
164
|
} catch (error) {
|
|
141
|
-
|
|
165
|
+
debugLogger.warn(
|
|
166
|
+
"PLUGIN_LOADER",
|
|
167
|
+
`Error loading agent ${file}: ${error instanceof Error ? error.message : String(error)}`
|
|
168
|
+
);
|
|
142
169
|
}
|
|
143
170
|
}
|
|
144
171
|
}
|
|
@@ -150,7 +177,7 @@ function loadCommands(pluginPath, manifest) {
|
|
|
150
177
|
for (const commandPath of manifest.commands || []) {
|
|
151
178
|
const fullPath = join(pluginPath, commandPath);
|
|
152
179
|
if (!existsSync(fullPath)) {
|
|
153
|
-
|
|
180
|
+
debugLogger.warn("PLUGIN_LOADER", `Command file not found: ${fullPath}`);
|
|
154
181
|
continue;
|
|
155
182
|
}
|
|
156
183
|
try {
|
|
@@ -173,7 +200,10 @@ function loadCommands(pluginPath, manifest) {
|
|
|
173
200
|
pluginName: manifest.name
|
|
174
201
|
});
|
|
175
202
|
} catch (error) {
|
|
176
|
-
|
|
203
|
+
debugLogger.warn(
|
|
204
|
+
"PLUGIN_LOADER",
|
|
205
|
+
`Error loading command ${commandPath}: ${error instanceof Error ? error.message : String(error)}`
|
|
206
|
+
);
|
|
177
207
|
}
|
|
178
208
|
}
|
|
179
209
|
if (existsSync(commandsDir) && statSync(commandsDir).isDirectory()) {
|
|
@@ -201,7 +231,10 @@ function loadCommands(pluginPath, manifest) {
|
|
|
201
231
|
pluginName: manifest.name
|
|
202
232
|
});
|
|
203
233
|
} catch (error) {
|
|
204
|
-
|
|
234
|
+
debugLogger.warn(
|
|
235
|
+
"PLUGIN_LOADER",
|
|
236
|
+
`Error loading command ${file}: ${error instanceof Error ? error.message : String(error)}`
|
|
237
|
+
);
|
|
205
238
|
}
|
|
206
239
|
}
|
|
207
240
|
}
|
|
@@ -213,7 +246,7 @@ function loadSkills(pluginPath, manifest) {
|
|
|
213
246
|
for (const skillPath of manifest.skills || []) {
|
|
214
247
|
const fullPath = join(pluginPath, skillPath);
|
|
215
248
|
if (!existsSync(fullPath)) {
|
|
216
|
-
|
|
249
|
+
debugLogger.warn("PLUGIN_LOADER", `Skill file not found: ${fullPath}`);
|
|
217
250
|
continue;
|
|
218
251
|
}
|
|
219
252
|
try {
|
|
@@ -231,7 +264,10 @@ function loadSkills(pluginPath, manifest) {
|
|
|
231
264
|
source: "plugin"
|
|
232
265
|
});
|
|
233
266
|
} catch (error) {
|
|
234
|
-
|
|
267
|
+
debugLogger.warn(
|
|
268
|
+
"PLUGIN_LOADER",
|
|
269
|
+
`Error loading skill ${skillPath}: ${error instanceof Error ? error.message : String(error)}`
|
|
270
|
+
);
|
|
235
271
|
}
|
|
236
272
|
}
|
|
237
273
|
if (existsSync(skillsDir) && statSync(skillsDir).isDirectory()) {
|
|
@@ -256,7 +292,10 @@ function loadSkills(pluginPath, manifest) {
|
|
|
256
292
|
source: "plugin"
|
|
257
293
|
});
|
|
258
294
|
} catch (error) {
|
|
259
|
-
|
|
295
|
+
debugLogger.warn(
|
|
296
|
+
"PLUGIN_LOADER",
|
|
297
|
+
`Error loading skill from ${skillMdPath}: ${error instanceof Error ? error.message : String(error)}`
|
|
298
|
+
);
|
|
260
299
|
}
|
|
261
300
|
}
|
|
262
301
|
} else if (entry.isFile() && entry.name.endsWith(".md")) {
|
|
@@ -277,7 +316,10 @@ function loadSkills(pluginPath, manifest) {
|
|
|
277
316
|
source: "plugin"
|
|
278
317
|
});
|
|
279
318
|
} catch (error) {
|
|
280
|
-
|
|
319
|
+
debugLogger.warn(
|
|
320
|
+
"PLUGIN_LOADER",
|
|
321
|
+
`Error loading skill ${entry.name}: ${error instanceof Error ? error.message : String(error)}`
|
|
322
|
+
);
|
|
281
323
|
}
|
|
282
324
|
}
|
|
283
325
|
}
|
|
@@ -295,7 +337,10 @@ function loadHooks(pluginPath, manifest) {
|
|
|
295
337
|
const content = readFileSync(hooksJsonPath, "utf-8");
|
|
296
338
|
const hooksConfig = JSON.parse(content);
|
|
297
339
|
if (!hooksConfig.hooks || typeof hooksConfig.hooks !== "object") {
|
|
298
|
-
|
|
340
|
+
debugLogger.warn(
|
|
341
|
+
"PLUGIN_LOADER",
|
|
342
|
+
`Invalid hooks.json in ${pluginPath}: missing "hooks" field`
|
|
343
|
+
);
|
|
299
344
|
return hooks;
|
|
300
345
|
}
|
|
301
346
|
for (const [eventName, matchers] of Object.entries(
|
|
@@ -313,8 +358,7 @@ function loadHooks(pluginPath, manifest) {
|
|
|
313
358
|
matcher: matcher.matcher,
|
|
314
359
|
type: hookDef.type || "command",
|
|
315
360
|
command: hookDef.command,
|
|
316
|
-
|
|
317
|
-
// Claude Code uses "prompt", we use "message" internally
|
|
361
|
+
prompt: hookDef.prompt,
|
|
318
362
|
blocking: hookDef.type === "prompt",
|
|
319
363
|
timeout: hookDef.timeout || 60
|
|
320
364
|
},
|
|
@@ -326,7 +370,10 @@ function loadHooks(pluginPath, manifest) {
|
|
|
326
370
|
}
|
|
327
371
|
}
|
|
328
372
|
} catch (error) {
|
|
329
|
-
|
|
373
|
+
debugLogger.warn(
|
|
374
|
+
"PLUGIN_LOADER",
|
|
375
|
+
`Error loading hooks from ${hooksJsonPath}: ${error instanceof Error ? error.message : String(error)}`
|
|
376
|
+
);
|
|
330
377
|
}
|
|
331
378
|
return hooks;
|
|
332
379
|
}
|
|
@@ -389,7 +436,10 @@ function loadMCPServers(pluginPath, manifest) {
|
|
|
389
436
|
mcpJsonServers = parsed.mcpServers;
|
|
390
437
|
}
|
|
391
438
|
} catch (error) {
|
|
392
|
-
|
|
439
|
+
debugLogger.warn(
|
|
440
|
+
"PLUGIN_LOADER",
|
|
441
|
+
`Error loading .mcp.json from ${pluginPath}: ${error instanceof Error ? error.message : String(error)}`
|
|
442
|
+
);
|
|
393
443
|
}
|
|
394
444
|
}
|
|
395
445
|
let inlineServers = {};
|
|
@@ -402,13 +452,15 @@ function loadMCPServers(pluginPath, manifest) {
|
|
|
402
452
|
const expandedConfig = expandServerConfig(config, pluginPath);
|
|
403
453
|
const serverType = expandedConfig.type || "stdio";
|
|
404
454
|
if (serverType === "stdio" && !expandedConfig.command) {
|
|
405
|
-
|
|
455
|
+
debugLogger.warn(
|
|
456
|
+
"PLUGIN_LOADER",
|
|
406
457
|
`MCP server "${name}" in ${manifest.name} is missing required "command" field for stdio type`
|
|
407
458
|
);
|
|
408
459
|
continue;
|
|
409
460
|
}
|
|
410
461
|
if ((serverType === "http" || serverType === "sse") && !expandedConfig.url) {
|
|
411
|
-
|
|
462
|
+
debugLogger.warn(
|
|
463
|
+
"PLUGIN_LOADER",
|
|
412
464
|
`MCP server "${name}" in ${manifest.name} is missing required "url" field for ${serverType} type`
|
|
413
465
|
);
|
|
414
466
|
continue;
|
|
@@ -425,14 +477,72 @@ function loadMCPServers(pluginPath, manifest) {
|
|
|
425
477
|
pluginName: manifest.name
|
|
426
478
|
});
|
|
427
479
|
} catch (error) {
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
error
|
|
480
|
+
debugLogger.warn(
|
|
481
|
+
"PLUGIN_LOADER",
|
|
482
|
+
`Error loading MCP server "${name}" from ${manifest.name}: ${error instanceof Error ? error.message : String(error)}`
|
|
431
483
|
);
|
|
432
484
|
}
|
|
433
485
|
}
|
|
434
486
|
return mcpServers;
|
|
435
487
|
}
|
|
488
|
+
function loadLSPServers(pluginPath, manifest) {
|
|
489
|
+
const lspServers = [];
|
|
490
|
+
const lspJsonPath = join(pluginPath, ".lsp.json");
|
|
491
|
+
let lspJsonServers = {};
|
|
492
|
+
if (existsSync(lspJsonPath)) {
|
|
493
|
+
try {
|
|
494
|
+
const content = readFileSync(lspJsonPath, "utf-8");
|
|
495
|
+
const parsed = JSON.parse(content);
|
|
496
|
+
if (parsed.lspServers && typeof parsed.lspServers === "object") {
|
|
497
|
+
lspJsonServers = parsed.lspServers;
|
|
498
|
+
} else if (typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
499
|
+
lspJsonServers = parsed;
|
|
500
|
+
}
|
|
501
|
+
} catch (error) {
|
|
502
|
+
debugLogger.warn(
|
|
503
|
+
"PLUGIN_LOADER",
|
|
504
|
+
`Error loading .lsp.json from ${pluginPath}: ${error instanceof Error ? error.message : String(error)}`
|
|
505
|
+
);
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
const manifestData = manifest;
|
|
509
|
+
let inlineServers = {};
|
|
510
|
+
if (manifestData.lspServers && typeof manifestData.lspServers === "object" && !Array.isArray(manifestData.lspServers)) {
|
|
511
|
+
inlineServers = manifestData.lspServers;
|
|
512
|
+
}
|
|
513
|
+
const allServers = { ...lspJsonServers, ...inlineServers };
|
|
514
|
+
for (const [name, config] of Object.entries(allServers)) {
|
|
515
|
+
try {
|
|
516
|
+
const expandedConfig = expandServerConfig(config, pluginPath);
|
|
517
|
+
if (!expandedConfig.command) {
|
|
518
|
+
debugLogger.warn(
|
|
519
|
+
"PLUGIN_LOADER",
|
|
520
|
+
`LSP server "${name}" in ${manifest.name} is missing required "command" field`
|
|
521
|
+
);
|
|
522
|
+
continue;
|
|
523
|
+
}
|
|
524
|
+
lspServers.push({
|
|
525
|
+
name,
|
|
526
|
+
filePath: existsSync(lspJsonPath) ? lspJsonPath : join(pluginPath, "plugin.json"),
|
|
527
|
+
config: {
|
|
528
|
+
command: expandedConfig.command,
|
|
529
|
+
args: expandedConfig.args || [],
|
|
530
|
+
env: expandedConfig.env || {},
|
|
531
|
+
filePatterns: expandedConfig.filePatterns,
|
|
532
|
+
languages: expandedConfig.languages,
|
|
533
|
+
initializationOptions: expandedConfig.initializationOptions
|
|
534
|
+
},
|
|
535
|
+
pluginName: manifest.name
|
|
536
|
+
});
|
|
537
|
+
} catch (error) {
|
|
538
|
+
debugLogger.warn(
|
|
539
|
+
"PLUGIN_LOADER",
|
|
540
|
+
`Error loading LSP server "${name}" from ${manifest.name}: ${error instanceof Error ? error.message : String(error)}`
|
|
541
|
+
);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
return lspServers;
|
|
545
|
+
}
|
|
436
546
|
function determinePluginSource(pluginPath) {
|
|
437
547
|
const home = homedir();
|
|
438
548
|
const cwd = getCwd();
|
|
@@ -461,22 +571,63 @@ function determinePluginSource(pluginPath) {
|
|
|
461
571
|
};
|
|
462
572
|
}
|
|
463
573
|
} catch (error) {
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
error
|
|
574
|
+
debugLogger.warn(
|
|
575
|
+
"PLUGIN_LOADER",
|
|
576
|
+
`Failed to read marketplace metadata from ${marketplaceMetaPath}: ${error instanceof Error ? error.message : String(error)}`
|
|
467
577
|
);
|
|
468
578
|
}
|
|
469
579
|
}
|
|
470
|
-
|
|
580
|
+
const managedDir = getManagedPluginsDir();
|
|
581
|
+
if (pluginPath.startsWith(managedDir)) {
|
|
582
|
+
return { type: "local", path: "managed" };
|
|
583
|
+
} else if (pluginPath.startsWith(join(home, ".minto", "plugins"))) {
|
|
471
584
|
return { type: "local", path: "user-global" };
|
|
585
|
+
} else if (pluginPath.startsWith(join(cwd, ".minto", "plugins.local"))) {
|
|
586
|
+
return { type: "local", path: "local" };
|
|
472
587
|
} else if (pluginPath.startsWith(join(cwd, ".minto", "plugins"))) {
|
|
473
588
|
return { type: "local", path: "project" };
|
|
474
589
|
} else {
|
|
475
590
|
return { type: "local", path: pluginPath };
|
|
476
591
|
}
|
|
477
592
|
}
|
|
593
|
+
function loadPluginSettings(pluginPath) {
|
|
594
|
+
const settingsPaths = [
|
|
595
|
+
join(pluginPath, ".minto-plugin", "settings.json"),
|
|
596
|
+
join(pluginPath, ".claude-plugin", "settings.json"),
|
|
597
|
+
join(pluginPath, "settings.json")
|
|
598
|
+
];
|
|
599
|
+
for (const settingsPath of settingsPaths) {
|
|
600
|
+
if (!existsSync(settingsPath)) continue;
|
|
601
|
+
try {
|
|
602
|
+
const content = readFileSync(settingsPath, "utf-8");
|
|
603
|
+
const parsed = JSON.parse(content);
|
|
604
|
+
if (parsed.agent && typeof parsed.agent === "object") {
|
|
605
|
+
return parsed.agent;
|
|
606
|
+
}
|
|
607
|
+
return parsed;
|
|
608
|
+
} catch (error) {
|
|
609
|
+
debugLogger.warn(
|
|
610
|
+
"PLUGIN_LOADER",
|
|
611
|
+
`Failed to parse plugin settings from ${settingsPath}: ${error instanceof Error ? error.message : String(error)}`
|
|
612
|
+
);
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
return null;
|
|
616
|
+
}
|
|
478
617
|
function loadPlugin(pluginPath) {
|
|
479
618
|
const manifest = loadManifest(pluginPath);
|
|
619
|
+
try {
|
|
620
|
+
const validation = validatePluginDirectory(pluginPath);
|
|
621
|
+
if (validation.warnings.length > 0) {
|
|
622
|
+
for (const warning of validation.warnings) {
|
|
623
|
+
debugLogger.warn(
|
|
624
|
+
"PLUGIN_LOADER",
|
|
625
|
+
`Plugin "${manifest.name}": ${warning}`
|
|
626
|
+
);
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
} catch {
|
|
630
|
+
}
|
|
480
631
|
const source = determinePluginSource(pluginPath);
|
|
481
632
|
const pluginConfig = loadPluginConfig(pluginPath);
|
|
482
633
|
const agents = loadAgents(pluginPath, manifest);
|
|
@@ -484,6 +635,8 @@ function loadPlugin(pluginPath) {
|
|
|
484
635
|
const skills = loadSkills(pluginPath, manifest);
|
|
485
636
|
const hooks = loadHooks(pluginPath, manifest);
|
|
486
637
|
const mcpServers = loadMCPServers(pluginPath, manifest);
|
|
638
|
+
const lspServers = loadLSPServers(pluginPath, manifest);
|
|
639
|
+
const settings = loadPluginSettings(pluginPath);
|
|
487
640
|
return {
|
|
488
641
|
manifest,
|
|
489
642
|
name: manifest.name,
|
|
@@ -494,8 +647,10 @@ function loadPlugin(pluginPath) {
|
|
|
494
647
|
skills,
|
|
495
648
|
hooks,
|
|
496
649
|
mcpServers,
|
|
650
|
+
lspServers,
|
|
497
651
|
enabled: pluginConfig.enabled,
|
|
498
|
-
config: pluginConfig.config
|
|
652
|
+
config: pluginConfig.config,
|
|
653
|
+
settings
|
|
499
654
|
};
|
|
500
655
|
}
|
|
501
656
|
function loadAllPlugins() {
|
|
@@ -507,9 +662,15 @@ function loadAllPlugins() {
|
|
|
507
662
|
plugins.push(plugin);
|
|
508
663
|
} catch (error) {
|
|
509
664
|
if (error instanceof PluginError) {
|
|
510
|
-
|
|
665
|
+
debugLogger.warn(
|
|
666
|
+
"PLUGIN_LOADER",
|
|
667
|
+
`Error loading plugin ${name}: ${error.message}`
|
|
668
|
+
);
|
|
511
669
|
} else {
|
|
512
|
-
|
|
670
|
+
debugLogger.warn(
|
|
671
|
+
"PLUGIN_LOADER",
|
|
672
|
+
`Unexpected error loading plugin ${name}: ${error instanceof Error ? error.message : String(error)}`
|
|
673
|
+
);
|
|
513
674
|
}
|
|
514
675
|
}
|
|
515
676
|
}
|
|
@@ -522,7 +683,10 @@ function getPlugin(name) {
|
|
|
522
683
|
try {
|
|
523
684
|
return loadPlugin(pluginPath);
|
|
524
685
|
} catch (error) {
|
|
525
|
-
|
|
686
|
+
debugLogger.warn(
|
|
687
|
+
"PLUGIN_LOADER",
|
|
688
|
+
`Error loading plugin ${name}: ${error instanceof Error ? error.message : String(error)}`
|
|
689
|
+
);
|
|
526
690
|
return void 0;
|
|
527
691
|
}
|
|
528
692
|
}
|
|
@@ -555,7 +719,10 @@ function loadPluginConfig(pluginPath) {
|
|
|
555
719
|
config: data.config || {}
|
|
556
720
|
};
|
|
557
721
|
} catch (error) {
|
|
558
|
-
|
|
722
|
+
debugLogger.warn(
|
|
723
|
+
"PLUGIN_LOADER",
|
|
724
|
+
`Error loading plugin config from ${configPath}: ${error instanceof Error ? error.message : String(error)}`
|
|
725
|
+
);
|
|
559
726
|
return { enabled: true, config: {} };
|
|
560
727
|
}
|
|
561
728
|
}
|
|
@@ -620,12 +787,14 @@ function updatePluginConfig(pluginName, config) {
|
|
|
620
787
|
savePluginConfig(plugin.location, plugin.enabled, config);
|
|
621
788
|
}
|
|
622
789
|
export {
|
|
790
|
+
addExtraPluginDir,
|
|
623
791
|
disablePlugin,
|
|
624
792
|
enablePlugin,
|
|
625
793
|
getPlugin,
|
|
626
794
|
listPlugins,
|
|
627
795
|
loadAllPlugins,
|
|
628
796
|
loadPlugin,
|
|
797
|
+
loadPluginSettings,
|
|
629
798
|
togglePluginEnabled,
|
|
630
799
|
updatePluginConfig
|
|
631
800
|
};
|