micro-models-agent 0.2.56 → 0.2.58

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.
Files changed (42) hide show
  1. package/dist/agent/loop.d.ts.map +1 -1
  2. package/dist/agent/loop.js +48 -12
  3. package/dist/agent/loop.js.map +1 -1
  4. package/dist/agent/system-prompt.js +1 -1
  5. package/dist/agent/system-prompt.js.map +1 -1
  6. package/dist/plugins/builtin/lint-on-write/index.d.ts +12 -0
  7. package/dist/plugins/builtin/lint-on-write/index.d.ts.map +1 -0
  8. package/dist/plugins/builtin/lint-on-write/index.js +98 -0
  9. package/dist/plugins/builtin/lint-on-write/index.js.map +1 -0
  10. package/dist/plugins/builtin/lint-on-write/index.ts +97 -0
  11. package/dist/plugins/builtin/lint-on-write/manifest.json +13 -0
  12. package/dist/plugins/builtin/notify/index.d.ts +12 -0
  13. package/dist/plugins/builtin/notify/index.d.ts.map +1 -0
  14. package/dist/plugins/builtin/notify/index.js +87 -0
  15. package/dist/plugins/builtin/notify/index.js.map +1 -0
  16. package/dist/plugins/builtin/notify/index.ts +94 -0
  17. package/dist/plugins/builtin/notify/manifest.json +16 -0
  18. package/dist/plugins/loader.d.ts +6 -1
  19. package/dist/plugins/loader.d.ts.map +1 -1
  20. package/dist/plugins/loader.js +45 -8
  21. package/dist/plugins/loader.js.map +1 -1
  22. package/dist/plugins/manager.d.ts +5 -2
  23. package/dist/plugins/manager.d.ts.map +1 -1
  24. package/dist/plugins/manager.js +10 -3
  25. package/dist/plugins/manager.js.map +1 -1
  26. package/dist/plugins/types.d.ts +3 -0
  27. package/dist/plugins/types.d.ts.map +1 -1
  28. package/dist/repl/commands.d.ts.map +1 -1
  29. package/dist/repl/commands.js +20 -0
  30. package/dist/repl/commands.js.map +1 -1
  31. package/dist/repl/index.d.ts.map +1 -1
  32. package/dist/repl/index.js +9 -0
  33. package/dist/repl/index.js.map +1 -1
  34. package/dist/ui/ink/components/MessageBlock.d.ts +1 -1
  35. package/dist/ui/ink/components/MessageBlock.d.ts.map +1 -1
  36. package/dist/ui/ink/components/MessageBlock.js +3 -0
  37. package/dist/ui/ink/components/MessageBlock.js.map +1 -1
  38. package/dist/ui/ink/renderer.d.ts +1 -0
  39. package/dist/ui/ink/renderer.d.ts.map +1 -1
  40. package/dist/ui/ink/renderer.js +3 -0
  41. package/dist/ui/ink/renderer.js.map +1 -1
  42. package/package.json +1 -1
