micro-models-agent 0.41.2 → 0.42.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.
Files changed (171) hide show
  1. package/bin/mma.mjs +41 -41
  2. package/dist/cli/commands.js +19 -9
  3. package/dist/cli/completer.js +37 -36
  4. package/dist/cli/index.js +2 -2
  5. package/dist/cli/main.js +23 -48
  6. package/dist/cli/repl-commands.js +12 -40
  7. package/dist/cli/repl.js +87 -217
  8. package/dist/cli/security-commands.js +7 -5
  9. package/dist/cli/setup.js +26 -8
  10. package/dist/config/config.js +5 -52
  11. package/dist/config/defaults.js +5 -29
  12. package/dist/config/experts.js +1 -1
  13. package/dist/config/index.js +3 -3
  14. package/dist/config/security.js +10 -3
  15. package/dist/core/agent-moe.js +10 -2
  16. package/dist/core/agent.js +82 -273
  17. package/dist/core/bootstrap.js +13 -80
  18. package/dist/core/index.js +2 -2
  19. package/dist/core/prompt-builder.js +2 -23
  20. package/dist/core/session-logger.js +4 -46
  21. package/dist/i18n/en.json +2 -75
  22. package/dist/i18n/ru.json +1 -74
  23. package/dist/index.js +1 -1
  24. package/dist/llm/image-utils.js +5 -4
  25. package/dist/llm/index.js +4 -4
  26. package/dist/llm/model-loader.js +6 -6
  27. package/dist/llm/openai-compat.js +34 -40
  28. package/dist/llm/orchestrator.js +29 -33
  29. package/dist/llm/response.js +9 -9
  30. package/dist/logger/app-logger.js +1 -1
  31. package/dist/logger/index.js +1 -1
  32. package/dist/main.js +299 -55
  33. package/dist/migration/backup.js +13 -13
  34. package/dist/migration/detect.js +11 -11
  35. package/dist/migration/index.js +2 -2
  36. package/dist/modules/browser/actions.js +4 -34
  37. package/dist/modules/browser/bridge-server.mjs +202 -202
  38. package/dist/modules/browser/cookie-store.js +6 -6
  39. package/dist/modules/browser/index.js +5 -7
  40. package/dist/modules/browser/module.js +7 -8
  41. package/dist/modules/browser/session.js +84 -87
  42. package/dist/modules/browser/snapshot.js +58 -92
  43. package/dist/modules/browser/types.js +1 -4
  44. package/dist/modules/certification/cli.js +4 -2
  45. package/dist/modules/certification/fact-checker.js +3 -1
  46. package/dist/modules/certification/loader.js +9 -3
  47. package/dist/modules/certification/runner.js +4 -1
  48. package/dist/modules/context/index.js +1 -1
  49. package/dist/modules/context/manager.js +86 -160
  50. package/dist/modules/execution/auditor.js +25 -177
  51. package/dist/modules/execution/module.js +544 -201
  52. package/dist/modules/execution/moe-executor.js +0 -25
  53. package/dist/modules/execution/plan-store.js +3 -1
  54. package/dist/modules/execution/plan-validator.js +10 -10
  55. package/dist/modules/execution/planner.js +1 -6
  56. package/dist/modules/execution/stuck-detector.js +10 -173
  57. package/dist/modules/execution/verifier.js +42 -86
  58. package/dist/modules/hallucination/confidence.js +1 -8
  59. package/dist/modules/hallucination/detector.js +5 -2
  60. package/dist/modules/hallucination/factual.js +64 -3
  61. package/dist/modules/hallucination/index.js +1 -1
  62. package/dist/modules/hallucination/js-identifiers.js +0 -190
  63. package/dist/modules/hallucination/llm-judge.js +3 -1
  64. package/dist/modules/indexer/cache.js +7 -9
  65. package/dist/modules/indexer/index.js +3 -3
  66. package/dist/modules/indexer/module.js +42 -95
  67. package/dist/modules/indexer/walker.js +17 -17
  68. package/dist/modules/lsp/client.js +31 -74
  69. package/dist/modules/lsp/config.js +33 -87
  70. package/dist/modules/lsp/index.js +3 -3
  71. package/dist/modules/lsp/module.js +21 -185
  72. package/dist/modules/mcp/module.js +6 -2
  73. package/dist/modules/memory/index.js +1 -1
  74. package/dist/modules/memory/module.js +23 -71
  75. package/dist/modules/memory/search.js +9 -11
  76. package/dist/modules/memory/store.js +13 -13
  77. package/dist/modules/pipelines/engine.js +10 -10
  78. package/dist/modules/pipelines/index.js +3 -3
  79. package/dist/modules/pipelines/parser.js +14 -17
  80. package/dist/modules/pipelines/template.js +1 -1
  81. package/dist/modules/plugins/builtin/lint-on-write.js +16 -21
  82. package/dist/modules/plugins/builtin/notify.js +2 -3
  83. package/dist/modules/plugins/index.js +1 -1
  84. package/dist/modules/plugins/loader.js +17 -59
  85. package/dist/modules/plugins/manager.js +17 -73
  86. package/dist/modules/processes/index.js +1 -1
  87. package/dist/modules/processes/registry.js +46 -135
  88. package/dist/modules/registry.js +2 -4
  89. package/dist/modules/security/audit-notifier.js +39 -39
  90. package/dist/modules/security/command-validator.js +8 -2
  91. package/dist/modules/security/data-sanitizer.js +9 -1
  92. package/dist/modules/security/encryption.js +56 -58
  93. package/dist/modules/security/network-validator.js +9 -1
  94. package/dist/modules/security/path-validator.js +3 -1
  95. package/dist/modules/security/security-policies.js +19 -3
  96. package/dist/modules/security/session-encryption.js +1 -1
  97. package/dist/modules/security/session-isolation.js +8 -8
  98. package/dist/modules/session/index.js +3 -3
  99. package/dist/modules/session/module.js +5 -5
  100. package/dist/modules/session/store.js +9 -3
  101. package/dist/modules/skills/module.js +2 -1
  102. package/dist/modules/updater/checker.js +6 -70
  103. package/dist/modules/updater/index.js +1 -2
  104. package/dist/modules/user-profile/compressor.js +2 -2
  105. package/dist/modules/user-profile/index.js +1 -1
  106. package/dist/modules/user-profile/profile.js +9 -9
  107. package/dist/tools/attach-image.js +1 -1
  108. package/dist/tools/bash.js +19 -178
  109. package/dist/tools/browser.js +29 -46
  110. package/dist/tools/executor.js +5 -4
  111. package/dist/tools/file-info.js +12 -13
  112. package/dist/tools/filter-tools.js +2 -9
  113. package/dist/tools/glob-tool.js +11 -11
  114. package/dist/tools/grep-tool.js +3 -1
  115. package/dist/tools/index.js +2 -13
  116. package/dist/tools/list-dir.js +17 -18
  117. package/dist/tools/load-skill.js +3 -1
  118. package/dist/tools/path-utils.js +4 -4
  119. package/dist/tools/pipeline-run.js +25 -25
  120. package/dist/tools/process-kill.js +11 -11
  121. package/dist/tools/process-list.js +22 -20
  122. package/dist/tools/process-log.js +18 -22
  123. package/dist/tools/question.js +3 -1
  124. package/dist/tools/read-file.js +2 -10
  125. package/dist/tools/recall.js +37 -44
  126. package/dist/tools/registry.js +4 -15
  127. package/dist/tools/remember.js +29 -29
  128. package/dist/tools/scope-check.js +9 -9
  129. package/dist/tools/subagent.js +9 -54
  130. package/dist/tools/user-input.js +1 -1
  131. package/dist/tools/web-browse.js +3 -3
  132. package/dist/tools/web-fetch.js +3 -3
  133. package/dist/tools/web-search.js +3 -3
  134. package/dist/tools/write-file.js +3 -1
  135. package/dist/ui/box.js +5 -1
  136. package/dist/ui/index.js +6 -6
  137. package/dist/ui/md-formatter.js +33 -33
  138. package/dist/ui/output.js +5 -5
  139. package/dist/ui/renderer.js +10 -15
  140. package/dist/ui/table.js +1 -1
  141. package/package.json +48 -48
  142. package/dist/cli/plugin-commands.js +0 -36
  143. package/dist/cli/run-result.js +0 -22
  144. package/dist/core/version.js +0 -24
  145. package/dist/modules/artifacts/store.js +0 -61
  146. package/dist/modules/browser/bridge-client.js +0 -199
  147. package/dist/modules/browser/bridge-path.js +0 -10
  148. package/dist/modules/browser/driver.js +0 -136
  149. package/dist/modules/context/chunk-query.js +0 -100
  150. package/dist/modules/context/fact-extractor.js +0 -162
  151. package/dist/modules/context/history.js +0 -15
  152. package/dist/modules/execution/audit-runners.js +0 -152
  153. package/dist/modules/execution/execution-plugin.js +0 -272
  154. package/dist/modules/execution/plan-tool.js +0 -508
  155. package/dist/modules/execution/windows-commands.js +0 -41
  156. package/dist/modules/indexer/project-profile.js +0 -183
  157. package/dist/modules/lsp/check-tool.js +0 -58
  158. package/dist/modules/lsp/command.js +0 -60
  159. package/dist/modules/lsp/probe.js +0 -76
  160. package/dist/modules/lsp/project-root.js +0 -32
  161. package/dist/modules/lsp/startup-check.js +0 -141
  162. package/dist/modules/processes/detect.js +0 -34
  163. package/dist/modules/skills/matcher.js +0 -27
  164. package/dist/modules/updater/module.js +0 -116
  165. package/dist/tools/chunk-query.js +0 -99
  166. package/dist/tools/download-file.js +0 -116
  167. package/dist/tools/enable-tools.js +0 -58
  168. package/dist/tools/hidden-tools-block.js +0 -37
  169. package/dist/ui/line-editor.js +0 -703
  170. package/dist/ui/line-math.js +0 -69
  171. package/dist/ui/plan-view.js +0 -103
