micro-models-agent 0.2.49 → 0.2.51
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/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +87 -303
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/modes/applier.d.ts +43 -0
- package/dist/agent/modes/applier.d.ts.map +1 -0
- package/dist/agent/modes/applier.js +30 -0
- package/dist/agent/modes/applier.js.map +1 -0
- package/dist/agent/modes/registry.d.ts +35 -0
- package/dist/agent/modes/registry.d.ts.map +1 -0
- package/dist/agent/modes/registry.js +169 -0
- package/dist/agent/modes/registry.js.map +1 -0
- package/dist/agent/modes/types.d.ts +54 -0
- package/dist/agent/modes/types.d.ts.map +1 -0
- package/dist/agent/modes/types.js +13 -0
- package/dist/agent/modes/types.js.map +1 -0
- package/dist/agent/react-loop.d.ts +61 -0
- package/dist/agent/react-loop.d.ts.map +1 -0
- package/dist/agent/react-loop.js +119 -0
- package/dist/agent/react-loop.js.map +1 -0
- package/dist/agent/tool-executor.d.ts +44 -0
- package/dist/agent/tool-executor.d.ts.map +1 -0
- package/dist/agent/tool-executor.js +186 -0
- package/dist/agent/tool-executor.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +48 -1
- package/dist/cli.js.map +1 -1
- package/dist/config/types.d.ts +5 -2
- package/dist/config/types.d.ts.map +1 -1
- package/dist/plugins/adapters/hooks-adapter.d.ts +12 -0
- package/dist/plugins/adapters/hooks-adapter.d.ts.map +1 -0
- package/dist/plugins/adapters/hooks-adapter.js +23 -0
- package/dist/plugins/adapters/hooks-adapter.js.map +1 -0
- package/dist/plugins/loader.d.ts +13 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +145 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +52 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +183 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/types.d.ts +73 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +8 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/repl/commands.d.ts +1 -0
- package/dist/repl/commands.d.ts.map +1 -1
- package/dist/repl/commands.js.map +1 -1
- package/dist/repl/index.d.ts.map +1 -1
- package/dist/repl/index.js +3 -2
- package/dist/repl/index.js.map +1 -1
- package/dist/session/store.d.ts +4 -2
- package/dist/session/store.d.ts.map +1 -1
- package/dist/session/store.js +4 -2
- package/dist/session/store.js.map +1 -1
- package/dist/tools/bash.d.ts +4 -0
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +24 -0
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/fs/copy-file.d.ts +2 -0
- package/dist/tools/fs/copy-file.d.ts.map +1 -1
- package/dist/tools/fs/copy-file.js +7 -0
- package/dist/tools/fs/copy-file.js.map +1 -1
- package/dist/tools/fs/create-dir.d.ts +2 -0
- package/dist/tools/fs/create-dir.d.ts.map +1 -1
- package/dist/tools/fs/create-dir.js +7 -0
- package/dist/tools/fs/create-dir.js.map +1 -1
- package/dist/tools/fs/delete-file.d.ts +2 -0
- package/dist/tools/fs/delete-file.d.ts.map +1 -1
- package/dist/tools/fs/delete-file.js +7 -0
- package/dist/tools/fs/delete-file.js.map +1 -1
- package/dist/tools/fs/edit-file.d.ts +2 -0
- package/dist/tools/fs/edit-file.d.ts.map +1 -1
- package/dist/tools/fs/edit-file.js +7 -0
- package/dist/tools/fs/edit-file.js.map +1 -1
- package/dist/tools/fs/file-info.d.ts +2 -0
- package/dist/tools/fs/file-info.d.ts.map +1 -1
- package/dist/tools/fs/file-info.js +7 -0
- package/dist/tools/fs/file-info.js.map +1 -1
- package/dist/tools/fs/glob-search.d.ts +2 -0
- package/dist/tools/fs/glob-search.d.ts.map +1 -1
- package/dist/tools/fs/glob-search.js +7 -0
- package/dist/tools/fs/glob-search.js.map +1 -1
- package/dist/tools/fs/grep-search.d.ts +2 -0
- package/dist/tools/fs/grep-search.d.ts.map +1 -1
- package/dist/tools/fs/grep-search.js +7 -0
- package/dist/tools/fs/grep-search.js.map +1 -1
- package/dist/tools/fs/list-dir.d.ts +2 -0
- package/dist/tools/fs/list-dir.d.ts.map +1 -1
- package/dist/tools/fs/list-dir.js +7 -0
- package/dist/tools/fs/list-dir.js.map +1 -1
- package/dist/tools/fs/move-file.d.ts +2 -0
- package/dist/tools/fs/move-file.d.ts.map +1 -1
- package/dist/tools/fs/move-file.js +7 -0
- package/dist/tools/fs/move-file.js.map +1 -1
- package/dist/tools/fs/read-file.d.ts +2 -0
- package/dist/tools/fs/read-file.d.ts.map +1 -1
- package/dist/tools/fs/read-file.js +7 -0
- package/dist/tools/fs/read-file.js.map +1 -1
- package/dist/tools/fs/tree.d.ts +2 -0
- package/dist/tools/fs/tree.d.ts.map +1 -1
- package/dist/tools/fs/tree.js +7 -0
- package/dist/tools/fs/tree.js.map +1 -1
- package/dist/tools/fs/write-file.d.ts +2 -0
- package/dist/tools/fs/write-file.d.ts.map +1 -1
- package/dist/tools/fs/write-file.js +7 -0
- package/dist/tools/fs/write-file.js.map +1 -1
- package/dist/tools/native/approve.d.ts +11 -0
- package/dist/tools/native/approve.d.ts.map +1 -0
- package/dist/tools/native/approve.js +39 -0
- package/dist/tools/native/approve.js.map +1 -0
- package/dist/tools/native/plan.d.ts +10 -0
- package/dist/tools/native/plan.d.ts.map +1 -0
- package/dist/tools/native/plan.js +46 -0
- package/dist/tools/native/plan.js.map +1 -0
- package/dist/tools/native/question.d.ts +11 -0
- package/dist/tools/native/question.d.ts.map +1 -0
- package/dist/tools/native/question.js +41 -0
- package/dist/tools/native/question.js.map +1 -0
- package/dist/tools/native/theme.d.ts +10 -0
- package/dist/tools/native/theme.d.ts.map +1 -0
- package/dist/tools/native/theme.js +106 -0
- package/dist/tools/native/theme.js.map +1 -0
- package/dist/tools/native/todo.d.ts +10 -0
- package/dist/tools/native/todo.d.ts.map +1 -0
- package/dist/tools/native/todo.js +58 -0
- package/dist/tools/native/todo.js.map +1 -0
- package/dist/tools/native/user-profile.d.ts +10 -0
- package/dist/tools/native/user-profile.d.ts.map +1 -0
- package/dist/tools/native/user-profile.js +58 -0
- package/dist/tools/native/user-profile.js.map +1 -0
- package/dist/tools/registry.d.ts +11 -10
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +40 -147
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/subagent.d.ts +2 -1
- package/dist/tools/subagent.d.ts.map +1 -1
- package/dist/tools/subagent.js +7 -4
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/types.d.ts +59 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/web-fetch.d.ts +2 -0
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +7 -0
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/web-search.d.ts +2 -0
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +7 -0
- package/dist/tools/web-search.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { existsSync, readFileSync, readdirSync, watch } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
4
|
+
import { logInfo, logWarn, logError } from '../logger.js';
|
|
5
|
+
/**
|
|
6
|
+
* Загрузчик плагинов.
|
|
7
|
+
*
|
|
8
|
+
* Discovery:
|
|
9
|
+
* - ~/.mma/plugins/ — глобальные
|
|
10
|
+
* - .mma/plugins/ — проектные
|
|
11
|
+
*
|
|
12
|
+
* Hot-reload: fs.watch на директорию плагина.
|
|
13
|
+
*
|
|
14
|
+
* @module plugins/loader
|
|
15
|
+
*/
|
|
16
|
+
/** Директории поиска плагинов */
|
|
17
|
+
const PLUGIN_DIRS = [
|
|
18
|
+
join(process.env.HOME || process.env.USERPROFILE || '', '.mma', 'plugins'),
|
|
19
|
+
'.mma/plugins',
|
|
20
|
+
];
|
|
21
|
+
/**
|
|
22
|
+
* Сканирует директорию на наличие плагинов.
|
|
23
|
+
* Плагин = директория с manifest.json.
|
|
24
|
+
*/
|
|
25
|
+
function scanPluginDir(dir) {
|
|
26
|
+
if (!existsSync(dir))
|
|
27
|
+
return [];
|
|
28
|
+
const plugins = [];
|
|
29
|
+
try {
|
|
30
|
+
const entries = readdirSync(dir, { withFileTypes: true });
|
|
31
|
+
for (const entry of entries) {
|
|
32
|
+
if (!entry.isDirectory())
|
|
33
|
+
continue;
|
|
34
|
+
const manifestPath = join(dir, entry.name, 'manifest.json');
|
|
35
|
+
if (existsSync(manifestPath)) {
|
|
36
|
+
plugins.push(join(dir, entry.name));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch { /* ignore */ }
|
|
41
|
+
return plugins;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Загружает манифест плагина.
|
|
45
|
+
*/
|
|
46
|
+
function loadManifest(pluginDir) {
|
|
47
|
+
const manifestPath = join(pluginDir, 'manifest.json');
|
|
48
|
+
try {
|
|
49
|
+
const content = readFileSync(manifestPath, 'utf-8');
|
|
50
|
+
const manifest = JSON.parse(content);
|
|
51
|
+
if (!manifest.name || !manifest.entry) {
|
|
52
|
+
logWarn('PLUGIN', `Invalid manifest in ${pluginDir}: missing name or entry`);
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
return manifest;
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
logError('PLUGIN', `Failed to load manifest ${manifestPath}: ${e.message}`);
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Загружает плагин из директории.
|
|
64
|
+
*
|
|
65
|
+
* Entry point может быть .ts (загружается через tsx) или .js/.mjs.
|
|
66
|
+
*/
|
|
67
|
+
async function loadPluginFromDir(pluginDir) {
|
|
68
|
+
const manifest = loadManifest(pluginDir);
|
|
69
|
+
if (!manifest)
|
|
70
|
+
return null;
|
|
71
|
+
const entryPath = join(pluginDir, manifest.entry);
|
|
72
|
+
try {
|
|
73
|
+
// Используем dynamic import для загрузки модуля
|
|
74
|
+
const moduleUrl = pathToFileURL(entryPath).href;
|
|
75
|
+
const mod = await import(moduleUrl);
|
|
76
|
+
// Экспорт по умолчанию — фабрика плагина
|
|
77
|
+
const createPlugin = mod.default || mod;
|
|
78
|
+
const plugin = typeof createPlugin === 'function'
|
|
79
|
+
? createPlugin()
|
|
80
|
+
: createPlugin;
|
|
81
|
+
if (!plugin.name) {
|
|
82
|
+
logWarn('PLUGIN', `Plugin from ${pluginDir} has no name`);
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
return plugin;
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
logError('PLUGIN', `Failed to load plugin from ${pluginDir}: ${e.message}`);
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Загружает все плагины из директорий поиска.
|
|
94
|
+
*/
|
|
95
|
+
export async function loadAllPlugins(manager) {
|
|
96
|
+
for (const dir of PLUGIN_DIRS) {
|
|
97
|
+
const pluginDirs = scanPluginDir(dir);
|
|
98
|
+
for (const pluginDir of pluginDirs) {
|
|
99
|
+
const plugin = await loadPluginFromDir(pluginDir);
|
|
100
|
+
if (plugin) {
|
|
101
|
+
manager.register(plugin);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Включает hot-reload для плагина.
|
|
108
|
+
*
|
|
109
|
+
* При изменении entry point файла — деактивирует и перезагружает плагин.
|
|
110
|
+
*/
|
|
111
|
+
export function enableHotReload(pluginDir, manifest, manager, reloadCallback) {
|
|
112
|
+
const entryPath = join(pluginDir, manifest.entry);
|
|
113
|
+
let debounceTimer = null;
|
|
114
|
+
try {
|
|
115
|
+
const watcher = watch(entryPath, async (eventType) => {
|
|
116
|
+
if (eventType !== 'change')
|
|
117
|
+
return;
|
|
118
|
+
// Debounce — ждём 500ms после последнего изменения
|
|
119
|
+
if (debounceTimer)
|
|
120
|
+
clearTimeout(debounceTimer);
|
|
121
|
+
debounceTimer = setTimeout(async () => {
|
|
122
|
+
logInfo('PLUGIN', `hot-reload: ${manifest.name} changed, reloading...`);
|
|
123
|
+
// Деактивируем старый
|
|
124
|
+
await manager.deactivate(manifest.name);
|
|
125
|
+
// Перезагружаем
|
|
126
|
+
const plugin = await loadPluginFromDir(pluginDir);
|
|
127
|
+
if (plugin) {
|
|
128
|
+
manager.register(plugin);
|
|
129
|
+
reloadCallback?.(manifest.name);
|
|
130
|
+
logInfo('PLUGIN', `hot-reload: ${manifest.name} reloaded`);
|
|
131
|
+
}
|
|
132
|
+
}, 500);
|
|
133
|
+
});
|
|
134
|
+
return () => {
|
|
135
|
+
if (debounceTimer)
|
|
136
|
+
clearTimeout(debounceTimer);
|
|
137
|
+
watcher.close();
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
catch (e) {
|
|
141
|
+
logWarn('PLUGIN', `hot-reload not available for ${pluginDir}: ${e.message}`);
|
|
142
|
+
return () => { };
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { AgentPlugin, PluginEvent, PluginHandler, PluginContext, PluginInfo } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Менеджер плагинов.
|
|
4
|
+
*
|
|
5
|
+
* Использование:
|
|
6
|
+
* ```ts
|
|
7
|
+
* const pm = new PluginManager();
|
|
8
|
+
* pm.register(myPlugin);
|
|
9
|
+
* await pm.emit('tool:before', toolName, args);
|
|
10
|
+
* const sections = pm.getPromptSections();
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export declare class PluginManager {
|
|
14
|
+
private plugins;
|
|
15
|
+
private listeners;
|
|
16
|
+
private active;
|
|
17
|
+
/** Регистрация плагина */
|
|
18
|
+
register(plugin: AgentPlugin): void;
|
|
19
|
+
/** Активация плагина */
|
|
20
|
+
activate(name: string, ctx: PluginContext): Promise<void>;
|
|
21
|
+
/** Деактивация плагина */
|
|
22
|
+
deactivate(name: string): Promise<void>;
|
|
23
|
+
/** Активация нескольких плагинов */
|
|
24
|
+
activateAll(names: string[], ctx: PluginContext): Promise<void>;
|
|
25
|
+
/** Подписка на событие (внутренняя, вызывается при register) */
|
|
26
|
+
on(event: PluginEvent, pluginName: string, handler: PluginHandler): void;
|
|
27
|
+
/**
|
|
28
|
+
* Диспатч события (sync middleware chain).
|
|
29
|
+
*
|
|
30
|
+
* Каждый handler получает результат предыдущего.
|
|
31
|
+
* Возвращает финальное значение после всех handler'ов.
|
|
32
|
+
*/
|
|
33
|
+
emit<T>(event: PluginEvent, ...args: unknown[]): Promise<T | undefined>;
|
|
34
|
+
/**
|
|
35
|
+
* Диспатч события с middleware chain для модификации данных.
|
|
36
|
+
*
|
|
37
|
+
* Handler может вернуть модифицированное значение или void (пропуск).
|
|
38
|
+
* Возвращает финальное значение.
|
|
39
|
+
*/
|
|
40
|
+
emitModify<T>(event: PluginEvent, initial: T, ...args: unknown[]): Promise<T>;
|
|
41
|
+
/** Агрегация секций system prompt от всех плагинов */
|
|
42
|
+
getPromptSections(): Promise<string[]>;
|
|
43
|
+
/** Агрегация behaviors от всех плагинов */
|
|
44
|
+
getBehaviors(): Promise<Record<string, unknown>>;
|
|
45
|
+
/** Список загруженных плагинов */
|
|
46
|
+
listPlugins(): PluginInfo[];
|
|
47
|
+
/** Проверка активности плагина */
|
|
48
|
+
isActive(name: string): boolean;
|
|
49
|
+
/** Проверка наличия плагина */
|
|
50
|
+
has(name: string): boolean;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/plugins/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAsBrG;;;;;;;;;;GAUG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,SAAS,CAA2D;IAC5E,OAAO,CAAC,MAAM,CAA0B;IAExC,0BAA0B;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAKnC,wBAAwB;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/D,0BAA0B;IACpB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa7C,oCAAoC;IAC9B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrE,gEAAgE;IAChE,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAOxE;;;;;OAKG;IACG,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IA2B7E;;;;;OAKG;IACG,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAwBnF,sDAAsD;IAChD,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAkB5C,2CAA2C;IACrC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAkBtD,kCAAkC;IAClC,WAAW,IAAI,UAAU,EAAE;IAU3B,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI/B,+BAA+B;IAC/B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAG3B"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { logInfo, logWarn, logError } from '../logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Менеджер плагинов.
|
|
4
|
+
*
|
|
5
|
+
* Использование:
|
|
6
|
+
* ```ts
|
|
7
|
+
* const pm = new PluginManager();
|
|
8
|
+
* pm.register(myPlugin);
|
|
9
|
+
* await pm.emit('tool:before', toolName, args);
|
|
10
|
+
* const sections = pm.getPromptSections();
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export class PluginManager {
|
|
14
|
+
plugins = new Map();
|
|
15
|
+
listeners = new Map();
|
|
16
|
+
active = new Set();
|
|
17
|
+
/** Регистрация плагина */
|
|
18
|
+
register(plugin) {
|
|
19
|
+
this.plugins.set(plugin.name, plugin);
|
|
20
|
+
logInfo('PLUGIN', `registered: ${plugin.name}${plugin.version ? ` v${plugin.version}` : ''}`);
|
|
21
|
+
}
|
|
22
|
+
/** Активация плагина */
|
|
23
|
+
async activate(name, ctx) {
|
|
24
|
+
const plugin = this.plugins.get(name);
|
|
25
|
+
if (!plugin) {
|
|
26
|
+
logWarn('PLUGIN', `activate: unknown plugin "${name}"`);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (this.active.has(name))
|
|
30
|
+
return;
|
|
31
|
+
try {
|
|
32
|
+
await plugin.onActivate?.(ctx);
|
|
33
|
+
this.active.add(name);
|
|
34
|
+
logInfo('PLUGIN', `activated: ${name}`);
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
logError('PLUGIN', `activate failed: ${name}: ${e.message}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** Деактивация плагина */
|
|
41
|
+
async deactivate(name) {
|
|
42
|
+
const plugin = this.plugins.get(name);
|
|
43
|
+
if (!plugin || !this.active.has(name))
|
|
44
|
+
return;
|
|
45
|
+
try {
|
|
46
|
+
await plugin.onDeactivate?.();
|
|
47
|
+
this.active.delete(name);
|
|
48
|
+
logInfo('PLUGIN', `deactivated: ${name}`);
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
logError('PLUGIN', `deactivate failed: ${name}: ${e.message}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/** Активация нескольких плагинов */
|
|
55
|
+
async activateAll(names, ctx) {
|
|
56
|
+
for (const name of names) {
|
|
57
|
+
await this.activate(name, ctx);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** Подписка на событие (внутренняя, вызывается при register) */
|
|
61
|
+
on(event, pluginName, handler) {
|
|
62
|
+
if (!this.listeners.has(event)) {
|
|
63
|
+
this.listeners.set(event, new Map());
|
|
64
|
+
}
|
|
65
|
+
this.listeners.get(event).set(`${pluginName}:${event}`, handler);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Диспатч события (sync middleware chain).
|
|
69
|
+
*
|
|
70
|
+
* Каждый handler получает результат предыдущего.
|
|
71
|
+
* Возвращает финальное значение после всех handler'ов.
|
|
72
|
+
*/
|
|
73
|
+
async emit(event, ...args) {
|
|
74
|
+
const eventListeners = this.listeners.get(event);
|
|
75
|
+
if (!eventListeners || eventListeners.size === 0)
|
|
76
|
+
return undefined;
|
|
77
|
+
let value = undefined;
|
|
78
|
+
for (const [key, handler] of Array.from(eventListeners.entries())) {
|
|
79
|
+
const pluginName = key.split(':')[0];
|
|
80
|
+
if (!this.active.has(pluginName))
|
|
81
|
+
continue;
|
|
82
|
+
try {
|
|
83
|
+
const result = await handler(...args, value);
|
|
84
|
+
if (result !== undefined && result !== null) {
|
|
85
|
+
value = result;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
if (e.name === 'PluginError') {
|
|
90
|
+
logWarn('PLUGIN', `blocked by ${pluginName}: ${e.message}`);
|
|
91
|
+
throw e;
|
|
92
|
+
}
|
|
93
|
+
logError('PLUGIN', `event ${event} handler ${pluginName} error: ${e.message}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return value;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Диспатч события с middleware chain для модификации данных.
|
|
100
|
+
*
|
|
101
|
+
* Handler может вернуть модифицированное значение или void (пропуск).
|
|
102
|
+
* Возвращает финальное значение.
|
|
103
|
+
*/
|
|
104
|
+
async emitModify(event, initial, ...args) {
|
|
105
|
+
const eventListeners = this.listeners.get(event);
|
|
106
|
+
if (!eventListeners || eventListeners.size === 0)
|
|
107
|
+
return initial;
|
|
108
|
+
let current = initial;
|
|
109
|
+
for (const [key, handler] of Array.from(eventListeners.entries())) {
|
|
110
|
+
const pluginName = key.split(':')[0];
|
|
111
|
+
if (!this.active.has(pluginName))
|
|
112
|
+
continue;
|
|
113
|
+
try {
|
|
114
|
+
const result = await handler(current, ...args);
|
|
115
|
+
if (result !== undefined && result !== null) {
|
|
116
|
+
current = result;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch (e) {
|
|
120
|
+
if (e.name === 'PluginError')
|
|
121
|
+
throw e;
|
|
122
|
+
logError('PLUGIN', `emitModify ${event} handler ${pluginName} error: ${e.message}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return current;
|
|
126
|
+
}
|
|
127
|
+
/** Агрегация секций system prompt от всех плагинов */
|
|
128
|
+
async getPromptSections() {
|
|
129
|
+
const sections = [];
|
|
130
|
+
for (const [name, plugin] of Array.from(this.plugins.entries())) {
|
|
131
|
+
if (!this.active.has(name))
|
|
132
|
+
continue;
|
|
133
|
+
if (!plugin.getPromptSection)
|
|
134
|
+
continue;
|
|
135
|
+
try {
|
|
136
|
+
const section = await plugin.getPromptSection();
|
|
137
|
+
if (section)
|
|
138
|
+
sections.push(section);
|
|
139
|
+
}
|
|
140
|
+
catch (e) {
|
|
141
|
+
logError('PLUGIN', `getPromptSection ${name} error: ${e.message}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return sections;
|
|
145
|
+
}
|
|
146
|
+
/** Агрегация behaviors от всех плагинов */
|
|
147
|
+
async getBehaviors() {
|
|
148
|
+
const behaviors = {};
|
|
149
|
+
for (const [name, plugin] of Array.from(this.plugins.entries())) {
|
|
150
|
+
if (!this.active.has(name))
|
|
151
|
+
continue;
|
|
152
|
+
if (!plugin.getBehaviors)
|
|
153
|
+
continue;
|
|
154
|
+
try {
|
|
155
|
+
const pluginBehaviors = await plugin.getBehaviors();
|
|
156
|
+
Object.assign(behaviors, pluginBehaviors);
|
|
157
|
+
}
|
|
158
|
+
catch (e) {
|
|
159
|
+
logError('PLUGIN', `getBehaviors ${name} error: ${e.message}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return behaviors;
|
|
163
|
+
}
|
|
164
|
+
/** Список загруженных плагинов */
|
|
165
|
+
listPlugins() {
|
|
166
|
+
return Array.from(this.plugins.entries()).map(([name, plugin]) => ({
|
|
167
|
+
name,
|
|
168
|
+
version: plugin.version,
|
|
169
|
+
description: plugin.description,
|
|
170
|
+
active: this.active.has(name),
|
|
171
|
+
events: [], // TODO: track registered events
|
|
172
|
+
}));
|
|
173
|
+
}
|
|
174
|
+
/** Проверка активности плагина */
|
|
175
|
+
isActive(name) {
|
|
176
|
+
return this.active.has(name);
|
|
177
|
+
}
|
|
178
|
+
/** Проверка наличия плагина */
|
|
179
|
+
has(name) {
|
|
180
|
+
return this.plugins.has(name);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/plugins/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Типы системы плагинов.
|
|
3
|
+
*
|
|
4
|
+
* Variant C — lifecycle events. Плагин подписывается на события,
|
|
5
|
+
* ядро диспатчит. Новые события добавляются без изменения интерфейса плагина.
|
|
6
|
+
*
|
|
7
|
+
* @module plugins/types
|
|
8
|
+
*/
|
|
9
|
+
/** Все события системы */
|
|
10
|
+
export type PluginEvent = 'agent:init' | 'agent:step' | 'agent:done' | 'tool:before' | 'tool:after' | 'tool:blocked' | 'llm:before' | 'llm:after' | 'prompt:build' | 'session:save' | 'session:load' | 'mode:switch' | 'plugin:loaded' | 'plugin:error';
|
|
11
|
+
/** Тип обработчика события */
|
|
12
|
+
export type PluginHandler<T = unknown> = (...args: any[]) => T | void | Promise<T | void>;
|
|
13
|
+
/** Контекст плагина */
|
|
14
|
+
export interface PluginContext {
|
|
15
|
+
/** Рабочая директория */
|
|
16
|
+
cwd: string;
|
|
17
|
+
/** Конфиг плагина (из manifest.json + .mmrc override) */
|
|
18
|
+
config: Record<string, unknown>;
|
|
19
|
+
/** Логгер */
|
|
20
|
+
logger: PluginLogger;
|
|
21
|
+
}
|
|
22
|
+
/** Логгер плагина */
|
|
23
|
+
export interface PluginLogger {
|
|
24
|
+
info(message: string): void;
|
|
25
|
+
warn(message: string): void;
|
|
26
|
+
error(message: string): void;
|
|
27
|
+
debug(message: string): void;
|
|
28
|
+
}
|
|
29
|
+
/** Ошибка плагина (для блокировки инструмента) */
|
|
30
|
+
export declare class PluginError extends Error {
|
|
31
|
+
constructor(message: string);
|
|
32
|
+
}
|
|
33
|
+
/** Интерфейс плагина */
|
|
34
|
+
export interface AgentPlugin {
|
|
35
|
+
/** Уникальное имя плагина */
|
|
36
|
+
name: string;
|
|
37
|
+
/** Версия (optional) */
|
|
38
|
+
version?: string;
|
|
39
|
+
/** Описание */
|
|
40
|
+
description?: string;
|
|
41
|
+
/** Активация плагина */
|
|
42
|
+
onActivate?(ctx: PluginContext): void | Promise<void>;
|
|
43
|
+
/** Деактивация плагина */
|
|
44
|
+
onDeactivate?(): void | Promise<void>;
|
|
45
|
+
/** Подписка на событие */
|
|
46
|
+
on?(event: PluginEvent, handler: PluginHandler): void;
|
|
47
|
+
/** Добавить секцию в system prompt */
|
|
48
|
+
getPromptSection?(): string | Promise<string>;
|
|
49
|
+
/** Добавить behaviors */
|
|
50
|
+
getBehaviors?(): Record<string, unknown>;
|
|
51
|
+
}
|
|
52
|
+
/** Манифест плагина */
|
|
53
|
+
export interface PluginManifest {
|
|
54
|
+
name: string;
|
|
55
|
+
version?: string;
|
|
56
|
+
description?: string;
|
|
57
|
+
entry: string;
|
|
58
|
+
/** Какие события слушает (для оптимизации) */
|
|
59
|
+
events?: PluginEvent[];
|
|
60
|
+
/** Зависимости от других плагинов */
|
|
61
|
+
dependencies?: Record<string, string>;
|
|
62
|
+
/** Конфиг плагина (пользователь переопределяет в .mmrc) */
|
|
63
|
+
config?: Record<string, unknown>;
|
|
64
|
+
}
|
|
65
|
+
/** Информация о загруженном плагине */
|
|
66
|
+
export interface PluginInfo {
|
|
67
|
+
name: string;
|
|
68
|
+
version?: string;
|
|
69
|
+
description?: string;
|
|
70
|
+
active: boolean;
|
|
71
|
+
events: PluginEvent[];
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,0BAA0B;AAC1B,MAAM,MAAM,WAAW,GAEnB,YAAY,GACZ,YAAY,GACZ,YAAY,GAEZ,aAAa,GACb,YAAY,GACZ,cAAc,GAEd,YAAY,GACZ,WAAW,GAEX,cAAc,GAEd,cAAc,GACd,cAAc,GAEd,aAAa,GAEb,eAAe,GACf,cAAc,CAAC;AAEnB,8BAA8B;AAC9B,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAE1F,uBAAuB;AACvB,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,aAAa;IACb,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,qBAAqB;AACrB,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,kDAAkD;AAClD,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAwB;AACxB,MAAM,WAAW,WAAW;IAC1B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,wBAAwB;IACxB,UAAU,CAAC,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,0BAA0B;IAC1B,YAAY,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC,0BAA0B;IAC1B,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAEtD,sCAAsC;IACtC,gBAAgB,CAAC,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9C,yBAAyB;IACzB,YAAY,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,uBAAuB;AACvB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,uCAAuC;AACvC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAwDA,kDAAkD;AAClD,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF"}
|
package/dist/repl/commands.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/repl/commands.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAWzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;;;;;;;;;;GAaG;AAEH,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEpF,0CAA0C;AAC1C,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3D,mBAAmB,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvE,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/repl/commands.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAWzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;;;;;;;;;;GAaG;AAEH,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEpF,0CAA0C;AAC1C,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3D,mBAAmB,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,+BAA+B;AAC/B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,mDAAmD;AACnD,wBAAgB,gBAAgB,IAAI,YAAY,EAAE,CA2BjD;AAED,sDAAsD;AACtD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMpF;AA8ED,wBAAgB,aAAa;;;EAAgE;AAC7F,wBAAgB,eAAe,SAAmD;AAClF,wBAAgB,WAAW,YAAyC;AAWpE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAc5E;AAiSD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAUzD;AAED,wBAAgB,UAAU,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAS1F"}
|