@@ -0,0 +1,87 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { platform } from 'node:os';
3
+ /**
4
+ * Плагин notify — OS desktop-уведомления.
5
+ *
6
+ * Отправляет toast-уведомление при:
7
+ * - agent:done — задача выполнена
8
+ * - tool:blocked — агент заблокирован
9
+ * - tool:after (question) — агент ждёт ответа
10
+ *
11
+ * Zero-dependency: shell-out по платформе.
12
+ * - win32: PowerShell NotifyIcon balloon tip
13
+ * - darwin: osascript display notification
14
+ * - linux: notify-send
15
+ *
16
+ * @module plugins/builtin/notify
17
+ */
18
+ function sendNotification(title, body) {
19
+ const p = platform();
20
+ try {
21
+ if (p === 'win32') {
22
+ // PowerShell: System.Windows.Forms.NotifyIcon balloon tip
23
+ const psScript = `Add-Type -AssemblyName System.Windows.Forms; $n = New-Object System.Windows.Forms.NotifyIcon; $n.Icon = [System.Drawing.SystemIcons]::Information; $n.Visible = $true; $n.ShowBalloonTip(5000, '${title.replace(/'/g, "''")}', '${body.replace(/'/g, "''")}', [System.Windows.Forms.ToolTipIcon]::Info)`;
24
+ execSync(`powershell -Command "${psScript}"`, {
25
+ timeout: 5000,
26
+ windowsHide: true,
27
+ stdio: 'pipe',
28
+ });
29
+ }
30
+ else if (p === 'darwin') {
31
+ execSync(`osascript -e 'display notification "${body.replace(/"/g, '\\"')}" with title "${title.replace(/"/g, '\\"')}"'`, {
32
+ timeout: 5000,
33
+ stdio: 'pipe',
34
+ });
35
+ }
36
+ else {
37
+ // Linux
38
+ execSync(`notify-send "${title.replace(/"/g, '\\"')}" "${body.replace(/"/g, '\\"')}"`, {
39
+ timeout: 5000,
40
+ stdio: 'pipe',
41
+ });
42
+ }
43
+ }
44
+ catch {
45
+ // Best-effort — если уведомление не отправлено, не крашимся
46
+ }
47
+ }
48
+ export default function createNotify() {
49
+ let ctx = null;
50
+ let config = { onDone: true, onBlocked: true, onQuestion: true };
51
+ return {
52
+ name: 'notify',
53
+ version: '1.0.0',
54
+ description: 'OS desktop notifications for agent events',
55
+ onActivate(pluginCtx) {
56
+ ctx = pluginCtx;
57
+ // Мержим конфиг из manifest + user override
58
+ if (pluginCtx.config) {
59
+ config = { ...config, ...pluginCtx.config };
60
+ }
61
+ pluginCtx.logger.info(`notify: active (done=${config.onDone}, blocked=${config.onBlocked}, question=${config.onQuestion})`);
62
+ },
63
+ onDeactivate() {
64
+ ctx = null;
65
+ },
66
+ getPromptSection() {
67
+ return '## Notify Plugin\nDesktop notifications are enabled. You don\'t need to notify the user about completion — it happens automatically.';
68
+ },
69
+ };
70
+ }
71
+ /**
72
+ * Обработчики событий — вызываются извне через PluginManager.on().
73
+ * Экспортируются для регистрации в loop.ts.
74
+ */
75
+ export function handleAgentDone() {
76
+ sendNotification('MMA', 'Agent finished the task');
77
+ }
78
+ export function handleToolBlocked(toolName, _args) {
79
+ sendNotification('MMA', `Tool blocked: ${toolName}`);
80
+ }
81
+ export function handleToolAfter(toolName, _args, result) {
82
+ // Question tool — агент ждёт ответа
83
+ if (toolName === 'question') {
84
+ sendNotification('MMA', 'Agent needs your answer');
85
+ }
86
+ }
87
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/builtin/notify/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC;;;;;;;;;;;;;;GAcG;AAEH,SAAS,gBAAgB,CAAC,KAAa,EAAE,IAAY;IACnD,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;IACrB,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;YAClB,0DAA0D;YAC1D,MAAM,QAAQ,GAAG,mMAAmM,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,8CAA8C,CAAC;YAC3T,QAAQ,CAAC,wBAAwB,QAAQ,GAAG,EAAE;gBAC5C,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1B,QAAQ,CAAC,uCAAuC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,iBAAiB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;gBACxH,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,QAAQ;YACR,QAAQ,CAAC,gBAAgB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE;gBACrF,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,YAAY;IAClC,IAAI,GAAG,GAAyB,IAAI,CAAC;IACrC,IAAI,MAAM,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAEjE,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,2CAA2C;QAExD,UAAU,CAAC,SAAwB;YACjC,GAAG,GAAG,SAAS,CAAC;YAChB,4CAA4C;YAC5C,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;gBACrB,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,MAAiC,EAAmB,CAAC;YAC1F,CAAC;YACD,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,MAAM,CAAC,MAAM,aAAa,MAAM,CAAC,SAAS,cAAc,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;QAC9H,CAAC;QAED,YAAY;YACV,GAAG,GAAG,IAAI,CAAC;QACb,CAAC;QAED,gBAAgB;YACd,OAAO,sIAAsI,CAAC;QAChJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,gBAAgB,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,KAAc;IAChE,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,QAAQ,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,KAAc,EAAE,MAA4B;IAC5F,oCAAoC;IACpC,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,gBAAgB,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
@@ -0,0 +1,94 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { platform } from 'node:os';
3
+ import type { AgentPlugin, PluginContext } from '../../types.js';
4
+
5
+ /**
6
+ * Плагин notify — OS desktop-уведомления.
7
+ *
8
+ * Отправляет toast-уведомление при:
9
+ * - agent:done — задача выполнена
10
+ * - tool:blocked — агент заблокирован
11
+ * - tool:after (question) — агент ждёт ответа
12
+ *
13
+ * Zero-dependency: shell-out по платформе.
14
+ * - win32: PowerShell NotifyIcon balloon tip
15
+ * - darwin: osascript display notification
16
+ * - linux: notify-send
17
+ *
18
+ * @module plugins/builtin/notify
19
+ */
20
+
21
+ function sendNotification(title: string, body: string): void {
22
+ const p = platform();
23
+ try {
24
+ if (p === 'win32') {
25
+ // PowerShell: System.Windows.Forms.NotifyIcon balloon tip
26
+ const psScript = `Add-Type -AssemblyName System.Windows.Forms; $n = New-Object System.Windows.Forms.NotifyIcon; $n.Icon = [System.Drawing.SystemIcons]::Information; $n.Visible = $true; $n.ShowBalloonTip(5000, '${title.replace(/'/g, "''")}', '${body.replace(/'/g, "''")}', [System.Windows.Forms.ToolTipIcon]::Info)`;
27
+ execSync(`powershell -Command "${psScript}"`, {
28
+ timeout: 5000,
29
+ windowsHide: true,
30
+ stdio: 'pipe',
31
+ });
32
+ } else if (p === 'darwin') {
33
+ execSync(`osascript -e 'display notification "${body.replace(/"/g, '\\"')}" with title "${title.replace(/"/g, '\\"')}"'`, {
34
+ timeout: 5000,
35
+ stdio: 'pipe',
36
+ });
37
+ } else {
38
+ // Linux
39
+ execSync(`notify-send "${title.replace(/"/g, '\\"')}" "${body.replace(/"/g, '\\"')}"`, {
40
+ timeout: 5000,
41
+ stdio: 'pipe',
42
+ });
43
+ }
44
+ } catch {
45
+ // Best-effort — если уведомление не отправлено, не крашимся
46
+ }
47
+ }
48
+
49
+ export default function createNotify(): AgentPlugin {
50
+ let ctx: PluginContext | null = null;
51
+ let config = { onDone: true, onBlocked: true, onQuestion: true };
52
+
53
+ return {
54
+ name: 'notify',
55
+ version: '1.0.0',
56
+ description: 'OS desktop notifications for agent events',
57
+
58
+ onActivate(pluginCtx: PluginContext) {
59
+ ctx = pluginCtx;
60
+ // Мержим конфиг из manifest + user override
61
+ if (pluginCtx.config) {
62
+ config = { ...config, ...pluginCtx.config as Record<string, unknown> } as typeof config;
63
+ }
64
+ pluginCtx.logger.info(`notify: active (done=${config.onDone}, blocked=${config.onBlocked}, question=${config.onQuestion})`);
65
+ },
66
+
67
+ onDeactivate() {
68
+ ctx = null;
69
+ },
70
+
71
+ getPromptSection() {
72
+ return '## Notify Plugin\nDesktop notifications are enabled. You don\'t need to notify the user about completion — it happens automatically.';
73
+ },
74
+ };
75
+ }
76
+
77
+ /**
78
+ * Обработчики событий — вызываются извне через PluginManager.on().
79
+ * Экспортируются для регистрации в loop.ts.
80
+ */
81
+ export function handleAgentDone(): void {
82
+ sendNotification('MMA', 'Agent finished the task');
83
+ }
84
+
85
+ export function handleToolBlocked(toolName: string, _args: unknown): void {
86
+ sendNotification('MMA', `Tool blocked: ${toolName}`);
87
+ }
88
+
89
+ export function handleToolAfter(toolName: string, _args: unknown, result: { exitCode: number }): void {
90
+ // Question tool — агент ждёт ответа
91
+ if (toolName === 'question') {
92
+ sendNotification('MMA', 'Agent needs your answer');
93
+ }
94
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "name": "notify",
4
+ "events": [
5
+ "agent:done",
6
+ "tool:blocked",
7
+ "tool:after"
8
+ ],
9
+ "description": "OS desktop notifications when agent finishes, gets blocked, or needs attention",
10
+ "config": {
11
+ "onDone": true,
12
+ "onQuestion": true,
13
+ "onBlocked": true
14
+ },
15
+ "entry": "index.js"
16
+ }
@@ -1,9 +1,14 @@
1
- import type { PluginManifest } from './types.js';
1
+ import type { PluginManifest, PluginInfo } from './types.js';
2
2
  import type { PluginManager } from './manager.js';
