micro-models-agent 0.23.0 → 0.24.1

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 (171) hide show
  1. package/README.md +312 -312
  2. package/bin/mma.mjs +8 -8
  3. package/dist/main.js +8777 -864
  4. package/package.json +4 -3
  5. package/dist/cli/commands.js +0 -220
  6. package/dist/cli/completer.js +0 -168
  7. package/dist/cli/index.js +0 -2
  8. package/dist/cli/main.js +0 -113
  9. package/dist/cli/repl.js +0 -987
  10. package/dist/cli/security-commands.js +0 -166
  11. package/dist/cli/setup.js +0 -229
  12. package/dist/config/config.js +0 -186
  13. package/dist/config/defaults.js +0 -91
  14. package/dist/config/experts.js +0 -15
  15. package/dist/config/index.js +0 -3
  16. package/dist/config/security.js +0 -193
  17. package/dist/config/types.js +0 -1
  18. package/dist/core/agent-moe.js +0 -98
  19. package/dist/core/agent.js +0 -461
  20. package/dist/core/bootstrap.js +0 -321
  21. package/dist/core/index.js +0 -2
  22. package/dist/core/prompt-builder.js +0 -55
  23. package/dist/core/session-logger.js +0 -122
  24. package/dist/core/types.js +0 -1
  25. package/dist/i18n/en.json +0 -461
  26. package/dist/i18n/index.js +0 -43
  27. package/dist/i18n/ru.json +0 -461
  28. package/dist/index.js +0 -22
  29. package/dist/llm/image-utils.js +0 -144
  30. package/dist/llm/index.js +0 -4
  31. package/dist/llm/model-loader.js +0 -78
  32. package/dist/llm/openai-compat.js +0 -324
  33. package/dist/llm/orchestrator.js +0 -194
  34. package/dist/llm/provider.js +0 -10
  35. package/dist/llm/response.js +0 -39
  36. package/dist/llm/token-counter.js +0 -39
  37. package/dist/llm/types.js +0 -1
  38. package/dist/logger/app-logger.js +0 -76
  39. package/dist/logger/index.js +0 -1
  40. package/dist/migration/backup.js +0 -45
  41. package/dist/migration/detect.js +0 -50
  42. package/dist/migration/index.js +0 -2
  43. package/dist/modules/browser/actions.js +0 -46
  44. package/dist/modules/browser/cookie-store.js +0 -24
  45. package/dist/modules/browser/index.js +0 -5
  46. package/dist/modules/browser/module.js +0 -28
  47. package/dist/modules/browser/session.js +0 -287
  48. package/dist/modules/browser/snapshot.js +0 -114
  49. package/dist/modules/browser/types.js +0 -9
  50. package/dist/modules/context/history.js +0 -15
  51. package/dist/modules/context/index.js +0 -1
  52. package/dist/modules/context/manager.js +0 -240
  53. package/dist/modules/execution/auditor.js +0 -72
  54. package/dist/modules/execution/index.js +0 -6
  55. package/dist/modules/execution/module.js +0 -337
  56. package/dist/modules/execution/moe-executor.js +0 -209
  57. package/dist/modules/execution/plan-validator.js +0 -153
  58. package/dist/modules/execution/planner.js +0 -35
  59. package/dist/modules/execution/stuck-detector.js +0 -134
  60. package/dist/modules/execution/tracker.js +0 -53
  61. package/dist/modules/execution/types.js +0 -1
  62. package/dist/modules/execution/verifier.js +0 -149
  63. package/dist/modules/hallucination/confidence.js +0 -54
  64. package/dist/modules/hallucination/consistency.js +0 -60
  65. package/dist/modules/hallucination/detector.js +0 -41
  66. package/dist/modules/hallucination/factual.js +0 -170
  67. package/dist/modules/hallucination/index.js +0 -4
  68. package/dist/modules/index.js +0 -5
  69. package/dist/modules/indexer/cache.js +0 -38
  70. package/dist/modules/indexer/index.js +0 -3
  71. package/dist/modules/indexer/module.js +0 -192
  72. package/dist/modules/indexer/walker.js +0 -101
  73. package/dist/modules/mcp/client.js +0 -393
  74. package/dist/modules/mcp/index.js +0 -3
  75. package/dist/modules/mcp/module.js +0 -146
  76. package/dist/modules/mcp/registry.js +0 -15
  77. package/dist/modules/memory/index.js +0 -1
  78. package/dist/modules/memory/module.js +0 -48
  79. package/dist/modules/memory/search.js +0 -40
  80. package/dist/modules/memory/store.js +0 -65
  81. package/dist/modules/pipelines/engine.js +0 -60
  82. package/dist/modules/pipelines/index.js +0 -3
  83. package/dist/modules/pipelines/parser.js +0 -53
  84. package/dist/modules/pipelines/template.js +0 -14
  85. package/dist/modules/plugins/builtin/lint-on-write.js +0 -121
  86. package/dist/modules/plugins/builtin/notify.js +0 -8
  87. package/dist/modules/plugins/index.js +0 -1
  88. package/dist/modules/plugins/loader.js +0 -28
  89. package/dist/modules/plugins/manager.js +0 -161
  90. package/dist/modules/plugins/types.js +0 -1
  91. package/dist/modules/processes/detect.js +0 -34
  92. package/dist/modules/processes/index.js +0 -3
  93. package/dist/modules/processes/registry.js +0 -148
  94. package/dist/modules/processes/runner.js +0 -124
  95. package/dist/modules/registry.js +0 -45
  96. package/dist/modules/security/audit-log.js +0 -116
  97. package/dist/modules/security/audit-notifier.js +0 -292
  98. package/dist/modules/security/command-validator.js +0 -185
  99. package/dist/modules/security/content-scanner.js +0 -52
  100. package/dist/modules/security/data-sanitizer.js +0 -97
  101. package/dist/modules/security/encryption.js +0 -240
  102. package/dist/modules/security/index.js +0 -14
  103. package/dist/modules/security/network-validator.js +0 -79
  104. package/dist/modules/security/path-validator.js +0 -155
  105. package/dist/modules/security/rate-limiter.js +0 -119
  106. package/dist/modules/security/security-policies.js +0 -393
  107. package/dist/modules/security/session-encryption.js +0 -193
  108. package/dist/modules/security/session-isolation.js +0 -95
  109. package/dist/modules/session/index.js +0 -3
  110. package/dist/modules/session/manager.js +0 -167
  111. package/dist/modules/session/module.js +0 -24
  112. package/dist/modules/session/store.js +0 -174
  113. package/dist/modules/session/types.js +0 -1
  114. package/dist/modules/skills/index.js +0 -3
  115. package/dist/modules/skills/loader.js +0 -72
  116. package/dist/modules/skills/matcher.js +0 -27
  117. package/dist/modules/skills/module.js +0 -143
  118. package/dist/modules/types.js +0 -1
  119. package/dist/modules/updater/checker.js +0 -32
  120. package/dist/modules/updater/index.js +0 -1
  121. package/dist/modules/user-profile/compressor.js +0 -16
  122. package/dist/modules/user-profile/index.js +0 -1
  123. package/dist/modules/user-profile/profile.js +0 -68
  124. package/dist/skills/builtin/builtin/git.md +0 -36
  125. package/dist/skills/builtin/builtin/typescript.md +0 -35
  126. package/dist/tools/approve.js +0 -32
  127. package/dist/tools/attach-image.js +0 -89
  128. package/dist/tools/bash.js +0 -140
  129. package/dist/tools/browser.js +0 -97
  130. package/dist/tools/create-dir.js +0 -56
  131. package/dist/tools/delete-file.js +0 -63
  132. package/dist/tools/edit-file.js +0 -77
  133. package/dist/tools/executor.js +0 -95
  134. package/dist/tools/file-info.js +0 -45
  135. package/dist/tools/filter-tools.js +0 -10
  136. package/dist/tools/glob-tool.js +0 -26
  137. package/dist/tools/grep-tool.js +0 -64
  138. package/dist/tools/index.js +0 -52
  139. package/dist/tools/list-dir.js +0 -47
  140. package/dist/tools/load-skill.js +0 -48
  141. package/dist/tools/mcp-call.js +0 -68
  142. package/dist/tools/move-file.js +0 -84
  143. package/dist/tools/path-utils.js +0 -51
  144. package/dist/tools/pipeline-run.js +0 -144
  145. package/dist/tools/preview.js +0 -2
  146. package/dist/tools/process-kill.js +0 -29
  147. package/dist/tools/process-list.js +0 -38
  148. package/dist/tools/process-log.js +0 -41
  149. package/dist/tools/question.js +0 -142
  150. package/dist/tools/read-file.js +0 -73
  151. package/dist/tools/recall.js +0 -110
  152. package/dist/tools/registry.js +0 -36
  153. package/dist/tools/remember.js +0 -67
  154. package/dist/tools/scope-check.js +0 -30
  155. package/dist/tools/search-history.js +0 -64
  156. package/dist/tools/subagent.js +0 -142
  157. package/dist/tools/types.js +0 -1
  158. package/dist/tools/user-input.js +0 -123
  159. package/dist/tools/web-browse.js +0 -57
  160. package/dist/tools/web-fetch.js +0 -72
  161. package/dist/tools/web-search.js +0 -59
  162. package/dist/tools/write-file.js +0 -80
  163. package/dist/ui/box.js +0 -81
  164. package/dist/ui/colors.js +0 -4
  165. package/dist/ui/diff.js +0 -185
  166. package/dist/ui/index.js +0 -6
  167. package/dist/ui/md-formatter.js +0 -212
  168. package/dist/ui/output.js +0 -13
  169. package/dist/ui/renderer.js +0 -141
  170. package/dist/ui/spinner.js +0 -70
  171. package/dist/ui/table.js +0 -144
