micro-models-agent 0.58.2 → 0.60.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 (233) hide show
  1. package/CHANGELOG.md +578 -556
  2. package/README.md +358 -358
  3. package/dist/certification/certifications.json +493 -493
  4. package/dist/i18n/en.json +732 -716
  5. package/dist/i18n/ru.json +732 -716
  6. package/dist/main.js +1243 -448
  7. package/dist/modules/browser/bridge-server.mjs +219 -219
  8. package/dist/skills/builtin/git.md +36 -36
  9. package/dist/skills/builtin/typescript.md +35 -35
  10. package/package.json +51 -51
  11. package/dist/cli/commands.js +0 -447
  12. package/dist/cli/completer.js +0 -167
  13. package/dist/cli/index.js +0 -2
  14. package/dist/cli/main.js +0 -153
  15. package/dist/cli/plugin-commands.js +0 -36
  16. package/dist/cli/repl-commands.js +0 -761
  17. package/dist/cli/repl.js +0 -702
  18. package/dist/cli/run-result.js +0 -33
  19. package/dist/cli/security-commands.js +0 -164
  20. package/dist/cli/setup.js +0 -237
  21. package/dist/config/config.js +0 -276
  22. package/dist/config/defaults.js +0 -141
  23. package/dist/config/domains.js +0 -179
  24. package/dist/config/experts.js +0 -15
  25. package/dist/config/index.js +0 -4
  26. package/dist/config/security.js +0 -213
  27. package/dist/config/types.js +0 -1
  28. package/dist/core/agent-moe.js +0 -102
  29. package/dist/core/agent.js +0 -1018
  30. package/dist/core/bootstrap.js +0 -481
  31. package/dist/core/crash-handler.js +0 -51
  32. package/dist/core/environment.js +0 -199
  33. package/dist/core/index.js +0 -2
  34. package/dist/core/prompt-builder.js +0 -76
  35. package/dist/core/session-logger.js +0 -251
  36. package/dist/core/types.js +0 -1
  37. package/dist/core/version.js +0 -26
  38. package/dist/core/workspace.js +0 -76
  39. package/dist/i18n/index.js +0 -46
  40. package/dist/index.js +0 -22
  41. package/dist/llm/image-utils.js +0 -143
  42. package/dist/llm/index.js +0 -4
  43. package/dist/llm/model-loader.js +0 -78
  44. package/dist/llm/openai-compat.js +0 -497
  45. package/dist/llm/orchestrator.js +0 -200
  46. package/dist/llm/provider.js +0 -10
  47. package/dist/llm/response.js +0 -39
  48. package/dist/llm/token-counter.js +0 -39
  49. package/dist/llm/types.js +0 -1
  50. package/dist/logger/app-logger.js +0 -189
  51. package/dist/logger/file-log.js +0 -151
  52. package/dist/logger/index.js +0 -1
  53. package/dist/migration/backup.js +0 -45
  54. package/dist/migration/detect.js +0 -50
  55. package/dist/migration/index.js +0 -2
  56. package/dist/modules/artifacts/store.js +0 -61
  57. package/dist/modules/browser/actions.js +0 -76
  58. package/dist/modules/browser/bridge-client.js +0 -199
  59. package/dist/modules/browser/bridge-path.js +0 -10
  60. package/dist/modules/browser/cookie-store.js +0 -24
  61. package/dist/modules/browser/driver.js +0 -136
  62. package/dist/modules/browser/index.js +0 -7
  63. package/dist/modules/browser/module.js +0 -29
  64. package/dist/modules/browser/session.js +0 -342
  65. package/dist/modules/browser/snapshot.js +0 -148
  66. package/dist/modules/browser/types.js +0 -12
  67. package/dist/modules/certification/cli.js +0 -213
  68. package/dist/modules/certification/fact-checker.js +0 -82
  69. package/dist/modules/certification/loader.js +0 -106
  70. package/dist/modules/certification/manifest.js +0 -58
  71. package/dist/modules/certification/runner.js +0 -245
  72. package/dist/modules/certification/scenarios.js +0 -407
  73. package/dist/modules/certification/types.js +0 -1
  74. package/dist/modules/context/chunk-query.js +0 -100
  75. package/dist/modules/context/fact-extractor.js +0 -168
  76. package/dist/modules/context/history.js +0 -15
  77. package/dist/modules/context/index.js +0 -1
  78. package/dist/modules/context/manager.js +0 -440
  79. package/dist/modules/execution/audit-runners.js +0 -206
  80. package/dist/modules/execution/auditor.js +0 -218
  81. package/dist/modules/execution/execution-plugin.js +0 -431
  82. package/dist/modules/execution/index.js +0 -8
  83. package/dist/modules/execution/module.js +0 -625
  84. package/dist/modules/execution/moe-executor.js +0 -304
  85. package/dist/modules/execution/plan-coverage.js +0 -68
  86. package/dist/modules/execution/plan-persister.js +0 -46
  87. package/dist/modules/execution/plan-store.js +0 -196
  88. package/dist/modules/execution/plan-tool.js +0 -677
  89. package/dist/modules/execution/plan-validator.js +0 -153
  90. package/dist/modules/execution/planner.js +0 -94
  91. package/dist/modules/execution/stuck-detector.js +0 -746
  92. package/dist/modules/execution/tracker.js +0 -69
  93. package/dist/modules/execution/types.js +0 -1
  94. package/dist/modules/execution/verifier.js +0 -235
  95. package/dist/modules/execution/windows-commands.js +0 -41
  96. package/dist/modules/hallucination/confidence.js +0 -66
  97. package/dist/modules/hallucination/consistency.js +0 -26
  98. package/dist/modules/hallucination/detector.js +0 -47
  99. package/dist/modules/hallucination/factual.js +0 -169
  100. package/dist/modules/hallucination/index.js +0 -5
  101. package/dist/modules/hallucination/js-identifiers.js +0 -262
  102. package/dist/modules/hallucination/llm-judge.js +0 -101
  103. package/dist/modules/index.js +0 -5
  104. package/dist/modules/indexer/cache.js +0 -40
  105. package/dist/modules/indexer/index.js +0 -3
  106. package/dist/modules/indexer/module.js +0 -246
  107. package/dist/modules/indexer/project-profile.js +0 -183
  108. package/dist/modules/indexer/walker.js +0 -101
  109. package/dist/modules/lsp/check-tool.js +0 -58
  110. package/dist/modules/lsp/client.js +0 -389
  111. package/dist/modules/lsp/command.js +0 -60
  112. package/dist/modules/lsp/config.js +0 -135
  113. package/dist/modules/lsp/index.js +0 -3
  114. package/dist/modules/lsp/module.js +0 -260
  115. package/dist/modules/lsp/probe.js +0 -86
  116. package/dist/modules/lsp/project-root.js +0 -32
  117. package/dist/modules/lsp/startup-check.js +0 -144
  118. package/dist/modules/lsp/types.js +0 -1
  119. package/dist/modules/mcp/client.js +0 -399
  120. package/dist/modules/mcp/index.js +0 -3
  121. package/dist/modules/mcp/module.js +0 -142
  122. package/dist/modules/mcp/registry.js +0 -15
  123. package/dist/modules/memory/index.js +0 -1
  124. package/dist/modules/memory/module.js +0 -96
  125. package/dist/modules/memory/search.js +0 -42
  126. package/dist/modules/memory/store.js +0 -69
  127. package/dist/modules/pipelines/engine.js +0 -60
  128. package/dist/modules/pipelines/index.js +0 -3
  129. package/dist/modules/pipelines/parser.js +0 -56
  130. package/dist/modules/pipelines/template.js +0 -14
  131. package/dist/modules/plugins/builtin/lint-on-write.js +0 -334
  132. package/dist/modules/plugins/builtin/notify.js +0 -9
  133. package/dist/modules/plugins/index.js +0 -1
  134. package/dist/modules/plugins/loader.js +0 -70
  135. package/dist/modules/plugins/manager.js +0 -261
  136. package/dist/modules/plugins/types.js +0 -1
  137. package/dist/modules/pricing/index.js +0 -61
  138. package/dist/modules/pricing/prices.js +0 -129
  139. package/dist/modules/processes/detect.js +0 -34
  140. package/dist/modules/processes/index.js +0 -2
  141. package/dist/modules/processes/registry.js +0 -327
  142. package/dist/modules/processes/runner.js +0 -23
  143. package/dist/modules/providers/create.js +0 -22
  144. package/dist/modules/providers/fallback.js +0 -79
  145. package/dist/modules/providers/health.js +0 -46
  146. package/dist/modules/providers/index.js +0 -5
  147. package/dist/modules/providers/manager.js +0 -161
  148. package/dist/modules/providers/presets.js +0 -128
  149. package/dist/modules/providers/registry.js +0 -22
  150. package/dist/modules/providers/types.js +0 -1
  151. package/dist/modules/registry.js +0 -48
  152. package/dist/modules/security/audit-log.js +0 -136
  153. package/dist/modules/security/audit-notifier.js +0 -292
  154. package/dist/modules/security/command-validator.js +0 -219
  155. package/dist/modules/security/content-scanner.js +0 -53
  156. package/dist/modules/security/data-sanitizer.js +0 -89
  157. package/dist/modules/security/encryption.js +0 -242
  158. package/dist/modules/security/index.js +0 -14
  159. package/dist/modules/security/network-validator.js +0 -88
  160. package/dist/modules/security/path-validator.js +0 -203
  161. package/dist/modules/security/rate-limiter.js +0 -119
  162. package/dist/modules/security/security-policies.js +0 -531
  163. package/dist/modules/security/session-encryption.js +0 -210
  164. package/dist/modules/security/session-isolation.js +0 -95
  165. package/dist/modules/session/index.js +0 -3
  166. package/dist/modules/session/manager.js +0 -172
  167. package/dist/modules/session/module.js +0 -24
  168. package/dist/modules/session/store.js +0 -222
  169. package/dist/modules/session/types.js +0 -1
  170. package/dist/modules/skills/index.js +0 -2
  171. package/dist/modules/skills/loader.js +0 -72
  172. package/dist/modules/skills/matcher.js +0 -27
  173. package/dist/modules/skills/module.js +0 -129
  174. package/dist/modules/types.js +0 -1
  175. package/dist/modules/updater/checker.js +0 -96
  176. package/dist/modules/updater/index.js +0 -2
  177. package/dist/modules/updater/module.js +0 -116
  178. package/dist/modules/user-profile/compressor.js +0 -16
  179. package/dist/modules/user-profile/index.js +0 -1
  180. package/dist/modules/user-profile/profile.js +0 -68
  181. package/dist/tools/approve.js +0 -33
  182. package/dist/tools/attach-image.js +0 -101
  183. package/dist/tools/bash.js +0 -519
  184. package/dist/tools/browser.js +0 -115
  185. package/dist/tools/chunk-query.js +0 -100
  186. package/dist/tools/create-dir.js +0 -56
  187. package/dist/tools/delete-file.js +0 -63
  188. package/dist/tools/download-file.js +0 -117
  189. package/dist/tools/edit-file.js +0 -80
  190. package/dist/tools/enable-tools.js +0 -59
  191. package/dist/tools/executor.js +0 -154
  192. package/dist/tools/file-info.js +0 -47
  193. package/dist/tools/filter-tools.js +0 -17
  194. package/dist/tools/glob-tool.js +0 -27
  195. package/dist/tools/grep-tool.js +0 -125
  196. package/dist/tools/hidden-tools-block.js +0 -37
  197. package/dist/tools/index.js +0 -78
  198. package/dist/tools/list-dir.js +0 -49
  199. package/dist/tools/load-skill.js +0 -43
  200. package/dist/tools/mcp-call.js +0 -69
  201. package/dist/tools/move-file.js +0 -86
  202. package/dist/tools/path-utils.js +0 -101
  203. package/dist/tools/pipeline-run.js +0 -145
  204. package/dist/tools/preview.js +0 -2
  205. package/dist/tools/process-kill.js +0 -40
  206. package/dist/tools/process-list.js +0 -37
  207. package/dist/tools/process-log.js +0 -54
  208. package/dist/tools/question.js +0 -141
  209. package/dist/tools/read-file.js +0 -179
  210. package/dist/tools/recall.js +0 -118
  211. package/dist/tools/registry.js +0 -47
  212. package/dist/tools/remember.js +0 -68
  213. package/dist/tools/scope-check.js +0 -32
  214. package/dist/tools/search-history.js +0 -85
  215. package/dist/tools/subagent.js +0 -196
  216. package/dist/tools/types.js +0 -1
  217. package/dist/tools/user-input.js +0 -123
  218. package/dist/tools/web-browse.js +0 -87
  219. package/dist/tools/web-fetch.js +0 -119
  220. package/dist/tools/web-search.js +0 -105
  221. package/dist/tools/write-file.js +0 -82
  222. package/dist/ui/box.js +0 -77
  223. package/dist/ui/colors.js +0 -4
  224. package/dist/ui/diff.js +0 -178
  225. package/dist/ui/index.js +0 -6
  226. package/dist/ui/line-editor.js +0 -822
  227. package/dist/ui/line-math.js +0 -73
  228. package/dist/ui/md-formatter.js +0 -212
  229. package/dist/ui/output.js +0 -13
  230. package/dist/ui/plan-view.js +0 -103
  231. package/dist/ui/renderer.js +0 -259
  232. package/dist/ui/spinner.js +0 -70
  233. package/dist/ui/table.js +0 -144