3
3
  /**
4
4
  * Загружает все плагины из директорий поиска.
5
5
  */
6
6
  export declare function loadAllPlugins(manager: PluginManager): Promise<void>;
7
+ /**
8
+ * Загружает все плагины и возвращает информацию о них (с источником).
9
+ * Используется для отображения при старте сессии.
10
+ */
11
+ export declare function loadAllPluginsWithInfo(manager: PluginManager): Promise<PluginInfo[]>;
7
12
  /**
8
13
  * Включает hot-reload для плагина.
9
14
  *
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAe,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAgGlD;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAU1E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,aAAa,EACtB,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GACtC,MAAM,IAAI,CAkCZ"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAe,cAAc,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AACxF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAwGlD;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAU1E;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA2B1F;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,aAAa,EACtB,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GACtC,MAAM,IAAI,CAkCZ"}
@@ -1,22 +1,29 @@
1
1
  import { existsSync, readFileSync, readdirSync, watch } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { pathToFileURL } from 'node:url';
4
+ import { fileURLToPath } from 'node:url';
4
5
  import { logInfo, logWarn, logError } from '../logger.js';
5
6
  /**
6
7
  * Загрузчик плагинов.
7
8
  *
8
- * Discovery:
9
- * - ~/.mma/plugins/ — глобальные
10
- * - .mma/plugins/ — проектные
9
+ * Discovery (в порядке приоритета):
10
+ * 1. Builtin — src/plugins/builtin/ (сборка копирует в dist/)
11
+ * 2. Project — .mma/plugins/ (локально проекта)
12
+ * 3. User — ~/.mma/plugins/ (публичные пользователя)
11
13
  *
12
14
  * Hot-reload: fs.watch на директорию плагина.
13
15
  *
14
16
  * @module plugins/loader
15
17
  */