@@ -1,141 +0,0 @@
1
- import { pc } from "./colors";
2
- import { FormattingStream } from "./md-formatter";
3
- import { Spinner } from "./spinner";
4
- import { box } from "./box";
5
- import { getTerminalWidth } from "./table";
6
- import { t } from "../i18n/index";
7
- export function isRichTerminal() {
8
- return Boolean(process.stdout.isTTY) && !process.env.CI;
9
- }
10
- /** Short human-friendly summary of tool arguments. */
11
- export function summarizeArgs(args) {
12
- const preferred = ["path", "file", "query", "url", "command", "name"];
13
- for (const key of preferred) {
14
- const value = args[key];
15
- if (typeof value === "string" && value) {
16
- return value.length > 60 ? `${value.slice(0, 57)}…` : value;
17
- }
18
- }
19
- const serialized = JSON.stringify(args);
20
- if (!serialized || serialized === "{}")
21
- return "";
22
- return serialized.length > 60 ? `${serialized.slice(0, 57)}…` : serialized;
23
- }
24
- function friendlyTool(tool) {
25
- const key = `tool.friendly.${tool}`;
26
- const value = t(key);
27
- return value !== key ? value : tool;
28
- }
29
- /**
30
- * Streams agent events to the terminal. Rich mode (TTY) adds a spinner
31
- * and boxed tool cards; plain mode falls back to simple prefixed lines.
32
- * Colors come from `colors.ts`, disabled outside a TTY, in CI, or on NO_COLOR.
33
- */
34
- export class Renderer {
35
- rich;
36
- spinner;
37
- fmt;
38
- out;
39
- err;
40
- width;
41
- card = null;
42
- constructor(opts = {}) {
43
- this.rich = opts.rich ?? isRichTerminal();
44
- this.out = opts.out ?? process.stdout;
45
- this.err = opts.err ?? process.stderr;
46
- this.width = opts.width ?? getTerminalWidth();
47
- this.spinner = new Spinner({
48
- enabled: this.rich && (opts.spinner ?? true),
49
- stream: this.err,
50
- width: this.width,
51
- });
52
- this.fmt = new FormattingStream((line) => this.out.write(`${line}\n`), this.width);
53
- }
54
- /** Final answer streamed from the model (markdown-formatted). */
55
- text(chunk) {
56
- this.endCard();
57
- this.spinner.stop();
58
- this.fmt.write(chunk);
59
- }
60
- /** Arbitrary status/meta text (tool output, reasoning, MoE status). */
61
- meta(chunk) {
62
- this.spinner.stop();
63
- if (this.card) {
64
- this.card.body.push(chunk);
65
- }
66
- else {
67
- this.out.write(chunk);
68
- }
69
- }
70
- /** Dimmed reasoning stream (already colored by the agent). */
71
- reasoning(chunk) {
72
- this.spinner.stop();
73
- this.out.write(pc.dim(chunk));
74
- }
75
- /** Model is loading / generating — show the thinking spinner. */
76
- thinkingStart() {
77
- this.spinner.start(t("ui.thinking"));
78
- }
79
- /** LLM call finished; clear the thinking spinner. */
80
- thinkingEnd() {
81
- this.spinner.stop();
82
- }
83
- toolStart(tool, args) {
84
- this.endCard();
85
- this.spinner.stop();
86
- const summary = summarizeArgs(args);
87
- if (!this.rich) {
88
- this.out.write(`\n${pc.dim("⚙")} ${friendlyTool(tool)}${summary ? ` ${pc.dim(summary)}` : ""}\n`);
89
- return;
90
- }
91
- this.card = { tool, args, body: [], start: Date.now() };
92
- this.spinner.start(`${pc.dim("⚙")} ${friendlyTool(tool)}${summary ? ` ${pc.dim(summary)}` : ""}`);
93
- }
94
- toolEnd(_tool, duration, error) {
95
- this.spinner.stop();
96
- if (!this.rich)
97
- return;
98
- if (!this.card)
99
- return;
100
- const { tool, args, body } = this.card;
101
- const lines = [];
102
- const summary = summarizeArgs(args);
103
- if (summary)
104
- lines.push(pc.dim(summary));
105
- for (const chunk of body) {
106
- for (const line of chunk.split("\n")) {
107
- if (line.trim() !== "")
108
- lines.push(line);
109
- }
110
- }
111
- const marker = error ? pc.red("✗") : pc.green("✓");
112
- lines.push(`${marker} ${pc.dim(`${duration}ms`)}`);
113
- const title = `${marker} ${friendlyTool(tool)}`;
114
- for (const line of box(lines, { title, width: this.width })) {
115
- this.out.write(`${line}\n`);
116
- }
117
- this.card = null;
118
- }
119
- /** Raw pre-formatted text (diff blocks, warnings). */
120
- raw(text) {
121
- this.endCard();
122
- this.spinner.stop();
123
- this.out.write(text);
124
- }
125
- error(text) {
126
- this.endCard();
127
- this.spinner.stop();
128
- this.err.write(`${pc.red(text)}\n`);
129
- }
130
- flush() {
131
- this.endCard();
132
- this.spinner.stop();
133
- this.fmt.flush();
134
- }
135
- endCard() {
136
- if (!this.card)
137
- return;
138
- const { tool, start } = this.card;
139
- this.toolEnd(tool, Date.now() - start);
140
- }
141
- }
@@ -1,70 +0,0 @@
1
- import { pc } from "./colors";
2
- import stringWidth from "string-width";
3
- import { getTerminalWidth } from "./table";
4
- const FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
5
- export function isSpinnerSupported(stream) {
6
- const s = stream ?? process.stderr;
7
- return Boolean(s.isTTY) && !process.env.CI;
8
- }
9
- /**
10
- * Zero-dependency ANSI spinner. Writes to stderr using a single
11
- * overwritten line (`\r` + text + clear-to-end). Disabled automatically
12
- * when the target stream is not a TTY.
13
- */
14
- export class Spinner {
15
- timer = null;
16
- frame = 0;
17
- message = "";
18
- enabled;
19
- stream;
20
- intervalMs;
21
- width;
22
- constructor(opts = {}) {
23
- this.stream = opts.stream ?? process.stderr;
24
- this.enabled = opts.enabled ?? isSpinnerSupported(this.stream);
25
- this.intervalMs = opts.intervalMs ?? 80;
26
- this.width = opts.width ?? getTerminalWidth();
27
- }
28
- get running() {
29
- return this.timer !== null;
30
- }
31
- start(message) {
32
- if (!this.enabled)
33
- return;
34
- this.stop();
35
- this.message = this.truncate(message);
36
- this.frame = 0;
37
- this.timer = setInterval(() => this.tick(), this.intervalMs);
38
- this.tick();
39
- }
40
- setMessage(message) {
41
- this.message = this.truncate(message);
42
- if (this.timer)
43
- this.tick();
44
- }
45
- stop() {
46
- if (this.timer) {
47
- clearInterval(this.timer);
48
- this.timer = null;
49
- this.stream.write("\r\x1b[K");
50
- }
51
- }
52
- truncate(text) {
53
- if (stringWidth(text) <= this.width - 2)
54
- return text;
55
- let acc = "";
56
- for (const ch of text) {
57
- if (stringWidth(acc + ch) > this.width - 3)
58
- break;
59
- acc += ch;
60
- }
61
- return acc + "…";
62
- }
63
- tick() {
64
- if (!this.timer)
65
- return;
66
- const frame = FRAMES[this.frame % FRAMES.length];
67
- this.frame++;
68
- this.stream.write("\r" + pc.cyan(frame) + " " + this.message + "\x1b[K");
69
- }
70
- }
package/dist/ui/table.js DELETED
@@ -1,144 +0,0 @@
1
- import stringWidth from "string-width";
2
- import { pc } from "./colors";
3
- const ELLIPSIS = "…";
4
- function pad(text, width, align) {
5
- const visible = stringWidth(text);
6
- const gap = Math.max(0, width - visible);
7
- if (align === "right")
8
- return " ".repeat(gap) + text;
9
- if (align === "center") {
10
- const left = Math.floor(gap / 2);
11
- return " ".repeat(left) + text + " ".repeat(gap - left);
12
- }
13
- return text + " ".repeat(gap);
14
- }
15
- function truncate(text, width) {
16
- if (stringWidth(text) <= width)
17
- return text;
18
- let acc = "";
19
- for (const ch of text) {
20
- if (stringWidth(acc + ch) > width - 1)
21
- break;
22
- acc += ch;
23
- }
24
- return acc + ELLIPSIS;
25
- }
26
- /** Split a markdown table row `| a | b |` into cells. */
27
- export function splitRow(line) {
28
- const trimmed = line.trim();
29
- let body = trimmed;
30
- if (body.startsWith("|"))
31
- body = body.slice(1);
32
- if (body.endsWith("|") && !body.endsWith("\\|"))
33
- body = body.slice(0, -1);
34
- return body.split("|").map((c) => c.trim());
35
- }
36
- /** Detect a markdown table separator row like `|---|---|` / `:---:` / `---:`. */
37
- export function isSeparatorRow(line) {
38
- const trimmed = line.trim();
39
- if (!trimmed.includes("-"))
40
- return false;
41
- const cells = splitRow(trimmed);
42
- if (cells.length === 0)
43
- return false;
44
- return cells.every((c) => /^:?-{3,}:?$/.test(c));
45
- }
46
- /** Alignments encoded by a separator row, keyed by column index. */
47
- export function parseAlignments(separator) {
48
- const out = {};
49
- splitRow(separator).forEach((cell, i) => {
50
- const left = cell.startsWith(":");
51
- const right = cell.endsWith(":");
52
- if (left && right)
53
- out[i] = "center";
54
- else if (right)
55
- out[i] = "right";
56
- });
57
- return out;
58
- }
59
- /**
60
- * Render a markdown table block into aligned box-drawing lines.
61
- * `tableLines` must include the header row and (optionally) the separator row.
62
- */
63
- export function formatTable(tableLines, opts = {}) {
64
- const align = opts.align ?? {};
65
- let dataStart = 1;
66
- if (tableLines.length > 1 && isSeparatorRow(tableLines[1])) {
67
- dataStart = 2;
68
- Object.assign(align, parseAlignments(tableLines[1]));
69
- }
70
- const rows = tableLines.map(splitRow);
71
- const headerRow = rows[0] ?? [];
72
- const dataRows = rows.slice(dataStart);
73
- let columnCount = Math.max(headerRow.length, ...dataRows.map((r) => r.length));
74
- if (opts.maxColumns && columnCount > opts.maxColumns) {
75
- columnCount = opts.maxColumns;
76
- }
77
- const widths = [];
78
- for (let c = 0; c < columnCount; c++) {
79
- let w = 3;
80
- for (const row of rows) {
81
- const cell = row[c];
82
- if (cell !== undefined)
83
- w = Math.max(w, stringWidth(cell));
84
- }
85
- widths.push(w);
86
- }
87
- const maxWidth = opts.maxWidth ?? getTerminalWidth();
88
- const contentWidth = widths.reduce((a, b) => a + b, 0);
89
- const borderWidth = columnCount * 3 + 1;
90
- const totalWidth = contentWidth + borderWidth;
91
- if (totalWidth > maxWidth) {
92
- const over = totalWidth - maxWidth;
93
- let remaining = over;
94
- let i = widths.length - 1;
95
- while (remaining > 0 && i >= 0) {
96
- if (widths[i] > 3) {
97
- const cut = Math.min(widths[i] - 3, remaining);
98
- widths[i] -= cut;
99
- remaining -= cut;
100
- }
101
- i--;
102
- }
103
- }
104
- const renderRow = (row, isHeader) => {
105
- const cells = [];
106
- for (let c = 0; c < columnCount; c++) {
107
- const raw = row[c] ?? "";
108
- const cell = truncate(raw, widths[c]);
109
- const a = isHeader && align[c] === undefined ? "center" : align[c] ?? "left";
110
- cells.push(pad(cell, widths[c], a));
111
- }
112
- const content = cells.map((c) => pc.dim("│ ") + c).join("") + pc.dim("│");
113
- return isHeader ? pc.bold(content) : content;
114
- };
115
- const border = (l, m, r) => {
116
- const seg = widths.map((w) => "─".repeat(w + 2)).join(m);
117
- return pc.dim(l + seg + r);
118
- };
119
- const out = [];
120
- out.push(border("┌", "┬", "┐"));
121
- out.push(renderRow(headerRow, true));
122
- out.push(border("├", "┼", "┤"));
123
- for (const row of dataRows) {
124
- out.push(renderRow(row, false));
125
- }
126
- out.push(border("└", "┴", "┘"));
127
- return out;
128
- }
129
- export function getTerminalWidth() {
130
- if (process.stdout.isTTY && process.stdout.columns) {
131
- return process.stdout.columns;
132
- }
133
- return 80;
134
- }
135
- /** Build pipe lines from structured data and render them as a table. */
136
- export function renderTable(headers, rows, opts = {}) {
137
- const lines = [];
138
- lines.push(`| ${headers.join(" | ")} |`);
139
- lines.push(`|${headers.map(() => "---").join("|")}|`);
140
- for (const row of rows) {
141
- lines.push(`| ${row.join(" | ")} |`);
142
- }
143
- return formatTable(lines, opts);
144
- }