Merge branch 'main' into mk-extenstions-programatic

This commit is contained in:
matt korwel
2026-03-24 17:17:58 -07:00
committed by GitHub
873 changed files with 49977 additions and 20465 deletions
@@ -55,8 +55,8 @@ function showMessageIfNoExtensions(
}
async function listAction(context: CommandContext) {
const extensions = context.services.config
? listExtensions(context.services.config)
const extensions = context.services.agentContext?.config
? listExtensions(context.services.agentContext.config)
: [];
if (showMessageIfNoExtensions(context, extensions)) {
@@ -89,8 +89,8 @@ function updateAction(context: CommandContext, args: string): Promise<void> {
(resolve) => (resolveUpdateComplete = resolve),
);
const extensions = context.services.config
? listExtensions(context.services.config)
const extensions = context.services.agentContext?.config
? listExtensions(context.services.agentContext.config)
: [];
if (showMessageIfNoExtensions(context, extensions)) {
@@ -129,7 +129,7 @@ function updateAction(context: CommandContext, args: string): Promise<void> {
},
});
if (names?.length) {
const extensions = listExtensions(context.services.config!);
const extensions = listExtensions(context.services.agentContext!.config);
for (const name of names) {
const extension = extensions.find(
(extension) => extension.name === name,
@@ -157,7 +157,8 @@ async function restartAction(
context: CommandContext,
args: string,
): Promise<void> {
const extensionLoader = context.services.config?.getExtensionLoader();
const extensionLoader =
context.services.agentContext?.config.getExtensionLoader();
if (!extensionLoader) {
context.ui.addItem({
type: MessageType.ERROR,
@@ -236,8 +237,8 @@ async function restartAction(
if (failures.length < extensionsToRestart.length) {
try {
await context.services.config?.reloadSkills();
await context.services.config?.getAgentRegistry()?.reload();
await context.services.agentContext?.config.reloadSkills();
await context.services.agentContext?.config.getAgentRegistry()?.reload();
} catch (error) {
context.ui.addItem({
type: MessageType.ERROR,
@@ -275,7 +276,8 @@ async function exploreAction(
const useRegistryUI = settings.experimental?.extensionRegistry;
if (useRegistryUI) {
const extensionManager = context.services.config?.getExtensionLoader();
const extensionManager =
context.services.agentContext?.config.getExtensionLoader();
if (extensionManager instanceof ExtensionManager) {
return {
type: 'custom_dialog' as const,
@@ -285,6 +287,11 @@ async function exploreAction(
await installAction(context, extension.url, requestConsentOverride);
context.ui.removeComponent();
},
onLink: async (extension, requestConsentOverride) => {
debugLogger.log(`Linking extension: ${extension.extensionName}`);
await linkAction(context, extension.url, requestConsentOverride);
context.ui.removeComponent();
},
onClose: () => context.ui.removeComponent(),
extensionManager,
}),
@@ -394,7 +401,8 @@ function getEnableDisableContext(
names: string[];
scope: SettingScope;
} | null {
const extensionLoader = context.services.config?.getExtensionLoader();
const extensionLoader =
context.services.agentContext?.config.getExtensionLoader();
if (!(extensionLoader instanceof ExtensionManager)) {
debugLogger.error(
`Cannot ${context.invocation?.name} extensions in this environment`,
@@ -494,7 +502,8 @@ async function enableAction(context: CommandContext, args: string) {
if (extension?.mcpServers) {
const mcpEnablementManager = McpServerEnablementManager.getInstance();
const mcpClientManager = context.services.config?.getMcpClientManager();
const mcpClientManager =
context.services.agentContext?.config.getMcpClientManager();
const enabledServers = await mcpEnablementManager.autoEnableServers(
Object.keys(extension.mcpServers ?? {}),
);
@@ -526,7 +535,8 @@ async function installAction(
args: string,
requestConsentOverride?: (consent: string) => Promise<boolean>,
) {
const extensionLoader = context.services.config?.getExtensionLoader();
const extensionLoader =
context.services.agentContext?.config.getExtensionLoader();
if (!(extensionLoader instanceof ExtensionManager)) {
debugLogger.error(
`Cannot ${context.invocation?.name} extensions in this environment`,
@@ -591,8 +601,13 @@ async function installAction(
}
}
async function linkAction(context: CommandContext, args: string) {
const extensionLoader = context.services.config?.getExtensionLoader();
async function linkAction(
context: CommandContext,
args: string,
requestConsentOverride?: (consent: string) => Promise<boolean>,
) {
const extensionLoader =
context.services.agentContext?.config.getExtensionLoader();
if (!(extensionLoader instanceof ExtensionManager)) {
debugLogger.error(
`Cannot ${context.invocation?.name} extensions in this environment`,
@@ -639,8 +654,11 @@ async function linkAction(context: CommandContext, args: string) {
source: sourceFilepath,
type: 'link',
};
const extension =
await extensionLoader.installOrUpdateExtension(installMetadata);
const extension = await extensionLoader.installOrUpdateExtension(
installMetadata,
undefined,
requestConsentOverride,
);
context.ui.addItem({
type: MessageType.INFO,
text: `Extension "${extension.name}" linked successfully.`,
@@ -656,7 +674,8 @@ async function linkAction(context: CommandContext, args: string) {
}
async function uninstallAction(context: CommandContext, args: string) {
const extensionLoader = context.services.config?.getExtensionLoader();
const extensionLoader =
context.services.agentContext?.config.getExtensionLoader();
if (!(extensionLoader instanceof ExtensionManager)) {
debugLogger.error(
`Cannot ${context.invocation?.name} extensions in this environment`,
@@ -755,7 +774,8 @@ async function configAction(context: CommandContext, args: string) {
}
}
const extensionManager = context.services.config?.getExtensionLoader();
const extensionManager =
context.services.agentContext?.config.getExtensionLoader();
if (!(extensionManager instanceof ExtensionManager)) {
debugLogger.error(
`Cannot ${context.invocation?.name} extensions in this environment`,
@@ -792,7 +812,7 @@ export function completeExtensions(
context: CommandContext,
partialArg: string,
) {
let extensions = context.services.config?.getExtensions() ?? [];
let extensions = context.services.agentContext?.config.getExtensions() ?? [];
if (context.invocation?.name === 'enable') {
extensions = extensions.filter((ext) => !ext.isActive);