16
- /** Директории поиска плагинов */
17
- const PLUGIN_DIRS = [
18
- join(process.env.HOME || process.env.USERPROFILE || '', '.mma', 'plugins'),
19
- '.mma/plugins',
18
+ const __filename = fileURLToPath(import.meta.url);
19
+ const __dirname = join(__filename, '..', '..');
20
+ /** Builtin плагины (bundled с MMA) */
21
+ const BUILTIN_PLUGINS_DIR = join(__dirname, 'plugins', 'builtin');
22
+ /** Директории поиска плагинов (source → dir) */
23
+ const PLUGIN_SCAN_DIRS = [
24
+ { source: 'builtin', dir: BUILTIN_PLUGINS_DIR },
25
+ { source: 'project', dir: '.mma/plugins' },
26
+ { source: 'user', dir: join(process.env.HOME || process.env.USERPROFILE || '', '.mma', 'plugins') },
20
27
  ];
21
28
  /**
22
29
  * Сканирует директорию на наличие плагинов.
@@ -93,7 +100,7 @@ async function loadPluginFromDir(pluginDir) {
93
100
  * Загружает все плагины из директорий поиска.
94
101
  */
95
102
  export async function loadAllPlugins(manager) {
96
- for (const dir of PLUGIN_DIRS) {
103
+ for (const { dir } of PLUGIN_SCAN_DIRS) {
97
104
  const pluginDirs = scanPluginDir(dir);
98
105
  for (const pluginDir of pluginDirs) {
99
106
  const plugin = await loadPluginFromDir(pluginDir);
@@ -103,6 +110,36 @@ export async function loadAllPlugins(manager) {
103
110
  }
104
111
  }
105
112
  }
113
+ /**
114
+ * Загружает все плагины и возвращает информацию о них (с источником).
115
+ * Используется для отображения при старте сессии.
116
+ */
117
+ export async function loadAllPluginsWithInfo(manager) {
118
+ const infos = [];
119
+ const seen = new Set();
120
+ for (const { source, dir } of PLUGIN_SCAN_DIRS) {
121
+ const pluginDirs = scanPluginDir(dir);
122
+ for (const pluginDir of pluginDirs) {
123
+ const manifest = loadManifest(pluginDir);
124
+ if (!manifest || seen.has(manifest.name))
125
+ continue;
126
+ seen.add(manifest.name);
127
+ const plugin = await loadPluginFromDir(pluginDir);
128
+ if (plugin) {
129
+ manager.register(plugin);
130
+ infos.push({
131
+ name: plugin.name,
132
+ version: plugin.version || manifest.version,
133
+ description: plugin.description || manifest.description,
134
+ active: false,
135
+ events: manifest.events || [],
136
+ source,
137
+ });
138
+ }
139
+ }
140
+ }
141
+ return infos;
142
+ }
106
143
  /**
107
144
  * Включает hot-reload для плагина.
108
145
  *
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { AgentPlugin, PluginEvent, PluginHandler, PluginContext, PluginInfo } from './types.js';
1
+ import type { AgentPlugin, PluginEvent, PluginHandler, PluginContext, PluginInfo, PluginSource } from './types.js';
2
2
  /**
3
3
  * Менеджер плагинов.
4
4
  *
@@ -14,8 +14,9 @@ export declare class PluginManager {
14
14
  private plugins;
15
15
  private listeners;
16
16
  private active;
17
+ private sources;
17
18
  /** Регистрация плагина */
18
- register(plugin: AgentPlugin): void;
19
+ register(plugin: AgentPlugin, source?: PluginSource): void;
19
20
  /** Активация плагина */
20
21
  activate(name: string, ctx: PluginContext): Promise<void>;
21
22
  /** Деактивация плагина */
@@ -44,6 +45,8 @@ export declare class PluginManager {
44
45
  getBehaviors(): Promise<Record<string, unknown>>;
45
46
  /** Список загруженных плагинов */
46
47
  listPlugins(): PluginInfo[];
48
+ /** Получить список активных плагинов (имена) */
49
+ getActivePluginNames(): string[];
47
50
  /** Проверка активности плагина */
48
51
  isActive(name: string): boolean;
49
52
  /** Проверка наличия плагина */
@@ -1 +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"}
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,YAAY,EAAE,MAAM,YAAY,CAAC;AAsBnH;;;;;;;;;;GAUG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,SAAS,CAA2D;IAC5E,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,OAAO,CAAwC;IAEvD,0BAA0B;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,GAAE,YAAqB,GAAG,IAAI;IAMlE,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;IAW3B,gDAAgD;IAChD,oBAAoB,IAAI,MAAM,EAAE;IAIhC,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI/B,+BAA+B;IAC/B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAG3B"}
@@ -14,10 +14,12 @@ export class PluginManager {
14
14
  plugins = new Map();
15
15
  listeners = new Map();
16
16
  active = new Set();
17
+ sources = new Map();
17
18
  /** Регистрация плагина */
18
- register(plugin) {
19
+ register(plugin, source = 'user') {
19
20
  this.plugins.set(plugin.name, plugin);
20
- logInfo('PLUGIN', `registered: ${plugin.name}${plugin.version ? ` v${plugin.version}` : ''}`);
21
+ this.sources.set(plugin.name, source);
22
+ logInfo('PLUGIN', `registered: ${plugin.name}${plugin.version ? ` v${plugin.version}` : ''} (${source})`);
21
23
  }
22
24
  /** Активация плагина */
23
25
  async activate(name, ctx) {
@@ -168,9 +170,14 @@ export class PluginManager {
168
170
  version: plugin.version,
169
171
  description: plugin.description,
170
172
  active: this.active.has(name),
171
- events: [], // TODO: track registered events
173
+ events: [],
174
+ source: this.sources.get(name) || 'user',
172
175
  }));
173
176
  }
177
+ /** Получить список активных плагинов (имена) */
178
+ getActivePluginNames() {
179
+ return Array.from(this.active);
180
+ }
174
181
  /** Проверка активности плагина */
175
182
  isActive(name) {
176
183
  return this.active.has(name);
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/plugins/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAqB1D;;;;;;;;;;GAUG;AACH,MAAM,OAAO,aAAa;IAChB,OAAO,GAA6B,IAAI,GAAG,EAAE,CAAC;IAC9C,SAAS,GAAiD,IAAI,GAAG,EAAE,CAAC;IACpE,MAAM,GAAgB,IAAI,GAAG,EAAE,CAAC;IAExC,0BAA0B;IAC1B,QAAQ,CAAC,MAAmB;QAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtC,OAAO,CAAC,QAAQ,EAAE,eAAe,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,wBAAwB;IACxB,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,GAAkB;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,QAAQ,EAAE,6BAA6B,IAAI,GAAG,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QAElC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,CAAC,QAAQ,EAAE,cAAc,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QAE9C,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,OAAO,CAAC,QAAQ,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,KAAK,CAAC,WAAW,CAAC,KAAe,EAAE,GAAkB;QACnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,EAAE,CAAC,KAAkB,EAAE,UAAkB,EAAE,OAAsB;QAC/D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,GAAG,UAAU,IAAI,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAI,KAAkB,EAAE,GAAG,IAAe;QAClD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAEnE,IAAI,KAAK,GAAkB,SAAS,CAAC;QAErC,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAClE,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;gBAAE,SAAS;YAE3C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC7C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBAC5C,KAAK,GAAG,MAAW,CAAC;gBACtB,CAAC;YACH,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBAC7B,OAAO,CAAC,QAAQ,EAAE,cAAc,UAAU,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC5D,MAAM,CAAC,CAAC;gBACV,CAAC;gBACD,QAAQ,CAAC,QAAQ,EAAE,SAAS,KAAK,YAAY,UAAU,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAI,KAAkB,EAAE,OAAU,EAAE,GAAG,IAAe;QACpE,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC;QAEjE,IAAI,OAAO,GAAG,OAAO,CAAC;QAEtB,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAClE,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;gBAAE,SAAS;YAE3C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;gBAC/C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBAC5C,OAAO,GAAG,MAAW,CAAC;gBACxB,CAAC;YACH,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa;oBAAE,MAAM,CAAC,CAAC;gBACtC,QAAQ,CAAC,QAAQ,EAAE,cAAc,KAAK,YAAY,UAAU,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACtF,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,sDAAsD;IACtD,KAAK,CAAC,iBAAiB;QACrB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YACrC,IAAI,CAAC,MAAM,CAAC,gBAAgB;gBAAE,SAAS;YAEvC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAChD,IAAI,OAAO;oBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,IAAI,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,2CAA2C;IAC3C,KAAK,CAAC,YAAY;QAChB,MAAM,SAAS,GAA4B,EAAE,CAAC;QAE9C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YACrC,IAAI,CAAC,MAAM,CAAC,YAAY;gBAAE,SAAS;YAEnC,IAAI,CAAC;gBACH,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;gBACpD,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YAC5C,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,IAAI,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,kCAAkC;IAClC,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YACjE,IAAI;YACJ,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAC7B,MAAM,EAAE,EAAE,EAAE,gCAAgC;SAC7C,CAAC,CAAC,CAAC;IACN,CAAC;IAED,kCAAkC;IAClC,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,+BAA+B;IAC/B,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;CACF"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/plugins/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAqB1D;;;;;;;;;;GAUG;AACH,MAAM,OAAO,aAAa;IAChB,OAAO,GAA6B,IAAI,GAAG,EAAE,CAAC;IAC9C,SAAS,GAAiD,IAAI,GAAG,EAAE,CAAC;IACpE,MAAM,GAAgB,IAAI,GAAG,EAAE,CAAC;IAChC,OAAO,GAA8B,IAAI,GAAG,EAAE,CAAC;IAEvD,0BAA0B;IAC1B,QAAQ,CAAC,MAAmB,EAAE,SAAuB,MAAM;QACzD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtC,OAAO,CAAC,QAAQ,EAAE,eAAe,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,GAAG,CAAC,CAAC;IAC5G,CAAC;IAED,wBAAwB;IACxB,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,GAAkB;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,QAAQ,EAAE,6BAA6B,IAAI,GAAG,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QAElC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,CAAC,QAAQ,EAAE,cAAc,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QAE9C,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,OAAO,CAAC,QAAQ,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,KAAK,CAAC,WAAW,CAAC,KAAe,EAAE,GAAkB;QACnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,EAAE,CAAC,KAAkB,EAAE,UAAkB,EAAE,OAAsB;QAC/D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,GAAG,UAAU,IAAI,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAI,KAAkB,EAAE,GAAG,IAAe;QAClD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAEnE,IAAI,KAAK,GAAkB,SAAS,CAAC;QAErC,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAClE,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;gBAAE,SAAS;YAE3C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC7C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBAC5C,KAAK,GAAG,MAAW,CAAC;gBACtB,CAAC;YACH,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBAC7B,OAAO,CAAC,QAAQ,EAAE,cAAc,UAAU,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC5D,MAAM,CAAC,CAAC;gBACV,CAAC;gBACD,QAAQ,CAAC,QAAQ,EAAE,SAAS,KAAK,YAAY,UAAU,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAI,KAAkB,EAAE,OAAU,EAAE,GAAG,IAAe;QACpE,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC;QAEjE,IAAI,OAAO,GAAG,OAAO,CAAC;QAEtB,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAClE,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;gBAAE,SAAS;YAE3C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;gBAC/C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBAC5C,OAAO,GAAG,MAAW,CAAC;gBACxB,CAAC;YACH,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa;oBAAE,MAAM,CAAC,CAAC;gBACtC,QAAQ,CAAC,QAAQ,EAAE,cAAc,KAAK,YAAY,UAAU,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACtF,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,sDAAsD;IACtD,KAAK,CAAC,iBAAiB;QACrB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YACrC,IAAI,CAAC,MAAM,CAAC,gBAAgB;gBAAE,SAAS;YAEvC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAChD,IAAI,OAAO;oBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,IAAI,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,2CAA2C;IAC3C,KAAK,CAAC,YAAY;QAChB,MAAM,SAAS,GAA4B,EAAE,CAAC;QAE9C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YACrC,IAAI,CAAC,MAAM,CAAC,YAAY;gBAAE,SAAS;YAEnC,IAAI,CAAC;gBACH,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;gBACpD,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YAC5C,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,IAAI,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,kCAAkC;IAClC,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YACjE,IAAI;YACJ,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAC7B,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM;SACzC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,gDAAgD;IAChD,oBAAoB;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,kCAAkC;IAClC,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,+BAA+B;IAC/B,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;CACF"}
@@ -62,6 +62,8 @@ export interface PluginManifest {
62
62
  /** Конфиг плагина (пользователь переопределяет в .mmrc) */
63
63
  config?: Record<string, unknown>;
64
64
  }
65
+ /** Источник плагина */
66
+ export type PluginSource = 'builtin' | 'project' | 'user';
65
67
  /** Информация о загруженном плагине */
66
68
  export interface PluginInfo {
67
69
  name: string;
@@ -69,5 +71,6 @@ export interface PluginInfo {
69
71
  description?: string;
70
72
  active: boolean;
71
73
  events: PluginEvent[];
74
+ source: PluginSource;
72
75
  }
73
76
  //# sourceMappingURL=types.d.ts.map
@@ -1 +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"}
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,uBAAuB;AACvB,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE1D,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;IACtB,MAAM,EAAE,YAAY,CAAC;CACtB"}
@@ -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;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,CA0BjD;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"}
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;AAIxD;;;;;;;;;;;;;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;AA+ED,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;AAoTD,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"}
@@ -13,6 +13,8 @@ import { getTheme, listThemes, switchTheme } from '../styling/index.js';
13
13
  import { loadThemeConfig, installTheme, removeTheme } from '../styling/loader.js';
14
14
  import { loadConfig, saveConfig } from '../config/config.js';
15
15
  import { logInfo } from '../logger.js';
16
+ import { PluginManager } from '../plugins/manager.js';
17
+ import { loadAllPluginsWithInfo } from '../plugins/loader.js';
16
18
  /** Возвращает список всех доступных слэш-команд */
17
19
  export function getSlashCommands() {
18
20
  return [
@@ -28,6 +30,7 @@ export function getSlashCommands() {
28
30
  { name: 'git', description: 'git operations', handler: cmdGit },
29
31
  { name: 'memory', description: 'memory management', handler: cmdMemory },
30
32
  { name: 'skill', description: 'list skills', handler: cmdSkill },
33
+ { name: 'plugins', description: 'list plugins', handler: cmdPlugins },
31
34
  { name: 'sessions', description: 'list sessions', handler: cmdSessions },
32
35
  { name: 'resume', description: 'resume session', handler: cmdResume },
33
36
  { name: 'save', description: 'save session', handler: cmdSave },
@@ -69,6 +72,7 @@ function cmdHelp(_args, ctx) {
69
72
  /git <args> — git operations
70
73
  /memory — memory management (show/add/search/remove/export)
71
74
  /skill — list installed skills
75
+ /plugins — list plugins
72
76
  /sessions — list saved sessions
73
77
  /resume <id> — resume a session
74
78
  /save [name] — save current session
@@ -358,6 +362,22 @@ function cmdSkill(args, ctx) {
358
362
  ctx.renderer.writeInfo(' Usage: /skill [list]');
359
363
  }
360
364
  }
365
+ async function cmdPlugins(_args, ctx) {
366
+ const pluginManager = new PluginManager();
367
+ await loadAllPluginsWithInfo(pluginManager);
368
+ const plugins = pluginManager.listPlugins();
369
+ if (plugins.length === 0) {
370
+ ctx.renderer.writeDim(' No plugins available.');
371
+ ctx.renderer.writeDim(' Place plugins in .mma/plugins/<name>/');
372
+ return;
373
+ }
374
+ ctx.renderer.writeInfo(` Available plugins (${plugins.length}):`);
375
+ for (const p of plugins) {
376
+ const version = p.version ? ` v${p.version}` : '';
377
+ const status = p.active ? 'active' : 'inactive';
378
+ ctx.renderer.writeLine(` ${p.name}${version} [${p.source}] ${status}`);
379
+ }
380
+ }
361
381
  function cmdSessions(_args, ctx) {
362
382
  const sessions = listSessions();
363
383
  ctx.renderer.writeLine(formatSessionList(sessions));