micro-models-agent 0.4.0 → 0.6.0
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/context.d.ts +3 -6
- package/dist/agent/context.d.ts.map +1 -1
- package/dist/agent/context.js +8 -41
- package/dist/agent/context.js.map +1 -1
- package/dist/agent/error-escalation.d.ts +6 -6
- package/dist/agent/error-escalation.d.ts.map +1 -1
- package/dist/agent/error-escalation.js +67 -34
- package/dist/agent/error-escalation.js.map +1 -1
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +14 -79
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/memory.d.ts +0 -29
- package/dist/agent/memory.d.ts.map +1 -1
- package/dist/agent/memory.js +1 -78
- package/dist/agent/memory.js.map +1 -1
- package/dist/agent/modes/registry.d.ts +1 -1
- package/dist/agent/modes/registry.d.ts.map +1 -1
- package/dist/agent/modes/registry.js +26 -27
- package/dist/agent/modes/registry.js.map +1 -1
- package/dist/agent/modes/types.d.ts +0 -5
- package/dist/agent/modes/types.d.ts.map +1 -1
- package/dist/agent/system-prompt.d.ts +1 -1
- package/dist/agent/system-prompt.d.ts.map +1 -1
- package/dist/agent/system-prompt.js +95 -147
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/agent/tool-executor.d.ts +2 -6
- package/dist/agent/tool-executor.d.ts.map +1 -1
- package/dist/agent/tool-executor.js +79 -65
- package/dist/agent/tool-executor.js.map +1 -1
- package/dist/agent/user-profile.d.ts +1 -21
- package/dist/agent/user-profile.d.ts.map +1 -1
- package/dist/agent/user-profile.js +41 -174
- package/dist/agent/user-profile.js.map +1 -1
- package/dist/agent/write-enforcer.d.ts +3 -7
- package/dist/agent/write-enforcer.d.ts.map +1 -1
- package/dist/agent/write-enforcer.js +7 -71
- package/dist/agent/write-enforcer.js.map +1 -1
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +2 -25
- package/dist/cli/config.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +102 -139
- package/dist/cli.js.map +1 -1
- package/dist/config/config.d.ts +15 -0
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +4 -38
- package/dist/config/config.js.map +1 -1
- package/dist/config/types.d.ts +0 -2
- package/dist/config/types.d.ts.map +1 -1
- package/dist/logger.d.ts +10 -3
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +89 -38
- package/dist/logger.js.map +1 -1
- package/dist/repl/commands.d.ts +16 -16
- package/dist/repl/commands.d.ts.map +1 -1
- package/dist/repl/commands.js +474 -321
- package/dist/repl/commands.js.map +1 -1
- package/dist/repl/index.d.ts +4 -4
- package/dist/repl/index.d.ts.map +1 -1
- package/dist/repl/index.js +60 -56
- package/dist/repl/index.js.map +1 -1
- package/dist/session/store.d.ts +4 -7
- package/dist/session/store.d.ts.map +1 -1
- package/dist/session/store.js +35 -71
- package/dist/session/store.js.map +1 -1
- package/dist/setup-wizard.d.ts.map +1 -1
- package/dist/setup-wizard.js +5 -23
- package/dist/setup-wizard.js.map +1 -1
- package/dist/styling/engine.d.ts +7 -12
- package/dist/styling/engine.d.ts.map +1 -1
- package/dist/styling/engine.js +85 -134
- package/dist/styling/engine.js.map +1 -1
- package/dist/styling/index.d.ts +2 -2
- package/dist/styling/index.d.ts.map +1 -1
- package/dist/styling/index.js +0 -1
- package/dist/styling/index.js.map +1 -1
- package/dist/styling/loader.d.ts +2 -2
- package/dist/styling/loader.d.ts.map +1 -1
- package/dist/styling/loader.js +99 -47
- package/dist/styling/loader.js.map +1 -1
- package/dist/subagent/chat.d.ts +19 -0
- package/dist/subagent/chat.d.ts.map +1 -0
- package/dist/subagent/chat.js +279 -0
- package/dist/subagent/chat.js.map +1 -0
- package/dist/subagent/context.d.ts +9 -0
- package/dist/subagent/context.d.ts.map +1 -0
- package/dist/subagent/context.js +75 -0
- package/dist/subagent/context.js.map +1 -0
- package/dist/subagent/definition.d.ts +7 -0
- package/dist/subagent/definition.d.ts.map +1 -0
- package/dist/subagent/definition.js +26 -0
- package/dist/subagent/definition.js.map +1 -0
- package/dist/subagent/errors.d.ts +24 -0
- package/dist/subagent/errors.d.ts.map +1 -0
- package/dist/subagent/errors.js +85 -0
- package/dist/subagent/errors.js.map +1 -0
- package/dist/subagent/validation.d.ts +17 -0
- package/dist/subagent/validation.d.ts.map +1 -0
- package/dist/subagent/validation.js +83 -0
- package/dist/subagent/validation.js.map +1 -0
- package/dist/tools/hooks.d.ts +2 -0
- package/dist/tools/hooks.d.ts.map +1 -1
- package/dist/tools/hooks.js +118 -16
- package/dist/tools/hooks.js.map +1 -1
- package/dist/tools/parse-tool-call.d.ts.map +1 -1
- package/dist/tools/parse-tool-call.js +16 -14
- package/dist/tools/parse-tool-call.js.map +1 -1
- package/dist/tools/registry.d.ts +5 -3
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +47 -28
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/subagent.d.ts +4 -57
- package/dist/tools/subagent.d.ts.map +1 -1
- package/dist/tools/subagent.js +112 -556
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/types.d.ts +2 -10
- package/dist/tools/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/styling/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B;;;;;;;GAOG;AAEH,4DAA4D;AAC5D,MAAM,QAAQ,GAA0C;IACtD,GAAG,EAAE,EAAE,CAAC,GAAG;IACX,IAAI,EAAE,EAAE,CAAC,IAAI;IACb,MAAM,EAAE,EAAE,CAAC,MAAM;IACjB,SAAS,EAAE,EAAE,CAAC,SAAS;IACvB,aAAa,EAAE,EAAE,CAAC,aAAa;IAC/B,KAAK,EAAE,EAAE,CAAC,KAAK;IACf,KAAK,EAAE,EAAE,CAAC,KAAK;IACf,GAAG,EAAE,EAAE,CAAC,GAAG;IACX,KAAK,EAAE,EAAE,CAAC,KAAK;IACf,MAAM,EAAE,EAAE,CAAC,MAAM;IACjB,IAAI,EAAE,EAAE,CAAC,IAAI;IACb,OAAO,EAAE,EAAE,CAAC,OAAO;IACnB,IAAI,EAAE,EAAE,CAAC,IAAI;IACb,KAAK,EAAE,EAAE,CAAC,KAAK;IACf,IAAI,EAAE,EAAE,CAAC,IAAI;IACb,KAAK,EAAE,EAAE,CAAC,KAAK;IACf,OAAO,EAAE,EAAE,CAAC,OAAO;IACnB,QAAQ,EAAE,EAAE,CAAC,QAAQ;IACrB,MAAM,EAAE,EAAE,CAAC,MAAM;IACjB,SAAS,EAAE,EAAE,CAAC,SAAS;IACvB,MAAM,EAAE,EAAE,CAAC,MAAM;IACjB,OAAO,EAAE,EAAE,CAAC,OAAO;CACpB,CAAC;
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/styling/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/styling/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ThemeEngine } from './engine.js';
|
|
1
|
+
import type { ThemeEngine } from './engine.js';
|
|
2
2
|
/** Инициализирует тему по имени (по умолчанию light) */
|
|
3
3
|
export declare function initTheme(name?: string): ThemeEngine;
|
|
4
4
|
/** Возвращает текущую тему (создаёт light если не инициализирована) */
|
|
@@ -9,7 +9,7 @@ export declare function listThemes(): string[];
|
|
|
9
9
|
export declare function switchTheme(name: string): ThemeEngine;
|
|
10
10
|
/** Сбрасывает тему (следующий getTheme создаст light) */
|
|
11
11
|
export declare function resetTheme(): void;
|
|
12
|
-
export { ThemeEngine } from './engine.js';
|
|
13
12
|
export { loadTheme, loadThemeConfig, ensureThemeDir } from './loader.js';
|
|
13
|
+
export type { ThemeEngine } from './engine.js';
|
|
14
14
|
export type { ThemeConfig, ThemeColors, ThemeIcons, ThemeFormat } from './types.js';
|
|
15
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/styling/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/styling/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAiB/C,wDAAwD;AACxD,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAGpD;AAED,uEAAuE;AACvE,wBAAgB,QAAQ,IAAI,WAAW,CAKtC;AAED,sCAAsC;AACtC,wBAAgB,UAAU,IAAI,MAAM,EAAE,CAErC;AAED,gCAAgC;AAChC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAGrD;AAED,yDAAyD;AACzD,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/styling/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/styling/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/styling/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAmB,UAAU,IAAI,cAAc,EAAkB,MAAM,aAAa,CAAC;AAEvG;;;;;;;;;;GAUG;AAEH,IAAI,MAAM,GAAuB,IAAI,CAAC;AAEtC,wDAAwD;AACxD,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,MAAM,GAAG,SAAS,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,QAAQ;IACtB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,UAAU;IACxB,OAAO,cAAc,EAAE,CAAC;AAC1B,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,UAAU;IACxB,MAAM,GAAG,IAAI,CAAC;AAChB,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/styling/loader.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ThemeConfig } from
|
|
2
|
-
import { ThemeEngine } from
|
|
1
|
+
import type { ThemeConfig } from "./types.js";
|
|
2
|
+
import type { ThemeEngine } from "./engine.js";
|
|
3
3
|
export declare function loadThemeConfig(name?: string): ThemeConfig;
|
|
4
4
|
export declare function loadTheme(name?: string): ThemeEngine;
|
|
5
5
|
export declare function listThemes(): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/styling/loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/styling/loader.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAsI/C,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAI1D;AAED,wBAAgB,SAAS,CAAC,IAAI,GAAE,MAAgB,GAAG,WAAW,CAE7D;AAED,wBAAgB,UAAU,IAAI,MAAM,EAAE,CAWrC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKlE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKjD;AAED,wBAAgB,cAAc,IAAI,IAAI,CAIrC"}
|
package/dist/styling/loader.js
CHANGED
|
@@ -1,60 +1,110 @@
|
|
|
1
|
-
import { readFileSync, existsSync, mkdirSync, writeFileSync, readdirSync, unlinkSync } from
|
|
2
|
-
import { join } from
|
|
3
|
-
import { homedir } from
|
|
4
|
-
import {
|
|
5
|
-
import { fileURLToPath } from
|
|
6
|
-
import { dirname } from
|
|
1
|
+
import { readFileSync, existsSync, mkdirSync, writeFileSync, readdirSync, unlinkSync, } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { createThemeEngine } from "./engine.js";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { dirname } from "node:path";
|
|
7
7
|
const __filename = fileURLToPath(import.meta.url);
|
|
8
8
|
const __dirname = dirname(__filename);
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* Загрузчик и менеджер тем.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
* -
|
|
14
|
-
* -
|
|
15
|
-
* -
|
|
16
|
-
* -
|
|
12
|
+
* Управляет:
|
|
13
|
+
* - Встроенными темами (light, dark)
|
|
14
|
+
* - Пользовательскими темами из ~/.mma/themes/
|
|
15
|
+
* - Установкой/удалением тем из URL
|
|
16
|
+
* - Переключением активной темы
|
|
17
17
|
*
|
|
18
18
|
* @module styling/loader
|
|
19
19
|
*/
|
|
20
|
-
const MMA_DIR = join(homedir(),
|
|
21
|
-
const THEMES_DIR = join(MMA_DIR,
|
|
20
|
+
const MMA_DIR = join(homedir(), ".mma");
|
|
21
|
+
const THEMES_DIR = join(MMA_DIR, "themes");
|
|
22
22
|
const BUILT_IN_THEMES = {
|
|
23
23
|
light: {
|
|
24
|
-
name:
|
|
24
|
+
name: "light",
|
|
25
25
|
colors: {
|
|
26
|
-
prompt:
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
prompt: "cyan",
|
|
27
|
+
success: "green",
|
|
28
|
+
error: "red",
|
|
29
|
+
warning: "yellow",
|
|
30
|
+
info: "blue",
|
|
31
|
+
dim: "dim",
|
|
32
|
+
toolName: "magenta",
|
|
33
|
+
timing: "yellow",
|
|
34
|
+
contextBar: "cyan",
|
|
35
|
+
highlight: "bold",
|
|
36
|
+
lineNumbers: "dim",
|
|
37
|
+
filePath: "cyan",
|
|
38
|
+
link: "underline",
|
|
39
|
+
heading: "bold",
|
|
40
|
+
symbolName: "yellow",
|
|
41
|
+
symbolType: "dim",
|
|
42
|
+
bracket: "dim",
|
|
43
|
+
user: "yellow",
|
|
44
|
+
assistant: "blue",
|
|
45
|
+
subagent: "magenta",
|
|
46
|
+
expert: "green",
|
|
32
47
|
},
|
|
33
48
|
icons: {
|
|
34
|
-
success:
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
49
|
+
success: "\u2713",
|
|
50
|
+
failure: "\u2717",
|
|
51
|
+
spinner: "\u231B",
|
|
52
|
+
inProgress: "~",
|
|
53
|
+
pending: " ",
|
|
54
|
+
separator: "\u2501\u2501",
|
|
55
|
+
arrow: "\u2192",
|
|
56
|
+
barFill: "\u2588",
|
|
57
|
+
barEmpty: "\u2591",
|
|
58
|
+
check: "\u2713",
|
|
59
|
+
cross: "\u2717",
|
|
60
|
+
bullet: "\u251C\u2500\u2500",
|
|
61
|
+
subBullet: "\u2502 \u251C\u2500\u2500",
|
|
62
|
+
pipe: "\u2502",
|
|
38
63
|
},
|
|
39
|
-
format: { indent:
|
|
64
|
+
format: { indent: " ", indentSize: 2 },
|
|
40
65
|
},
|
|
41
66
|
dark: {
|
|
42
|
-
name:
|
|
67
|
+
name: "dark",
|
|
43
68
|
colors: {
|
|
44
|
-
prompt:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
69
|
+
prompt: "cyan",
|
|
70
|
+
success: "green",
|
|
71
|
+
error: "red",
|
|
72
|
+
warning: "yellow",
|
|
73
|
+
info: "cyan",
|
|
74
|
+
dim: "dim",
|
|
75
|
+
toolName: "magenta",
|
|
76
|
+
timing: "yellow",
|
|
77
|
+
contextBar: "cyan",
|
|
78
|
+
highlight: "bold",
|
|
79
|
+
lineNumbers: "dim",
|
|
80
|
+
filePath: "cyan",
|
|
81
|
+
link: "underline",
|
|
82
|
+
heading: "bold",
|
|
83
|
+
symbolName: "yellow",
|
|
84
|
+
symbolType: "dim",
|
|
85
|
+
bracket: "dim",
|
|
86
|
+
user: "yellow",
|
|
87
|
+
assistant: "cyan",
|
|
88
|
+
subagent: "magenta",
|
|
89
|
+
expert: "green",
|
|
50
90
|
},
|
|
51
91
|
icons: {
|
|
52
|
-
success:
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
92
|
+
success: "\u2713",
|
|
93
|
+
failure: "\u2717",
|
|
94
|
+
spinner: "\u231B",
|
|
95
|
+
inProgress: "~",
|
|
96
|
+
pending: " ",
|
|
97
|
+
separator: "\u2501\u2501",
|
|
98
|
+
arrow: "\u2192",
|
|
99
|
+
barFill: "\u2588",
|
|
100
|
+
barEmpty: "\u2591",
|
|
101
|
+
check: "\u2713",
|
|
102
|
+
cross: "\u2717",
|
|
103
|
+
bullet: "\u251C\u2500\u2500",
|
|
104
|
+
subBullet: "\u2502 \u251C\u2500\u2500",
|
|
105
|
+
pipe: "\u2502",
|
|
56
106
|
},
|
|
57
|
-
format: { indent:
|
|
107
|
+
format: { indent: " ", indentSize: 2 },
|
|
58
108
|
},
|
|
59
109
|
};
|
|
60
110
|
function loadJsonTheme(name) {
|
|
@@ -62,7 +112,7 @@ function loadJsonTheme(name) {
|
|
|
62
112
|
if (!existsSync(path))
|
|
63
113
|
return null;
|
|
64
114
|
try {
|
|
65
|
-
return JSON.parse(readFileSync(path,
|
|
115
|
+
return JSON.parse(readFileSync(path, "utf-8"));
|
|
66
116
|
}
|
|
67
117
|
catch {
|
|
68
118
|
return null;
|
|
@@ -78,28 +128,30 @@ function mergeTheme(base, overrides) {
|
|
|
78
128
|
};
|
|
79
129
|
}
|
|
80
130
|
export function loadThemeConfig(name) {
|
|
81
|
-
const builtIn = BUILT_IN_THEMES[name ||
|
|
82
|
-
const custom = loadJsonTheme(name ||
|
|
131
|
+
const builtIn = BUILT_IN_THEMES[name || "light"] || BUILT_IN_THEMES.light;
|
|
132
|
+
const custom = loadJsonTheme(name || "light");
|
|
83
133
|
return custom ? mergeTheme(builtIn, custom) : builtIn;
|
|
84
134
|
}
|
|
85
|
-
export function loadTheme(name =
|
|
86
|
-
return
|
|
135
|
+
export function loadTheme(name = "light") {
|
|
136
|
+
return createThemeEngine(loadThemeConfig(name));
|
|
87
137
|
}
|
|
88
138
|
export function listThemes() {
|
|
89
139
|
const builtIn = Object.keys(BUILT_IN_THEMES);
|
|
90
140
|
let custom = [];
|
|
91
141
|
try {
|
|
92
142
|
custom = readdirSync(THEMES_DIR)
|
|
93
|
-
.filter(f => f.endsWith(
|
|
94
|
-
.map(f => f.replace(
|
|
143
|
+
.filter((f) => f.endsWith(".json"))
|
|
144
|
+
.map((f) => f.replace(".json", ""));
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
/* no custom themes dir */
|
|
95
148
|
}
|
|
96
|
-
catch { /* no custom themes dir */ }
|
|
97
149
|
return [...builtIn, ...custom];
|
|
98
150
|
}
|
|
99
151
|
export function installTheme(name, content) {
|
|
100
152
|
ensureThemeDir();
|
|
101
153
|
const filePath = join(THEMES_DIR, `${name}.json`);
|
|
102
|
-
writeFileSync(filePath, content,
|
|
154
|
+
writeFileSync(filePath, content, "utf-8");
|
|
103
155
|
return filePath;
|
|
104
156
|
}
|
|
105
157
|
export function removeTheme(name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/styling/loader.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/styling/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { LLMProvider, ChatMessage } from "../llm/provider.js";
|
|
2
|
+
import type { OutputRenderer } from "../ui/renderer.js";
|
|
3
|
+
/**
|
|
4
|
+
* Отправка запроса к LLM с streaming-ответом.
|
|
5
|
+
* Поддерживает retry при ошибках и отображение "мышления" модели.
|
|
6
|
+
*
|
|
7
|
+
* @param provider - провайдер LLM
|
|
8
|
+
* @param messages - история сообщений
|
|
9
|
+
* @param renderer - рендерер для отображения streaming
|
|
10
|
+
* @param signal - сигнал прерывания
|
|
11
|
+
* @param retries - количество повторных попыток
|
|
12
|
+
* @param showThinking - показывать ли "мышление" модели
|
|
13
|
+
* @param caller - кто вызвал (main/subagent)
|
|
14
|
+
*/
|
|
15
|
+
export declare function doChat(provider: LLMProvider, messages: ChatMessage[], renderer: OutputRenderer, signal?: AbortSignal, retries?: number, showThinking?: boolean, caller?: "main" | "subagent", maxTokens?: number): Promise<{
|
|
16
|
+
response: string;
|
|
17
|
+
genTimeMs: number;
|
|
18
|
+
}>;
|
|
19
|
+
//# sourceMappingURL=chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/subagent/chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAUxD;;;;;;;;;;;GAWG;AACH,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,WAAW,EAAE,EACvB,QAAQ,EAAE,cAAc,EACxB,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,SAAI,EACX,YAAY,UAAQ,EACpB,MAAM,GAAE,MAAM,GAAG,UAAmB,EACpC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAoRlD"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { LMStudioNative } from "../llm/lmstudio-native.js";
|
|
2
|
+
import { OpenAICompat } from "../llm/openai-compat.js";
|
|
3
|
+
import { logInfo, logWarn, logLLMRequest, logLLMResponse, } from "../logger.js";
|
|
4
|
+
import { getLLMConfig } from "../config/config.js";
|
|
5
|
+
/**
|
|
6
|
+
* Отправка запроса к LLM с streaming-ответом.
|
|
7
|
+
* Поддерживает retry при ошибках и отображение "мышления" модели.
|
|
8
|
+
*
|
|
9
|
+
* @param provider - провайдер LLM
|
|
10
|
+
* @param messages - история сообщений
|
|
11
|
+
* @param renderer - рендерер для отображения streaming
|
|
12
|
+
* @param signal - сигнал прерывания
|
|
13
|
+
* @param retries - количество повторных попыток
|
|
14
|
+
* @param showThinking - показывать ли "мышление" модели
|
|
15
|
+
* @param caller - кто вызвал (main/subagent)
|
|
16
|
+
*/
|
|
17
|
+
export async function doChat(provider, messages, renderer, signal, retries = 1, showThinking = false, caller = "main", maxTokens) {
|
|
18
|
+
let lastReasoningText = "";
|
|
19
|
+
// Phase 1: Normal attempts with thinking enabled
|
|
20
|
+
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
21
|
+
const startTime = performance.now();
|
|
22
|
+
const fullText = [];
|
|
23
|
+
let started = false;
|
|
24
|
+
let reasoningBuf = false;
|
|
25
|
+
let currentReasoning = "";
|
|
26
|
+
let lastFinishReason = null;
|
|
27
|
+
let reasoningChunksCount = 0;
|
|
28
|
+
let contentChunksCount = 0;
|
|
29
|
+
if (signal?.aborted)
|
|
30
|
+
return { response: "", genTimeMs: 0 };
|
|
31
|
+
const lastMsg = messages[messages.length - 1];
|
|
32
|
+
logLLMRequest(provider.model, messages.length, lastMsg?.content || "", caller);
|
|
33
|
+
if (caller === "main") {
|
|
34
|
+
renderer.setStreamRole?.("assistant");
|
|
35
|
+
}
|
|
36
|
+
renderer.writeSpinner();
|
|
37
|
+
try {
|
|
38
|
+
let buf = "";
|
|
39
|
+
for await (const chunk of provider.chat(messages, {
|
|
40
|
+
temperature: 0.7,
|
|
41
|
+
signal,
|
|
42
|
+
showThinking,
|
|
43
|
+
enableThinking: true,
|
|
44
|
+
max_tokens: maxTokens,
|
|
45
|
+
})) {
|
|
46
|
+
if (!chunk.content && !chunk.reasoning && !chunk.finish_reason)
|
|
47
|
+
continue;
|
|
48
|
+
if (chunk.finish_reason) {
|
|
49
|
+
lastFinishReason = chunk.finish_reason;
|
|
50
|
+
}
|
|
51
|
+
if (chunk.content) {
|
|
52
|
+
fullText.push(chunk.content);
|
|
53
|
+
contentChunksCount++;
|
|
54
|
+
}
|
|
55
|
+
if (chunk.reasoning) {
|
|
56
|
+
reasoningChunksCount++;
|
|
57
|
+
currentReasoning += chunk.reasoning;
|
|
58
|
+
}
|
|
59
|
+
if (!chunk.content && !chunk.reasoning)
|
|
60
|
+
continue;
|
|
61
|
+
if (!started) {
|
|
62
|
+
renderer.clearSpinner();
|
|
63
|
+
started = true;
|
|
64
|
+
}
|
|
65
|
+
if (chunk.reasoning) {
|
|
66
|
+
if (showThinking) {
|
|
67
|
+
if (reasoningBuf === false) {
|
|
68
|
+
renderer.writeNewline();
|
|
69
|
+
renderer.writeDim("┈ reasoning ┈");
|
|
70
|
+
reasoningBuf = "";
|
|
71
|
+
}
|
|
72
|
+
reasoningBuf += chunk.reasoning;
|
|
73
|
+
}
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (reasoningBuf !== false && typeof reasoningBuf === "string") {
|
|
77
|
+
renderer.writeNewline();
|
|
78
|
+
renderer.writeDim(reasoningBuf);
|
|
79
|
+
reasoningBuf = false;
|
|
80
|
+
}
|
|
81
|
+
buf += chunk.content;
|
|
82
|
+
// Рендерим контент, вырезая tool_call блоки для корректного отображения
|
|
83
|
+
while (buf.length > 0) {
|
|
84
|
+
const tcStart = buf.indexOf("<tool_call>");
|
|
85
|
+
const tcEnd = buf.indexOf("</tool_call>");
|
|
86
|
+
if (tcStart === -1 && tcEnd === -1) {
|
|
87
|
+
const clean = buf.replace(/@grounding\[файл:\s*[^\]]*\]\n?/g, "");
|
|
88
|
+
if (clean)
|
|
89
|
+
renderer.writeMarkdownChunk(clean);
|
|
90
|
+
buf = "";
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
if (tcStart !== -1 && (tcEnd === -1 || tcStart < tcEnd)) {
|
|
94
|
+
if (tcStart > 0) {
|
|
95
|
+
const clean = buf
|
|
96
|
+
.slice(0, tcStart)
|
|
97
|
+
.replace(/@grounding\[файл:\s*[^\]]*\]\n?/g, "");
|
|
98
|
+
if (clean)
|
|
99
|
+
renderer.writeMarkdownChunk(clean);
|
|
100
|
+
}
|
|
101
|
+
buf = buf.slice(tcStart);
|
|
102
|
+
const closeIdx = buf.indexOf("</tool_call>");
|
|
103
|
+
if (closeIdx !== -1) {
|
|
104
|
+
buf = buf.slice(closeIdx + "</tool_call>".length);
|
|
105
|
+
}
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
if (tcEnd !== -1 && (tcStart === -1 || tcEnd < tcStart)) {
|
|
109
|
+
const clean = buf
|
|
110
|
+
.slice(0, tcEnd)
|
|
111
|
+
.replace(/@grounding\[файл:\s*[^\]]*\]\n?/g, "");
|
|
112
|
+
if (clean)
|
|
113
|
+
renderer.writeMarkdownChunk(clean);
|
|
114
|
+
buf = buf.slice(tcEnd + "</tool_call>".length);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (reasoningBuf !== false && typeof reasoningBuf === "string") {
|
|
119
|
+
renderer.writeNewline();
|
|
120
|
+
renderer.writeDim(reasoningBuf);
|
|
121
|
+
}
|
|
122
|
+
// Сохраняем reasoning для fallback
|
|
123
|
+
if (currentReasoning) {
|
|
124
|
+
lastReasoningText = currentReasoning;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (e) {
|
|
128
|
+
if (e.name === "AbortError") {
|
|
129
|
+
logLLMResponse(provider.model, 0, performance.now() - startTime, "Aborted", caller);
|
|
130
|
+
return { response: "", genTimeMs: 0 };
|
|
131
|
+
}
|
|
132
|
+
logLLMResponse(provider.model, 0, performance.now() - startTime, e.message, caller);
|
|
133
|
+
renderer.writeError(`\n[LLM] ${e.message}`);
|
|
134
|
+
// Сетевые ошибки (fetch failed, ECONNREFUSED и т.д.) — retry с задержкой
|
|
135
|
+
const isNetworkError = !e.message?.includes("API ") && !e.message?.includes("status");
|
|
136
|
+
if (isNetworkError && attempt < retries) {
|
|
137
|
+
const delay = Math.min(2000 * (attempt + 1), 10000);
|
|
138
|
+
renderer.writeWarning(`[LLM] Network error, retrying in ${delay / 1000}s... (attempt ${attempt + 1}/${retries})`);
|
|
139
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
const providerHint = provider instanceof LMStudioNative
|
|
143
|
+
? "Check that LM Studio is running on localhost:1234"
|
|
144
|
+
: provider instanceof OpenAICompat
|
|
145
|
+
? "Check that your API server is running and the API key is correct"
|
|
146
|
+
: "Check that your LLM server is running";
|
|
147
|
+
renderer.writeWarning(`[LLM] ${providerHint}`);
|
|
148
|
+
return { response: "", genTimeMs: 0 };
|
|
149
|
+
}
|
|
150
|
+
const genTimeMs = performance.now() - startTime;
|
|
151
|
+
const response = fullText.join("");
|
|
152
|
+
renderer.commitMarkdown();
|
|
153
|
+
if (response.trim()) {
|
|
154
|
+
logLLMResponse(provider.model, response.length, genTimeMs, undefined, caller);
|
|
155
|
+
return { response, genTimeMs };
|
|
156
|
+
}
|
|
157
|
+
// Диагностика пустого ответа
|
|
158
|
+
const reason = lastFinishReason ?? "unknown";
|
|
159
|
+
logWarn("DOCHAT", `empty response #${attempt + 1}: finish_reason=${reason}, reasoning_chunks=${reasoningChunksCount}, content_chunks=${contentChunksCount}`);
|
|
160
|
+
if (lastFinishReason === "length") {
|
|
161
|
+
renderer.writeWarning(` [empty response: model hit max_tokens during reasoning (${reasoningChunksCount} reasoning chunks, 0 content chunks)]`);
|
|
162
|
+
}
|
|
163
|
+
else if (reasoningChunksCount > 0 && contentChunksCount === 0) {
|
|
164
|
+
renderer.writeWarning(` [empty response: model produced ${reasoningChunksCount} reasoning chunks but no content]`);
|
|
165
|
+
}
|
|
166
|
+
if (attempt < retries) {
|
|
167
|
+
renderer.writeDim(`[retry ${attempt + 1}/${retries}]`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const llmCfg = getLLMConfig();
|
|
171
|
+
// Phase 2: Retry WITHOUT thinking — модель генерирует content напрямую
|
|
172
|
+
if (llmCfg.retryWithoutThinking && lastReasoningText.trim()) {
|
|
173
|
+
logInfo("DOCHAT", `retrying without thinking (had ${lastReasoningText.length} reasoning chars)`);
|
|
174
|
+
renderer.writeDim(`[retry without thinking]`);
|
|
175
|
+
const retryResult = await doChatOnce(provider, messages, renderer, signal, false, showThinking, caller, maxTokens);
|
|
176
|
+
if (retryResult.response.trim()) {
|
|
177
|
+
logInfo("DOCHAT", `retry without thinking succeeded: ${retryResult.response.length} chars`);
|
|
178
|
+
return retryResult;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Phase 2.5: Emergency — принудительно генерируем content с низкой температурой
|
|
182
|
+
if (lastReasoningText.trim()) {
|
|
183
|
+
logInfo("DOCHAT", `emergency: forcing content with low temperature`);
|
|
184
|
+
renderer.writeDim(`[emergency: forcing content with temperature=0.1]`);
|
|
185
|
+
const emergencyMessages = [
|
|
186
|
+
...messages,
|
|
187
|
+
{
|
|
188
|
+
role: "user",
|
|
189
|
+
content: "[System] You MUST produce a response now. Do NOT use thinking tags. Reply with a tool call or a direct answer. Any response is better than empty.",
|
|
190
|
+
},
|
|
191
|
+
];
|
|
192
|
+
const emergencyResult = await doChatOnce(provider, emergencyMessages, renderer, signal, false, showThinking, caller, maxTokens, 0.1);
|
|
193
|
+
if (emergencyResult.response.trim()) {
|
|
194
|
+
logInfo("DOCHAT", `emergency succeeded: ${emergencyResult.response.length} chars`);
|
|
195
|
+
return emergencyResult;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Phase 3: Fallback — используем reasoning как content
|
|
199
|
+
if (llmCfg.fallbackToReasoning && lastReasoningText.trim()) {
|
|
200
|
+
logInfo("DOCHAT", `fallback: using reasoning as content (${lastReasoningText.length} chars)`);
|
|
201
|
+
renderer.writeWarning(` [fallback: using reasoning as content]`);
|
|
202
|
+
return { response: lastReasoningText, genTimeMs: 0 };
|
|
203
|
+
}
|
|
204
|
+
return { response: "", genTimeMs: 0 };
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Одиночный вызов LLM без retry логики.
|
|
208
|
+
* Используется для retry с другими параметрами (например, enableThinking: false).
|
|
209
|
+
*/
|
|
210
|
+
async function doChatOnce(provider, messages, renderer, signal, enableThinking = true, showThinking = false, caller = "main", maxTokens, temperature = 0.7) {
|
|
211
|
+
const startTime = performance.now();
|
|
212
|
+
const fullText = [];
|
|
213
|
+
let started = false;
|
|
214
|
+
if (signal?.aborted)
|
|
215
|
+
return { response: "", genTimeMs: 0 };
|
|
216
|
+
if (caller === "main") {
|
|
217
|
+
renderer.setStreamRole?.("assistant");
|
|
218
|
+
}
|
|
219
|
+
renderer.writeSpinner();
|
|
220
|
+
try {
|
|
221
|
+
let buf = "";
|
|
222
|
+
for await (const chunk of provider.chat(messages, {
|
|
223
|
+
temperature,
|
|
224
|
+
signal,
|
|
225
|
+
showThinking,
|
|
226
|
+
enableThinking,
|
|
227
|
+
max_tokens: maxTokens,
|
|
228
|
+
})) {
|
|
229
|
+
if (!chunk.content && !chunk.finish_reason)
|
|
230
|
+
continue;
|
|
231
|
+
if (chunk.content) {
|
|
232
|
+
fullText.push(chunk.content);
|
|
233
|
+
}
|
|
234
|
+
if (!chunk.content)
|
|
235
|
+
continue;
|
|
236
|
+
if (!started) {
|
|
237
|
+
renderer.clearSpinner();
|
|
238
|
+
started = true;
|
|
239
|
+
}
|
|
240
|
+
buf += chunk.content;
|
|
241
|
+
// Рендерим контент, вырезая tool_call блоки
|
|
242
|
+
while (buf.length > 0) {
|
|
243
|
+
const tcStart = buf.indexOf("<tool_call>");
|
|
244
|
+
const tcEnd = buf.indexOf("</tool_call>");
|
|
245
|
+
if (tcStart === -1 && tcEnd === -1) {
|
|
246
|
+
if (buf)
|
|
247
|
+
renderer.writeMarkdownChunk(buf);
|
|
248
|
+
buf = "";
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
if (tcStart !== -1 && (tcEnd === -1 || tcStart < tcEnd)) {
|
|
252
|
+
if (tcStart > 0)
|
|
253
|
+
renderer.writeMarkdownChunk(buf.slice(0, tcStart));
|
|
254
|
+
buf = buf.slice(tcStart);
|
|
255
|
+
const closeIdx = buf.indexOf("</tool_call>");
|
|
256
|
+
if (closeIdx !== -1)
|
|
257
|
+
buf = buf.slice(closeIdx + "</tool_call>".length);
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
if (tcEnd !== -1 && (tcStart === -1 || tcEnd < tcStart)) {
|
|
261
|
+
renderer.writeMarkdownChunk(buf.slice(0, tcEnd));
|
|
262
|
+
buf = buf.slice(tcEnd + "</tool_call>".length);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
catch (e) {
|
|
268
|
+
if (e.name === "AbortError")
|
|
269
|
+
return { response: "", genTimeMs: 0 };
|
|
270
|
+
renderer.writeError(`\n[LLM] ${e.message}`);
|
|
271
|
+
return { response: "", genTimeMs: 0 };
|
|
272
|
+
}
|
|
273
|
+
const genTimeMs = performance.now() - startTime;
|
|
274
|
+
const response = fullText.join("");
|
|
275
|
+
renderer.commitMarkdown();
|
|
276
|
+
logLLMResponse(provider.model, response.length, genTimeMs, undefined, caller);
|
|
277
|
+
return { response, genTimeMs };
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=chat.js.map
|