package/CHANGELOG.md CHANGED
@@ -1,556 +1,578 @@
1
- # Changelog
2
-
3
- All notable changes to Micro Models Agent (MMA) will be documented in this file.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).
6
-
7
- ## [0.58.2] - 2026-09-01
8
-
9
- ### Fixed
10
- - **Stale i18n in published package**: `build:copy-assets` did not refresh `dist/i18n/en.json`/`ru.json`, so the 0.58.1 release shipped the old startup-check wording in the standalone JSON files (only `dist/main.js` had the fix). The copy step now ships the current dictionaries.
11
-
12
- ## [0.58.1] - 2026-09-01
13
-
14
- ### Fixed
15
- - **Startup check overreach**: the `lsp.startup_header` prompt block instructed the model to "fix these before continuing", overriding `SCOPE DISCIPLINE` — the 9B model started fixing pre-existing project errors the user never asked about (and skipped clarifying questions). The block is now informational (baseline only): errors are listed but the model is told to ignore them unless the current request is about them (en+ru).
16
-
17
- ## [0.58.0] - 2026-08-31
18
-
19
- ### Added
20
- - **MoE experts**: dynamic expert registry — `config.experts` (with optional `ExpertConfig.description`) is rendered into the MoE planner prompt instead of a hardcoded code/research/browser/vision list (fallback: `tool_tags`)
21
- - **MoE orchestrator provider**: `OrchestratorClient` builds its provider through `ProviderManager` — per-entry `contextWindow`/`retry`/`rateLimits` and failover entries are honored; `orchestrator.contextWindow` is the global fallback (legacy `{type,baseUrl,apiKey}` configs keep working)
22
- - **MoE success criteria**: machine-readable `success_criteria` (`file-exists:<path>`, `substring-in-file:<path>:<text>`, `command-exit-0:<cmd>`) verified by `StepVerifier.verifySubtaskCriteria` before merge; LLM-only criteria surface as warnings in the Router context
23
- - **MoE selective re-plan**: `executePlan(plan, {skipIds, carriedResults})` — already-succeeded subtasks are carried over across re-plan cycles, only failed/new subtasks re-execute
24
- - **MoE observability**: `moe_plan` / `moe_subtask` / `moe_replan` / `moe_verify` events written to `session.jsonl` (visible in `mma session show`); token usage aggregated per `expert_tag` (`MoEExecutor.getUsageByTag`); sub-agents receive the real session id instead of the hardcoded `"moe"`
25
- - **MoE cert scenarios**: `5.2-moe-parallel-waves` and `5.3-moe-read-after-write` (tag `moe`, timeoutMs 600_000)
26
- - **ToolResult.usage**: sub-agent token usage propagated to the MoE executor for cost attribution
27
-
28
- ### Changed
29
- - **Reasoning policy baseline**: configurable via `reasoning.baseline` (default `medium`) — the auto policy's quiet-iteration level is no longer hardcoded, so trivial Q&A turns can start at `low`
30
-
31
- ### Fixed
32
- - **MoE hang**: sub-agents spawned by the `subagent` tool re-entered `runWithMoE` when the parent config had `moe.enabled=true` each MoE sub-agent planned its own subtasks and spawned nested sub-agents recursively (bounded only by `maxRecursionDepth`), hanging execution for many minutes with zero progress events. Sub-agents now always run the plain single-agent loop (`moe` is a top-level orchestration mode only).
33
- - **MoE fallback visibility**: missing `orchestrator.model` with `moe.enabled=true` now logs a WARN with a fix hint instead of a debug-only message that made silent fallback to single-agent invisible.
34
- - **CLI one-shot commands hang**: `config`, `session`, `model`, `provider`, `context`, `security`, `plugins`, `changelog` printed their result but never exited — bootstrap leaves open handles (reasoning-probe fetch, indexer) and only the prompt/REPL paths called `process.exit`. Subcommand roots now exit via a `postAction` hook (verified: `session list` 2.7s / exit 0, chained `config set` persists correctly).
35
- - **Repeated tool calls**: identical `(tool, args)` repeat now injects a nudge into context in ALL modes — previously the nudge was gated behind `--exit-on-complete`, so interactive runs silently burned iterations re-running the same command (observed: duplicate `node sum.js` verification back-to-back).
36
- - **Perfectionism cycle**: repeated mutations of the SAME target (same file via `edit_file`/`write_file`, same bash command, same `plan`/`todo` action) with varying arguments now inject a finalize-nudge after 5 occurrences — the consecutive-duplicate guard cannot see this pattern (args differ each time; observed: 20+ polish iterations after the task was already complete, then 10+ bookkeeping churn iterations after an audit rejection). The nudge lands AFTER tool results, so `assistant(tool_calls) → tool(results) → user(nudge)` pairing stays valid.
37
- - **Audit gate friction (evidence-based auto-close)**: pending plan steps whose every file-like token resolves to an existing file are auto-closed by the final audit with a note small models routinely finish the work but forget `plan update` bookkeeping, and the gate then rejected correct answers burning all retry budget. Steps without file tokens or with missing files stay pending (honest).
38
- - **Audit rejection guidance**: the audit gate's `<system-summary>` now names the resolution paths (mark done / skipped / re-plan) in en+ru instead of a bare "continue working" — model plan-drift after a rejection (wrong file names, changed approach) is common for 9B and the old message did not point at the fix.
39
- - **LSP false positives without type env**: `lsp_check` suppresses module-resolution diagnostics when the project root has no `tsconfig.json`/`jsconfig.json`/`node_modules` and reports an inconclusive note instead — phantom `Cannot find module 'fs'` / `Cannot find name '__dirname'` errors made the model abandon a working `.ts` approach for `.js` and spiral into plan drift.
40
- - **Windows Unix-command hints**: `bash` hint list and the module-side forbidden set now cover `sed`/`awk`/`uniq`/`xargs`/`cut`/`tr`/`basename`/`dirname`/`export`/`source`/`sleep`/`env` (both lists kept consistent) — the 9B model keeps reaching for Unix tools in cmd.exe.
41
- - **Tool visibility narrowing**: `chunk_query`, `download_file`, `mcp_call`, `pipeline_run` no longer visible by default — they moved behind `enable_tools` (`research`/`shell` tags); the default visible set drops from 23 to 19 schemas, cutting tool tokens on every turn.
42
- - **Tests**: replaced process-global `vi.mock` with DI seams (`AgentDeps.runWithMoEOverride`, `ToolContext.agentFactory`) Bun module mocks leak across test files in the same worker; full suite is now green by default (1803 pass / 0 fail).
43
- - **Docs**: AGENTS.md / testing.md — warn that `mma` resolves the globally installed package (stale `dist/`) when run outside the repo root, silently ignoring `src/` changes; always run from the repo root with `-d <sandbox>` and verify the version in the `Environment:` line.
44
-
45
- ## [0.57.2] - 2026-08-30
46
-
47
- ### Changed
48
- - **KV-cache**: plan block removed from system prompt; plan status now injected into `<system-summary>` envelope after every tool batch. System prompt is immutable per session — local backends retain prefix cache.
49
- - **Provenance**: provider entry resolution uses active entry label, not bare `provider.type`
50
- - **Reasoning signals**: `consecutiveToolSuccesses` and `isRepetitive` now feed real values to the reasoning policy (were hardcoded)
51
- - **Token estimation**: tool-def token estimate in agent loop uses `estimateTokens()` instead of flat `/4`
52
- - **Agent split**: `agent.ts` 1550→950 lines; 10 extracted modules (`loop-state`, `compaction`, `tool-batch`, `hallucination-gate`, `audit-gate`, `reasoning-resolver`, `token-tracker`, `context-renderer`, `tool-output`, `constants`)
53
- - **Plan-tool**: `plan-tool.ts` 741→232 lines; per-action handlers in `plan-actions.ts`
54
- - **CLI**: `createProgram` 513→thin orchestrator; `registerMmaCommands` 470→8 lines (5 per-domain registers)
55
- - **Bash handler**: `bash.ts` 236→~100 lines (`resolveBashSecurityConfig`, `decorateCommandOutput`)
56
- - **Orchestrator**: reuse `parseChunks` instead of hand-rolled `any[]` aggregation; `createPlan` uses own `parseJSON`; constructor deduplicated via `createProviderInstance`
57
- - **Shared utils**: `src/utils/` with `errMsg()`, `sleep()`, `truncate()`, `backoffDelay()`
58
- - **errMsg**: replaces 23 occurrences of `e instanceof Error ? e.message : String(e)` across 12 files
59
-
60
- ### Fixed
61
- - **chunk_query**: one failing chunk no longer kills the entire query; per-chunk `catch` `[FAILED]`
62
- - **chunk_query**: synthesis prompt capped at 20K chars with `[TRUNCATED]` marker
63
- - **chunk_query**: `AbortSignal` propagated to `chatText` for cancellation support
64
- - **Executor**: `failFast` cleanup guard prevents nested scope clobbering
65
- - **probe.ts**: transient errors (network/auth) no longer cached as "reasoning not supported" for 24h; returns `null` caller skips cache
66
- - **LSP**: startup timeout unified on `DEFAULT_TIMEOUT` (15000) instead of conflicting hardcoded 10000
67
- - **Browser**: `BridgeResponse.data` typed (was `any`)
68
- - **Agent**: `Agent.runTool()` public API replaces `(ctx.agent as any).deps` reach-in; `/reload` no longer mutates readonly context
69
- - **LSP /lsp check**: fixed latent bug where `.execute()` was called with `.executeByName` signature
70
-
71
- ### Added
72
- - **Plan Reminder**: static `[Plan Reminder]` block in system prompt (never mutates)
73
- - **Documentation**: reentrancy warning on `executeByName()`, `PlanResult` JSDoc
74
- - **Tests**: `probe.test.ts` (6 cases), `command-suggest.test.ts`, `providers-factory.test.ts`, `subagent-tool.test.ts`, `agent-moe-write.test.ts`, `chunk-query.test.ts`
75
- - **probe.ts**: `null` return for transient errors; bootstrap skips cache on `null`
76
- - **Execution-plugin**: `resetStepFlags`/`resetPlanState` helpers (dedup 3 inline reset blocks)
77
- - **Security-policies**: `comparePolicies` typed (`keyof SecurityConfig` replaces `as any`)
78
-
79
- ### Removed
80
- - **Browser**: dead `buildWaitScript` export (never imported)
81
-
82
- ## [0.57.1] - 2026-08-28
83
-
84
- ### Fixed
85
- - **Publish**: republish after version bump
86
-
87
- ## [0.57.0] - 2026-08-28
88
-
89
- ### Changed
90
- - **MCP**: lazy connect — server connections deferred to first tool call. Startup no longer blocks on unreachable MCP servers (e.g. context7 offline). Discovery runs in background with 5s timeout.
91
- - **Updater**: `checkOnStart` and `autoInstall` disabled by default. Reduced `waitForIdle` timeout from 130s to 10s.
92
- - **Config**: `updater.checkOnStart` default changed from `true` to `false`
93
-
94
- ### Added
95
- - **MCP**: HTTP request timeouts (10s) on `connectSSE`, `listToolsHTTP`, `callToolHTTP`
96
- - **MCP**: `failedServers` tracking servers that fail discovery are not retried
97
- - **MCP**: placeholder `connect` tool for not-yet-discovered servers (LLM can trigger lazy discovery)
98
- - **Reasoning**: persistent disk cache (`~/.mma/reasoning-cache.json`) with 24h TTL — avoids re-probing LLM on every restart
99
-
100
- ## [0.56.5] - 2026-08-27
101
-
102
- ### Fixed
103
- - **Hallucination**: `FactualCheck` now receives deleted files from `ConsistencyCheck` — no longer false-positives on files that were intentionally deleted in the same session
104
-
105
- ## [0.56.4] - 2026-08-27
106
-
107
- ### Fixed
108
- - **Tools**: `list_dir` now filters `.mma/`, `node_modules/`, `.git/`, `dist/`, `build/`, `coverage/` from directory listings (consistent with indexer)
109
- - **Hallucination**: `dotfileVariants` now tries dot-prefixing each directory component, not just basename (fixes false positive on `.mma/index-cache.json` → `mma/index-cache.json`)
110
-
111
- ## [0.56.1] - 2026-08-27
112
-
113
- ### Added
114
- - **CLI**: `mma changelog` command show latest changelog entry or diff between versions (`--from <version>`)
115
- - **Updater**: show changelog after auto-update install (`updater.installed` message includes new version's changelog)
116
- - **Docs**: `CHANGELOG.md` included in npm package (visible via `npm info micro-models-agent`)
117
- - **Docs**: rule to maintain changelog in `AGENTS.md`
118
-
119
- ## [0.56.0] - 2026-08-27
120
-
121
- ### Added
122
- - **MoE**: live re-plan loop in `runWithMoE` — orchestrator re-plans on structural failures
123
- - **MoE**: scope expansion protocol (`scope_request`) for cross-expert file access
124
- - **MoE**: Esc/interrupt support in the MoE execution path
125
- - **MoE**: `input_from` cross-expert data flow for subtask dependencies
126
- - **LSP**: Angular language server support (`@angular/language-server` for `.html` in Angular workspaces)
127
- - **Tools**: syntax pre-validation and auto-fix for `write_file`/`edit_file`
128
-
129
- ### Fixed
130
- - **Security**: SSRF via IPv6-mapped IPv4 and raw numeric hostnames
131
- - **Security**: command-validator blacklist bypasses (shell expansions, encoded chars)
132
- - **Security**: audit webhook retry queue drained forever (infinite loop + duplicate notifications)
133
- - **Core**: dangling `tool_calls` on interrupt — synthesized tool messages keep assistant/tool pairing
134
- - **Core**: live reasoning policy + `set_thinking` override integration
135
- - **Core**: deep-clone config defaults to prevent cross-session mutation
136
- - **Config**: preserve `provider.fallback` on hot-swap
137
- - **Tools**: path/scope escape holes in filesystem and read tools closed
138
- - **Tools**: clear timeout timer & abort listener after race settles; log discarded losers
139
- - **MCP**: stdio timer leaks + null deref after disconnect; added initialize handshake
140
- - **LSP**: spawn servers detached on POSIX so `killTree` reaches the whole chain
141
- - **Browser**: bridge leaked Chromium on SIGTERM and parent death
142
- - **UI**: diff LCS memory cap; one bad encrypted line no longer kills session history
143
- - **CLI**: `/config migrate` was unreachable
144
- - **MoE**: locale-independent artifact path + no retry on user abort
145
-
146
- ## [0.55.1] - 2026-08-25
147
-
148
- ### Fixed
149
- - **LLM**: NDJSON-tolerant stream parser for Ollama backends
150
- - **LLM**: mid-stream provider errors surfaced (Ollama generation failures)
151
- - **LLM**: `delta.reasoning` alias for thinking models
152
- - **LLM**: wire-level debug logging for diagnostics
153
-
154
- ## [0.55.0] - 2026-08-25
155
-
156
- ### Added
157
- - **Certification**: targeted re-run (`--scenarios <ids>`) with result merging
158
- - **Certification**: per-rep timeout (`--timeout <ms>` + per-scenario `timeoutMs`)
159
- - **Certification**: audit-gate bypass fix for `--exit-on-complete`
160
-
161
- ### Fixed
162
- - **Certification**: stale-label wording (removed impossible user instruction)
163
- - **Dependencies**: typescript pinned to ^5.9 (TS7 preview breaks `@types/node`)
164
-
165
- ## [0.54.0] - 2026-08-24
166
-
167
- ### Added
168
- - **Certification**: global manifest shipped with package updates (`~/.mma/certifications.json`)
169
- - **Certification**: bundled manifest + startup sync from package
170
-
171
- ### Fixed
172
- - **Certification**: marks only showed when running from repo root
173
-
174
- ## [0.53.0] - 2026-08-24
175
-
176
- ### Added
177
- - **Certification**: qwen3.5-9b certified 20/20
178
- - **Config**: `provider.maxCompletionTokens` option
179
- - **Certification**: label text in `mma model list` and REPL `/model`
180
-
181
- ### Fixed
182
- - **Certification**: reasoning-heavy models truncated tool_call arguments at default 4096 cap
183
- - **Certification**: scenario 3.5 prompt disambiguation
184
-
185
- ## [0.52.0] - 2026-08-23
186
-
187
- ### Added
188
- - **Execution**: `FS_MUTATING_TOOLS` — plan auto-advance after bash/download/subagent/mcp/pipeline/browser tools
189
- - **Config**: `provider.maxCompletionTokens` plumbing through ProviderManager → agent
190
-
191
- ### Fixed
192
- - **Execution**: small models create files via bash instead of `write_file`, stalling plans
193
- - **Execution**: `maxCompletionTokens` was never read from config
194
-
195
- ## [0.51.0] - 2026-08-23
196
-
197
- ### Added
198
- - **Plugin**: `HostBridge` interface for bidirectional agent communication
199
- - **Plugin**: `onTurnEnd(ctx, TurnSummary)` hook — dispatched once per completed run
200
- - **Plugin**: `web-ui` example plugin — browser-based chat with SSE streaming
201
- - **CLI**: REPL bridge wiring for web-ui submit/interrupt
202
-
203
- ### Fixed
204
- - **REPL**: `/config migrate` unreachable
205
-
206
- ## [0.50.3] - 2026-08-22
207
-
208
- ### Fixed
209
- - **UI**: REPL line editor scroll-proof rendering (absolute anchoring via DSR query)
210
-
211
- ## [0.50.2] - 2026-08-22
212
-
213
- ### Fixed
214
- - **LLM**: idle stream timeout increased 60s 180s (LM Studio buffering)
215
- - **LLM**: stall diagnosis with dedicated message for SSE buffering
216
- - **LLM**: truncation no longer masquerades as empty response
217
- - **LLM**: recoverable LLM errors fed back into context instead of dying
218
- - **Execution**: bash flailing detector (≥4 failed bash attempts in last 6)
219
-
220
- ## [0.50.1] - 2026-08-21
221
-
222
- ### Fixed
223
- - **Security**: no longer silently overrides explicit user opt-out
224
- - **Lint**: skips missing lint binary (was appending error to every write)
225
- - **Stuck**: anti-spam for stuck-warnings (dedup via key, decay per-tool counters)
226
- - **Plan**: unified progress counting (done+skipped as settled)
227
- - **Plan**: bulk `steps[]` rewrite guarded on progressed plans
228
- - **Plan**: archived plans answer read-only
229
- - **Process**: usage hints for `process_kill`/`process_log` without id
230
-
231
- ## [0.50.0] - 2026-08-21
232
-
233
- ### Added
234
- - **Provider**: health probe (`probeProviders()` + `mma provider check`)
235
- - **Provider**: code-only capability routing (`ProviderManager.pickFor()`)
236
- - **Provider**: per-entry isolation + priority fallback order
237
- - **Pricing**: per-provider cost attribution + breakdown
238
-
239
- ### Fixed
240
- - **Provider**: transparent failover on 429/5xx/network errors
241
-
242
- ## [0.49.0] - 2026-08-20
243
-
244
- ### Fixed
245
- - **REPL**: stale-plan leaks plan state no longer persists across sessions
246
- - **REPL**: plan checklist prints only on plan/todo tool-end events
247
- - **Plan**: `PlanStore` is single source of truth for UI consumers
248
-
249
- ## [0.48.3] - 2026-08-20
250
-
251
- ### Fixed
252
- - **Hallucination**: dotfile false-positive (`.prettierrc.json` extracted as `prettierrc.json`)
253
-
254
- ## [0.48.2] - 2026-08-20
255
-
256
- ### Fixed
257
- - **REPL**: stale plan printed on first agent run of a session
258
-
259
- ## [0.47.0] - 2026-08-19
260
-
261
- ### Added
262
- - **Session**: startup diagnostics logging (environment, LSP probe, baseline typecheck)
263
- - **Session**: `logBaselineTypecheck()` for post-mortem visibility
264
-
265
- ## [0.46.1] - 2026-08-19
266
-
267
- ### Fixed
268
- - **LLM**: connection-break hardening (stream-level retry, no-data timeout, `[DONE]` tracking)
269
- - **LLM**: non-streaming timeout (was missing, could hang forever)
270
- - **Config**: `retry.maxStreamRetries`, `retry.noDataTimeoutMs` options
271
-
272
- ## [0.46.0] - 2026-08-19
273
-
274
- ### Added
275
- - **Provider**: multi-provider + hot-swap + per-message provenance
276
- - **Provider**: `ProviderManager` with entry-based config
277
- - **CLI**: `mma provider add/list/use`
278
- - **REPL**: `/provider list/use`
279
-
280
- ### Fixed
281
- - **Path**: `safeResolvePath` POSIX bug (absolute paths re-resolved against baseDir)
282
-
283
- ## [0.45.0] - 2026-08-18
284
-
285
- ### Added
286
- - **Provider**: provider module Phase 1 (registry, presets, `createProvider()`)
287
- - **Provider**: `openrouter` preset
288
- - **Setup**: wizard menu built from `BUILTIN_PROVIDERS`
289
-
290
- ## [0.44.0] - 2026-08-18
291
-
292
- ### Added
293
- - **Plugins**: folder plugins (subdirectory with entry file)
294
- - **Plugin**: `trace-server` split into folder plugin
295
-
296
- ### Fixed
297
- - **Plugin**: template-literal page inlining broke `\n` in JS strings
298
-
299
- ## [0.43.2] - 2026-08-17
300
-
301
- ### Fixed
302
- - **Execution**: plan done-gate on known compile failures (typecheck gate)
303
- - **Bootstrap**: live getters for `sessionId`/`sessionContext` after session switch
304
- - **Edit**: `edit_file` "String not found" hint to `read_file` first
305
-
306
- ## [0.43.1] - 2026-08-17
307
-
308
- ### Fixed
309
- - **Agent**: session-interrupt no longer renders tool results after "Session ended"
310
- - **Executor**: `onAfterTool` plugins skipped when signal is aborted
311
- - **Lint**: abortable syntax checks on Esc
312
-
313
- ## [0.43.0] - 2026-08-17
314
-
315
- ### Added
316
- - **Plan**: `plan delete <id>` + `plan purge` actions
317
- - **Plan**: `abort` honors `id` parameter
318
- - **Plan**: `replan` renumbers ids for kept steps
319
- - **Audit**: `resolveTestCommand` picks the project's real test runner
320
-
321
- ### Fixed
322
- - **Plan**: `switch` to already-active plan is a no-op
323
- - **Plan**: final audit runs for a completed plan
324
- - **Plan**: evidence-based plan nudge (replaces iteration counter)
325
- - **Plan**: `checkPlanAlignment` scans path arguments only
326
- - **Plan**: `isDepsStep` requires a package-manager verb
327
- - **Plan**: auto-advance resolves nested files
328
-
329
- ## [0.42.0] - 2026-08-16
330
-
331
- ### Added
332
- - **Execution**: automatic error web search (≥5 same-error repeats → web search → inject results)
333
- - **Config**: `errorWebSearch` section
334
-
335
- ### Fixed
336
- - **Execution**: `onAfterTool` double-counted typecheck + failure errors
337
-
338
- ## [0.41.1] - 2026-08-16
339
-
340
- ### Fixed
341
- - **LSP**: `typescript@5` pin + `--yes` for npx
342
- - **LSP**: sequential probing (waves) to avoid npx cache lock contention
343
- - **LSP**: stale config normalization
344
- - **LSP**: Windows process leak in `shutdown()`
345
- - **REPL**: non-blocking LSP banner
346
- - **Bootstrap**: lazy startup health check
347
-
348
- ## [0.41.0] - 2026-08-15
349
-
350
- ### Added
351
- - **REPL**: live plan checklist with progress bar
352
- - **UI**: tool-to-step binding (`← step N` suffix in tool headers)
353
- - **UI**: background command output preview
354
-
355
- ## [0.40.1] - 2026-08-15
356
-
357
- ### Fixed
358
- - **LSP**: broken package names (`vscode-html-languageserver` `vscode-langservers-extracted`)
359
-
360
- ## [0.40.0] - 2026-08-15
361
-
362
- ### Added
363
- - **Tools**: tool-set narrowing (on-demand enable via `enable_tools`)
364
- - **Config**: `tools.defaultTags` + `tools.enableOnDemand`
365
- - **Tools**: `alwaysOn` flag for structural tools
366
-
367
- ## [0.39.1] - 2026-08-14
368
-
369
- ### Fixed
370
- - **Plugins**: dedup by version, compatibility gate, source tracking
371
- - **CLI**: `mma plugins list` command
372
-
373
- ## [0.38.0] - 2026-08-14
374
-
375
- ### Added
376
- - **LSP**: `lsp_check` tool for on-demand diagnostics
377
- - **Plan**: `plan create` guard (blocks when active plan has progress)
378
-
379
- ### Fixed
380
- - **Context**: compaction summary carries plan + read state
381
- - **Browser**: bridge path resolution in bundled dist
382
-
383
- ## [0.37.0] - 2026-08-13
384
-
385
- ### Added
386
- - **Plugins**: folder plugin support in `PluginLoader`
387
-
388
- ### Fixed
389
- - **Plugin**: template-literal page inlining broke `\n` in JS
390
-
391
- ## [0.36.3] - 2026-08-13
392
-
393
- ### Fixed
394
- - **UI**: REPL paste fix (batch single-render, CRLF collapse)
395
-
396
- ## [0.36.2] - 2026-08-13
397
-
398
- ### Fixed
399
- - **Updater**: silent logger, one-shot `process.exit()` killed background install, semver-aware check
400
-
401
- ## [0.36.1] - 2026-08-13
402
-
403
- ### Fixed
404
- - **Audit**: nested-file resolution, non-zero test run blocks
405
- - **Browser**: bridge diagnostics + one-shot restart
406
- - **LSP**: per-server disable + initialize retry + CSS timeout
407
- - **Bash**: npm exec hint
408
-
409
- ## [0.36.0] - 2026-08-12
410
-
411
- ### Added
412
- - **Plan**: model-declared `kind: "create"|"delete"` for steps
413
- - **Execution**: `FS_MUTATING_TOOLS` for plan auto-advance
414
- - **Config**: `provider.maxCompletionTokens` option
415
-
416
- ### Fixed
417
- - **Context**: compaction preserves session `mission`
418
- - **Context**: deleted files leave compaction `[Files:]` list
419
- - **Audit**: final audit runs real `tsc --noEmit --skipLibCheck`
420
- - **Bash**: repeated forbidden Windows commands hard-stopped after 2 failures
421
-
422
- ## [0.35.5] - 2026-08-12
423
-
424
- ### Fixed
425
- - **Execution**: plan-alignment phantom paths (domains/extensions treated as files)
426
- - **Execution**: hint/recovery dedup in `StuckDetector`
427
-
428
- ## [0.35.3] - 2026-08-11
429
-
430
- ### Fixed
431
- - **LSP**: workspace root resolved from edited file's project
432
- - **Audit**: skipped steps treated as terminal
433
- - **Bash**: Windows hint keys on original command word
434
- - **Tools**: boundedOutput tools never budget-truncated
435
-
436
- ## [0.35.0] - 2026-08-11
437
-
438
- ### Added
439
- - **Tools**: `download_file` tool for binary file downloads
440
-
441
- ## [0.34.0] - 2026-08-10
442
-
443
- ### Added
444
- - **Indexer**: project profile (`[Stack: ...]` summary from manifest)
445
- - **Indexer**: dynamic map refresh inside sessions
446
-
447
- ## [0.33.3] - 2026-08-10
448
-
449
- ### Fixed
450
- - **Audit**: nested-file resolution (basename + path-suffix match)
451
- - **Plan**: `plan show` honors `id` parameter
452
- - **Context**: compaction interval reset per user turn
453
- - **Context**: `extractFacts` captures `edit_file` paths + Windows drive-letter paths
454
- - **Execution**: stuck detector read-only loop detection
455
- - **Read**: default limit 15 300 lines
456
- - **LSP**: `spawn` on Windows (`.cmd` shim resolution)
457
- - **Todo**: `todo add` tracks subtasks, `todo done` marks individual sub-task
458
- - **Memory**: learns repeated per-tool failures (≥3×)
459
- - **Context**: compaction preserves user's task
460
-
461
- ## [0.33.2] - 2026-08-09
462
-
463
- ### Fixed
464
- - **UI**: REPL conversation layout (user/agent message dividers)
465
- - **Tools**: `isFilePathLike` uses allow-list of file extensions
466
-
467
- ## [0.33.1] - 2026-08-09
468
-
469
- ### Fixed
470
- - **UI**: REPL line editor redraw fix (no duplicated multi-line input)
471
- - **Tools**: `web_fetch`/`web_browse` description clarifications
472
-
473
- ## [0.33.0] - 2026-08-09
474
-
475
- ### Added
476
- - **RLM**: pass-by-reference sub-agent results (`ArtifactStore`)
477
- - **RLM**: chunked parallel queries (`chunk_query` tool)
478
- - **Config**: `subagent.resultMode`, `maxSummaryChars`, `artifactsDir`, `stableSystemPrompt`
479
-
480
- ## [0.32.0] - 2026-08-08
481
-
482
- ### Added
483
- - **Browser**: driver abstraction (`PlaywrightDriver` + `BridgeDriver`)
484
- - **Browser**: Node bridge for Bun compatibility
485
- - **Config**: `browser.maxConsoleLineChars`
486
-
487
- ## [0.31.0] - 2026-08-08
488
-
489
- ### Added
490
- - **Security**: session file encryption (AES-256-GCM)
491
- - **Security**: audit notifications (file + webhook)
492
- - **Security**: security policies (strict/balanced/permissive)
493
- - **CLI**: `mma security` commands
494
-
495
- ## [0.30.0] - 2026-08-07
496
-
497
- ### Added
498
- - **Execution**: final audit gate (runs `bun test` for verification steps)
499
- - **Execution**: `detectTestResults()` auto-verification in bash
500
-
501
- ### Fixed
502
- - **Execution**: empty-CLI entry-point hint
503
- - **Bash**: Windows anti-patterns documentation
504
-
505
- ## [0.29.0] - 2026-08-07
506
-
507
- ### Added
508
- - **Bash**: smart UTF-8/OEM line decoding (fixes Cyrillic on Windows)
509
- - **Bash**: behavior-based background detection
510
- - **Bash**: stuck-detector bash awareness
511
-
512
- ## [0.28.0] - 2026-08-06
513
-
514
- ### Fixed
515
- - **Agent**: double-Esc interrupt fix (Bun readline keypress collapsing)
516
- - **Agent**: abortable in-flight LLM requests on interrupt
517
- - **UI**: clipboard paste hint
518
-
519
- ## [0.27.0] - 2026-08-06
520
-
521
- ### Fixed
522
- - **Security**: Windows hardening
523
- - **Hallucination**: fixes
524
-
525
- ## [0.26.0] - 2026-08-05
526
-
527
- ### Added
528
- - **UI**: opencode-style inline tool headers (`ui.toolStyle`)
529
- - **UI**: model commentary next to tool calls (`ui.toolComments`)
530
- - **UI**: diffs without background color
531
-
532
- ## [0.25.0] - 2026-08-05
533
-
534
- ### Added
535
- - **LSP**: LSP module (typescript, CSS, HTML, JSON, Python, Rust, Go)
536
- - **Execution**: audit gate language-agnostic
537
- - **Bash**: Windows command hints
538
-
539
- ## [0.24.0] - 2026-08-04
540
-
541
- ### Added
542
- - **Context**: quality formula upgrade (token load + compaction loss + error density + freshness)
543
- - **Read**: display mode (show only header in REPL, full content to LLM)
544
-
545
- ## [0.23.0] - 2026-08-04
546
-
547
- ### Added
548
- - **Certification**: model certification module (`mma model certify`)
549
- - **CLI**: cert checkmarks in model lists
550
-
551
- ## [0.22.0] - 2026-08-03
552
-
553
- ### Added
554
- - **Security**: `enabled` flag (disabled by default)
555
- - **CLI**: init/first-run apply wizard security answers
556
- - **Prompt**: system prompt & recovery messages cleanup
1
+ # Changelog
2
+
3
+ All notable changes to Micro Models Agent (MMA) will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).
6
+
7
+ ## [0.60.0] - 2026-09-15
8
+
9
+ ### Added
10
+ - **`session_info` tool** (`src/tools/session-info.ts`, `alwaysOn`): the model can now answer questions about the session it is running in id, name, model, provider, context window, message count, timestamps and **live context usage** (`tokens / history budget (percent)` from `ContextManager.getSnapshot()`). Reads live metadata through a new `sessionManager` getter on `ToolContext` (like `sessionId`/`sessionContext`), so a REPL `/new` or `/resume` is reflected immediately. Previously the model reported having "no access to session metadata".
11
+ - **Session prompt block** (`session.info_full`, en+ru): the system prompt carries a compact `[Session: "name" (id) | model: … | context: … tokens]` line so session identity is available passively as well.
12
+ - **Project-map command**: `mma map [summary|refresh|find <query>]` (CLI) and `/map [summary|refresh|find <query>]` (REPL) let the user inspect the index directly — `summary` prints the exact text injected into the system prompt, `refresh` re-indexes, `find` searches by path or exported symbol. Shared implementation in `src/modules/indexer/map-command.ts` (also used by the `project_map` tool for `find`).
13
+ - **Multi-language index**: symbol extraction was TS/JS-only and the extension whitelist stopped at 10 types. New `src/modules/indexer/symbols.ts` is a data-driven registry — adding a language is one rule plus extensions. It now indexes and extracts symbols for TypeScript/JavaScript, Python, Rust, Go, Java, Kotlin, C#, Ruby, PHP, Swift, Scala, C/C++, Shell and Lua (plus data formats: JSON, Markdown, YAML, TOML, XML, HTML/CSS); symbols are deduped and capped at 40 per file. `map-select.ts` now reuses `isCodeLanguage()` instead of its own list.
14
+
15
+ ### Fixed
16
+ - **Session metadata never reached the model**: `SessionModule.getSystemPromptBlock()` was collected once during bootstrap, but the session is created during that same bootstrap with `messageCount === 0`, so the block was always `null`. It is now collected through `getDynamicPromptBlocks`; content is deliberately limited to stable per-session fields (no message count) so the system prompt does not mutate every turn and the prefix KV-cache survives.
17
+ - **Prompt-overflow messages not localized**: the overflow warnings emitted by `agent.ts` and the startup check in `bootstrap.ts` were hardcoded English; they now use `t("prompt.overflow.*")` and respect the configured locale (en+ru). The model-facing hint block stays English by design.
18
+ - **Project map showed no source files**: the map listed the first 100 files in `readdir` walk order, which on a real workspace can be entirely docs/config/tests — on this repo the first 100 walked files contained **zero** `src/` entries, so the model had no idea about the project's code structure. New `selectMapFiles` (`src/modules/indexer/map-select.ts`) ranks source above tests above docs/config, puts the densest source directory first (no directory names hardcoded), drops lockfile noise, and sorts deterministically (KV-cache); the listing is capped at 80 files. The index still contains every file, so `project_map find` is unaffected.
19
+ - **Indexer swallowed virtualenvs and other vendor trees**: `IGNORE_DIRS` was Node-centric (`node_modules`, `dist`, `build`, `.mma`, `coverage`), so a Python `venv/` (thousands of dependency files) was indexed and could crowd the map out. The list now covers Python (`venv`, `.venv`, `env`, `virtualenv`, `__pycache__`, `.pytest_cache`, `.mypy_cache`, `.ruff_cache`, `.tox`, `site-packages`), Rust (`target`), Go/PHP/Ruby (`vendor`, `.bundle`), JVM (`.gradle`, `out`), .NET (`obj`), Apple (`pods`, `deriveddata`), VCS/IDE (`.hg`, `.svn`, `.idea`, `.vscode`) plus the original Node entries. Matching is case-insensitive and the watcher now matches whole path **segments** instead of substrings, so short names (`env`, `out`, `obj`) cannot black out `environment.ts` or `about/`.
20
+
21
+ ## [0.59.0] - 2026-09-05
22
+
23
+ ### Added
24
+ - **Instructions overflow handling**: AGENTS.md and the project map that exceed the system-prompt budget are no longer silently dropped — they are summarized by the LLM into the remaining budget (disk-cached in `<project>/.mma/cache/prompt-summaries`, invalidated by file edits/budget changes) or truncated with a marker; a small essential hint block tells the model what was compressed and to `read_file` the full source
25
+ - **Startup overflow warning**: bootstrap dry-runs the system budget with the real block set and warns the user when instructions/project map will not fit, with a concrete fix — `mma context <N>` for a global `contextWindow`, or an edit of `provider.entries[].contextWindow` in `config/provider.json` when the active entry overrides it
26
+ - **Context probe**: at startup MMA asks LM Studio's native API for the context length the model is actually loaded with and compares it with the configured `contextWindow` — warning on overflow risk (no auto-clamp, user decides), info suggestion when the model supports more; result logged as a `context_probe` session entry
27
+ - **Config**: `instructions.summarize` (default `true`) to disable LLM summarization (truncation fallback only)
28
+
29
+ ## [0.58.2] - 2026-09-01
30
+
31
+ ### Fixed
32
+ - **Stale i18n in published package**: `build:copy-assets` did not refresh `dist/i18n/en.json`/`ru.json`, so the 0.58.1 release shipped the old startup-check wording in the standalone JSON files (only `dist/main.js` had the fix). The copy step now ships the current dictionaries.
33
+
34
+ ## [0.58.1] - 2026-09-01
35
+
36
+ ### Fixed
37
+ - **Startup check overreach**: the `lsp.startup_header` prompt block instructed the model to "fix these before continuing", overriding `SCOPE DISCIPLINE` the 9B model started fixing pre-existing project errors the user never asked about (and skipped clarifying questions). The block is now informational (baseline only): errors are listed but the model is told to ignore them unless the current request is about them (en+ru).
38
+
39
+ ## [0.58.0] - 2026-08-31
40
+
41
+ ### Added
42
+ - **MoE experts**: dynamic expert registry — `config.experts` (with optional `ExpertConfig.description`) is rendered into the MoE planner prompt instead of a hardcoded code/research/browser/vision list (fallback: `tool_tags`)
43
+ - **MoE orchestrator provider**: `OrchestratorClient` builds its provider through `ProviderManager` per-entry `contextWindow`/`retry`/`rateLimits` and failover entries are honored; `orchestrator.contextWindow` is the global fallback (legacy `{type,baseUrl,apiKey}` configs keep working)
44
+ - **MoE success criteria**: machine-readable `success_criteria` (`file-exists:<path>`, `substring-in-file:<path>:<text>`, `command-exit-0:<cmd>`) verified by `StepVerifier.verifySubtaskCriteria` before merge; LLM-only criteria surface as warnings in the Router context
45
+ - **MoE selective re-plan**: `executePlan(plan, {skipIds, carriedResults})` — already-succeeded subtasks are carried over across re-plan cycles, only failed/new subtasks re-execute
46
+ - **MoE observability**: `moe_plan` / `moe_subtask` / `moe_replan` / `moe_verify` events written to `session.jsonl` (visible in `mma session show`); token usage aggregated per `expert_tag` (`MoEExecutor.getUsageByTag`); sub-agents receive the real session id instead of the hardcoded `"moe"`
47
+ - **MoE cert scenarios**: `5.2-moe-parallel-waves` and `5.3-moe-read-after-write` (tag `moe`, timeoutMs 600_000)
48
+ - **ToolResult.usage**: sub-agent token usage propagated to the MoE executor for cost attribution
49
+
50
+ ### Changed
51
+ - **Reasoning policy baseline**: configurable via `reasoning.baseline` (default `medium`) — the auto policy's quiet-iteration level is no longer hardcoded, so trivial Q&A turns can start at `low`
52
+
53
+ ### Fixed
54
+ - **MoE hang**: sub-agents spawned by the `subagent` tool re-entered `runWithMoE` when the parent config had `moe.enabled=true` — each MoE sub-agent planned its own subtasks and spawned nested sub-agents recursively (bounded only by `maxRecursionDepth`), hanging execution for many minutes with zero progress events. Sub-agents now always run the plain single-agent loop (`moe` is a top-level orchestration mode only).
55
+ - **MoE fallback visibility**: missing `orchestrator.model` with `moe.enabled=true` now logs a WARN with a fix hint instead of a debug-only message that made silent fallback to single-agent invisible.
56
+ - **CLI one-shot commands hang**: `config`, `session`, `model`, `provider`, `context`, `security`, `plugins`, `changelog` printed their result but never exited — bootstrap leaves open handles (reasoning-probe fetch, indexer) and only the prompt/REPL paths called `process.exit`. Subcommand roots now exit via a `postAction` hook (verified: `session list` 2.7s / exit 0, chained `config set` persists correctly).
57
+ - **Repeated tool calls**: identical `(tool, args)` repeat now injects a nudge into context in ALL modes — previously the nudge was gated behind `--exit-on-complete`, so interactive runs silently burned iterations re-running the same command (observed: duplicate `node sum.js` verification back-to-back).
58
+ - **Perfectionism cycle**: repeated mutations of the SAME target (same file via `edit_file`/`write_file`, same bash command, same `plan`/`todo` action) with varying arguments now inject a finalize-nudge after 5 occurrences — the consecutive-duplicate guard cannot see this pattern (args differ each time; observed: 20+ polish iterations after the task was already complete, then 10+ bookkeeping churn iterations after an audit rejection). The nudge lands AFTER tool results, so `assistant(tool_calls) → tool(results) → user(nudge)` pairing stays valid.
59
+ - **Audit gate friction (evidence-based auto-close)**: pending plan steps whose every file-like token resolves to an existing file are auto-closed by the final audit with a note — small models routinely finish the work but forget `plan update` bookkeeping, and the gate then rejected correct answers burning all retry budget. Steps without file tokens or with missing files stay pending (honest).
60
+ - **Audit rejection guidance**: the audit gate's `<system-summary>` now names the resolution paths (mark done / skipped / re-plan) in en+ru instead of a bare "continue working" — model plan-drift after a rejection (wrong file names, changed approach) is common for 9B and the old message did not point at the fix.
61
+ - **LSP false positives without type env**: `lsp_check` suppresses module-resolution diagnostics when the project root has no `tsconfig.json`/`jsconfig.json`/`node_modules` and reports an inconclusive note instead — phantom `Cannot find module 'fs'` / `Cannot find name '__dirname'` errors made the model abandon a working `.ts` approach for `.js` and spiral into plan drift.
62
+ - **Windows Unix-command hints**: `bash` hint list and the module-side forbidden set now cover `sed`/`awk`/`uniq`/`xargs`/`cut`/`tr`/`basename`/`dirname`/`export`/`source`/`sleep`/`env` (both lists kept consistent) — the 9B model keeps reaching for Unix tools in cmd.exe.
63
+ - **Tool visibility narrowing**: `chunk_query`, `download_file`, `mcp_call`, `pipeline_run` no longer visible by default — they moved behind `enable_tools` (`research`/`shell` tags); the default visible set drops from 23 to 19 schemas, cutting tool tokens on every turn.
64
+ - **Tests**: replaced process-global `vi.mock` with DI seams (`AgentDeps.runWithMoEOverride`, `ToolContext.agentFactory`) — Bun module mocks leak across test files in the same worker; full suite is now green by default (1803 pass / 0 fail).
65
+ - **Docs**: AGENTS.md / testing.md — warn that `mma` resolves the globally installed package (stale `dist/`) when run outside the repo root, silently ignoring `src/` changes; always run from the repo root with `-d <sandbox>` and verify the version in the `Environment:` line.
66
+
67
+ ## [0.57.2] - 2026-08-30
68
+
69
+ ### Changed
70
+ - **KV-cache**: plan block removed from system prompt; plan status now injected into `<system-summary>` envelope after every tool batch. System prompt is immutable per session — local backends retain prefix cache.
71
+ - **Provenance**: provider entry resolution uses active entry label, not bare `provider.type`
72
+ - **Reasoning signals**: `consecutiveToolSuccesses` and `isRepetitive` now feed real values to the reasoning policy (were hardcoded)
73
+ - **Token estimation**: tool-def token estimate in agent loop uses `estimateTokens()` instead of flat `/4`
74
+ - **Agent split**: `agent.ts` 1550→950 lines; 10 extracted modules (`loop-state`, `compaction`, `tool-batch`, `hallucination-gate`, `audit-gate`, `reasoning-resolver`, `token-tracker`, `context-renderer`, `tool-output`, `constants`)
75
+ - **Plan-tool**: `plan-tool.ts` 741→232 lines; per-action handlers in `plan-actions.ts`
76
+ - **CLI**: `createProgram` 513→thin orchestrator; `registerMmaCommands` 470→8 lines (5 per-domain registers)
77
+ - **Bash handler**: `bash.ts` 236→~100 lines (`resolveBashSecurityConfig`, `decorateCommandOutput`)
78
+ - **Orchestrator**: reuse `parseChunks` instead of hand-rolled `any[]` aggregation; `createPlan` uses own `parseJSON`; constructor deduplicated via `createProviderInstance`
79
+ - **Shared utils**: `src/utils/` with `errMsg()`, `sleep()`, `truncate()`, `backoffDelay()`
80
+ - **errMsg**: replaces 23 occurrences of `e instanceof Error ? e.message : String(e)` across 12 files
81
+
82
+ ### Fixed
83
+ - **chunk_query**: one failing chunk no longer kills the entire query; per-chunk `catch` → `[FAILED]`
84
+ - **chunk_query**: synthesis prompt capped at 20K chars with `[TRUNCATED]` marker
85
+ - **chunk_query**: `AbortSignal` propagated to `chatText` for cancellation support
86
+ - **Executor**: `failFast` cleanup guard prevents nested scope clobbering
87
+ - **probe.ts**: transient errors (network/auth) no longer cached as "reasoning not supported" for 24h; returns `null` → caller skips cache
88
+ - **LSP**: startup timeout unified on `DEFAULT_TIMEOUT` (15000) instead of conflicting hardcoded 10000
89
+ - **Browser**: `BridgeResponse.data` typed (was `any`)
90
+ - **Agent**: `Agent.runTool()` public API replaces `(ctx.agent as any).deps` reach-in; `/reload` no longer mutates readonly context
91
+ - **LSP /lsp check**: fixed latent bug where `.execute()` was called with `.executeByName` signature
92
+
93
+ ### Added
94
+ - **Plan Reminder**: static `[Plan Reminder]` block in system prompt (never mutates)
95
+ - **Documentation**: reentrancy warning on `executeByName()`, `PlanResult` JSDoc
96
+ - **Tests**: `probe.test.ts` (6 cases), `command-suggest.test.ts`, `providers-factory.test.ts`, `subagent-tool.test.ts`, `agent-moe-write.test.ts`, `chunk-query.test.ts`
97
+ - **probe.ts**: `null` return for transient errors; bootstrap skips cache on `null`
98
+ - **Execution-plugin**: `resetStepFlags`/`resetPlanState` helpers (dedup 3 inline reset blocks)
99
+ - **Security-policies**: `comparePolicies` typed (`keyof SecurityConfig` replaces `as any`)
100
+
101
+ ### Removed
102
+ - **Browser**: dead `buildWaitScript` export (never imported)
103
+
104
+ ## [0.57.1] - 2026-08-28
105
+
106
+ ### Fixed
107
+ - **Publish**: republish after version bump
108
+
109
+ ## [0.57.0] - 2026-08-28
110
+
111
+ ### Changed
112
+ - **MCP**: lazy connect — server connections deferred to first tool call. Startup no longer blocks on unreachable MCP servers (e.g. context7 offline). Discovery runs in background with 5s timeout.
113
+ - **Updater**: `checkOnStart` and `autoInstall` disabled by default. Reduced `waitForIdle` timeout from 130s to 10s.
114
+ - **Config**: `updater.checkOnStart` default changed from `true` to `false`
115
+
116
+ ### Added
117
+ - **MCP**: HTTP request timeouts (10s) on `connectSSE`, `listToolsHTTP`, `callToolHTTP`
118
+ - **MCP**: `failedServers` tracking — servers that fail discovery are not retried
119
+ - **MCP**: placeholder `connect` tool for not-yet-discovered servers (LLM can trigger lazy discovery)
120
+ - **Reasoning**: persistent disk cache (`~/.mma/reasoning-cache.json`) with 24h TTL — avoids re-probing LLM on every restart
121
+
122
+ ## [0.56.5] - 2026-08-27
123
+
124
+ ### Fixed
125
+ - **Hallucination**: `FactualCheck` now receives deleted files from `ConsistencyCheck` — no longer false-positives on files that were intentionally deleted in the same session
126
+
127
+ ## [0.56.4] - 2026-08-27
128
+
129
+ ### Fixed
130
+ - **Tools**: `list_dir` now filters `.mma/`, `node_modules/`, `.git/`, `dist/`, `build/`, `coverage/` from directory listings (consistent with indexer)
131
+ - **Hallucination**: `dotfileVariants` now tries dot-prefixing each directory component, not just basename (fixes false positive on `.mma/index-cache.json` → `mma/index-cache.json`)
132
+
133
+ ## [0.56.1] - 2026-08-27
134
+
135
+ ### Added
136
+ - **CLI**: `mma changelog` command — show latest changelog entry or diff between versions (`--from <version>`)
137
+ - **Updater**: show changelog after auto-update install (`updater.installed` message includes new version's changelog)
138
+ - **Docs**: `CHANGELOG.md` included in npm package (visible via `npm info micro-models-agent`)
139
+ - **Docs**: rule to maintain changelog in `AGENTS.md`
140
+
141
+ ## [0.56.0] - 2026-08-27
142
+
143
+ ### Added
144
+ - **MoE**: live re-plan loop in `runWithMoE` orchestrator re-plans on structural failures
145
+ - **MoE**: scope expansion protocol (`scope_request`) for cross-expert file access
146
+ - **MoE**: Esc/interrupt support in the MoE execution path
147
+ - **MoE**: `input_from` cross-expert data flow for subtask dependencies
148
+ - **LSP**: Angular language server support (`@angular/language-server` for `.html` in Angular workspaces)
149
+ - **Tools**: syntax pre-validation and auto-fix for `write_file`/`edit_file`
150
+
151
+ ### Fixed
152
+ - **Security**: SSRF via IPv6-mapped IPv4 and raw numeric hostnames
153
+ - **Security**: command-validator blacklist bypasses (shell expansions, encoded chars)
154
+ - **Security**: audit webhook retry queue drained forever (infinite loop + duplicate notifications)
155
+ - **Core**: dangling `tool_calls` on interrupt — synthesized tool messages keep assistant/tool pairing
156
+ - **Core**: live reasoning policy + `set_thinking` override integration
157
+ - **Core**: deep-clone config defaults to prevent cross-session mutation
158
+ - **Config**: preserve `provider.fallback` on hot-swap
159
+ - **Tools**: path/scope escape holes in filesystem and read tools closed
160
+ - **Tools**: clear timeout timer & abort listener after race settles; log discarded losers
161
+ - **MCP**: stdio timer leaks + null deref after disconnect; added initialize handshake
162
+ - **LSP**: spawn servers detached on POSIX so `killTree` reaches the whole chain
163
+ - **Browser**: bridge leaked Chromium on SIGTERM and parent death
164
+ - **UI**: diff LCS memory cap; one bad encrypted line no longer kills session history
165
+ - **CLI**: `/config migrate` was unreachable
166
+ - **MoE**: locale-independent artifact path + no retry on user abort
167
+
168
+ ## [0.55.1] - 2026-08-25
169
+
170
+ ### Fixed
171
+ - **LLM**: NDJSON-tolerant stream parser for Ollama backends
172
+ - **LLM**: mid-stream provider errors surfaced (Ollama generation failures)
173
+ - **LLM**: `delta.reasoning` alias for thinking models
174
+ - **LLM**: wire-level debug logging for diagnostics
175
+
176
+ ## [0.55.0] - 2026-08-25
177
+
178
+ ### Added
179
+ - **Certification**: targeted re-run (`--scenarios <ids>`) with result merging
180
+ - **Certification**: per-rep timeout (`--timeout <ms>` + per-scenario `timeoutMs`)
181
+ - **Certification**: audit-gate bypass fix for `--exit-on-complete`
182
+
183
+ ### Fixed
184
+ - **Certification**: stale-label wording (removed impossible user instruction)
185
+ - **Dependencies**: typescript pinned to ^5.9 (TS7 preview breaks `@types/node`)
186
+
187
+ ## [0.54.0] - 2026-08-24
188
+
189
+ ### Added
190
+ - **Certification**: global manifest shipped with package updates (`~/.mma/certifications.json`)
191
+ - **Certification**: bundled manifest + startup sync from package
192
+
193
+ ### Fixed
194
+ - **Certification**: marks only showed when running from repo root
195
+
196
+ ## [0.53.0] - 2026-08-24
197
+
198
+ ### Added
199
+ - **Certification**: qwen3.5-9b certified 20/20
200
+ - **Config**: `provider.maxCompletionTokens` option
201
+ - **Certification**: label text in `mma model list` and REPL `/model`
202
+
203
+ ### Fixed
204
+ - **Certification**: reasoning-heavy models truncated tool_call arguments at default 4096 cap
205
+ - **Certification**: scenario 3.5 prompt disambiguation
206
+
207
+ ## [0.52.0] - 2026-08-23
208
+
209
+ ### Added
210
+ - **Execution**: `FS_MUTATING_TOOLS` — plan auto-advance after bash/download/subagent/mcp/pipeline/browser tools
211
+ - **Config**: `provider.maxCompletionTokens` plumbing through ProviderManager → agent
212
+
213
+ ### Fixed
214
+ - **Execution**: small models create files via bash instead of `write_file`, stalling plans
215
+ - **Execution**: `maxCompletionTokens` was never read from config
216
+
217
+ ## [0.51.0] - 2026-08-23
218
+
219
+ ### Added
220
+ - **Plugin**: `HostBridge` interface for bidirectional agent communication
221
+ - **Plugin**: `onTurnEnd(ctx, TurnSummary)` hook — dispatched once per completed run
222
+ - **Plugin**: `web-ui` example plugin — browser-based chat with SSE streaming
223
+ - **CLI**: REPL bridge wiring for web-ui submit/interrupt
224
+
225
+ ### Fixed
226
+ - **REPL**: `/config migrate` unreachable
227
+
228
+ ## [0.50.3] - 2026-08-22
229
+
230
+ ### Fixed
231
+ - **UI**: REPL line editor scroll-proof rendering (absolute anchoring via DSR query)
232
+
233
+ ## [0.50.2] - 2026-08-22
234
+
235
+ ### Fixed
236
+ - **LLM**: idle stream timeout increased 60s → 180s (LM Studio buffering)
237
+ - **LLM**: stall diagnosis with dedicated message for SSE buffering
238
+ - **LLM**: truncation no longer masquerades as empty response
239
+ - **LLM**: recoverable LLM errors fed back into context instead of dying
240
+ - **Execution**: bash flailing detector (≥4 failed bash attempts in last 6)
241
+
242
+ ## [0.50.1] - 2026-08-21
243
+
244
+ ### Fixed
245
+ - **Security**: no longer silently overrides explicit user opt-out
246
+ - **Lint**: skips missing lint binary (was appending error to every write)
247
+ - **Stuck**: anti-spam for stuck-warnings (dedup via key, decay per-tool counters)
248
+ - **Plan**: unified progress counting (done+skipped as settled)
249
+ - **Plan**: bulk `steps[]` rewrite guarded on progressed plans
250
+ - **Plan**: archived plans answer read-only
251
+ - **Process**: usage hints for `process_kill`/`process_log` without id
252
+
253
+ ## [0.50.0] - 2026-08-21
254
+
255
+ ### Added
256
+ - **Provider**: health probe (`probeProviders()` + `mma provider check`)
257
+ - **Provider**: code-only capability routing (`ProviderManager.pickFor()`)
258
+ - **Provider**: per-entry isolation + priority fallback order
259
+ - **Pricing**: per-provider cost attribution + breakdown
260
+
261
+ ### Fixed
262
+ - **Provider**: transparent failover on 429/5xx/network errors
263
+
264
+ ## [0.49.0] - 2026-08-20
265
+
266
+ ### Fixed
267
+ - **REPL**: stale-plan leaks — plan state no longer persists across sessions
268
+ - **REPL**: plan checklist prints only on plan/todo tool-end events
269
+ - **Plan**: `PlanStore` is single source of truth for UI consumers
270
+
271
+ ## [0.48.3] - 2026-08-20
272
+
273
+ ### Fixed
274
+ - **Hallucination**: dotfile false-positive (`.prettierrc.json` extracted as `prettierrc.json`)
275
+
276
+ ## [0.48.2] - 2026-08-20
277
+
278
+ ### Fixed
279
+ - **REPL**: stale plan printed on first agent run of a session
280
+
281
+ ## [0.47.0] - 2026-08-19
282
+
283
+ ### Added
284
+ - **Session**: startup diagnostics logging (environment, LSP probe, baseline typecheck)
285
+ - **Session**: `logBaselineTypecheck()` for post-mortem visibility
286
+
287
+ ## [0.46.1] - 2026-08-19
288
+
289
+ ### Fixed
290
+ - **LLM**: connection-break hardening (stream-level retry, no-data timeout, `[DONE]` tracking)
291
+ - **LLM**: non-streaming timeout (was missing, could hang forever)
292
+ - **Config**: `retry.maxStreamRetries`, `retry.noDataTimeoutMs` options
293
+
294
+ ## [0.46.0] - 2026-08-19
295
+
296
+ ### Added
297
+ - **Provider**: multi-provider + hot-swap + per-message provenance
298
+ - **Provider**: `ProviderManager` with entry-based config
299
+ - **CLI**: `mma provider add/list/use`
300
+ - **REPL**: `/provider list/use`
301
+
302
+ ### Fixed
303
+ - **Path**: `safeResolvePath` POSIX bug (absolute paths re-resolved against baseDir)
304
+
305
+ ## [0.45.0] - 2026-08-18
306
+
307
+ ### Added
308
+ - **Provider**: provider module Phase 1 (registry, presets, `createProvider()`)
309
+ - **Provider**: `openrouter` preset
310
+ - **Setup**: wizard menu built from `BUILTIN_PROVIDERS`
311
+
312
+ ## [0.44.0] - 2026-08-18
313
+
314
+ ### Added
315
+ - **Plugins**: folder plugins (subdirectory with entry file)
316
+ - **Plugin**: `trace-server` split into folder plugin
317
+
318
+ ### Fixed
319
+ - **Plugin**: template-literal page inlining broke `\n` in JS strings
320
+
321
+ ## [0.43.2] - 2026-08-17
322
+
323
+ ### Fixed
324
+ - **Execution**: plan done-gate on known compile failures (typecheck gate)
325
+ - **Bootstrap**: live getters for `sessionId`/`sessionContext` after session switch
326
+ - **Edit**: `edit_file` "String not found" hint to `read_file` first
327
+
328
+ ## [0.43.1] - 2026-08-17
329
+
330
+ ### Fixed
331
+ - **Agent**: session-interrupt no longer renders tool results after "Session ended"
332
+ - **Executor**: `onAfterTool` plugins skipped when signal is aborted
333
+ - **Lint**: abortable syntax checks on Esc
334
+
335
+ ## [0.43.0] - 2026-08-17
336
+
337
+ ### Added
338
+ - **Plan**: `plan delete <id>` + `plan purge` actions
339
+ - **Plan**: `abort` honors `id` parameter
340
+ - **Plan**: `replan` renumbers ids for kept steps
341
+ - **Audit**: `resolveTestCommand` picks the project's real test runner
342
+
343
+ ### Fixed
344
+ - **Plan**: `switch` to already-active plan is a no-op
345
+ - **Plan**: final audit runs for a completed plan
346
+ - **Plan**: evidence-based plan nudge (replaces iteration counter)
347
+ - **Plan**: `checkPlanAlignment` scans path arguments only
348
+ - **Plan**: `isDepsStep` requires a package-manager verb
349
+ - **Plan**: auto-advance resolves nested files
350
+
351
+ ## [0.42.0] - 2026-08-16
352
+
353
+ ### Added
354
+ - **Execution**: automatic error web search (≥5 same-error repeats → web search → inject results)
355
+ - **Config**: `errorWebSearch` section
356
+
357
+ ### Fixed
358
+ - **Execution**: `onAfterTool` double-counted typecheck + failure errors
359
+
360
+ ## [0.41.1] - 2026-08-16
361
+
362
+ ### Fixed
363
+ - **LSP**: `typescript@5` pin + `--yes` for npx
364
+ - **LSP**: sequential probing (waves) to avoid npx cache lock contention
365
+ - **LSP**: stale config normalization
366
+ - **LSP**: Windows process leak in `shutdown()`
367
+ - **REPL**: non-blocking LSP banner
368
+ - **Bootstrap**: lazy startup health check
369
+
370
+ ## [0.41.0] - 2026-08-15
371
+
372
+ ### Added
373
+ - **REPL**: live plan checklist with progress bar
374
+ - **UI**: tool-to-step binding (`← step N` suffix in tool headers)
375
+ - **UI**: background command output preview
376
+
377
+ ## [0.40.1] - 2026-08-15
378
+
379
+ ### Fixed
380
+ - **LSP**: broken package names (`vscode-html-languageserver` `vscode-langservers-extracted`)
381
+
382
+ ## [0.40.0] - 2026-08-15
383
+
384
+ ### Added
385
+ - **Tools**: tool-set narrowing (on-demand enable via `enable_tools`)
386
+ - **Config**: `tools.defaultTags` + `tools.enableOnDemand`
387
+ - **Tools**: `alwaysOn` flag for structural tools
388
+
389
+ ## [0.39.1] - 2026-08-14
390
+
391
+ ### Fixed
392
+ - **Plugins**: dedup by version, compatibility gate, source tracking
393
+ - **CLI**: `mma plugins list` command
394
+
395
+ ## [0.38.0] - 2026-08-14
396
+
397
+ ### Added
398
+ - **LSP**: `lsp_check` tool for on-demand diagnostics
399
+ - **Plan**: `plan create` guard (blocks when active plan has progress)
400
+
401
+ ### Fixed
402
+ - **Context**: compaction summary carries plan + read state
403
+ - **Browser**: bridge path resolution in bundled dist
404
+
405
+ ## [0.37.0] - 2026-08-13
406
+
407
+ ### Added
408
+ - **Plugins**: folder plugin support in `PluginLoader`
409
+
410
+ ### Fixed
411
+ - **Plugin**: template-literal page inlining broke `\n` in JS
412
+
413
+ ## [0.36.3] - 2026-08-13
414
+
415
+ ### Fixed
416
+ - **UI**: REPL paste fix (batch single-render, CRLF collapse)
417
+
418
+ ## [0.36.2] - 2026-08-13
419
+
420
+ ### Fixed
421
+ - **Updater**: silent logger, one-shot `process.exit()` killed background install, semver-aware check
422
+
423
+ ## [0.36.1] - 2026-08-13
424
+
425
+ ### Fixed
426
+ - **Audit**: nested-file resolution, non-zero test run blocks
427
+ - **Browser**: bridge diagnostics + one-shot restart
428
+ - **LSP**: per-server disable + initialize retry + CSS timeout
429
+ - **Bash**: npm exec hint
430
+
431
+ ## [0.36.0] - 2026-08-12
432
+
433
+ ### Added
434
+ - **Plan**: model-declared `kind: "create"|"delete"` for steps
435
+ - **Execution**: `FS_MUTATING_TOOLS` for plan auto-advance
436
+ - **Config**: `provider.maxCompletionTokens` option
437
+
438
+ ### Fixed
439
+ - **Context**: compaction preserves session `mission`
440
+ - **Context**: deleted files leave compaction `[Files:]` list
441
+ - **Audit**: final audit runs real `tsc --noEmit --skipLibCheck`
442
+ - **Bash**: repeated forbidden Windows commands hard-stopped after 2 failures
443
+
444
+ ## [0.35.5] - 2026-08-12
445
+
446
+ ### Fixed
447
+ - **Execution**: plan-alignment phantom paths (domains/extensions treated as files)
448
+ - **Execution**: hint/recovery dedup in `StuckDetector`
449
+
450
+ ## [0.35.3] - 2026-08-11
451
+
452
+ ### Fixed
453
+ - **LSP**: workspace root resolved from edited file's project
454
+ - **Audit**: skipped steps treated as terminal
455
+ - **Bash**: Windows hint keys on original command word
456
+ - **Tools**: boundedOutput tools never budget-truncated
457
+
458
+ ## [0.35.0] - 2026-08-11
459
+
460
+ ### Added
461
+ - **Tools**: `download_file` tool for binary file downloads
462
+
463
+ ## [0.34.0] - 2026-08-10
464
+
465
+ ### Added
466
+ - **Indexer**: project profile (`[Stack: ...]` summary from manifest)
467
+ - **Indexer**: dynamic map refresh inside sessions
468
+
469
+ ## [0.33.3] - 2026-08-10
470
+
471
+ ### Fixed
472
+ - **Audit**: nested-file resolution (basename + path-suffix match)
473
+ - **Plan**: `plan show` honors `id` parameter
474
+ - **Context**: compaction interval reset per user turn
475
+ - **Context**: `extractFacts` captures `edit_file` paths + Windows drive-letter paths
476
+ - **Execution**: stuck detector read-only loop detection
477
+ - **Read**: default limit 15 300 lines
478
+ - **LSP**: `spawn` on Windows (`.cmd` shim resolution)
479
+ - **Todo**: `todo add` tracks subtasks, `todo done` marks individual sub-task
480
+ - **Memory**: learns repeated per-tool failures (≥3×)
481
+ - **Context**: compaction preserves user's task
482
+
483
+ ## [0.33.2] - 2026-08-09
484
+
485
+ ### Fixed
486
+ - **UI**: REPL conversation layout (user/agent message dividers)
487
+ - **Tools**: `isFilePathLike` uses allow-list of file extensions
488
+
489
+ ## [0.33.1] - 2026-08-09
490
+
491
+ ### Fixed
492
+ - **UI**: REPL line editor redraw fix (no duplicated multi-line input)
493
+ - **Tools**: `web_fetch`/`web_browse` description clarifications
494
+
495
+ ## [0.33.0] - 2026-08-09
496
+
497
+ ### Added
498
+ - **RLM**: pass-by-reference sub-agent results (`ArtifactStore`)
499
+ - **RLM**: chunked parallel queries (`chunk_query` tool)
500
+ - **Config**: `subagent.resultMode`, `maxSummaryChars`, `artifactsDir`, `stableSystemPrompt`
501
+
502
+ ## [0.32.0] - 2026-08-08
503
+
504
+ ### Added
505
+ - **Browser**: driver abstraction (`PlaywrightDriver` + `BridgeDriver`)
506
+ - **Browser**: Node bridge for Bun compatibility
507
+ - **Config**: `browser.maxConsoleLineChars`
508
+
509
+ ## [0.31.0] - 2026-08-08
510
+
511
+ ### Added
512
+ - **Security**: session file encryption (AES-256-GCM)
513
+ - **Security**: audit notifications (file + webhook)
514
+ - **Security**: security policies (strict/balanced/permissive)
515
+ - **CLI**: `mma security` commands
516
+
517
+ ## [0.30.0] - 2026-08-07
518
+
519
+ ### Added
520
+ - **Execution**: final audit gate (runs `bun test` for verification steps)
521
+ - **Execution**: `detectTestResults()` auto-verification in bash
522
+
523
+ ### Fixed
524
+ - **Execution**: empty-CLI entry-point hint
525
+ - **Bash**: Windows anti-patterns documentation
526
+
527
+ ## [0.29.0] - 2026-08-07
528
+
529
+ ### Added
530
+ - **Bash**: smart UTF-8/OEM line decoding (fixes Cyrillic on Windows)
531
+ - **Bash**: behavior-based background detection
532
+ - **Bash**: stuck-detector bash awareness
533
+
534
+ ## [0.28.0] - 2026-08-06
535
+
536
+ ### Fixed
537
+ - **Agent**: double-Esc interrupt fix (Bun readline keypress collapsing)
538
+ - **Agent**: abortable in-flight LLM requests on interrupt
539
+ - **UI**: clipboard paste hint
540
+
541
+ ## [0.27.0] - 2026-08-06
542
+
543
+ ### Fixed
544
+ - **Security**: Windows hardening
545
+ - **Hallucination**: fixes
546
+
547
+ ## [0.26.0] - 2026-08-05
548
+
549
+ ### Added
550
+ - **UI**: opencode-style inline tool headers (`ui.toolStyle`)
551
+ - **UI**: model commentary next to tool calls (`ui.toolComments`)
552
+ - **UI**: diffs without background color
553
+
554
+ ## [0.25.0] - 2026-08-05
555
+
556
+ ### Added
557
+ - **LSP**: LSP module (typescript, CSS, HTML, JSON, Python, Rust, Go)
558
+ - **Execution**: audit gate language-agnostic
559
+ - **Bash**: Windows command hints
560
+
561
+ ## [0.24.0] - 2026-08-04
562
+
563
+ ### Added
564
+ - **Context**: quality formula upgrade (token load + compaction loss + error density + freshness)
565
+ - **Read**: display mode (show only header in REPL, full content to LLM)
566
+
567
+ ## [0.23.0] - 2026-08-04
568
+
569
+ ### Added
570
+ - **Certification**: model certification module (`mma model certify`)
571
+ - **CLI**: cert checkmarks in model lists
572
+
573
+ ## [0.22.0] - 2026-08-03
574
+
575
+ ### Added
576
+ - **Security**: `enabled` flag (disabled by default)
577
+ - **CLI**: init/first-run apply wizard security answers
578
+ - **Prompt**: system prompt & recovery messages cleanup