micro-models-agent 0.2.50 → 0.2.52
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/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/dist/updater.js +1 -1
- package/dist/updater.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { jsonrepair } from 'jsonrepair';
|
|
2
|
+
import { ContextManager } from './context.js';
|
|
3
|
+
import { extractAllToolCalls, validateToolCall, doChat } from '../tools/subagent.js';
|
|
4
|
+
import { logDebug, logWarn } from '../logger.js';
|
|
5
|
+
/**
|
|
6
|
+
* Запуск минимального ReAct-цикла.
|
|
7
|
+
*
|
|
8
|
+
* @returns Результат с финальными messages и ответом
|
|
9
|
+
*/
|
|
10
|
+
export async function reactLoop(config, handlers = {}) {
|
|
11
|
+
const { provider, systemPrompt, initialMessages, maxSteps, quiet, showThinking, caller } = config;
|
|
12
|
+
const messages = [
|
|
13
|
+
{ role: 'system', content: systemPrompt },
|
|
14
|
+
...(initialMessages || []),
|
|
15
|
+
];
|
|
16
|
+
const ctx = new ContextManager(provider.contextWindow);
|
|
17
|
+
let consecutiveEmpty = 0;
|
|
18
|
+
let aborted = false;
|
|
19
|
+
let lastResponse = '';
|
|
20
|
+
for (let step = 0; step < maxSteps; step++) {
|
|
21
|
+
// Step start
|
|
22
|
+
await handlers.onStepStart?.(step, messages);
|
|
23
|
+
// Token counting
|
|
24
|
+
if (step === 0) {
|
|
25
|
+
await ctx.updateTokens(messages);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
await ctx.updateTokensIncremental(messages);
|
|
29
|
+
}
|
|
30
|
+
// Context compaction
|
|
31
|
+
if (ctx.needsCompact && messages.length > 6) {
|
|
32
|
+
const before = messages.length;
|
|
33
|
+
messages.splice(0, messages.length, ...ctx.compact(messages));
|
|
34
|
+
await ctx.updateTokens(messages);
|
|
35
|
+
handlers.onCompact?.(before, messages.length);
|
|
36
|
+
}
|
|
37
|
+
// Emergency compact
|
|
38
|
+
if (ctx.isOverflow) {
|
|
39
|
+
const before = messages.length;
|
|
40
|
+
messages.splice(0, messages.length, ...ctx.emergencyCompact(messages));
|
|
41
|
+
await ctx.updateTokens(messages);
|
|
42
|
+
handlers.onCompact?.(before, messages.length);
|
|
43
|
+
}
|
|
44
|
+
// LLM call
|
|
45
|
+
const { response } = await doChat(provider, messages, null, undefined, 1, showThinking, caller);
|
|
46
|
+
// Post-LLM hook (allows modification)
|
|
47
|
+
const modifiedResponse = await handlers.onAfterLLM?.(step, response);
|
|
48
|
+
const finalResponse = typeof modifiedResponse === 'string' ? modifiedResponse : response;
|
|
49
|
+
// Empty response handling
|
|
50
|
+
if (!finalResponse.trim()) {
|
|
51
|
+
consecutiveEmpty++;
|
|
52
|
+
handlers.onEmptyResponse?.(step, consecutiveEmpty);
|
|
53
|
+
if (consecutiveEmpty >= 3) {
|
|
54
|
+
logWarn(caller || 'REACT', `3 consecutive empty responses, stopping`);
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
messages.push({ role: 'assistant', content: finalResponse });
|
|
58
|
+
messages.push({ role: 'user', content: 'Continue.' });
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
consecutiveEmpty = 0;
|
|
62
|
+
lastResponse = finalResponse;
|
|
63
|
+
messages.push({ role: 'assistant', content: finalResponse });
|
|
64
|
+
// Parse tool calls
|
|
65
|
+
const allJsonRaw = extractAllToolCalls(finalResponse);
|
|
66
|
+
const validCalls = [];
|
|
67
|
+
for (const jsonRaw of allJsonRaw) {
|
|
68
|
+
let p = null;
|
|
69
|
+
try {
|
|
70
|
+
p = JSON.parse(jsonrepair(jsonRaw));
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
try {
|
|
74
|
+
p = JSON.parse(jsonRaw);
|
|
75
|
+
}
|
|
76
|
+
catch { /* skip */ }
|
|
77
|
+
}
|
|
78
|
+
if (p) {
|
|
79
|
+
const v = validateToolCall(p);
|
|
80
|
+
if (v.valid)
|
|
81
|
+
validCalls.push({ parsed: p, cmd: v.cmd });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// No tool calls — done
|
|
85
|
+
if (validCalls.length === 0) {
|
|
86
|
+
logDebug(caller || 'REACT', `no valid tool calls at step ${step}, done`);
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
// Process tool calls
|
|
90
|
+
let shouldBreak = false;
|
|
91
|
+
for (const call of validCalls) {
|
|
92
|
+
const { parsed, cmd } = call;
|
|
93
|
+
const isBash = parsed.name === 'bash';
|
|
94
|
+
const toolId = `${caller || 'react'}-${Date.now()}-${step}-${Math.random().toString(36).slice(2, 6)}`;
|
|
95
|
+
const result = await handlers.onToolCall?.(step, parsed, cmd, isBash, toolId);
|
|
96
|
+
if (result) {
|
|
97
|
+
messages.push({
|
|
98
|
+
role: 'tool',
|
|
99
|
+
content: result.output.slice(0, 8000),
|
|
100
|
+
tool_call_id: toolId,
|
|
101
|
+
});
|
|
102
|
+
if (result.breakLoop) {
|
|
103
|
+
shouldBreak = true;
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (shouldBreak)
|
|
109
|
+
break;
|
|
110
|
+
await handlers.onStepEnd?.(step);
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
messages,
|
|
114
|
+
response: lastResponse,
|
|
115
|
+
steps: messages.filter(m => m.role === 'assistant').length,
|
|
116
|
+
aborted,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=react-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-loop.js","sourceRoot":"","sources":["../../src/agent/react-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { ToolHandler, ToolResult, ToolContext, ParsedToolCall } from '../tools/types.js';
|
|
2
|
+
import type { PluginManager } from '../plugins/manager.js';
|
|
3
|
+
/** Результат выполнения ToolExecutor */
|
|
4
|
+
export interface ExecutorResult {
|
|
5
|
+
result: ToolResult;
|
|
6
|
+
/** Время выполнения в секундах */
|
|
7
|
+
elapsed: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Диспетчер инструментов.
|
|
11
|
+
*
|
|
12
|
+
* Пайплайн для каждого tool call:
|
|
13
|
+
* 1. pre-hooks (runPreToolUseHooks) — могут заблокировать выполнение
|
|
14
|
+
* 2. handler.execute() — выполнение инструмента
|
|
15
|
+
* 3. post-hooks (runPostToolUseHooks)
|
|
16
|
+
* 4. Уведомление indexer (для модифицирующих инструментов)
|
|
17
|
+
* 5. Обрезка вывода (truncateOutput)
|
|
18
|
+
*/
|
|
19
|
+
export declare class ToolExecutor {
|
|
20
|
+
private handlers;
|
|
21
|
+
private pluginManager?;
|
|
22
|
+
/** Установка менеджера плагинов */
|
|
23
|
+
setPluginManager(pm: PluginManager): void;
|
|
24
|
+
/** Регистрация обработчика инструмента */
|
|
25
|
+
register(handler: ToolHandler): void;
|
|
26
|
+
/** Регистрация нескольких обработчиков */
|
|
27
|
+
registerAll(handlers: ToolHandler[]): void;
|
|
28
|
+
/** Проверка существования обработчика */
|
|
29
|
+
has(name: string): boolean;
|
|
30
|
+
/** Получение обработчика по имени */
|
|
31
|
+
get(name: string): ToolHandler | undefined;
|
|
32
|
+
/** Получение определений всех инструментов для LLM */
|
|
33
|
+
getDefinitions(): import("../tools/types.js").ToolDefinition[];
|
|
34
|
+
/**
|
|
35
|
+
* Выполнение tool call через пайплайн.
|
|
36
|
+
*
|
|
37
|
+
* @param call - инструментальный вызов из LLM
|
|
38
|
+
* @param context - контекст выполнения (cwd, renderer и т.д.)
|
|
39
|
+
* @param hookCmd - строка для хуков (bash command или tool name + args)
|
|
40
|
+
* @returns результат выполнения с обрезанным выводом
|
|
41
|
+
*/
|
|
42
|
+
execute(call: ParsedToolCall, context: ToolContext, hookCmd: string): Promise<ExecutorResult>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=tool-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-executor.d.ts","sourceRoot":"","sources":["../../src/agent/tool-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAI9F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAwD3D,wCAAwC;AACxC,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,aAAa,CAAC,CAAgB;IAEtC,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI;IAIzC,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIpC,0CAA0C;IAC1C,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI;IAM1C,yCAAyC;IACzC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,qCAAqC;IACrC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI1C,sDAAsD;IACtD,cAAc;IAId;;;;;;;OAOG;IACG,OAAO,CACX,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC;CA4F3B"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { runPreToolUseHooks, runPostToolUseHooks } from '../tools/hooks.js';
|
|
2
|
+
import { notifyFileChanged } from '../indexer/cache.js';
|
|
3
|
+
import { invalidateSystemPromptCache } from './system-prompt.js';
|
|
4
|
+
/**
|
|
5
|
+
* Диспетчер инструментов с пайплайном: pre-hooks → execute → post-hooks → truncate.
|
|
6
|
+
*
|
|
7
|
+
* ToolExecutor — чистый диспетчер. Никакой domain-логики.
|
|
8
|
+
* Вся поведенческая логика (plan enforcement, write streak, syntax check)
|
|
9
|
+
* остаётся в loop.ts.
|
|
10
|
+
*
|
|
11
|
+
* @module agent/tool-executor
|
|
12
|
+
*/
|
|
13
|
+
/** Инструменты, которые модифицируют файловую систему */
|
|
14
|
+
const MODIFYING_TOOLS = new Set(['write_file', 'edit_file', 'delete_file', 'copy_file', 'move_file']);
|
|
15
|
+
/** Извлекает пути изменённых файлов из аргументов инструмента */
|
|
16
|
+
function getChangedFilePaths(toolName, args) {
|
|
17
|
+
const normalize = (p) => String(p ?? '').replace(/\\/g, '/');
|
|
18
|
+
switch (toolName) {
|
|
19
|
+
case 'write_file': return [normalize(args.path)];
|
|
20
|
+
case 'edit_file': return [normalize(args.path)];
|
|
21
|
+
case 'delete_file': return [normalize(args.path)];
|
|
22
|
+
case 'copy_file': return [normalize(args.destination)];
|
|
23
|
+
case 'move_file': return [normalize(args.source), normalize(args.destination)];
|
|
24
|
+
default: return [];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** Лимиты обрезки вывода по инструментам (в символах) */
|
|
28
|
+
const TRUNCATION_LIMITS = {
|
|
29
|
+
read_file: 2000,
|
|
30
|
+
write_file: 200,
|
|
31
|
+
edit_file: 300,
|
|
32
|
+
bash: 1500,
|
|
33
|
+
list_dir: 1500,
|
|
34
|
+
glob_search: 1000,
|
|
35
|
+
grep_search: 1500,
|
|
36
|
+
tree: 1500,
|
|
37
|
+
subagent: 500,
|
|
38
|
+
web_search: 1000,
|
|
39
|
+
web_fetch: 1500,
|
|
40
|
+
};
|
|
41
|
+
const DEFAULT_LIMIT = 800;
|
|
42
|
+
const ERROR_LIMIT = 3000;
|
|
43
|
+
/** Обрезка вывода инструмента для экономии токенов */
|
|
44
|
+
function truncateOutput(toolName, output, exitCode) {
|
|
45
|
+
if (exitCode !== 0) {
|
|
46
|
+
return output.length > ERROR_LIMIT ? output.slice(0, ERROR_LIMIT) + '\n...[truncated]' : output;
|
|
47
|
+
}
|
|
48
|
+
const limit = TRUNCATION_LIMITS[toolName] ?? DEFAULT_LIMIT;
|
|
49
|
+
if (output.length <= limit)
|
|
50
|
+
return output;
|
|
51
|
+
return output.slice(0, limit) + '\n...[truncated]';
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Диспетчер инструментов.
|
|
55
|
+
*
|
|
56
|
+
* Пайплайн для каждого tool call:
|
|
57
|
+
* 1. pre-hooks (runPreToolUseHooks) — могут заблокировать выполнение
|
|
58
|
+
* 2. handler.execute() — выполнение инструмента
|
|
59
|
+
* 3. post-hooks (runPostToolUseHooks)
|
|
60
|
+
* 4. Уведомление indexer (для модифицирующих инструментов)
|
|
61
|
+
* 5. Обрезка вывода (truncateOutput)
|
|
62
|
+
*/
|
|
63
|
+
export class ToolExecutor {
|
|
64
|
+
handlers = new Map();
|
|
65
|
+
pluginManager;
|
|
66
|
+
/** Установка менеджера плагинов */
|
|
67
|
+
setPluginManager(pm) {
|
|
68
|
+
this.pluginManager = pm;
|
|
69
|
+
}
|
|
70
|
+
/** Регистрация обработчика инструмента */
|
|
71
|
+
register(handler) {
|
|
72
|
+
this.handlers.set(handler.name, handler);
|
|
73
|
+
}
|
|
74
|
+
/** Регистрация нескольких обработчиков */
|
|
75
|
+
registerAll(handlers) {
|
|
76
|
+
for (const h of handlers) {
|
|
77
|
+
this.register(h);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/** Проверка существования обработчика */
|
|
81
|
+
has(name) {
|
|
82
|
+
return this.handlers.has(name);
|
|
83
|
+
}
|
|
84
|
+
/** Получение обработчика по имени */
|
|
85
|
+
get(name) {
|
|
86
|
+
return this.handlers.get(name);
|
|
87
|
+
}
|
|
88
|
+
/** Получение определений всех инструментов для LLM */
|
|
89
|
+
getDefinitions() {
|
|
90
|
+
return Array.from(this.handlers.values()).map(h => h.definition);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Выполнение tool call через пайплайн.
|
|
94
|
+
*
|
|
95
|
+
* @param call - инструментальный вызов из LLM
|
|
96
|
+
* @param context - контекст выполнения (cwd, renderer и т.д.)
|
|
97
|
+
* @param hookCmd - строка для хуков (bash command или tool name + args)
|
|
98
|
+
* @returns результат выполнения с обрезанным выводом
|
|
99
|
+
*/
|
|
100
|
+
async execute(call, context, hookCmd) {
|
|
101
|
+
const start = performance.now();
|
|
102
|
+
// 1. Pre-hooks
|
|
103
|
+
const preHook = runPreToolUseHooks(context.cwd, call.name, hookCmd);
|
|
104
|
+
if (!preHook.continue) {
|
|
105
|
+
return {
|
|
106
|
+
result: {
|
|
107
|
+
stdout: '',
|
|
108
|
+
stderr: `Hook blocked: ${preHook.message || ''}`,
|
|
109
|
+
exitCode: 1,
|
|
110
|
+
truncated: false,
|
|
111
|
+
},
|
|
112
|
+
elapsed: (performance.now() - start) / 1000,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// 1.5. Plugin: tool:before
|
|
116
|
+
if (this.pluginManager) {
|
|
117
|
+
try {
|
|
118
|
+
await this.pluginManager.emit('tool:before', call.name, call.arguments);
|
|
119
|
+
}
|
|
120
|
+
catch (e) {
|
|
121
|
+
if (e.name === 'PluginError') {
|
|
122
|
+
return {
|
|
123
|
+
result: { stdout: '', stderr: 'Plugin blocked: ' + e.message, exitCode: 1, truncated: false },
|
|
124
|
+
elapsed: (performance.now() - start) / 1000,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// 2. Execute handler
|
|
130
|
+
const handler = this.handlers.get(call.name);
|
|
131
|
+
if (!handler) {
|
|
132
|
+
return {
|
|
133
|
+
result: {
|
|
134
|
+
stdout: '',
|
|
135
|
+
stderr: `Unknown tool: ${call.name}`,
|
|
136
|
+
exitCode: 1,
|
|
137
|
+
truncated: false,
|
|
138
|
+
},
|
|
139
|
+
elapsed: (performance.now() - start) / 1000,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
let result;
|
|
143
|
+
try {
|
|
144
|
+
result = await handler.execute(call.arguments, context);
|
|
145
|
+
}
|
|
146
|
+
catch (e) {
|
|
147
|
+
result = {
|
|
148
|
+
stdout: '',
|
|
149
|
+
stderr: `Tool error: ${e.message}`,
|
|
150
|
+
exitCode: 1,
|
|
151
|
+
truncated: false,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// 3. Post-hooks
|
|
155
|
+
runPostToolUseHooks(context.cwd, call.name, hookCmd, result.stdout, result.exitCode);
|
|
156
|
+
// 3.5. Plugin: tool:after
|
|
157
|
+
if (this.pluginManager) {
|
|
158
|
+
try {
|
|
159
|
+
await this.pluginManager.emit('tool:after', call.name, result);
|
|
160
|
+
}
|
|
161
|
+
catch { /* plugin errors non-fatal in post */ }
|
|
162
|
+
}
|
|
163
|
+
// 4. Notify indexer (для модифицирующих инструментов)
|
|
164
|
+
if (result.exitCode === 0 && MODIFYING_TOOLS.has(call.name)) {
|
|
165
|
+
const paths = getChangedFilePaths(call.name, call.arguments);
|
|
166
|
+
for (const p of paths) {
|
|
167
|
+
notifyFileChanged(p);
|
|
168
|
+
}
|
|
169
|
+
invalidateSystemPromptCache();
|
|
170
|
+
}
|
|
171
|
+
// 5. Truncate output
|
|
172
|
+
const truncatedStdout = truncateOutput(call.name, result.stdout, result.exitCode);
|
|
173
|
+
const truncatedStderr = truncateOutput(call.name, result.stderr, result.exitCode);
|
|
174
|
+
const elapsed = (performance.now() - start) / 1000;
|
|
175
|
+
return {
|
|
176
|
+
result: {
|
|
177
|
+
...result,
|
|
178
|
+
stdout: truncatedStdout,
|
|
179
|
+
stderr: truncatedStderr,
|
|
180
|
+
truncated: result.truncated || truncatedStdout !== result.stdout || truncatedStderr !== result.stderr,
|
|
181
|
+
},
|
|
182
|
+
elapsed,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=tool-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-executor.js","sourceRoot":"","sources":["../../src/agent/tool-executor.ts"],"names":[],"mappings":"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"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -45,12 +45,13 @@ export interface AgentConfig {
|
|
|
45
45
|
toolTimeout: number;
|
|
46
46
|
maxOutputLength: number;
|
|
47
47
|
showThinking?: boolean;
|
|
48
|
+
/** @deprecated Используйте ModeRegistry вместо этого */
|
|
48
49
|
mode?: AgentMode;
|
|
49
50
|
/** Макс. токенов для загруженных скилов в system prompt (default: 4000) */
|
|
50
51
|
skillTokenBudget?: number;
|
|
51
|
-
/**
|
|
52
|
+
/** @deprecated Используйте ModeRegistry.maxSkills вместо этого */
|
|
52
53
|
maxSkillsBase?: number;
|
|
53
|
-
/**
|
|
54
|
+
/** @deprecated Используйте ModeRegistry.maxSkills вместо этого */
|
|
54
55
|
maxSkillsPro?: number;
|
|
55
56
|
}
|
|
56
57
|
/** Режимы работы агента: fast (без скилов), base (обычный), pro (с grill-me) */
|
|
@@ -61,5 +62,7 @@ export interface AppConfig {
|
|
|
61
62
|
active: ActiveConfig;
|
|
62
63
|
agent: AgentConfig;
|
|
63
64
|
theme?: string;
|
|
65
|
+
/** Кастомные режимы (overrides для ModeRegistry) */
|
|
66
|
+
modes?: Record<string, Record<string, unknown>>;
|
|
64
67
|
}
|
|
65
68
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,0BAA0B;AAC1B,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,iCAAiC;AACjC,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,kCAAkC;AAClC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACrC;AAED,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uBAAuB;AACvB,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,0BAA0B;AAC1B,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,iCAAiC;AACjC,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,kCAAkC;AAClC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACrC;AAED,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uBAAuB;AACvB,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wDAAwD;IACxD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,gFAAgF;AAChF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhD,qCAAqC;AACrC,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACjD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AgentPlugin } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Адаптер: оборачивает существующие hooks (.mma/hooks.json) как плагин.
|
|
4
|
+
*
|
|
5
|
+
* Позволяет перейти от hooks к plugin system без потери совместимости.
|
|
6
|
+
* preToolUse → tool:before event
|
|
7
|
+
* postToolUse → tool:after event
|
|
8
|
+
*
|
|
9
|
+
* @module plugins/adapters/hooks-adapter
|
|
10
|
+
*/
|
|
11
|
+
export declare function createHooksAdapter(): AgentPlugin;
|
|
12
|
+
//# sourceMappingURL=hooks-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-adapter.d.ts","sourceRoot":"","sources":["../../../src/plugins/adapters/hooks-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAC;AAG9D;;;;;;;;GAQG;AAEH,wBAAgB,kBAAkB,IAAI,WAAW,CAchD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Адаптер: оборачивает существующие hooks (.mma/hooks.json) как плагин.
|
|
3
|
+
*
|
|
4
|
+
* Позволяет перейти от hooks к plugin system без потери совместимости.
|
|
5
|
+
* preToolUse → tool:before event
|
|
6
|
+
* postToolUse → tool:after event
|
|
7
|
+
*
|
|
8
|
+
* @module plugins/adapters/hooks-adapter
|
|
9
|
+
*/
|
|
10
|
+
export function createHooksAdapter() {
|
|
11
|
+
return {
|
|
12
|
+
name: 'hooks-adapter',
|
|
13
|
+
version: '1.0.0',
|
|
14
|
+
description: 'Wraps .mma/hooks.json as a plugin',
|
|
15
|
+
on(_event, handler) {
|
|
16
|
+
// Not used — we register via the plugin's on() method
|
|
17
|
+
},
|
|
18
|
+
async onActivate(ctx) {
|
|
19
|
+
ctx.logger.info('hooks-adapter: active (legacy hooks will run via ToolExecutor)');
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=hooks-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-adapter.js","sourceRoot":"","sources":["../../../src/plugins/adapters/hooks-adapter.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,mCAAmC;QAEhD,EAAE,CAAC,MAAM,EAAE,OAAO;YAChB,sDAAsD;QACxD,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,GAAkB;YACjC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PluginManifest } from './types.js';
|
|
2
|
+
import type { PluginManager } from './manager.js';
|
|
3
|
+
/**
|
|
4
|
+
* Загружает все плагины из директорий поиска.
|
|
5
|
+
*/
|
|
6
|
+
export declare function loadAllPlugins(manager: PluginManager): Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* Включает hot-reload для плагина.
|
|
9
|
+
*
|
|
10
|
+
* При изменении entry point файла — деактивирует и перезагружает плагин.
|
|
11
|
+
*/
|
|
12
|
+
export declare function enableHotReload(pluginDir: string, manifest: PluginManifest, manager: PluginManager, reloadCallback?: (name: string) => void): () => void;
|
|
13
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -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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"}
|