@@ -1,69 +0,0 @@
1
- import stringWidth from "string-width";
2
- const ANSI_RE = /\x1b\[[0-9;?]*[ -/]*[@-~]/g;
3
- export function stripAnsi(s) {
4
- return s.replace(ANSI_RE, "");
5
- }
6
- export function charLen(s) {
7
- return Array.from(s).length;
8
- }
9
- export function wrapLine(line, width) {
10
- const w = width > 0 ? width : 80;
11
- const chars = Array.from(line);
12
- const rows = [];
13
- let start = 0;
14
- let cells = 0;
15
- for (let i = 0; i < chars.length; i++) {
16
- const ch = chars[i];
17
- if (ch === "\n") {
18
- rows.push({ text: chars.slice(start, i).join(""), charStart: start });
19
- start = i + 1;
20
- cells = 0;
21
- continue;
22
- }
23
- const cw = stringWidth(ch);
24
- if (cells + cw > w && cells > 0) {
25
- rows.push({ text: chars.slice(start, i).join(""), charStart: start });
26
- start = i;
27
- cells = cw;
28
- }
29
- else {
30
- cells += cw;
31
- }
32
- }
33
- rows.push({ text: chars.slice(start).join(""), charStart: start });
34
- return rows;
35
- }
36
- export function buildLayout(lines, width) {
37
- const rows = [];
38
- for (let b = 0; b < lines.length; b++) {
39
- for (const r of wrapLine(lines[b], width)) {
40
- rows.push({ bufRow: b, charStart: r.charStart, text: r.text });
41
- }
42
- }
43
- return rows;
44
- }
45
- export function layoutIndexFor(rows, bufRow, col) {
46
- let idx = 0;
47
- for (let i = 0; i < rows.length; i++) {
48
- if (rows[i].bufRow === bufRow && rows[i].charStart <= col)
49
- idx = i;
50
- }
51
- return idx;
52
- }
53
- export function visualColAt(rows, idx, col) {
54
- const r = rows[idx];
55
- const upTo = col - r.charStart;
56
- return stringWidth(Array.from(r.text).slice(0, upTo).join(""));
57
- }
58
- export function charOffsetFor(rows, idx, visualCol) {
59
- const r = rows[idx];
60
- const chars = Array.from(r.text);
61
- let cells = 0;
62
- for (let i = 0; i < chars.length; i++) {
63
- const cw = stringWidth(chars[i]);
64
- if (cells + cw > visualCol)
65
- return r.charStart + i;
66
- cells += cw;
67
- }
68
- return r.charStart + chars.length;
69
- }
@@ -1,103 +0,0 @@
1
- import { existsSync, readFileSync } from "fs";
2
- import { join } from "path";
3
- import { pc } from "./colors";
4
- import { extractFileLikeTokens, stripUrls } from "../modules/hallucination/js-identifiers";
5
- import { t } from "../i18n/index";
6
- export function readActivePlan(baseDir) {
7
- const p = join(baseDir, ".mma", "plans", "active.json");
8
- if (!existsSync(p))
9
- return null;
10
- try {
11
- const raw = readFileSync(p, "utf-8");
12
- if (!raw.trim())
13
- return null;
14
- const parsed = JSON.parse(raw);
15
- if (!parsed || !Array.isArray(parsed.steps))
16
- return null;
17
- return {
18
- id: parsed.id || "plan",
19
- title: parsed.title || "Plan",
20
- steps: parsed.steps,
21
- createdAt: parsed.createdAt || new Date().toISOString(),
22
- baseDir: parsed.baseDir || baseDir,
23
- name: parsed.name,
24
- };
25
- }
26
- catch {
27
- return null;
28
- }
29
- }
30
- export function currentStepIndex(plan) {
31
- const idx = plan.steps.findIndex((s) => s.status !== "done" && s.status !== "skipped");
32
- return idx === -1 ? 0 : idx;
33
- }
34
- function stepMark(step) {
35
- switch (step.status) {
36
- case "done":
37
- return pc.green("[x]");
38
- case "in_progress":
39
- return pc.yellow("[*]");
40
- case "failed":
41
- return pc.red("[!]");
42
- case "skipped":
43
- return pc.dim("[-]");
44
- default:
45
- return pc.dim("[ ]");
46
- }
47
- }
48
- export function formatPlanChecklist(plan) {
49
- const done = plan.steps.filter((s) => s.status === "done" || s.status === "skipped").length;
50
- const total = plan.steps.length;
51
- const pct = total === 0 ? 0 : Math.round((done / total) * 100);
52
- const cur = currentStepIndex(plan);
53
- const barLen = 15;
54
- const filled = Math.round((pct / 100) * barLen);
55
- const bar = pc.green("█".repeat(filled)) + pc.dim("░".repeat(barLen - filled));
56
- const title = plan.title.replace(/^\[\d+[^]]*\]\s*/, "");
57
- const lines = [
58
- `${pc.cyan(`[${plan.id}]`)} ${pc.bold(title)} ${bar} ${pc.dim(`${done}/${total} ${pct}%`)}`,
59
- ];
60
- for (let i = 0; i < plan.steps.length; i++) {
61
- const step = plan.steps[i];
62
- const active = i === cur;
63
- const desc = active ? pc.yellow(step.description) : pc.dim(step.description);
64
- lines.push(` ${stepMark(step)} ${step.id}. ${desc}`);
65
- for (const sub of step.subtasks ?? []) {
66
- lines.push(` ${sub.done ? pc.green("[x]") : pc.dim("[ ]")} ${sub.text}`);
67
- }
68
- }
69
- return lines;
70
- }
71
- const STRUCTURAL_TOOLS = new Set([
72
- "plan",
73
- "todo",
74
- "verify",
75
- "project_map",
76
- "lsp_check",
77
- "enable_tools",
78
- ]);
79
- function truncate(s, max = 48) {
80
- return s.length > max ? `${s.slice(0, max - 1)}…` : s;
81
- }
82
- export function stepContextForTool(plan, tool, args) {
83
- if (!plan || STRUCTURAL_TOOLS.has(tool))
84
- return null;
85
- const argStr = JSON.stringify(args);
86
- const callPaths = extractFileLikeTokens(stripUrls(argStr)).map((p) => p.toLowerCase());
87
- if (callPaths.length > 0) {
88
- for (const step of plan.steps) {
89
- if (step.status === "done" || step.status === "skipped")
90
- continue;
91
- const stepPaths = extractFileLikeTokens(stripUrls(step.description)).map((p) => p.toLowerCase());
92
- if (stepPaths.length > 0 &&
93
- stepPaths.some((s) => callPaths.some((c) => c.includes(s) || s.includes(c)))) {
94
- return t("ui.step_context", { id: step.id, desc: truncate(step.description) });
95
- }
96
- }
97
- }
98
- const cur = currentStepIndex(plan);
99
- const step = plan.steps[cur];
100
- if (!step)
101
- return null;
102
- return t("ui.step_context", { id: step.id, desc: truncate(step.description) });
103
- }